diff --git a/admin_assets_gen.go b/admin_assets_gen.go index a1270bd..519b9ad 100644 --- a/admin_assets_gen.go +++ b/admin_assets_gen.go @@ -1,6 +1,6 @@ // Code generated by webui/generate.mjs; DO NOT EDIT. // -// Source: webui/dist/ (vite build output), digest bddab0473d8a86fb. +// Source: webui/dist/ (vite build output), digest 3ab3b5837d595086. // Regenerate via `make admin-ui` after any webui/ source change. // // Every asset body below is base64-encoded and decoded once at package-var @@ -34,124 +34,130 @@ func decodeAdminAsset(encoded string) []byte { // adminIndexHTML is GET /admin's response body (admin.go's serveAdminPage) — // the built Vue app's HTML shell. var adminIndexHTML = decodeAdminAsset( - "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPCEtLSBJbmxpbmUgZGF0YTogVVJJLCBub3QgYSBmaWxlIHVuZGVyIHB1YmxpYy86IGFkbWluLmdvJ3MgYXNzZXQgbWFwIG9ubHkKICAgICAgICAgZXZlciBob2xkcyBjb250ZW50LWhhc2hlZCBmaWxlcyB1bmRlciAvYWRtaW4vYXNzZXRzLyosIGFuZCB0aGUgYWRtaW4KICAgICAgICAgQ1NQJ3MgaW1nLXNyYyBhbGxvd3MgJ3NlbGYnIHBsdXMgZGF0YTogZm9yIGV4YWN0bHkgdGhpcyByZWFzb24g4oCUIG5vCiAgICAgICAgIGV4dHJhIHVuaGFzaGVkLWFzc2V0IHJvdXRlIGlzIG5lZWRlZCBmb3Igb25lIHNtYWxsIGljb24uIC0tPgogICAgPGxpbmsKICAgICAgcmVsPSJpY29uIgogICAgICB0eXBlPSJpbWFnZS9zdmcreG1sIgogICAgICBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyUzRSUzQ3JlY3Qgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyByeD0nNScgZmlsbD0nJTIzMDA3MmIyJy8lM0UlM0NwYXRoIGQ9J002IDE2LjUgMTAgOGwzIDYgMi0zLjUgMyA2JyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLXdpZHRoPScyJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiCiAgICAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+TExNIEdhdGV3YXkgLSBBZG1pbjwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LWR5d1M4T3BULmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ibW9kdWxlcHJlbG9hZCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9Ta2VsZXRvbi1CMHppQjZPZC5qcyI+CiAgICA8bGluayByZWw9Im1vZHVsZXByZWxvYWQiIGNyb3Nzb3JpZ2luIGhyZWY9Ii9hZG1pbi9hc3NldHMvdXNlSWQtQjlkSnVtb0kuanMiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYWRtaW4vYXNzZXRzL2luZGV4LUJENWJCaXNPLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0iYXBwIj48L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K", + "PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPCEtLSBJbmxpbmUgZGF0YTogVVJJLCBub3QgYSBmaWxlIHVuZGVyIHB1YmxpYy86IGFkbWluLmdvJ3MgYXNzZXQgbWFwIG9ubHkKICAgICAgICAgZXZlciBob2xkcyBjb250ZW50LWhhc2hlZCBmaWxlcyB1bmRlciAvYWRtaW4vYXNzZXRzLyosIGFuZCB0aGUgYWRtaW4KICAgICAgICAgQ1NQJ3MgaW1nLXNyYyBhbGxvd3MgJ3NlbGYnIHBsdXMgZGF0YTogZm9yIGV4YWN0bHkgdGhpcyByZWFzb24g4oCUIG5vCiAgICAgICAgIGV4dHJhIHVuaGFzaGVkLWFzc2V0IHJvdXRlIGlzIG5lZWRlZCBmb3Igb25lIHNtYWxsIGljb24uIC0tPgogICAgPGxpbmsKICAgICAgcmVsPSJpY29uIgogICAgICB0eXBlPSJpbWFnZS9zdmcreG1sIgogICAgICBocmVmPSJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDI0IDI0JyUzRSUzQ3JlY3Qgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyByeD0nNScgZmlsbD0nJTIzMDA3MmIyJy8lM0UlM0NwYXRoIGQ9J002IDE2LjUgMTAgOGwzIDYgMi0zLjUgMyA2JyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLXdpZHRoPScyJyBmaWxsPSdub25lJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UiCiAgICAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+TExNIEdhdGV3YXkgLSBBZG1pbjwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYWRtaW4vYXNzZXRzL2luZGV4LTg4Q1RSTkhQLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ibW9kdWxlcHJlbG9hZCIgY3Jvc3NvcmlnaW4gaHJlZj0iL2FkbWluL2Fzc2V0cy9Ta2VsZXRvbi1EME5udkhZMS5qcyI+CiAgICA8bGluayByZWw9Im1vZHVsZXByZWxvYWQiIGNyb3Nzb3JpZ2luIGhyZWY9Ii9hZG1pbi9hc3NldHMvdXNlSWQtVGNYQndVT2guanMiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYWRtaW4vYXNzZXRzL2luZGV4LUJENWJCaXNPLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0iYXBwIj48L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K", ) // adminAssets maps each hashed filename under /admin/assets/ (admin.go's // serveAdminAsset) to its content. var adminAssets = map[string]adminAsset{ - "ClampedRangeNotice-D2walnXf.js": { + "ChartCard-CACSIX1f.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0ZyIGFzIGUsU2kgYXMgdCxfbiBhcyBuLGdpIGFzIHIsaG4gYXMgaSxpbiBhcyBhLG1uIGFzIG8sbnIgYXMgcyxvbiBhcyBjLHMgYXMgbCxzbiBhcyB1fWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e2cgYXMgZCxoIGFzIGZ9ZnJvbSIuL2luZGV4LWR5d1M4T3BULmpzIjt2YXIgcD1uKHtfX25hbWU6YENsYW1wZWRSYW5nZU5vdGljZWAscHJvcHM6e3dpbmRvdzp7fSxzcGFuOnt9fSxzZXR1cChuKXtsZXQgcD1uLG09YSgoKT0+bChwLndpbmRvdyxwLnNwYW4pKTtyZXR1cm4obixhKT0+bS52YWx1ZT8ocygpLGMocihkKSx7a2V5OjAsdmFyaWFudDpgd2FybmB9LHtkZWZhdWx0OmUoKCk9PltpKHIoZiksbnVsbCx7ZGVmYXVsdDplKCgpPT5bbyh0KG0udmFsdWUpLDEpXSksXzoxfSldKSxfOjF9KSk6dShgYCwhMCl9fSk7ZXhwb3J0e3AgYXMgdH07", + "aW1wb3J0e0FuIGFzIGUsRCBhcyB0LEUgYXMgbixHbiBhcyByLEpuIGFzIGksTHIgYXMgYSxNciBhcyBvLFFuIGFzIHMsVCBhcyBjLFh0IGFzIGwsWnIgYXMgdSxfbiBhcyBkLGNpIGFzIGYsY24gYXMgcCxkaSBhcyBtLGRyIGFzIGgsZ24gYXMgZyxpciBhcyBfLGxuIGFzIHYsbnIgYXMgeSxvbiBhcyBiLHBpIGFzIHgsc24gYXMgUyx1biBhcyBDLHZpIGFzIHcsdyBhcyBULHdpIGFzIEUsd3IgYXMgRCx5biBhcyBlZX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHtsIGFzIHRlfWZyb20iLi9pbmRleC04OENUUk5IUC5qcyI7aW1wb3J0e3QgYXMgbmV9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHtrIGFzIHJlLGwgYXMgaWV9ZnJvbSIuL2JhZGdlLUJKTGctUjNNLmpzIjtpbXBvcnR7dCBhcyBhZX1mcm9tIi4vU2tlbGV0b25DaGFydC0xWV81czlmMC5qcyI7ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIGUrLjV8MH12YXIgc2U9KGUsdCxuKT0+TWF0aC5tYXgoTWF0aC5taW4oZSxuKSx0KTtmdW5jdGlvbiBjZShlKXtyZXR1cm4gc2Uob2UoZSoyLjU1KSwwLDI1NSl9ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIHNlKG9lKGUqMjU1KSwwLDI1NSl9ZnVuY3Rpb24gTyhlKXtyZXR1cm4gc2Uob2UoZS8yLjU1KS8xMDAsMCwxKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gc2Uob2UoZSoxMDApLDAsMTAwKX12YXIgaz17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LEE6MTAsQjoxMSxDOjEyLEQ6MTMsRToxNCxGOjE1LGE6MTAsYjoxMSxjOjEyLGQ6MTMsZToxNCxmOjE1fSxkZT1bLi4uYDAxMjM0NTY3ODlBQkNERUZgXSxmZT1lPT5kZVtlJjE1XSxwZT1lPT5kZVsoZSYyNDApPj40XStkZVtlJjE1XSxtZT1lPT4oZSYyNDApPj40PT0oZSYxNSksaGU9ZT0+bWUoZS5yKSYmbWUoZS5nKSYmbWUoZS5iKSYmbWUoZS5hKTtmdW5jdGlvbiBnZShlKXt2YXIgdD1lLmxlbmd0aCxuO3JldHVybiBlWzBdPT09YCNgJiYodD09PTR8fHQ9PT01P249e3I6MjU1JmtbZVsxXV0qMTcsZzoyNTUma1tlWzJdXSoxNyxiOjI1NSZrW2VbM11dKjE3LGE6dD09PTU/a1tlWzRdXSoxNzoyNTV9Oih0PT09N3x8dD09PTkpJiYobj17cjprW2VbMV1dPDw0fGtbZVsyXV0sZzprW2VbM11dPDw0fGtbZVs0XV0sYjprW2VbNV1dPDw0fGtbZVs2XV0sYTp0PT09OT9rW2VbN11dPDw0fGtbZVs4XV06MjU1fSkpLG59dmFyIF9lPShlLHQpPT5lPDI1NT90KGUpOmBgO2Z1bmN0aW9uIHZlKGUpe3ZhciB0PWhlKGUpP2ZlOnBlO3JldHVybiBlP2AjYCt0KGUucikrdChlLmcpK3QoZS5iKStfZShlLmEsdCk6dm9pZCAwfXZhciB5ZT0vXihoc2xhP3xod2J8aHN2KVwoXHMqKFstKy5lXGRdKykoPzpkZWcpP1tccyxdKyhbLSsuZVxkXSspJVtccyxdKyhbLSsuZVxkXSspJSg/OltccyxdKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiBiZShlLHQsbil7bGV0IHI9dCpNYXRoLm1pbihuLDEtbiksaT0odCxpPSh0K2UvMzApJTEyKT0+bi1yKk1hdGgubWF4KE1hdGgubWluKGktMyw5LWksMSksLTEpO3JldHVybltpKDApLGkoOCksaSg0KV19ZnVuY3Rpb24geGUoZSx0LG4pe2xldCByPShyLGk9KHIrZS82MCklNik9Pm4tbip0Kk1hdGgubWF4KE1hdGgubWluKGksNC1pLDEpLDApO3JldHVybltyKDUpLHIoMykscigxKV19ZnVuY3Rpb24gU2UoZSx0LG4pe2xldCByPWJlKGUsMSwuNSksaTtmb3IodCtuPjEmJihpPTEvKHQrbiksdCo9aSxuKj1pKSxpPTA7aTwzO2krKylyW2ldKj0xLXQtbixyW2ldKz10O3JldHVybiByfWZ1bmN0aW9uIENlKGUsdCxuLHIsaSl7cmV0dXJuIGU9PT1pPyh0LW4pL3IrKHQ8bj82OjApOnQ9PT1pPyhuLWUpL3IrMjooZS10KS9yKzR9ZnVuY3Rpb24gd2UoZSl7bGV0IHQ9ZS5yLzI1NSxuPWUuZy8yNTUscj1lLmIvMjU1LGk9TWF0aC5tYXgodCxuLHIpLGE9TWF0aC5taW4odCxuLHIpLG89KGkrYSkvMixzLGMsbDtyZXR1cm4gaSE9PWEmJihsPWktYSxjPW8+LjU/bC8oMi1pLWEpOmwvKGkrYSkscz1DZSh0LG4scixsLGkpLHM9cyo2MCsuNSksW3N8MCxjfHwwLG9dfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe3JldHVybihBcnJheS5pc0FycmF5KHQpP2UodFswXSx0WzFdLHRbMl0pOmUodCxuLHIpKS5tYXAobGUpfWZ1bmN0aW9uIEVlKGUsdCxuKXtyZXR1cm4gVGUoYmUsZSx0LG4pfWZ1bmN0aW9uIERlKGUsdCxuKXtyZXR1cm4gVGUoU2UsZSx0LG4pfWZ1bmN0aW9uIE9lKGUsdCxuKXtyZXR1cm4gVGUoeGUsZSx0LG4pfWZ1bmN0aW9uIGtlKGUpe3JldHVybihlJTM2MCszNjApJTM2MH1mdW5jdGlvbiBBZShlKXtsZXQgdD15ZS5leGVjKGUpLG49MjU1LHI7aWYoIXQpcmV0dXJuO3RbNV0hPT1yJiYobj10WzZdP2NlKCt0WzVdKTpsZSgrdFs1XSkpO2xldCBpPWtlKCt0WzJdKSxhPXRbM10vMTAwLG89dFs0XS8xMDA7cmV0dXJuIHI9dFsxXT09PWBod2JgP0RlKGksYSxvKTp0WzFdPT09YGhzdmA/T2UoaSxhLG8pOkVlKGksYSxvKSx7cjpyWzBdLGc6clsxXSxiOnJbMl0sYTpufX1mdW5jdGlvbiBqZShlLHQpe3ZhciBuPXdlKGUpO25bMF09a2UoblswXSt0KSxuPUVlKG4pLGUucj1uWzBdLGUuZz1uWzFdLGUuYj1uWzJdfWZ1bmN0aW9uIE1lKGUpe2lmKCFlKXJldHVybjtsZXQgdD13ZShlKSxuPXRbMF0scj11ZSh0WzFdKSxpPXVlKHRbMl0pO3JldHVybiBlLmE8MjU1P2Boc2xhKCR7bn0sICR7cn0lLCAke2l9JSwgJHtPKGUuYSl9KWA6YGhzbCgke259LCAke3J9JSwgJHtpfSUpYH12YXIgTmU9e3g6YGRhcmtgLFo6YGxpZ2h0YCxZOmByZWAsWDpgYmx1YCxXOmBncmAsVjpgbWVkaXVtYCxVOmBzbGF0ZWAsQTpgZWVgLFQ6YG9sYCxTOmBvcmAsQjpgcmFgLEM6YGxhdGVnYCxEOmBpZ2h0c2AsUjpgaW5gLFE6YHR1cnF1b2lzYCxFOmBoaWAsUDpgcm9gLE86YGFsYCxOOmBsZWAsTTpgZGVgLEw6YHllbGxvYCxGOmBlbmAsSzpgY2hgLEc6YGFya3NgLEg6YGVhYCxJOmBpZ2h0Z2AsSjpgd2hgfSxQZT17T2ljZVhlOmBmMGY4ZmZgLGFudGlxdWV3RXRlOmBmYWViZDdgLGFxdWE6YGZmZmZgLGFxdWFtYXJSZTpgN2ZmZmQ0YCxhenVZOmBmMGZmZmZgLGJlaWdlOmBmNWY1ZGNgLGJpc3F1ZTpgZmZlNGM0YCxibGFjazpgMGAsYmxhbktlZE9tb25kOmBmZmViY2RgLFhlOmBmZmAsWGV2aVRldDpgOGEyYmUyYCxiUHduOmBhNTJhMmFgLGJ1cmx5d29vZDpgZGViODg3YCxjYU10WGU6YDVmOWVhMGAsS2FydFl1c2U6YDdmZmYwMGAsS29jVGF0ZTpgZDI2OTFlYCxjU086YGZmN2Y1MGAsY1NuZmxvd2VyWGU6YDY0OTVlZGAsY1Nuc2lsazpgZmZmOGRjYCxjcmltc29uOmBkYzE0M2NgLGN5YW46YGZmZmZgLHhYZTpgOGJgLHhjeWFuOmA4YjhiYCx4Z1RNblBkOmBiODg2MGJgLHhXYXk6YGE5YTlhOWAseGdZRjpgNjQwMGAseGdZeTpgYTlhOWE5YCx4a2hha2k6YGJkYjc2YmAseG1hZ0Z0YTpgOGIwMDhiYCx4VGl2ZWdZRjpgNTU2YjJmYCx4U2FuZ2U6YGZmOGMwMGAseFNjRWQ6YDk5MzJjY2AseFlkOmA4YjAwMDBgLHhzT21vbjpgZTk5NjdhYCx4c0hnWUY6YDhmYmM4ZmAseFVYZTpgNDgzZDhiYCx4VVdheTpgMmY0ZjRmYCx4VWdZeTpgMmY0ZjRmYCx4UWU6YGNlZDFgLHh2aVRldDpgOTQwMGQzYCxkQXBwUms6YGZmMTQ5M2AsZEFwc2t5WGU6YGJmZmZgLGRpbVdheTpgNjk2OTY5YCxkaW1nWXk6YDY5Njk2OWAsZG9kZ2VyWGU6YDFlOTBmZmAsZmlZYnJpY2s6YGIyMjIyMmAsZmxTT3dFdGU6YGZmZmFmMGAsZm9Zc3RXQW46YDIyOGIyMmAsZnVLc2lhOmBmZjAwZmZgLGdhUnNiU286YGRjZGNkY2AsZ2hvc3R3RXRlOmBmOGY4ZmZgLGdUZDpgZmZkNzAwYCxnVE1uUGQ6YGRhYTUyMGAsV2F5OmA4MDgwODBgLGdZRjpgODAwMGAsZ1lGTHc6YGFkZmYyZmAsZ1l5OmA4MDgwODBgLGhvbmV5TXc6YGYwZmZmMGAsaG90cFJrOmBmZjY5YjRgLFJkaWFuWWQ6YGNkNWM1Y2AsUmRpZ286YDRiMDA4MmAsaXZTeTpgZmZmZmYwYCxraGFraTpgZjBlNjhjYCxsYXZGTXI6YGU2ZTZmYWAsbGF2Rk1yWHNoOmBmZmYwZjVgLGxhd25nWUY6YDdjZmMwMGAsTm1vbmNFZmZvbjpgZmZmYWNkYCxaWGU6YGFkZDhlNmAsWmNTTzpgZjA4MDgwYCxaY3lhbjpgZTBmZmZmYCxaZ1RNblBkTHc6YGZhZmFkMmAsWldheTpgZDNkM2QzYCxaZ1lGOmA5MGVlOTBgLFpnWXk6YGQzZDNkM2AsWnBSazpgZmZiNmMxYCxac09tb246YGZmYTA3YWAsWnNIZ1lGOmAyMGIyYWFgLFpza3lYZTpgODdjZWZhYCxaVVdheTpgNzc4ODk5YCxaVWdZeTpgNzc4ODk5YCxac3RBbFhlOmBiMGM0ZGVgLFpMdzpgZmZmZmUwYCxsaW1lOmBmZjAwYCxsaW1lZ1lGOmAzMmNkMzJgLGxSRjpgZmFmMGU2YCxtYWdGdGE6YGZmMDBmZmAsbWFQb246YDgwMDAwMGAsVmFxdWFtYXJSZTpgNjZjZGFhYCxWWGU6YGNkYCxWU2NFZDpgYmE1NWQzYCxWcHVycE46YDkzNzBkYmAsVnNIZ1lGOmAzY2IzNzFgLFZVWGU6YDdiNjhlZWAsVnNwclJnZ1lGOmBmYTlhYCxWUWU6YDQ4ZDFjY2AsVnZpVGV0WWQ6YGM3MTU4NWAsbWlkbmlnaHRYZTpgMTkxOTcwYCxtUnRjWWFtOmBmNWZmZmFgLG1pc3R5UHNlOmBmZmU0ZTFgLG1vY2Nhc1I6YGZmZTRiNWAsbmF2YWpvd0V0ZTpgZmZkZWFkYCxuYXZ5OmA4MGAsVGRsYWNlOmBmZGY1ZTZgLFRpdmU6YDgwODAwMGAsVGl2ZWRCYjpgNmI4ZTIzYCxTYW5nZTpgZmZhNTAwYCxTYW5nZVlkOmBmZjQ1MDBgLFNjRWQ6YGRhNzBkNmAscE9lZ1RNblBkOmBlZWU4YWFgLHBPZWdZRjpgOThmYjk4YCxwT2VRZTpgYWZlZWVlYCxwT2V2aVRldFlkOmBkYjcwOTNgLHBhcGF5YXdFcDpgZmZlZmQ1YCxwSEtwdWZmOmBmZmRhYjlgLHBlcnU6YGNkODUzZmAscFJrOmBmZmMwY2JgLHBsdW06YGRkYTBkZGAscG93TXJYZTpgYjBlMGU2YCxwdXJwTjpgODAwMDgwYCxZYmVjY2FwdXJwTjpgNjYzMzk5YCxZZDpgZmYwMDAwYCxQc3licm93bjpgYmM4ZjhmYCxQeU9YZTpgNDE2OWUxYCxzYWRkTmJQd246YDhiNDUxM2Asc09tb246YGZhODA3MmAsc2FuZHliUHduOmBmNGE0NjBgLHNIZ1lGOmAyZThiNTdgLHNIc2hlbGw6YGZmZjVlZWAsc2lGbmE6YGEwNTIyZGAsc2lsdmVyOmBjMGMwYzBgLHNreVhlOmA4N2NlZWJgLFVYZTpgNmE1YWNkYCxVV2F5OmA3MDgwOTBgLFVnWXk6YDcwODA5MGAsc25vdzpgZmZmYWZhYCxzcHJSZ2dZRjpgZmY3ZmAsc3RBbFhlOmA0NjgyYjRgLHRhbjpgZDJiNDhjYCx0ZU86YDgwODBgLHRFc3ROOmBkOGJmZDhgLHRvbWF0bzpgZmY2MzQ3YCxRZTpgNDBlMGQwYCx2aVRldDpgZWU4MmVlYCxKSHQ6YGY1ZGViM2Asd0V0ZTpgZmZmZmZmYCx3RXRlc21va2U6YGY1ZjVmNWAsTHc6YGZmZmYwMGAsTHdnWUY6YDlhY2QzMmB9O2Z1bmN0aW9uIEZlKCl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhQZSksbj1PYmplY3Qua2V5cyhOZSkscixpLGEsbyxzO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihvPXM9dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspYT1uW2ldLHM9cy5yZXBsYWNlKGEsTmVbYV0pO2E9cGFyc2VJbnQoUGVbb10sMTYpLGVbc109W2E+PjE2JjI1NSxhPj44JjI1NSxhJjI1NV19cmV0dXJuIGV9dmFyIEllO2Z1bmN0aW9uIExlKGUpe0llfHwoSWU9RmUoKSxJZS50cmFuc3BhcmVudD1bMCwwLDAsMF0pO2xldCB0PUllW2UudG9Mb3dlckNhc2UoKV07cmV0dXJuIHQmJntyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnQubGVuZ3RoPT09ND90WzNdOjI1NX19dmFyIFJlPS9ecmdiYT9cKFxzKihbLSsuXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/W1xzLF0rKFstKy5lXGRdKykoJSk/KD86W1xzLC9dKyhbLSsuZVxkXSspKCUpPyk/XHMqXCkkLztmdW5jdGlvbiB6ZShlKXtsZXQgdD1SZS5leGVjKGUpLG49MjU1LHIsaSxhO2lmKHQpe2lmKHRbN10hPT1yKXtsZXQgZT0rdFs3XTtuPXRbOF0/Y2UoZSk6c2UoZSoyNTUsMCwyNTUpfXJldHVybiByPSt0WzFdLGk9K3RbM10sYT0rdFs1XSxyPTI1NSYodFsyXT9jZShyKTpzZShyLDAsMjU1KSksaT0yNTUmKHRbNF0/Y2UoaSk6c2UoaSwwLDI1NSkpLGE9MjU1Jih0WzZdP2NlKGEpOnNlKGEsMCwyNTUpKSx7cixnOmksYjphLGE6bn19fWZ1bmN0aW9uIEJlKGUpe3JldHVybiBlJiYoZS5hPDI1NT9gcmdiYSgke2Uucn0sICR7ZS5nfSwgJHtlLmJ9LCAke08oZS5hKX0pYDpgcmdiKCR7ZS5yfSwgJHtlLmd9LCAke2UuYn0pYCl9dmFyIFZlPWU9PmU8PS4wMDMxMzA4P2UqMTIuOTI6ZSoqKDEvMi40KSoxLjA1NS0uMDU1LEhlPWU9PmU8PS4wNDA0NT9lLzEyLjkyOigoZSsuMDU1KS8xLjA1NSkqKjIuNDtmdW5jdGlvbiBVZShlLHQsbil7bGV0IHI9SGUoTyhlLnIpKSxpPUhlKE8oZS5nKSksYT1IZShPKGUuYikpO3JldHVybntyOmxlKFZlKHIrbiooSGUoTyh0LnIpKS1yKSkpLGc6bGUoVmUoaStuKihIZShPKHQuZykpLWkpKSksYjpsZShWZShhK24qKEhlKE8odC5iKSktYSkpKSxhOmUuYStuKih0LmEtZS5hKX19ZnVuY3Rpb24gV2UoZSx0LG4pe2lmKGUpe2xldCByPXdlKGUpO3JbdF09TWF0aC5tYXgoMCxNYXRoLm1pbihyW3RdK3JbdF0qbix0PT09MD8zNjA6MSkpLHI9RWUociksZS5yPXJbMF0sZS5nPXJbMV0sZS5iPXJbMl19fWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24odHx8e30sZSl9ZnVuY3Rpb24gS2UoZSl7dmFyIHQ9e3I6MCxnOjAsYjowLGE6MjU1fTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aD49MyYmKHQ9e3I6ZVswXSxnOmVbMV0sYjplWzJdLGE6MjU1fSxlLmxlbmd0aD4zJiYodC5hPWxlKGVbM10pKSk6KHQ9R2UoZSx7cjowLGc6MCxiOjAsYToxfSksdC5hPWxlKHQuYSkpLHR9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGUuY2hhckF0KDApPT09YHJgP3plKGUpOkFlKGUpfXZhciBKZT1jbGFzcyBle2NvbnN0cnVjdG9yKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O2xldCBuPXR5cGVvZiB0LHI7bj09PWBvYmplY3RgP3I9S2UodCk6bj09PWBzdHJpbmdgJiYocj1nZSh0KXx8TGUodCl8fHFlKHQpKSx0aGlzLl9yZ2I9cix0aGlzLl92YWxpZD0hIXJ9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuX3ZhbGlkfWdldCByZ2IoKXt2YXIgZT1HZSh0aGlzLl9yZ2IpO3JldHVybiBlJiYoZS5hPU8oZS5hKSksZX1zZXQgcmdiKGUpe3RoaXMuX3JnYj1LZShlKX1yZ2JTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/QmUodGhpcy5fcmdiKTp2b2lkIDB9aGV4U3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP3ZlKHRoaXMuX3JnYik6dm9pZCAwfWhzbFN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9NZSh0aGlzLl9yZ2IpOnZvaWQgMH1taXgoZSx0KXtpZihlKXtsZXQgbj10aGlzLnJnYixyPWUucmdiLGksYT10PT09aT8uNTp0LG89MiphLTEscz1uLmEtci5hLGM9KChvKnM9PT0tMT9vOihvK3MpLygxK28qcykpKzEpLzI7aT0xLWMsbi5yPTI1NSZjKm4ucitpKnIucisuNSxuLmc9MjU1JmMqbi5nK2kqci5nKy41LG4uYj0yNTUmYypuLmIraSpyLmIrLjUsbi5hPWEqbi5hKygxLWEpKnIuYSx0aGlzLnJnYj1ufXJldHVybiB0aGlzfWludGVycG9sYXRlKGUsdCl7cmV0dXJuIGUmJih0aGlzLl9yZ2I9VWUodGhpcy5fcmdiLGUuX3JnYix0KSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLnJnYil9YWxwaGEoZSl7cmV0dXJuIHRoaXMuX3JnYi5hPWxlKGUpLHRoaXN9Y2xlYXJlcihlKXtsZXQgdD10aGlzLl9yZ2I7cmV0dXJuIHQuYSo9MS1lLHRoaXN9Z3JleXNjYWxlKCl7bGV0IGU9dGhpcy5fcmdiO3JldHVybiBlLnI9ZS5nPWUuYj1vZShlLnIqLjMrZS5nKi41OStlLmIqLjExKSx0aGlzfW9wYXF1ZXIoZSl7bGV0IHQ9dGhpcy5fcmdiO3JldHVybiB0LmEqPTErZSx0aGlzfW5lZ2F0ZSgpe2xldCBlPXRoaXMuX3JnYjtyZXR1cm4gZS5yPTI1NS1lLnIsZS5nPTI1NS1lLmcsZS5iPTI1NS1lLmIsdGhpc31saWdodGVuKGUpe3JldHVybiBXZSh0aGlzLl9yZ2IsMixlKSx0aGlzfWRhcmtlbihlKXtyZXR1cm4gV2UodGhpcy5fcmdiLDIsLWUpLHRoaXN9c2F0dXJhdGUoZSl7cmV0dXJuIFdlKHRoaXMuX3JnYiwxLGUpLHRoaXN9ZGVzYXR1cmF0ZShlKXtyZXR1cm4gV2UodGhpcy5fcmdiLDEsLWUpLHRoaXN9cm90YXRlKGUpe3JldHVybiBqZSh0aGlzLl9yZ2IsZSksdGhpc319O2Z1bmN0aW9uIEEoKXt9dmFyIFllPSgoKT0+e2xldCBlPTA7cmV0dXJuKCk9PmUrK30pKCk7ZnVuY3Rpb24gaihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBNKGUpe2lmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7bGV0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO3JldHVybiB0LnNsaWNlKDAsNyk9PT1gW29iamVjdGAmJnQuc2xpY2UoLTYpPT09YEFycmF5XWB9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZSE9PW51bGwmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gfWZ1bmN0aW9uIFAoZSl7cmV0dXJuKHR5cGVvZiBlPT1gbnVtYmVyYHx8ZSBpbnN0YW5jZW9mIE51bWJlcikmJmlzRmluaXRlKCtlKX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIFAoZSk/ZTp0fWZ1bmN0aW9uIEkoZSx0KXtyZXR1cm4gZT09PXZvaWQgMD90OmV9dmFyIFhlPShlLHQpPT50eXBlb2YgZT09YHN0cmluZ2AmJmUuZW5kc1dpdGgoYCVgKT9wYXJzZUZsb2F0KGUpLzEwMCp0OitlO2Z1bmN0aW9uIEwoZSx0LG4pe2lmKGUmJnR5cGVvZiBlLmNhbGw9PWBmdW5jdGlvbmApcmV0dXJuIGUuYXBwbHkobix0KX1mdW5jdGlvbiBSKGUsdCxuLHIpe2xldCBpLGEsbztpZihNKGUpKXtpZihhPWUubGVuZ3RoLHIpZm9yKGk9YS0xO2k+PTA7aS0tKXQuY2FsbChuLGVbaV0saSk7ZWxzZSBmb3IoaT0wO2k8YTtpKyspdC5jYWxsKG4sZVtpXSxpKX1lbHNlIGlmKE4oZSkpZm9yKG89T2JqZWN0LmtleXMoZSksYT1vLmxlbmd0aCxpPTA7aTxhO2krKyl0LmNhbGwobixlW29baV1dLG9baV0pfWZ1bmN0aW9uIFplKGUsdCl7bGV0IG4scixpLGE7aWYoIWV8fCF0fHxlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKWlmKGk9ZVtuXSxhPXRbbl0saS5kYXRhc2V0SW5kZXghPT1hLmRhdGFzZXRJbmRleHx8aS5pbmRleCE9PWEuaW5kZXgpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUWUoZSl7aWYoTShlKSlyZXR1cm4gZS5tYXAoUWUpO2lmKE4oZSkpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksbj1PYmplY3Qua2V5cyhlKSxyPW4ubGVuZ3RoLGk9MDtmb3IoO2k8cjsrK2kpdFtuW2ldXT1RZShlW25baV1dKTtyZXR1cm4gdH1yZXR1cm4gZX1mdW5jdGlvbiAkZShlKXtyZXR1cm5bYF9fcHJvdG9fX2AsYHByb3RvdHlwZWAsYGNvbnN0cnVjdG9yYF0uaW5kZXhPZihlKT09PS0xfWZ1bmN0aW9uIGV0KGUsdCxuLHIpe2lmKCEkZShlKSlyZXR1cm47bGV0IGk9dFtlXSxhPW5bZV07TihpKSYmTihhKT90dChpLGEscik6dFtlXT1RZShhKX1mdW5jdGlvbiB0dChlLHQsbil7bGV0IHI9TSh0KT90Olt0XSxpPXIubGVuZ3RoO2lmKCFOKGUpKXJldHVybiBlO258fD17fTtsZXQgYT1uLm1lcmdlcnx8ZXQsbztmb3IobGV0IHQ9MDt0PGk7Kyt0KXtpZihvPXJbdF0sIU4obykpY29udGludWU7bGV0IGk9T2JqZWN0LmtleXMobyk7Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7Kyt0KWEoaVt0XSxlLG8sbil9cmV0dXJuIGV9ZnVuY3Rpb24gbnQoZSx0KXtyZXR1cm4gdHQoZSx0LHttZXJnZXI6cnR9KX1mdW5jdGlvbiBydChlLHQsbil7aWYoISRlKGUpKXJldHVybjtsZXQgcj10W2VdLGk9bltlXTtOKHIpJiZOKGkpP250KHIsaSk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl8fCh0W2VdPVFlKGkpKX12YXIgaXQ9eyIiOmU9PmUseDplPT5lLngseTplPT5lLnl9O2Z1bmN0aW9uIGF0KGUpe2xldCB0PWUuc3BsaXQoYC5gKSxuPVtdLHI9YGA7Zm9yKGxldCBlIG9mIHQpcis9ZSxyLmVuZHNXaXRoKGBcXGApP3I9ci5zbGljZSgwLC0xKStgLmA6KG4ucHVzaChyKSxyPWBgKTtyZXR1cm4gbn1mdW5jdGlvbiBvdChlKXtsZXQgdD1hdChlKTtyZXR1cm4gZT0+e2ZvcihsZXQgbiBvZiB0KXtpZihuPT09YGApYnJlYWs7ZSYmPWVbbl19cmV0dXJuIGV9fWZ1bmN0aW9uIHN0KGUsdCl7cmV0dXJuKGl0W3RdfHwoaXRbdF09b3QodCkpKShlKX1mdW5jdGlvbiBjdChlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfXZhciBsdD1lPT5lIT09dm9pZCAwLHV0PWU9PnR5cGVvZiBlPT1gZnVuY3Rpb25gLGR0PShlLHQpPT57aWYoZS5zaXplIT09dC5zaXplKXJldHVybiExO2ZvcihsZXQgbiBvZiBlKWlmKCF0LmhhcyhuKSlyZXR1cm4hMTtyZXR1cm4hMH07ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGUudHlwZT09PWBtb3VzZXVwYHx8ZS50eXBlPT09YGNsaWNrYHx8ZS50eXBlPT09YGNvbnRleHRtZW51YH12YXIgej1NYXRoLlBJLEI9Mip6LHB0PUIreixtdD0xLzAsaHQ9ei8xODAsVj16LzIsZ3Q9ei80LF90PXoqMi8zLHZ0PU1hdGgubG9nMTAseXQ9TWF0aC5zaWduO2Z1bmN0aW9uIGJ0KGUsdCxuKXtyZXR1cm4gTWF0aC5hYnMoZS10KTxufWZ1bmN0aW9uIHh0KGUpe2xldCB0PU1hdGgucm91bmQoZSk7ZT1idChlLHQsZS8xZTMpP3Q6ZTtsZXQgbj0xMCoqTWF0aC5mbG9vcih2dChlKSkscj1lL247cmV0dXJuKHI8PTE/MTpyPD0yPzI6cjw9NT81OjEwKSpufWZ1bmN0aW9uIFN0KGUpe2xldCB0PVtdLG49TWF0aC5zcXJ0KGUpLHI7Zm9yKHI9MTtyPG47cisrKWUlcj09PTAmJih0LnB1c2gociksdC5wdXNoKGUvcikpO3JldHVybiBuPT09KG58MCkmJnQucHVzaChuKSx0LnNvcnQoKGUsdCk9PmUtdCkucG9wKCksdH1mdW5jdGlvbiBDdChlKXtyZXR1cm4gdHlwZW9mIGU9PWBzeW1ib2xgfHx0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIShTeW1ib2wudG9QcmltaXRpdmUgaW4gZXx8YHRvU3RyaW5nYGluIGV8fGB2YWx1ZU9mYGluIGUpfWZ1bmN0aW9uIHd0KGUpe3JldHVybiFDdChlKSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBUdChlLHQpe2xldCBuPU1hdGgucm91bmQoZSk7cmV0dXJuIG4tdDw9ZSYmbit0Pj1lfWZ1bmN0aW9uIEV0KGUsdCxuKXtsZXQgcixpLGE7Zm9yKHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYT1lW3JdW25dLGlzTmFOKGEpfHwodC5taW49TWF0aC5taW4odC5taW4sYSksdC5tYXg9TWF0aC5tYXgodC5tYXgsYSkpfWZ1bmN0aW9uIER0KGUpe3JldHVybiB6LzE4MCplfWZ1bmN0aW9uIE90KGUpe3JldHVybiAxODAveiplfWZ1bmN0aW9uIGt0KGUpe2lmKCFQKGUpKXJldHVybjtsZXQgdD0xLG49MDtmb3IoO01hdGgucm91bmQoZSp0KS90IT09ZTspdCo9MTAsbisrO3JldHVybiBufWZ1bmN0aW9uIEF0KGUsdCl7bGV0IG49dC54LWUueCxyPXQueS1lLnksaT1NYXRoLnNxcnQobipuK3IqciksYT1NYXRoLmF0YW4yKHIsbik7cmV0dXJuIGE8LS41KnomJihhKz1CKSx7YW5nbGU6YSxkaXN0YW5jZTppfX1mdW5jdGlvbiBqdChlLHQpe3JldHVybiBNYXRoLnNxcnQoKHQueC1lLngpKioyKyh0LnktZS55KSoqMil9ZnVuY3Rpb24gTXQoZSx0KXtyZXR1cm4oZS10K3B0KSVCLXp9ZnVuY3Rpb24gSChlKXtyZXR1cm4oZSVCK0IpJUJ9ZnVuY3Rpb24gTnQoZSx0LG4scil7bGV0IGk9SChlKSxhPUgodCksbz1IKG4pLHM9SChhLWkpLGM9SChvLWkpLGw9SChpLWEpLHU9SChpLW8pO3JldHVybiBpPT09YXx8aT09PW98fHImJmE9PT1vfHxzPmMmJmw8dX1mdW5jdGlvbiBVKGUsdCxuKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihuLGUpKX1mdW5jdGlvbiBQdChlKXtyZXR1cm4gVShlLC0zMjc2OCwzMjc2Nyl9ZnVuY3Rpb24gRnQoZSx0LG4scj0xZS02KXtyZXR1cm4gZT49TWF0aC5taW4odCxuKS1yJiZlPD1NYXRoLm1heCh0LG4pK3J9ZnVuY3Rpb24gSXQoZSx0LG4pe258fD0obj0+ZVtuXTx0KTtsZXQgcj1lLmxlbmd0aC0xLGk9MCxhO2Zvcig7ci1pPjE7KWE9aStyPj4xLG4oYSk/aT1hOnI9YTtyZXR1cm57bG86aSxoaTpyfX12YXIgTHQ9KGUsdCxuLHIpPT5JdChlLG4scj9yPT57bGV0IGk9ZVtyXVt0XTtyZXR1cm4gaTxufHxpPT09biYmZVtyKzFdW3RdPT09bn06cj0+ZVtyXVt0XTxuKSxSdD0oZSx0LG4pPT5JdChlLG4scj0+ZVtyXVt0XT49bik7ZnVuY3Rpb24genQoZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aDtmb3IoO3I8aSYmZVtyXTx0OylyKys7Zm9yKDtpPnImJmVbaS0xXT5uOylpLS07cmV0dXJuIHI+MHx8aTxlLmxlbmd0aD9lLnNsaWNlKHIsaSk6ZX12YXIgQnQ9W2BwdXNoYCxgcG9wYCxgc2hpZnRgLGBzcGxpY2VgLGB1bnNoaWZ0YF07ZnVuY3Rpb24gVnQoZSx0KXtpZihlLl9jaGFydGpzKXtlLl9jaGFydGpzLmxpc3RlbmVycy5wdXNoKHQpO3JldHVybn1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2NoYXJ0anMiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTp7bGlzdGVuZXJzOlt0XX19KSxCdC5mb3JFYWNoKHQ9PntsZXQgbj1gX29uRGF0YWArY3QodCkscj1lW3RdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlKC4uLnQpe2xldCBpPXIuYXBwbHkodGhpcyx0KTtyZXR1cm4gZS5fY2hhcnRqcy5saXN0ZW5lcnMuZm9yRWFjaChlPT57dHlwZW9mIGVbbl09PWBmdW5jdGlvbmAmJmVbbl0oLi4udCl9KSxpfX0pfSl9ZnVuY3Rpb24gSHQoZSx0KXtsZXQgbj1lLl9jaGFydGpzO2lmKCFuKXJldHVybjtsZXQgcj1uLmxpc3RlbmVycyxpPXIuaW5kZXhPZih0KTtpIT09LTEmJnIuc3BsaWNlKGksMSksIShyLmxlbmd0aD4wKSYmKEJ0LmZvckVhY2godD0+e2RlbGV0ZSBlW3RdfSksZGVsZXRlIGUuX2NoYXJ0anMpfWZ1bmN0aW9uIFV0KGUpe2xldCB0PW5ldyBTZXQoZSk7cmV0dXJuIHQuc2l6ZT09PWUubGVuZ3RoP2U6QXJyYXkuZnJvbSh0KX12YXIgV3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHdpbmRvdz5gdWA/ZnVuY3Rpb24oZSl7cmV0dXJuIGUoKX06d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZX0oKTtmdW5jdGlvbiBHdChlLHQpe2xldCBuPVtdLHI9ITE7cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe249aSxyfHwocj0hMCxXdC5jYWxsKHdpbmRvdywoKT0+e3I9ITEsZS5hcHBseSh0LG4pfSkpfX1mdW5jdGlvbiBLdChlLHQpe2xldCBuO3JldHVybiBmdW5jdGlvbiguLi5yKXtyZXR1cm4gdD8oY2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChlLHQscikpOmUuYXBwbHkodGhpcyxyKSx0fX12YXIgcXQ9ZT0+ZT09PWBzdGFydGA/YGxlZnRgOmU9PT1gZW5kYD9gcmlnaHRgOmBjZW50ZXJgLFc9KGUsdCxuKT0+ZT09PWBzdGFydGA/dDplPT09YGVuZGA/bjoodCtuKS8yLEp0PShlLHQsbixyKT0+ZT09PShyP2BsZWZ0YDpgcmlnaHRgKT9uOmU9PT1gY2VudGVyYD8odCtuKS8yOnQ7ZnVuY3Rpb24gWXQoZSx0LG4pe2xldCByPXQubGVuZ3RoLGk9MCxhPXI7aWYoZS5fc29ydGVkKXtsZXR7aVNjYWxlOm8sdlNjYWxlOnMsX3BhcnNlZDpjfT1lLGw9ZS5kYXRhc2V0JiZlLmRhdGFzZXQub3B0aW9ucz9lLmRhdGFzZXQub3B0aW9ucy5zcGFuR2FwczpudWxsLHU9by5heGlzLHttaW46ZCxtYXg6ZixtaW5EZWZpbmVkOnAsbWF4RGVmaW5lZDptfT1vLmdldFVzZXJCb3VuZHMoKTtpZihwKXtpZihpPU1hdGgubWluKEx0KGMsdSxkKS5sbyxuP3I6THQodCx1LG8uZ2V0UGl4ZWxGb3JWYWx1ZShkKSkubG8pLGwpe2xldCBlPWMuc2xpY2UoMCxpKzEpLnJldmVyc2UoKS5maW5kSW5kZXgoZT0+IWooZVtzLmF4aXNdKSk7aS09TWF0aC5tYXgoMCxlKX1pPVUoaSwwLHItMSl9aWYobSl7bGV0IGU9TWF0aC5tYXgoTHQoYyxvLmF4aXMsZiwhMCkuaGkrMSxuPzA6THQodCx1LG8uZ2V0UGl4ZWxGb3JWYWx1ZShmKSwhMCkuaGkrMSk7aWYobCl7bGV0IHQ9Yy5zbGljZShlLTEpLmZpbmRJbmRleChlPT4haihlW3MuYXhpc10pKTtlKz1NYXRoLm1heCgwLHQpfWE9VShlLGksciktaX1lbHNlIGE9ci1pfXJldHVybntzdGFydDppLGNvdW50OmF9fWZ1bmN0aW9uIFh0KGUpe2xldHt4U2NhbGU6dCx5U2NhbGU6bixfc2NhbGVSYW5nZXM6cn09ZSxpPXt4bWluOnQubWluLHhtYXg6dC5tYXgseW1pbjpuLm1pbix5bWF4Om4ubWF4fTtpZighcilyZXR1cm4gZS5fc2NhbGVSYW5nZXM9aSwhMDtsZXQgYT1yLnhtaW4hPT10Lm1pbnx8ci54bWF4IT09dC5tYXh8fHIueW1pbiE9PW4ubWlufHxyLnltYXghPT1uLm1heDtyZXR1cm4gT2JqZWN0LmFzc2lnbihyLGkpLGF9dmFyIFp0PWU9PmU9PT0wfHxlPT09MSxRdD0oZSx0LG4pPT4tKDIqKigxMCotLWUpKk1hdGguc2luKChlLXQpKkIvbikpLCR0PShlLHQsbik9PjIqKigtMTAqZSkqTWF0aC5zaW4oKGUtdCkqQi9uKSsxLGVuPXtsaW5lYXI6ZT0+ZSxlYXNlSW5RdWFkOmU9PmUqZSxlYXNlT3V0UXVhZDplPT4tZSooZS0yKSxlYXNlSW5PdXRRdWFkOmU9PihlLz0uNSk8MT8uNSplKmU6LS41KigtLWUqKGUtMiktMSksZWFzZUluQ3ViaWM6ZT0+ZSplKmUsZWFzZU91dEN1YmljOmU9Pi0tZSplKmUrMSxlYXNlSW5PdXRDdWJpYzplPT4oZS89LjUpPDE/LjUqZSplKmU6LjUqKChlLT0yKSplKmUrMiksZWFzZUluUXVhcnQ6ZT0+ZSplKmUqZSxlYXNlT3V0UXVhcnQ6ZT0+LSgtLWUqZSplKmUtMSksZWFzZUluT3V0UXVhcnQ6ZT0+KGUvPS41KTwxPy41KmUqZSplKmU6LS41KigoZS09MikqZSplKmUtMiksZWFzZUluUXVpbnQ6ZT0+ZSplKmUqZSplLGVhc2VPdXRRdWludDplPT4tLWUqZSplKmUqZSsxLGVhc2VJbk91dFF1aW50OmU9PihlLz0uNSk8MT8uNSplKmUqZSplKmU6LjUqKChlLT0yKSplKmUqZSplKzIpLGVhc2VJblNpbmU6ZT0+LU1hdGguY29zKGUqVikrMSxlYXNlT3V0U2luZTplPT5NYXRoLnNpbihlKlYpLGVhc2VJbk91dFNpbmU6ZT0+LS41KihNYXRoLmNvcyh6KmUpLTEpLGVhc2VJbkV4cG86ZT0+ZT09PTA/MDoyKiooMTAqKGUtMSkpLGVhc2VPdXRFeHBvOmU9PmU9PT0xPzE6LSgyKiooLTEwKmUpKSsxLGVhc2VJbk91dEV4cG86ZT0+WnQoZSk/ZTplPC41Py41KjIqKigxMCooZSoyLTEpKTouNSooLSgyKiooLTEwKihlKjItMSkpKSsyKSxlYXNlSW5DaXJjOmU9PmU+PTE/ZTotKE1hdGguc3FydCgxLWUqZSktMSksZWFzZU91dENpcmM6ZT0+TWF0aC5zcXJ0KDEtIC0tZSplKSxlYXNlSW5PdXRDaXJjOmU9PihlLz0uNSk8MT8tLjUqKE1hdGguc3FydCgxLWUqZSktMSk6LjUqKE1hdGguc3FydCgxLShlLT0yKSplKSsxKSxlYXNlSW5FbGFzdGljOmU9Plp0KGUpP2U6UXQoZSwuMDc1LC4zKSxlYXNlT3V0RWxhc3RpYzplPT5adChlKT9lOiR0KGUsLjA3NSwuMyksZWFzZUluT3V0RWxhc3RpYyhlKXtsZXQgdD0uMTEyNSxuPS40NTtyZXR1cm4gWnQoZSk/ZTplPC41Py41KlF0KGUqMix0LG4pOi41Ky41KiR0KGUqMi0xLHQsbil9LGVhc2VJbkJhY2soZSl7cmV0dXJuIGUqZSooMi43MDE1OCplLTEuNzAxNTgpfSxlYXNlT3V0QmFjayhlKXtyZXR1cm4tLWUqZSooMi43MDE1OCplKzEuNzAxNTgpKzF9LGVhc2VJbk91dEJhY2soZSl7bGV0IHQ9MS43MDE1ODtyZXR1cm4oZS89LjUpPDE/LjUqKGUqZSooKCh0Kj0xLjUyNSkrMSkqZS10KSk6LjUqKChlLT0yKSplKigoKHQqPTEuNTI1KSsxKSplK3QpKzIpfSxlYXNlSW5Cb3VuY2U6ZT0+MS1lbi5lYXNlT3V0Qm91bmNlKDEtZSksZWFzZU91dEJvdW5jZShlKXtsZXQgdD03LjU2MjUsbj0yLjc1O3JldHVybiBlPDEvbj90KmUqZTplPDIvbj90KihlLT0xLjUvbikqZSsuNzU6ZTwyLjUvbj90KihlLT0yLjI1L24pKmUrLjkzNzU6dCooZS09Mi42MjUvbikqZSsuOTg0Mzc1fSxlYXNlSW5PdXRCb3VuY2U6ZT0+ZTwuNT9lbi5lYXNlSW5Cb3VuY2UoZSoyKSouNTplbi5lYXNlT3V0Qm91bmNlKGUqMi0xKSouNSsuNX07ZnVuY3Rpb24gdG4oZSl7aWYoZSYmdHlwZW9mIGU9PWBvYmplY3RgKXtsZXQgdD1lLnRvU3RyaW5nKCk7cmV0dXJuIHQ9PT1gW29iamVjdCBDYW52YXNQYXR0ZXJuXWB8fHQ9PT1gW29iamVjdCBDYW52YXNHcmFkaWVudF1gfXJldHVybiExfWZ1bmN0aW9uIG5uKGUpe3JldHVybiB0bihlKT9lOm5ldyBKZShlKX1mdW5jdGlvbiBybihlKXtyZXR1cm4gdG4oZSk/ZTpuZXcgSmUoZSkuc2F0dXJhdGUoLjUpLmRhcmtlbiguMSkuaGV4U3RyaW5nKCl9dmFyIGFuPVtgeGAsYHlgLGBib3JkZXJXaWR0aGAsYHJhZGl1c2AsYHRlbnNpb25gXSxvbj1bYGNvbG9yYCxgYm9yZGVyQ29sb3JgLGBiYWNrZ3JvdW5kQ29sb3JgXTtmdW5jdGlvbiBzbihlKXtlLnNldChgYW5pbWF0aW9uYCx7ZGVsYXk6dm9pZCAwLGR1cmF0aW9uOjFlMyxlYXNpbmc6YGVhc2VPdXRRdWFydGAsZm46dm9pZCAwLGZyb206dm9pZCAwLGxvb3A6dm9pZCAwLHRvOnZvaWQgMCx0eXBlOnZvaWQgMH0pLGUuZGVzY3JpYmUoYGFuaW1hdGlvbmAse19mYWxsYmFjazohMSxfaW5kZXhhYmxlOiExLF9zY3JpcHRhYmxlOmU9PmUhPT1gb25Qcm9ncmVzc2AmJmUhPT1gb25Db21wbGV0ZWAmJmUhPT1gZm5gfSksZS5zZXQoYGFuaW1hdGlvbnNgLHtjb2xvcnM6e3R5cGU6YGNvbG9yYCxwcm9wZXJ0aWVzOm9ufSxudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6YW59fSksZS5kZXNjcmliZShgYW5pbWF0aW9uc2Ase19mYWxsYmFjazpgYW5pbWF0aW9uYH0pLGUuc2V0KGB0cmFuc2l0aW9uc2Ase2FjdGl2ZTp7YW5pbWF0aW9uOntkdXJhdGlvbjo0MDB9fSxyZXNpemU6e2FuaW1hdGlvbjp7ZHVyYXRpb246MH19LHNob3c6e2FuaW1hdGlvbnM6e2NvbG9yczp7ZnJvbTpgdHJhbnNwYXJlbnRgfSx2aXNpYmxlOnt0eXBlOmBib29sZWFuYCxkdXJhdGlvbjowfX19LGhpZGU6e2FuaW1hdGlvbnM6e2NvbG9yczp7dG86YHRyYW5zcGFyZW50YH0sdmlzaWJsZTp7dHlwZTpgYm9vbGVhbmAsZWFzaW5nOmBsaW5lYXJgLGZuOmU9PmV8MH19fX0pfWZ1bmN0aW9uIGNuKGUpe2Uuc2V0KGBsYXlvdXRgLHthdXRvUGFkZGluZzohMCxwYWRkaW5nOnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH19KX12YXIgbG49bmV3IE1hcDtmdW5jdGlvbiB1bihlLHQpe3R8fD17fTtsZXQgbj1lK0pTT04uc3RyaW5naWZ5KHQpLHI9bG4uZ2V0KG4pO3JldHVybiByfHwocj1uZXcgSW50bC5OdW1iZXJGb3JtYXQoZSx0KSxsbi5zZXQobixyKSkscn1mdW5jdGlvbiBkbihlLHQsbil7cmV0dXJuIHVuKHQsbikuZm9ybWF0KGUpfXZhciBmbj17dmFsdWVzKGUpe3JldHVybiBNKGUpP2U6YGArZX0sbnVtZXJpYyhlLHQsbil7aWYoZT09PTApcmV0dXJuYDBgO2xldCByPXRoaXMuY2hhcnQub3B0aW9ucy5sb2NhbGUsaSxhPWU7aWYobi5sZW5ndGg+MSl7bGV0IHQ9TWF0aC5tYXgoTWF0aC5hYnMoblswXS52YWx1ZSksTWF0aC5hYnMobltuLmxlbmd0aC0xXS52YWx1ZSkpOyh0PDFlLTR8fHQ+MHgzOGQ3ZWE0YzY4MDAwKSYmKGk9YHNjaWVudGlmaWNgKSxhPXBuKGUsbil9bGV0IG89dnQoTWF0aC5hYnMoYSkpLHM9aXNOYU4obyk/MTpNYXRoLm1heChNYXRoLm1pbigtMSpNYXRoLmZsb29yKG8pLDIwKSwwKSxjPXtub3RhdGlvbjppLG1pbmltdW1GcmFjdGlvbkRpZ2l0czpzLG1heGltdW1GcmFjdGlvbkRpZ2l0czpzfTtyZXR1cm4gT2JqZWN0LmFzc2lnbihjLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpLGRuKGUscixjKX0sbG9nYXJpdGhtaWMoZSx0LG4pe2lmKGU9PT0wKXJldHVybmAwYDtsZXQgcj1uW3RdLnNpZ25pZmljYW5kfHxlLzEwKipNYXRoLmZsb29yKHZ0KGUpKTtyZXR1cm5bMSwyLDMsNSwxMCwxNV0uaW5jbHVkZXMocil8fHQ+Ljgqbi5sZW5ndGg/Zm4ubnVtZXJpYy5jYWxsKHRoaXMsZSx0LG4pOmBgfX07ZnVuY3Rpb24gcG4oZSx0KXtsZXQgbj10Lmxlbmd0aD4zP3RbMl0udmFsdWUtdFsxXS52YWx1ZTp0WzFdLnZhbHVlLXRbMF0udmFsdWU7cmV0dXJuIE1hdGguYWJzKG4pPj0xJiZlIT09TWF0aC5mbG9vcihlKSYmKG49ZS1NYXRoLmZsb29yKGUpKSxufXZhciBtbj17Zm9ybWF0dGVyczpmbn07ZnVuY3Rpb24gaG4oZSl7ZS5zZXQoYHNjYWxlYCx7ZGlzcGxheTohMCxvZmZzZXQ6ITEscmV2ZXJzZTohMSxiZWdpbkF0WmVybzohMSxib3VuZHM6YHRpY2tzYCxjbGlwOiEwLGdyYWNlOjAsZ3JpZDp7ZGlzcGxheTohMCxsaW5lV2lkdGg6MSxkcmF3T25DaGFydEFyZWE6ITAsZHJhd1RpY2tzOiEwLHRpY2tMZW5ndGg6OCx0aWNrV2lkdGg6KGUsdCk9PnQubGluZVdpZHRoLHRpY2tDb2xvcjooZSx0KT0+dC5jb2xvcixvZmZzZXQ6ITF9LGJvcmRlcjp7ZGlzcGxheTohMCxkYXNoOltdLGRhc2hPZmZzZXQ6MCx3aWR0aDoxfSx0aXRsZTp7ZGlzcGxheTohMSx0ZXh0OmBgLHBhZGRpbmc6e3RvcDo0LGJvdHRvbTo0fX0sdGlja3M6e21pblJvdGF0aW9uOjAsbWF4Um90YXRpb246NTAsbWlycm9yOiExLHRleHRTdHJva2VXaWR0aDowLHRleHRTdHJva2VDb2xvcjpgYCxwYWRkaW5nOjMsZGlzcGxheTohMCxhdXRvU2tpcDohMCxhdXRvU2tpcFBhZGRpbmc6MyxsYWJlbE9mZnNldDowLGNhbGxiYWNrOm1uLmZvcm1hdHRlcnMudmFsdWVzLG1pbm9yOnt9LG1ham9yOnt9LGFsaWduOmBjZW50ZXJgLGNyb3NzQWxpZ246YG5lYXJgLHNob3dMYWJlbEJhY2tkcm9wOiExLGJhY2tkcm9wQ29sb3I6YHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSlgLGJhY2tkcm9wUGFkZGluZzoyfX0pLGUucm91dGUoYHNjYWxlLnRpY2tzYCxgY29sb3JgLGBgLGBjb2xvcmApLGUucm91dGUoYHNjYWxlLmdyaWRgLGBjb2xvcmAsYGAsYGJvcmRlckNvbG9yYCksZS5yb3V0ZShgc2NhbGUuYm9yZGVyYCxgY29sb3JgLGBgLGBib3JkZXJDb2xvcmApLGUucm91dGUoYHNjYWxlLnRpdGxlYCxgY29sb3JgLGBgLGBjb2xvcmApLGUuZGVzY3JpYmUoYHNjYWxlYCx7X2ZhbGxiYWNrOiExLF9zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYGJlZm9yZWApJiYhZS5zdGFydHNXaXRoKGBhZnRlcmApJiZlIT09YGNhbGxiYWNrYCYmZSE9PWBwYXJzZXJgLF9pbmRleGFibGU6ZT0+ZSE9PWBib3JkZXJEYXNoYCYmZSE9PWB0aWNrQm9yZGVyRGFzaGAmJmUhPT1gZGFzaGB9KSxlLmRlc2NyaWJlKGBzY2FsZXNgLHtfZmFsbGJhY2s6YHNjYWxlYH0pLGUuZGVzY3JpYmUoYHNjYWxlLnRpY2tzYCx7X3NjcmlwdGFibGU6ZT0+ZSE9PWBiYWNrZHJvcFBhZGRpbmdgJiZlIT09YGNhbGxiYWNrYCxfaW5kZXhhYmxlOmU9PmUhPT1gYmFja2Ryb3BQYWRkaW5nYH0pfXZhciBnbj1PYmplY3QuY3JlYXRlKG51bGwpLF9uPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gdm4oZSx0KXtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGAuYCk7Zm9yKGxldCB0PTAscj1uLmxlbmd0aDt0PHI7Kyt0KXtsZXQgcj1uW3RdO2U9ZVtyXXx8KGVbcl09T2JqZWN0LmNyZWF0ZShudWxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24geW4oZSx0LG4pe3JldHVybiB0eXBlb2YgdD09YHN0cmluZ2A/dHQodm4oZSx0KSxuKTp0dCh2bihlLGBgKSx0KX12YXIgRz1uZXcgY2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmFuaW1hdGlvbj12b2lkIDAsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9YHJnYmEoMCwwLDAsMC4xKWAsdGhpcy5ib3JkZXJDb2xvcj1gcmdiYSgwLDAsMCwwLjEpYCx0aGlzLmNvbG9yPWAjNjY2YCx0aGlzLmRhdGFzZXRzPXt9LHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1lPT5lLmNoYXJ0LnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKSx0aGlzLmVsZW1lbnRzPXt9LHRoaXMuZXZlbnRzPVtgbW91c2Vtb3ZlYCxgbW91c2VvdXRgLGBjbGlja2AsYHRvdWNoc3RhcnRgLGB0b3VjaG1vdmVgXSx0aGlzLmZvbnQ9e2ZhbWlseTpgJ0hlbHZldGljYSBOZXVlJywgJ0hlbHZldGljYScsICdBcmlhbCcsIHNhbnMtc2VyaWZgLHNpemU6MTIsc3R5bGU6YG5vcm1hbGAsbGluZUhlaWdodDoxLjIsd2VpZ2h0Om51bGx9LHRoaXMuaG92ZXI9e30sdGhpcy5ob3ZlckJhY2tncm91bmRDb2xvcj0oZSx0KT0+cm4odC5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuaG92ZXJCb3JkZXJDb2xvcj0oZSx0KT0+cm4odC5ib3JkZXJDb2xvciksdGhpcy5ob3ZlckNvbG9yPShlLHQpPT5ybih0LmNvbG9yKSx0aGlzLmluZGV4QXhpcz1geGAsdGhpcy5pbnRlcmFjdGlvbj17bW9kZTpgbmVhcmVzdGAsaW50ZXJzZWN0OiEwLGluY2x1ZGVJbnZpc2libGU6ITF9LHRoaXMubWFpbnRhaW5Bc3BlY3RSYXRpbz0hMCx0aGlzLm9uSG92ZXI9bnVsbCx0aGlzLm9uQ2xpY2s9bnVsbCx0aGlzLnBhcnNpbmc9ITAsdGhpcy5wbHVnaW5zPXt9LHRoaXMucmVzcG9uc2l2ZT0hMCx0aGlzLnNjYWxlPXZvaWQgMCx0aGlzLnNjYWxlcz17fSx0aGlzLnNob3dMaW5lPSEwLHRoaXMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3A9ITAsdGhpcy5kZXNjcmliZShlKSx0aGlzLmFwcGx5KHQpfXNldChlLHQpe3JldHVybiB5bih0aGlzLGUsdCl9Z2V0KGUpe3JldHVybiB2bih0aGlzLGUpfWRlc2NyaWJlKGUsdCl7cmV0dXJuIHluKF9uLGUsdCl9b3ZlcnJpZGUoZSx0KXtyZXR1cm4geW4oZ24sZSx0KX1yb3V0ZShlLHQsbixyKXtsZXQgaT12bih0aGlzLGUpLGE9dm4odGhpcyxuKSxvPWBfYCt0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkse1tvXTp7dmFsdWU6aVt0XSx3cml0YWJsZTohMH0sW3RdOntlbnVtZXJhYmxlOiEwLGdldCgpe2xldCBlPXRoaXNbb10sdD1hW3JdO3JldHVybiBOKGUpP09iamVjdC5hc3NpZ24oe30sdCxlKTpJKGUsdCl9LHNldChlKXt0aGlzW29dPWV9fX0pfWFwcGx5KGUpe2UuZm9yRWFjaChlPT5lKHRoaXMpKX19KHtfc2NyaXB0YWJsZTplPT4hZS5zdGFydHNXaXRoKGBvbmApLF9pbmRleGFibGU6ZT0+ZSE9PWBldmVudHNgLGhvdmVyOntfZmFsbGJhY2s6YGludGVyYWN0aW9uYH0saW50ZXJhY3Rpb246e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9fSxbc24sY24saG5dKTtmdW5jdGlvbiBibihlKXtyZXR1cm4hZXx8aihlLnNpemUpfHxqKGUuZmFtaWx5KT9udWxsOihlLnN0eWxlP2Uuc3R5bGUrYCBgOmBgKSsoZS53ZWlnaHQ/ZS53ZWlnaHQrYCBgOmBgKStlLnNpemUrYHB4IGArZS5mYW1pbHl9ZnVuY3Rpb24geG4oZSx0LG4scixpKXtsZXQgYT10W2ldO3JldHVybiBhfHwoYT10W2ldPWUubWVhc3VyZVRleHQoaSkud2lkdGgsbi5wdXNoKGkpKSxhPnImJihyPWEpLHJ9ZnVuY3Rpb24gU24oZSx0LG4scil7cnx8PXt9O2xldCBpPXIuZGF0YT1yLmRhdGF8fHt9LGE9ci5nYXJiYWdlQ29sbGVjdD1yLmdhcmJhZ2VDb2xsZWN0fHxbXTtyLmZvbnQhPT10JiYoaT1yLmRhdGE9e30sYT1yLmdhcmJhZ2VDb2xsZWN0PVtdLHIuZm9udD10KSxlLnNhdmUoKSxlLmZvbnQ9dDtsZXQgbz0wLHM9bi5sZW5ndGgsYyxsLHUsZCxmO2ZvcihjPTA7YzxzO2MrKylpZihkPW5bY10sZCE9bnVsbCYmIU0oZCkpbz14bihlLGksYSxvLGQpO2Vsc2UgaWYoTShkKSlmb3IobD0wLHU9ZC5sZW5ndGg7bDx1O2wrKylmPWRbbF0sZiE9bnVsbCYmIU0oZikmJihvPXhuKGUsaSxhLG8sZikpO2UucmVzdG9yZSgpO2xldCBwPWEubGVuZ3RoLzI7aWYocD5uLmxlbmd0aCl7Zm9yKGM9MDtjPHA7YysrKWRlbGV0ZSBpW2FbY11dO2Euc3BsaWNlKDAscCl9cmV0dXJuIG99ZnVuY3Rpb24gQ24oZSx0LG4pe2xldCByPWUuY3VycmVudERldmljZVBpeGVsUmF0aW8saT1uPT09MD8wOk1hdGgubWF4KG4vMiwuNSk7cmV0dXJuIE1hdGgucm91bmQoKHQtaSkqcikvcitpfWZ1bmN0aW9uIHduKGUsdCl7IXQmJiFlfHwodHx8PWUuZ2V0Q29udGV4dChgMmRgKSx0LnNhdmUoKSx0LnJlc2V0VHJhbnNmb3JtKCksdC5jbGVhclJlY3QoMCwwLGUud2lkdGgsZS5oZWlnaHQpLHQucmVzdG9yZSgpKX1mdW5jdGlvbiBUbihlLHQsbixyKXtFbihlLHQsbixyLG51bGwpfWZ1bmN0aW9uIEVuKGUsdCxuLHIsaSl7bGV0IGEsbyxzLGMsbCx1LGQsZixwPXQucG9pbnRTdHlsZSxtPXQucm90YXRpb24saD10LnJhZGl1cyxnPShtfHwwKSpodDtpZihwJiZ0eXBlb2YgcD09YG9iamVjdGAmJihhPXAudG9TdHJpbmcoKSxhPT09YFtvYmplY3QgSFRNTEltYWdlRWxlbWVudF1gfHxhPT09YFtvYmplY3QgSFRNTENhbnZhc0VsZW1lbnRdYCkpe2Uuc2F2ZSgpLGUudHJhbnNsYXRlKG4sciksZS5yb3RhdGUoZyksZS5kcmF3SW1hZ2UocCwtcC53aWR0aC8yLC1wLmhlaWdodC8yLHAud2lkdGgscC5oZWlnaHQpLGUucmVzdG9yZSgpO3JldHVybn1pZighKGlzTmFOKGgpfHxoPD0wKSl7c3dpdGNoKGUuYmVnaW5QYXRoKCkscCl7ZGVmYXVsdDppP2UuZWxsaXBzZShuLHIsaS8yLGgsMCwwLEIpOmUuYXJjKG4scixoLDAsQiksZS5jbG9zZVBhdGgoKTticmVhaztjYXNlYHRyaWFuZ2xlYDp1PWk/aS8yOmgsZS5tb3ZlVG8obitNYXRoLnNpbihnKSp1LHItTWF0aC5jb3MoZykqaCksZys9X3QsZS5saW5lVG8obitNYXRoLnNpbihnKSp1LHItTWF0aC5jb3MoZykqaCksZys9X3QsZS5saW5lVG8obitNYXRoLnNpbihnKSp1LHItTWF0aC5jb3MoZykqaCksZS5jbG9zZVBhdGgoKTticmVhaztjYXNlYHJlY3RSb3VuZGVkYDpsPWgqLjUxNixjPWgtbCxvPU1hdGguY29zKGcrZ3QpKmMsZD1NYXRoLmNvcyhnK2d0KSooaT9pLzItbDpjKSxzPU1hdGguc2luKGcrZ3QpKmMsZj1NYXRoLnNpbihnK2d0KSooaT9pLzItbDpjKSxlLmFyYyhuLWQsci1zLGwsZy16LGctViksZS5hcmMobitmLHItbyxsLGctVixnKSxlLmFyYyhuK2QscitzLGwsZyxnK1YpLGUuYXJjKG4tZixyK28sbCxnK1YsZyt6KSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgcmVjdGA6aWYoIW0pe2M9TWF0aC5TUVJUMV8yKmgsdT1pP2kvMjpjLGUucmVjdChuLXUsci1jLDIqdSwyKmMpO2JyZWFrfWcrPWd0O2Nhc2VgcmVjdFJvdGA6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuK2QscitzKSxlLmxpbmVUbyhuLWYscitvKSxlLmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2VgY3Jvc3NSb3RgOmcrPWd0O2Nhc2VgY3Jvc3NgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBzdGFyYDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZCxyK3MpLGUubW92ZVRvKG4rZixyLW8pLGUubGluZVRvKG4tZixyK28pLGcrPWd0LGQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitkLHIrcyksZS5tb3ZlVG8obitmLHItbyksZS5saW5lVG8obi1mLHIrbyk7YnJlYWs7Y2FzZWBsaW5lYDpvPWk/aS8yOk1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGUubW92ZVRvKG4tbyxyLXMpLGUubGluZVRvKG4rbyxyK3MpO2JyZWFrO2Nhc2VgZGFzaGA6ZS5tb3ZlVG8obixyKSxlLmxpbmVUbyhuK01hdGguY29zKGcpKihpP2kvMjpoKSxyK01hdGguc2luKGcpKmgpO2JyZWFrO2Nhc2UhMTplLmNsb3NlUGF0aCgpfWUuZmlsbCgpLHQuYm9yZGVyV2lkdGg+MCYmZS5zdHJva2UoKX19ZnVuY3Rpb24gSyhlLHQsbil7cmV0dXJuIG58fD0uNSwhdHx8ZSYmZS54PnQubGVmdC1uJiZlLng8dC5yaWdodCtuJiZlLnk+dC50b3AtbiYmZS55PHQuYm90dG9tK259ZnVuY3Rpb24gRG4oZSx0KXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpLGUucmVjdCh0LmxlZnQsdC50b3AsdC5yaWdodC10LmxlZnQsdC5ib3R0b20tdC50b3ApLGUuY2xpcCgpfWZ1bmN0aW9uIE9uKGUpe2UucmVzdG9yZSgpfWZ1bmN0aW9uIGtuKGUsdCxuLHIsaSl7aWYoIXQpcmV0dXJuIGUubGluZVRvKG4ueCxuLnkpO2lmKGk9PT1gbWlkZGxlYCl7bGV0IHI9KHQueCtuLngpLzI7ZS5saW5lVG8ocix0LnkpLGUubGluZVRvKHIsbi55KX1lbHNlIGk9PT1gYWZ0ZXJgPT0hIXI/ZS5saW5lVG8obi54LHQueSk6ZS5saW5lVG8odC54LG4ueSk7ZS5saW5lVG8obi54LG4ueSl9ZnVuY3Rpb24gQW4oZSx0LG4scil7aWYoIXQpcmV0dXJuIGUubGluZVRvKG4ueCxuLnkpO2UuYmV6aWVyQ3VydmVUbyhyP3QuY3AxeDp0LmNwMngscj90LmNwMXk6dC5jcDJ5LHI/bi5jcDJ4Om4uY3AxeCxyP24uY3AyeTpuLmNwMXksbi54LG4ueSl9ZnVuY3Rpb24gam4oZSx0KXt0LnRyYW5zbGF0aW9uJiZlLnRyYW5zbGF0ZSh0LnRyYW5zbGF0aW9uWzBdLHQudHJhbnNsYXRpb25bMV0pLGoodC5yb3RhdGlvbil8fGUucm90YXRlKHQucm90YXRpb24pLHQuY29sb3ImJihlLmZpbGxTdHlsZT10LmNvbG9yKSx0LnRleHRBbGlnbiYmKGUudGV4dEFsaWduPXQudGV4dEFsaWduKSx0LnRleHRCYXNlbGluZSYmKGUudGV4dEJhc2VsaW5lPXQudGV4dEJhc2VsaW5lKX1mdW5jdGlvbiBNbihlLHQsbixyLGkpe2lmKGkuc3RyaWtldGhyb3VnaHx8aS51bmRlcmxpbmUpe2xldCBhPWUubWVhc3VyZVRleHQociksbz10LWEuYWN0dWFsQm91bmRpbmdCb3hMZWZ0LHM9dCthLmFjdHVhbEJvdW5kaW5nQm94UmlnaHQsYz1uLWEuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQsbD1uK2EuYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50LHU9aS5zdHJpa2V0aHJvdWdoPyhjK2wpLzI6bDtlLnN0cm9rZVN0eWxlPWUuZmlsbFN0eWxlLGUuYmVnaW5QYXRoKCksZS5saW5lV2lkdGg9aS5kZWNvcmF0aW9uV2lkdGh8fDIsZS5tb3ZlVG8obyx1KSxlLmxpbmVUbyhzLHUpLGUuc3Ryb2tlKCl9fWZ1bmN0aW9uIE5uKGUsdCl7bGV0IG49ZS5maWxsU3R5bGU7ZS5maWxsU3R5bGU9dC5jb2xvcixlLmZpbGxSZWN0KHQubGVmdCx0LnRvcCx0LndpZHRoLHQuaGVpZ2h0KSxlLmZpbGxTdHlsZT1ufWZ1bmN0aW9uIFBuKGUsdCxuLHIsaSxhPXt9KXtsZXQgbz1NKHQpP3Q6W3RdLHM9YS5zdHJva2VXaWR0aD4wJiZhLnN0cm9rZUNvbG9yIT09YGAsYyxsO2ZvcihlLnNhdmUoKSxlLmZvbnQ9aS5zdHJpbmcsam4oZSxhKSxjPTA7YzxvLmxlbmd0aDsrK2MpbD1vW2NdLGEuYmFja2Ryb3AmJk5uKGUsYS5iYWNrZHJvcCkscyYmKGEuc3Ryb2tlQ29sb3ImJihlLnN0cm9rZVN0eWxlPWEuc3Ryb2tlQ29sb3IpLGooYS5zdHJva2VXaWR0aCl8fChlLmxpbmVXaWR0aD1hLnN0cm9rZVdpZHRoKSxlLnN0cm9rZVRleHQobCxuLHIsYS5tYXhXaWR0aCkpLGUuZmlsbFRleHQobCxuLHIsYS5tYXhXaWR0aCksTW4oZSxuLHIsbCxhKSxyKz1OdW1iZXIoaS5saW5lSGVpZ2h0KTtlLnJlc3RvcmUoKX1mdW5jdGlvbiBGbihlLHQpe2xldHt4Om4seTpyLHc6aSxoOmEscmFkaXVzOm99PXQ7ZS5hcmMobitvLnRvcExlZnQscitvLnRvcExlZnQsby50b3BMZWZ0LDEuNSp6LHosITApLGUubGluZVRvKG4scithLW8uYm90dG9tTGVmdCksZS5hcmMobitvLmJvdHRvbUxlZnQscithLW8uYm90dG9tTGVmdCxvLmJvdHRvbUxlZnQseixWLCEwKSxlLmxpbmVUbyhuK2ktby5ib3R0b21SaWdodCxyK2EpLGUuYXJjKG4raS1vLmJvdHRvbVJpZ2h0LHIrYS1vLmJvdHRvbVJpZ2h0LG8uYm90dG9tUmlnaHQsViwwLCEwKSxlLmxpbmVUbyhuK2kscitvLnRvcFJpZ2h0KSxlLmFyYyhuK2ktby50b3BSaWdodCxyK28udG9wUmlnaHQsby50b3BSaWdodCwwLC1WLCEwKSxlLmxpbmVUbyhuK28udG9wTGVmdCxyKX12YXIgSW49L14obm9ybWFsfChcZCsoPzpcLlxkKyk/KShweHxlbXwlKT8pJC8sTG49L14obm9ybWFsfGl0YWxpY3xpbml0aWFsfGluaGVyaXR8dW5zZXR8KG9ibGlxdWUoIC0/WzAtOV0/WzAtOV1kZWcpPykpJC87ZnVuY3Rpb24gUm4oZSx0KXtsZXQgbj0oYGArZSkubWF0Y2goSW4pO2lmKCFufHxuWzFdPT09YG5vcm1hbGApcmV0dXJuIHQqMS4yO3N3aXRjaChlPStuWzJdLG5bM10pe2Nhc2VgcHhgOnJldHVybiBlO2Nhc2VgJWA6ZS89MTAwfXJldHVybiB0KmV9dmFyIHpuPWU9PitlfHwwO2Z1bmN0aW9uIEJuKGUsdCl7bGV0IG49e30scj1OKHQpLGk9cj9PYmplY3Qua2V5cyh0KTp0LGE9TihlKT9yP249PkkoZVtuXSxlW3Rbbl1dKTp0PT5lW3RdOigpPT5lO2ZvcihsZXQgZSBvZiBpKW5bZV09em4oYShlKSk7cmV0dXJuIG59ZnVuY3Rpb24gVm4oZSl7cmV0dXJuIEJuKGUse3RvcDpgeWAscmlnaHQ6YHhgLGJvdHRvbTpgeWAsbGVmdDpgeGB9KX1mdW5jdGlvbiBIbihlKXtyZXR1cm4gQm4oZSxbYHRvcExlZnRgLGB0b3BSaWdodGAsYGJvdHRvbUxlZnRgLGBib3R0b21SaWdodGBdKX1mdW5jdGlvbiBxKGUpe2xldCB0PVZuKGUpO3JldHVybiB0LndpZHRoPXQubGVmdCt0LnJpZ2h0LHQuaGVpZ2h0PXQudG9wK3QuYm90dG9tLHR9ZnVuY3Rpb24gSihlLHQpe2V8fD17fSx0fHw9Ry5mb250O2xldCBuPUkoZS5zaXplLHQuc2l6ZSk7dHlwZW9mIG49PWBzdHJpbmdgJiYobj1wYXJzZUludChuLDEwKSk7bGV0IHI9SShlLnN0eWxlLHQuc3R5bGUpO3ImJiEoYGArcikubWF0Y2goTG4pJiYoY29uc29sZS53YXJuKGBJbnZhbGlkIGZvbnQgc3R5bGUgc3BlY2lmaWVkOiAiYCtyK2AiYCkscj12b2lkIDApO2xldCBpPXtmYW1pbHk6SShlLmZhbWlseSx0LmZhbWlseSksbGluZUhlaWdodDpSbihJKGUubGluZUhlaWdodCx0LmxpbmVIZWlnaHQpLG4pLHNpemU6bixzdHlsZTpyLHdlaWdodDpJKGUud2VpZ2h0LHQud2VpZ2h0KSxzdHJpbmc6YGB9O3JldHVybiBpLnN0cmluZz1ibihpKSxpfWZ1bmN0aW9uIFVuKGUsdCxuLHIpe2xldCBpPSEwLGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKWlmKHM9ZVthXSxzIT09dm9pZCAwJiYodCE9PXZvaWQgMCYmdHlwZW9mIHM9PWBmdW5jdGlvbmAmJihzPXModCksaT0hMSksbiE9PXZvaWQgMCYmTShzKSYmKHM9c1tuJXMubGVuZ3RoXSxpPSExKSxzIT09dm9pZCAwKSlyZXR1cm4gciYmIWkmJihyLmNhY2hlYWJsZT0hMSksc31mdW5jdGlvbiBXbihlLHQsbil7bGV0e21pbjpyLG1heDppfT1lLGE9WGUodCwoaS1yKS8yKSxvPShlLHQpPT5uJiZlPT09MD8wOmUrdDtyZXR1cm57bWluOm8ociwtTWF0aC5hYnMoYSkpLG1heDpvKGksYSl9fWZ1bmN0aW9uIEduKGUsdCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShlKSx0KX1mdW5jdGlvbiBLbihlLHQ9W2BgXSxuLHIsaT0oKT0+ZVswXSl7bGV0IGE9bnx8ZTtyZXR1cm4gcj09PXZvaWQgMCYmKHI9Y3IoYF9mYWxsYmFja2AsZSkpLG5ldyBQcm94eSh7W1N5bWJvbC50b1N0cmluZ1RhZ106YE9iamVjdGAsX2NhY2hlYWJsZTohMCxfc2NvcGVzOmUsX3Jvb3RTY29wZXM6YSxfZmFsbGJhY2s6cixfZ2V0VGFyZ2V0Omksb3ZlcnJpZGU6bj0+S24oW24sLi4uZV0sdCxhLHIpfSx7ZGVsZXRlUHJvcGVydHkodCxuKXtyZXR1cm4gZGVsZXRlIHRbbl0sZGVsZXRlIHQuX2tleXMsZGVsZXRlIGVbMF1bbl0sITB9LGdldChuLHIpe3JldHVybiBabihuLHIsKCk9PnNyKHIsdCxlLG4pKX0sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl7cmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuX3Njb3Blc1swXSx0KX0sZ2V0UHJvdG90eXBlT2YoKXtyZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihlWzBdKX0saGFzKGUsdCl7cmV0dXJuIGxyKGUpLmluY2x1ZGVzKHQpfSxvd25LZXlzKGUpe3JldHVybiBscihlKX0sc2V0KGUsdCxuKXtsZXQgcj1lLl9zdG9yYWdlfHw9aSgpO3JldHVybiBlW3RdPXJbdF09bixkZWxldGUgZS5fa2V5cywhMH19KX1mdW5jdGlvbiBxbihlLHQsbixyKXtsZXQgaT17X2NhY2hlYWJsZTohMSxfcHJveHk6ZSxfY29udGV4dDp0LF9zdWJQcm94eTpuLF9zdGFjazpuZXcgU2V0LF9kZXNjcmlwdG9yczpKbihlLHIpLHNldENvbnRleHQ6dD0+cW4oZSx0LG4sciksb3ZlcnJpZGU6aT0+cW4oZS5vdmVycmlkZShpKSx0LG4scil9O3JldHVybiBuZXcgUHJveHkoaSx7ZGVsZXRlUHJvcGVydHkodCxuKXtyZXR1cm4gZGVsZXRlIHRbbl0sZGVsZXRlIGVbbl0sITB9LGdldChlLHQsbil7cmV0dXJuIFpuKGUsdCwoKT0+UW4oZSx0LG4pKX0sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbil7cmV0dXJuIHQuX2Rlc2NyaXB0b3JzLmFsbEtleXM/UmVmbGVjdC5oYXMoZSxuKT97ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9OnZvaWQgMDpSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pfSxnZXRQcm90b3R5cGVPZigpe3JldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGUpfSxoYXModCxuKXtyZXR1cm4gUmVmbGVjdC5oYXMoZSxuKX0sb3duS2V5cygpe3JldHVybiBSZWZsZWN0Lm93bktleXMoZSl9LHNldCh0LG4scil7cmV0dXJuIGVbbl09cixkZWxldGUgdFtuXSwhMH19KX1mdW5jdGlvbiBKbihlLHQ9e3NjcmlwdGFibGU6ITAsaW5kZXhhYmxlOiEwfSl7bGV0e19zY3JpcHRhYmxlOm49dC5zY3JpcHRhYmxlLF9pbmRleGFibGU6cj10LmluZGV4YWJsZSxfYWxsS2V5czppPXQuYWxsS2V5c309ZTtyZXR1cm57YWxsS2V5czppLHNjcmlwdGFibGU6bixpbmRleGFibGU6cixpc1NjcmlwdGFibGU6dXQobik/bjooKT0+bixpc0luZGV4YWJsZTp1dChyKT9yOigpPT5yfX12YXIgWW49KGUsdCk9PmU/ZStjdCh0KTp0LFhuPShlLHQpPT5OKHQpJiZlIT09YGFkYXB0ZXJzYCYmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGx8fHQuY29uc3RydWN0b3I9PT1PYmplY3QpO2Z1bmN0aW9uIFpuKGUsdCxuKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KXx8dD09PWBjb25zdHJ1Y3RvcmApcmV0dXJuIGVbdF07bGV0IHI9bigpO3JldHVybiBlW3RdPXIscn1mdW5jdGlvbiBRbihlLHQsbil7bGV0e19wcm94eTpyLF9jb250ZXh0OmksX3N1YlByb3h5OmEsX2Rlc2NyaXB0b3JzOm99PWUscz1yW3RdO3JldHVybiB1dChzKSYmby5pc1NjcmlwdGFibGUodCkmJihzPSRuKHQscyxlLG4pKSxNKHMpJiZzLmxlbmd0aCYmKHM9ZXIodCxzLGUsby5pc0luZGV4YWJsZSkpLFhuKHQscykmJihzPXFuKHMsaSxhJiZhW3RdLG8pKSxzfWZ1bmN0aW9uICRuKGUsdCxuLHIpe2xldHtfcHJveHk6aSxfY29udGV4dDphLF9zdWJQcm94eTpvLF9zdGFjazpzfT1uO2lmKHMuaGFzKGUpKXRocm93IEVycm9yKGBSZWN1cnNpb24gZGV0ZWN0ZWQ6IGArQXJyYXkuZnJvbShzKS5qb2luKGAtPmApK2AtPmArZSk7cy5hZGQoZSk7bGV0IGM9dChhLG98fHIpO3JldHVybiBzLmRlbGV0ZShlKSxYbihlLGMpJiYoYz1pcihpLl9zY29wZXMsaSxlLGMpKSxjfWZ1bmN0aW9uIGVyKGUsdCxuLHIpe2xldHtfcHJveHk6aSxfY29udGV4dDphLF9zdWJQcm94eTpvLF9kZXNjcmlwdG9yczpzfT1uO2lmKGEuaW5kZXghPT12b2lkIDAmJnIoZSkpcmV0dXJuIHRbYS5pbmRleCV0Lmxlbmd0aF07aWYoTih0WzBdKSl7bGV0IG49dCxyPWkuX3Njb3Blcy5maWx0ZXIoZT0+ZSE9PW4pO3Q9W107Zm9yKGxldCBjIG9mIG4pe2xldCBuPWlyKHIsaSxlLGMpO3QucHVzaChxbihuLGEsbyYmb1tlXSxzKSl9fXJldHVybiB0fWZ1bmN0aW9uIHRyKGUsdCxuKXtyZXR1cm4gdXQoZSk/ZSh0LG4pOmV9dmFyIG5yPShlLHQpPT5lPT09ITA/dDp0eXBlb2YgZT09YHN0cmluZ2A/c3QodCxlKTp2b2lkIDA7ZnVuY3Rpb24gcnIoZSx0LG4scixpKXtmb3IobGV0IGEgb2YgdCl7bGV0IHQ9bnIobixhKTtpZih0KXtlLmFkZCh0KTtsZXQgYT10cih0Ll9mYWxsYmFjayxuLGkpO2lmKGEhPT12b2lkIDAmJmEhPT1uJiZhIT09cilyZXR1cm4gYX1lbHNlIGlmKHQ9PT0hMSYmciE9PXZvaWQgMCYmbiE9PXIpcmV0dXJuIG51bGx9cmV0dXJuITF9ZnVuY3Rpb24gaXIoZSx0LG4scil7bGV0IGk9dC5fcm9vdFNjb3BlcyxhPXRyKHQuX2ZhbGxiYWNrLG4sciksbz1bLi4uZSwuLi5pXSxzPW5ldyBTZXQ7cy5hZGQocik7bGV0IGM9YXIocyxvLG4sYXx8bixyKTtyZXR1cm4gYz09PW51bGx8fGEhPT12b2lkIDAmJmEhPT1uJiYoYz1hcihzLG8sYSxjLHIpLGM9PT1udWxsKT8hMTpLbihBcnJheS5mcm9tKHMpLFtgYF0saSxhLCgpPT5vcih0LG4scikpfWZ1bmN0aW9uIGFyKGUsdCxuLHIsaSl7Zm9yKDtuOyluPXJyKGUsdCxuLHIsaSk7cmV0dXJuIG59ZnVuY3Rpb24gb3IoZSx0LG4pe2xldCByPWUuX2dldFRhcmdldCgpO3QgaW4gcnx8KHJbdF09e30pO2xldCBpPXJbdF07cmV0dXJuIE0oaSkmJk4obik/bjppfHx7fX1mdW5jdGlvbiBzcihlLHQsbixyKXtsZXQgaTtmb3IobGV0IGEgb2YgdClpZihpPWNyKFluKGEsZSksbiksaSE9PXZvaWQgMClyZXR1cm4gWG4oZSxpKT9pcihuLHIsZSxpKTppfWZ1bmN0aW9uIGNyKGUsdCl7Zm9yKGxldCBuIG9mIHQpe2lmKCFuKWNvbnRpbnVlO2xldCB0PW5bZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdH19ZnVuY3Rpb24gbHIoZSl7bGV0IHQ9ZS5fa2V5cztyZXR1cm4gdHx8PWUuX2tleXM9dXIoZS5fc2NvcGVzKSx0fWZ1bmN0aW9uIHVyKGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldCBuIG9mIGUpZm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT4hZS5zdGFydHNXaXRoKGBfYCkpKXQuYWRkKGUpO3JldHVybiBBcnJheS5mcm9tKHQpfXZhciBkcj0yKiotNTJ8fDFlLTE0LGZyPShlLHQpPT50PGUubGVuZ3RoJiYhZVt0XS5za2lwJiZlW3RdLHByPWU9PmU9PT1geGA/YHlgOmB4YDtmdW5jdGlvbiBtcihlLHQsbixyKXtsZXQgaT1lLnNraXA/dDplLGE9dCxvPW4uc2tpcD90Om4scz1qdChhLGkpLGM9anQobyxhKSxsPXMvKHMrYyksdT1jLyhzK2MpO2w9aXNOYU4obCk/MDpsLHU9aXNOYU4odSk/MDp1O2xldCBkPXIqbCxmPXIqdTtyZXR1cm57cHJldmlvdXM6e3g6YS54LWQqKG8ueC1pLngpLHk6YS55LWQqKG8ueS1pLnkpfSxuZXh0Ont4OmEueCtmKihvLngtaS54KSx5OmEueStmKihvLnktaS55KX19fWZ1bmN0aW9uIGhyKGUsdCxuKXtsZXQgcj1lLmxlbmd0aCxpLGEsbyxzLGMsbD1mcihlLDApO2ZvcihsZXQgdT0wO3U8ci0xOysrdSlpZihjPWwsbD1mcihlLHUrMSksISghY3x8IWwpKXtpZihidCh0W3VdLDAsZHIpKXtuW3VdPW5bdSsxXT0wO2NvbnRpbnVlfWk9blt1XS90W3VdLGE9blt1KzFdL3RbdV0scz1pKioyK2EqKjIsIShzPD05KSYmKG89My9NYXRoLnNxcnQocyksblt1XT1pKm8qdFt1XSxuW3UrMV09YSpvKnRbdV0pfX1mdW5jdGlvbiBncihlLHQsbj1geGApe2xldCByPXByKG4pLGk9ZS5sZW5ndGgsYSxvLHMsYz1mcihlLDApO2ZvcihsZXQgbD0wO2w8aTsrK2wpe2lmKG89cyxzPWMsYz1mcihlLGwrMSksIXMpY29udGludWU7bGV0IGk9c1tuXSx1PXNbcl07byYmKGE9KGktb1tuXSkvMyxzW2BjcDEke259YF09aS1hLHNbYGNwMSR7cn1gXT11LWEqdFtsXSksYyYmKGE9KGNbbl0taSkvMyxzW2BjcDIke259YF09aSthLHNbYGNwMiR7cn1gXT11K2EqdFtsXSl9fWZ1bmN0aW9uIF9yKGUsdD1geGApe2xldCBuPXByKHQpLHI9ZS5sZW5ndGgsaT1BcnJheShyKS5maWxsKDApLGE9QXJyYXkociksbyxzLGMsbD1mcihlLDApO2ZvcihvPTA7bzxyOysrbylpZihzPWMsYz1sLGw9ZnIoZSxvKzEpLGMpe2lmKGwpe2xldCBlPWxbdF0tY1t0XTtpW29dPWU9PT0wPzA6KGxbbl0tY1tuXSkvZX1hW29dPXM/bD95dChpW28tMV0pPT09eXQoaVtvXSk/KGlbby0xXStpW29dKS8yOjA6aVtvLTFdOmlbb119aHIoZSxpLGEpLGdyKGUsYSx0KX1mdW5jdGlvbiB2cihlLHQsbil7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKGUsbiksdCl9ZnVuY3Rpb24geXIoZSx0KXtsZXQgbixyLGksYSxvLHM9SyhlWzBdLHQpO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKW89YSxhPXMscz1uPHItMSYmSyhlW24rMV0sdCksYSYmKGk9ZVtuXSxvJiYoaS5jcDF4PXZyKGkuY3AxeCx0LmxlZnQsdC5yaWdodCksaS5jcDF5PXZyKGkuY3AxeSx0LnRvcCx0LmJvdHRvbSkpLHMmJihpLmNwMng9dnIoaS5jcDJ4LHQubGVmdCx0LnJpZ2h0KSxpLmNwMnk9dnIoaS5jcDJ5LHQudG9wLHQuYm90dG9tKSkpfWZ1bmN0aW9uIGJyKGUsdCxuLHIsaSl7bGV0IGEsbyxzLGM7aWYodC5zcGFuR2FwcyYmKGU9ZS5maWx0ZXIoZT0+IWUuc2tpcCkpLHQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZT09PWBtb25vdG9uZWApX3IoZSxpKTtlbHNle2xldCBuPXI/ZVtlLmxlbmd0aC0xXTplWzBdO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXM9ZVthXSxjPW1yKG4scyxlW01hdGgubWluKGErMSxvLSshciklb10sdC50ZW5zaW9uKSxzLmNwMXg9Yy5wcmV2aW91cy54LHMuY3AxeT1jLnByZXZpb3VzLnkscy5jcDJ4PWMubmV4dC54LHMuY3AyeT1jLm5leHQueSxuPXN9dC5jYXBCZXppZXJQb2ludHMmJnlyKGUsbil9ZnVuY3Rpb24geHIoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzxgdWAmJnR5cGVvZiBkb2N1bWVudDxgdWB9ZnVuY3Rpb24gU3IoZSl7bGV0IHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnRvU3RyaW5nKCk9PT1gW29iamVjdCBTaGFkb3dSb290XWAmJih0PXQuaG9zdCksdH1mdW5jdGlvbiBDcihlLHQsbil7bGV0IHI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD8ocj1wYXJzZUludChlLDEwKSxlLmluZGV4T2YoYCVgKSE9PS0xJiYocj1yLzEwMCp0LnBhcmVudE5vZGVbbl0pKTpyPWUscn12YXIgd3I9ZT0+ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtmdW5jdGlvbiBUcihlLHQpe3JldHVybiB3cihlKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciBFcj1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdO2Z1bmN0aW9uIERyKGUsdCxuKXtsZXQgcj17fTtuPW4/YC1gK246YGA7Zm9yKGxldCBpPTA7aTw0O2krKyl7bGV0IGE9RXJbaV07clthXT1wYXJzZUZsb2F0KGVbdCtgLWArYStuXSl8fDB9cmV0dXJuIHIud2lkdGg9ci5sZWZ0K3IucmlnaHQsci5oZWlnaHQ9ci50b3Arci5ib3R0b20scn12YXIgT3I9KGUsdCxuKT0+KGU+MHx8dD4wKSYmKCFufHwhbi5zaGFkb3dSb290KTtmdW5jdGlvbiBrcihlLHQpe2xldCBuPWUudG91Y2hlcyxyPW4mJm4ubGVuZ3RoP25bMF06ZSx7b2Zmc2V0WDppLG9mZnNldFk6YX09cixvPSExLHMsYztpZihPcihpLGEsZS50YXJnZXQpKXM9aSxjPWE7ZWxzZXtsZXQgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3M9ci5jbGllbnRYLWUubGVmdCxjPXIuY2xpZW50WS1lLnRvcCxvPSEwfXJldHVybnt4OnMseTpjLGJveDpvfX1mdW5jdGlvbiBBcihlLHQpe2lmKGBuYXRpdmVgaW4gZSlyZXR1cm4gZTtsZXR7Y2FudmFzOm4sY3VycmVudERldmljZVBpeGVsUmF0aW86cn09dCxpPXdyKG4pLGE9aS5ib3hTaXppbmc9PT1gYm9yZGVyLWJveGAsbz1EcihpLGBwYWRkaW5nYCkscz1EcihpLGBib3JkZXJgLGB3aWR0aGApLHt4OmMseTpsLGJveDp1fT1rcihlLG4pLGQ9by5sZWZ0Kyh1JiZzLmxlZnQpLGY9by50b3ArKHUmJnMudG9wKSx7d2lkdGg6cCxoZWlnaHQ6bX09dDtyZXR1cm4gYSYmKHAtPW8ud2lkdGgrcy53aWR0aCxtLT1vLmhlaWdodCtzLmhlaWdodCkse3g6TWF0aC5yb3VuZCgoYy1kKS9wKm4ud2lkdGgvcikseTpNYXRoLnJvdW5kKChsLWYpL20qbi5oZWlnaHQvcil9fWZ1bmN0aW9uIGpyKGUsdCxuKXtsZXQgcixpO2lmKHQ9PT12b2lkIDB8fG49PT12b2lkIDApe2xldCBhPWUmJlNyKGUpO2lmKCFhKXQ9ZS5jbGllbnRXaWR0aCxuPWUuY2xpZW50SGVpZ2h0O2Vsc2V7bGV0IGU9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXdyKGEpLHM9RHIobyxgYm9yZGVyYCxgd2lkdGhgKSxjPURyKG8sYHBhZGRpbmdgKTt0PWUud2lkdGgtYy53aWR0aC1zLndpZHRoLG49ZS5oZWlnaHQtYy5oZWlnaHQtcy5oZWlnaHQscj1DcihvLm1heFdpZHRoLGEsYGNsaWVudFdpZHRoYCksaT1DcihvLm1heEhlaWdodCxhLGBjbGllbnRIZWlnaHRgKX19cmV0dXJue3dpZHRoOnQsaGVpZ2h0Om4sbWF4V2lkdGg6cnx8bXQsbWF4SGVpZ2h0Oml8fG10fX12YXIgTXI9ZT0+TWF0aC5yb3VuZChlKjEwKS8xMDtmdW5jdGlvbiBOcihlLHQsbixyKXtsZXQgaT13cihlKSxhPURyKGksYG1hcmdpbmApLG89Q3IoaS5tYXhXaWR0aCxlLGBjbGllbnRXaWR0aGApfHxtdCxzPUNyKGkubWF4SGVpZ2h0LGUsYGNsaWVudEhlaWdodGApfHxtdCxjPWpyKGUsdCxuKSx7d2lkdGg6bCxoZWlnaHQ6dX09YztpZihpLmJveFNpemluZz09PWBjb250ZW50LWJveGApe2xldCBlPURyKGksYGJvcmRlcmAsYHdpZHRoYCksdD1EcihpLGBwYWRkaW5nYCk7bC09dC53aWR0aCtlLndpZHRoLHUtPXQuaGVpZ2h0K2UuaGVpZ2h0fXJldHVybiBsPU1hdGgubWF4KDAsbC1hLndpZHRoKSx1PU1hdGgubWF4KDAscj9sL3I6dS1hLmhlaWdodCksbD1NcihNYXRoLm1pbihsLG8sYy5tYXhXaWR0aCkpLHU9TXIoTWF0aC5taW4odSxzLGMubWF4SGVpZ2h0KSksbCYmIXUmJih1PU1yKGwvMikpLCh0IT09dm9pZCAwfHxuIT09dm9pZCAwKSYmciYmYy5oZWlnaHQmJnU+Yy5oZWlnaHQmJih1PWMuaGVpZ2h0LGw9TXIoTWF0aC5mbG9vcih1KnIpKSkse3dpZHRoOmwsaGVpZ2h0OnV9fWZ1bmN0aW9uIFByKGUsdCxuKXtsZXQgcj10fHwxLGk9TXIoZS5oZWlnaHQqciksYT1NcihlLndpZHRoKnIpO2UuaGVpZ2h0PU1yKGUuaGVpZ2h0KSxlLndpZHRoPU1yKGUud2lkdGgpO2xldCBvPWUuY2FudmFzO3JldHVybiBvLnN0eWxlJiYobnx8IW8uc3R5bGUuaGVpZ2h0JiYhby5zdHlsZS53aWR0aCkmJihvLnN0eWxlLmhlaWdodD1gJHtlLmhlaWdodH1weGAsby5zdHlsZS53aWR0aD1gJHtlLndpZHRofXB4YCksZS5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PXJ8fG8uaGVpZ2h0IT09aXx8by53aWR0aCE9PWE/KGUuY3VycmVudERldmljZVBpeGVsUmF0aW89cixvLmhlaWdodD1pLG8ud2lkdGg9YSxlLmN0eC5zZXRUcmFuc2Zvcm0ociwwLDAsciwwLDApLCEwKTohMX12YXIgRnI9ZnVuY3Rpb24oKXtsZXQgZT0hMTt0cnl7bGV0IHQ9e2dldCBwYXNzaXZlKCl7cmV0dXJuIGU9ITAsITF9fTt4cigpJiYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsdCkpfWNhdGNoe31yZXR1cm4gZX0oKTtmdW5jdGlvbiBJcihlLHQpe2xldCBuPVRyKGUsdCkscj1uJiZuLm1hdGNoKC9eKFxkKykoXC5cZCspP3B4JC8pO3JldHVybiByPytyWzFdOnZvaWQgMH1mdW5jdGlvbiBMcihlLHQsbixyKXtyZXR1cm57eDplLngrbioodC54LWUueCkseTplLnkrbioodC55LWUueSl9fWZ1bmN0aW9uIFJyKGUsdCxuLHIpe3JldHVybnt4OmUueCtuKih0LngtZS54KSx5OnI9PT1gbWlkZGxlYD9uPC41P2UueTp0Lnk6cj09PWBhZnRlcmA/bjwxP2UueTp0Lnk6bj4wP3QueTplLnl9fWZ1bmN0aW9uIHpyKGUsdCxuLHIpe2xldCBpPXt4OmUuY3AyeCx5OmUuY3AyeX0sYT17eDp0LmNwMXgseTp0LmNwMXl9LG89THIoZSxpLG4pLHM9THIoaSxhLG4pLGM9THIoYSx0LG4pO3JldHVybiBMcihMcihvLHMsbiksTHIocyxjLG4pLG4pfXZhciBCcj1mdW5jdGlvbihlLHQpe3JldHVybnt4KG4pe3JldHVybiBlK2UrdC1ufSxzZXRXaWR0aChlKXt0PWV9LHRleHRBbGlnbihlKXtyZXR1cm4gZT09PWBjZW50ZXJgP2U6ZT09PWByaWdodGA/YGxlZnRgOmByaWdodGB9LHhQbHVzKGUsdCl7cmV0dXJuIGUtdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlLXR9fX0sVnI9ZnVuY3Rpb24oKXtyZXR1cm57eChlKXtyZXR1cm4gZX0sc2V0V2lkdGgoZSl7fSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGV9LHhQbHVzKGUsdCl7cmV0dXJuIGUrdH0sbGVmdEZvckx0cihlLHQpe3JldHVybiBlfX19O2Z1bmN0aW9uIEhyKGUsdCxuKXtyZXR1cm4gZT9Ccih0LG4pOlZyKCl9ZnVuY3Rpb24gVXIoZSx0KXtsZXQgbixyOyh0PT09YGx0cmB8fHQ9PT1gcnRsYCkmJihuPWUuY2FudmFzLnN0eWxlLHI9W24uZ2V0UHJvcGVydHlWYWx1ZShgZGlyZWN0aW9uYCksbi5nZXRQcm9wZXJ0eVByaW9yaXR5KGBkaXJlY3Rpb25gKV0sbi5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0LGBpbXBvcnRhbnRgKSxlLnByZXZUZXh0RGlyZWN0aW9uPXIpfWZ1bmN0aW9uIFdyKGUsdCl7dCE9PXZvaWQgMCYmKGRlbGV0ZSBlLnByZXZUZXh0RGlyZWN0aW9uLGUuY2FudmFzLnN0eWxlLnNldFByb3BlcnR5KGBkaXJlY3Rpb25gLHRbMF0sdFsxXSkpfWZ1bmN0aW9uIEdyKGUpe3JldHVybiBlPT09YGFuZ2xlYD97YmV0d2VlbjpOdCxjb21wYXJlOk10LG5vcm1hbGl6ZTpIfTp7YmV0d2VlbjpGdCxjb21wYXJlOihlLHQpPT5lLXQsbm9ybWFsaXplOmU9PmV9fWZ1bmN0aW9uIEtyKHtzdGFydDplLGVuZDp0LGNvdW50Om4sbG9vcDpyLHN0eWxlOml9KXtyZXR1cm57c3RhcnQ6ZSVuLGVuZDp0JW4sbG9vcDpyJiYodC1lKzEpJW49PT0wLHN0eWxlOml9fWZ1bmN0aW9uIHFyKGUsdCxuKXtsZXR7cHJvcGVydHk6cixzdGFydDppLGVuZDphfT1uLHtiZXR3ZWVuOm8sbm9ybWFsaXplOnN9PUdyKHIpLGM9dC5sZW5ndGgse3N0YXJ0OmwsZW5kOnUsbG9vcDpkfT1lLGYscDtpZihkKXtmb3IobCs9Yyx1Kz1jLGY9MCxwPWM7ZjxwJiZvKHModFtsJWNdW3JdKSxpLGEpOysrZilsLS0sdS0tO2wlPWMsdSU9Y31yZXR1cm4gdTxsJiYodSs9Yykse3N0YXJ0OmwsZW5kOnUsbG9vcDpkLHN0eWxlOmUuc3R5bGV9fWZ1bmN0aW9uIEpyKGUsdCxuKXtpZighbilyZXR1cm5bZV07bGV0e3Byb3BlcnR5OnIsc3RhcnQ6aSxlbmQ6YX09bixvPXQubGVuZ3RoLHtjb21wYXJlOnMsYmV0d2VlbjpjLG5vcm1hbGl6ZTpsfT1HcihyKSx7c3RhcnQ6dSxlbmQ6ZCxsb29wOmYsc3R5bGU6cH09cXIoZSx0LG4pLG09W10saD0hMSxnPW51bGwsXyx2LHksYj0oKT0+YyhpLHksXykmJnMoaSx5KSE9PTAseD0oKT0+cyhhLF8pPT09MHx8YyhhLHksXyksUz0oKT0+aHx8YigpLEM9KCk9PiFofHx4KCk7Zm9yKGxldCBlPXUsbj11O2U8PWQ7KytlKXY9dFtlJW9dLCF2LnNraXAmJihfPWwodltyXSksXyE9PXkmJihoPWMoXyxpLGEpLGc9PT1udWxsJiZTKCkmJihnPXMoXyxpKT09PTA/ZTpuKSxnIT09bnVsbCYmQygpJiYobS5wdXNoKEtyKHtzdGFydDpnLGVuZDplLGxvb3A6Zixjb3VudDpvLHN0eWxlOnB9KSksZz1udWxsKSxuPWUseT1fKSk7cmV0dXJuIGchPT1udWxsJiZtLnB1c2goS3Ioe3N0YXJ0OmcsZW5kOmQsbG9vcDpmLGNvdW50Om8sc3R5bGU6cH0pKSxtfWZ1bmN0aW9uIFlyKGUsdCl7bGV0IG49W10scj1lLnNlZ21lbnRzO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgYT1KcihyW2ldLGUucG9pbnRzLHQpO2EubGVuZ3RoJiZuLnB1c2goLi4uYSl9cmV0dXJuIG59ZnVuY3Rpb24gWHIoZSx0LG4scil7bGV0IGk9MCxhPXQtMTtpZihuJiYhcilmb3IoO2k8dCYmIWVbaV0uc2tpcDspaSsrO2Zvcig7aTx0JiZlW2ldLnNraXA7KWkrKztmb3IoaSU9dCxuJiYoYSs9aSk7YT5pJiZlW2EldF0uc2tpcDspYS0tO3JldHVybiBhJT10LHtzdGFydDppLGVuZDphfX1mdW5jdGlvbiBacihlLHQsbixyKXtsZXQgaT1lLmxlbmd0aCxhPVtdLG89dCxzPWVbdF0sYztmb3IoYz10KzE7Yzw9bjsrK2Mpe2xldCBuPWVbYyVpXTtuLnNraXB8fG4uc3RvcD9zLnNraXB8fChyPSExLGEucHVzaCh7c3RhcnQ6dCVpLGVuZDooYy0xKSVpLGxvb3A6cn0pLHQ9bz1uLnN0b3A/YzpudWxsKToobz1jLHMuc2tpcCYmKHQ9YykpLHM9bn1yZXR1cm4gbyE9PW51bGwmJmEucHVzaCh7c3RhcnQ6dCVpLGVuZDpvJWksbG9vcDpyfSksYX1mdW5jdGlvbiBRcihlLHQpe2xldCBuPWUucG9pbnRzLHI9ZS5vcHRpb25zLnNwYW5HYXBzLGk9bi5sZW5ndGg7aWYoIWkpcmV0dXJuW107bGV0IGE9ISFlLl9sb29wLHtzdGFydDpvLGVuZDpzfT1YcihuLGksYSxyKTtyZXR1cm4gcj09PSEwPyRyKGUsW3tzdGFydDpvLGVuZDpzLGxvb3A6YX1dLG4sdCk6JHIoZSxacihuLG8sczxvP3MraTpzLCEhZS5fZnVsbExvb3AmJm89PT0wJiZzPT09aS0xKSxuLHQpfWZ1bmN0aW9uICRyKGUsdCxuLHIpe3JldHVybiFyfHwhci5zZXRDb250ZXh0fHwhbj90OmVpKGUsdCxuLHIpfWZ1bmN0aW9uIGVpKGUsdCxuLHIpe2xldCBpPWUuX2NoYXJ0LmdldENvbnRleHQoKSxhPXRpKGUub3B0aW9ucykse19kYXRhc2V0SW5kZXg6byxvcHRpb25zOntzcGFuR2FwczpzfX09ZSxjPW4ubGVuZ3RoLGw9W10sdT1hLGQ9dFswXS5zdGFydCxmPWQ7ZnVuY3Rpb24gcChlLHQscixpKXtsZXQgYT1zPy0xOjE7aWYoZSE9PXQpe2ZvcihlKz1jO25bZSVjXS5za2lwOyllLT1hO2Zvcig7blt0JWNdLnNraXA7KXQrPWE7ZSVjIT09dCVjJiYobC5wdXNoKHtzdGFydDplJWMsZW5kOnQlYyxsb29wOnIsc3R5bGU6aX0pLHU9aSxkPXQlYyl9fWZvcihsZXQgZSBvZiB0KXtkPXM/ZDplLnN0YXJ0O2xldCB0PW5bZCVjXSxhO2ZvcihmPWQrMTtmPD1lLmVuZDtmKyspe2xldCBzPW5bZiVjXTthPXRpKHIuc2V0Q29udGV4dChHbihpLHt0eXBlOmBzZWdtZW50YCxwMDp0LHAxOnMscDBEYXRhSW5kZXg6KGYtMSklYyxwMURhdGFJbmRleDpmJWMsZGF0YXNldEluZGV4Om99KSkpLG5pKGEsdSkmJnAoZCxmLTEsZS5sb29wLHUpLHQ9cyx1PWF9ZDxmLTEmJnAoZCxmLTEsZS5sb29wLHUpfXJldHVybiBsfWZ1bmN0aW9uIHRpKGUpe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6ZS5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyQ2FwU3R5bGU6ZS5ib3JkZXJDYXBTdHlsZSxib3JkZXJEYXNoOmUuYm9yZGVyRGFzaCxib3JkZXJEYXNoT2Zmc2V0OmUuYm9yZGVyRGFzaE9mZnNldCxib3JkZXJKb2luU3R5bGU6ZS5ib3JkZXJKb2luU3R5bGUsYm9yZGVyV2lkdGg6ZS5ib3JkZXJXaWR0aCxib3JkZXJDb2xvcjplLmJvcmRlckNvbG9yfX1mdW5jdGlvbiBuaShlLHQpe2lmKCF0KXJldHVybiExO2xldCBuPVtdLHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdG4odCk/KG4uaW5jbHVkZXModCl8fG4ucHVzaCh0KSxuLmluZGV4T2YodCkpOnR9O3JldHVybiBKU09OLnN0cmluZ2lmeShlLHIpIT09SlNPTi5zdHJpbmdpZnkodCxyKX1mdW5jdGlvbiByaShlLHQsbil7cmV0dXJuIGUub3B0aW9ucy5jbGlwP2Vbbl06dFtuXX1mdW5jdGlvbiBpaShlLHQpe2xldHt4U2NhbGU6bix5U2NhbGU6cn09ZTtyZXR1cm4gbiYmcj97bGVmdDpyaShuLHQsYGxlZnRgKSxyaWdodDpyaShuLHQsYHJpZ2h0YCksdG9wOnJpKHIsdCxgdG9wYCksYm90dG9tOnJpKHIsdCxgYm90dG9tYCl9OnR9ZnVuY3Rpb24gYWkoZSx0KXtsZXQgbj10Ll9jbGlwO2lmKG4uZGlzYWJsZWQpcmV0dXJuITE7bGV0IHI9aWkodCxlLmNoYXJ0QXJlYSk7cmV0dXJue2xlZnQ6bi5sZWZ0PT09ITE/MDpyLmxlZnQtKG4ubGVmdD09PSEwPzA6bi5sZWZ0KSxyaWdodDpuLnJpZ2h0PT09ITE/ZS53aWR0aDpyLnJpZ2h0KyhuLnJpZ2h0PT09ITA/MDpuLnJpZ2h0KSx0b3A6bi50b3A9PT0hMT8wOnIudG9wLShuLnRvcD09PSEwPzA6bi50b3ApLGJvdHRvbTpuLmJvdHRvbT09PSExP2UuaGVpZ2h0OnIuYm90dG9tKyhuLmJvdHRvbT09PSEwPzA6bi5ib3R0b20pfX12YXIgWT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fY2hhcnRzPW5ldyBNYXAsdGhpcy5fcnVubmluZz0hMSx0aGlzLl9sYXN0RGF0ZT12b2lkIDB9X25vdGlmeShlLHQsbixyKXtsZXQgaT10Lmxpc3RlbmVyc1tyXSxhPXQuZHVyYXRpb247aS5mb3JFYWNoKHI9PnIoe2NoYXJ0OmUsaW5pdGlhbDp0LmluaXRpYWwsbnVtU3RlcHM6YSxjdXJyZW50U3RlcDpNYXRoLm1pbihuLXQuc3RhcnQsYSl9KSl9X3JlZnJlc2goKXt0aGlzLl9yZXF1ZXN0fHw9KHRoaXMuX3J1bm5pbmc9ITAsV3QuY2FsbCh3aW5kb3csKCk9Pnt0aGlzLl91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0PW51bGwsdGhpcy5fcnVubmluZyYmdGhpcy5fcmVmcmVzaCgpfSkpfV91cGRhdGUoZT1EYXRlLm5vdygpKXtsZXQgdD0wO3RoaXMuX2NoYXJ0cy5mb3JFYWNoKChuLHIpPT57aWYoIW4ucnVubmluZ3x8IW4uaXRlbXMubGVuZ3RoKXJldHVybjtsZXQgaT1uLml0ZW1zLGE9aS5sZW5ndGgtMSxvPSExLHM7Zm9yKDthPj0wOy0tYSlzPWlbYV0scy5fYWN0aXZlPyhzLl90b3RhbD5uLmR1cmF0aW9uJiYobi5kdXJhdGlvbj1zLl90b3RhbCkscy50aWNrKGUpLG89ITApOihpW2FdPWlbaS5sZW5ndGgtMV0saS5wb3AoKSk7byYmKHIuZHJhdygpLHRoaXMuX25vdGlmeShyLG4sZSxgcHJvZ3Jlc3NgKSksaS5sZW5ndGh8fChuLnJ1bm5pbmc9ITEsdGhpcy5fbm90aWZ5KHIsbixlLGBjb21wbGV0ZWApLG4uaW5pdGlhbD0hMSksdCs9aS5sZW5ndGh9KSx0aGlzLl9sYXN0RGF0ZT1lLHQ9PT0wJiYodGhpcy5fcnVubmluZz0hMSl9X2dldEFuaW1zKGUpe2xldCB0PXRoaXMuX2NoYXJ0cyxuPXQuZ2V0KGUpO3JldHVybiBufHwobj17cnVubmluZzohMSxpbml0aWFsOiEwLGl0ZW1zOltdLGxpc3RlbmVyczp7Y29tcGxldGU6W10scHJvZ3Jlc3M6W119fSx0LnNldChlLG4pKSxufWxpc3RlbihlLHQsbil7dGhpcy5fZ2V0QW5pbXMoZSkubGlzdGVuZXJzW3RdLnB1c2gobil9YWRkKGUsdCl7IXR8fCF0Lmxlbmd0aHx8dGhpcy5fZ2V0QW5pbXMoZSkuaXRlbXMucHVzaCguLi50KX1oYXMoZSl7cmV0dXJuIHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLmxlbmd0aD4wfXN0YXJ0KGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7dCYmKHQucnVubmluZz0hMCx0LnN0YXJ0PURhdGUubm93KCksdC5kdXJhdGlvbj10Lml0ZW1zLnJlZHVjZSgoZSx0KT0+TWF0aC5tYXgoZSx0Ll9kdXJhdGlvbiksMCksdGhpcy5fcmVmcmVzaCgpKX1ydW5uaW5nKGUpe2lmKCF0aGlzLl9ydW5uaW5nKXJldHVybiExO2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7cmV0dXJuISghdHx8IXQucnVubmluZ3x8IXQuaXRlbXMubGVuZ3RoKX1zdG9wKGUpe2xldCB0PXRoaXMuX2NoYXJ0cy5nZXQoZSk7aWYoIXR8fCF0Lml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IG49dC5pdGVtcyxyPW4ubGVuZ3RoLTE7Zm9yKDtyPj0wOy0tciluW3JdLmNhbmNlbCgpO3QuaXRlbXM9W10sdGhpcy5fbm90aWZ5KGUsdCxEYXRlLm5vdygpLGBjb21wbGV0ZWApfXJlbW92ZShlKXtyZXR1cm4gdGhpcy5fY2hhcnRzLmRlbGV0ZShlKX19LG9pPWB0cmFuc3BhcmVudGAsc2k9e2Jvb2xlYW4oZSx0LG4pe3JldHVybiBuPi41P3Q6ZX0sY29sb3IoZSx0LG4pe2xldCByPW5uKGV8fG9pKSxpPXIudmFsaWQmJm5uKHR8fG9pKTtyZXR1cm4gaSYmaS52YWxpZD9pLm1peChyLG4pLmhleFN0cmluZygpOnR9LG51bWJlcihlLHQsbil7cmV0dXJuIGUrKHQtZSkqbn19LGNpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLHIpe2xldCBpPXRbbl07cj1VbihbZS50byxyLGksZS5mcm9tXSk7bGV0IGE9VW4oW2UuZnJvbSxpLHJdKTt0aGlzLl9hY3RpdmU9ITAsdGhpcy5fZm49ZS5mbnx8c2lbZS50eXBlfHx0eXBlb2YgYV0sdGhpcy5fZWFzaW5nPWVuW2UuZWFzaW5nXXx8ZW4ubGluZWFyLHRoaXMuX3N0YXJ0PU1hdGguZmxvb3IoRGF0ZS5ub3coKSsoZS5kZWxheXx8MCkpLHRoaXMuX2R1cmF0aW9uPXRoaXMuX3RvdGFsPU1hdGguZmxvb3IoZS5kdXJhdGlvbiksdGhpcy5fbG9vcD0hIWUubG9vcCx0aGlzLl90YXJnZXQ9dCx0aGlzLl9wcm9wPW4sdGhpcy5fZnJvbT1hLHRoaXMuX3RvPXIsdGhpcy5fcHJvbWlzZXM9dm9pZCAwfWFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9dXBkYXRlKGUsdCxuKXtpZih0aGlzLl9hY3RpdmUpe3RoaXMuX25vdGlmeSghMSk7bGV0IHI9dGhpcy5fdGFyZ2V0W3RoaXMuX3Byb3BdLGk9bi10aGlzLl9zdGFydCxhPXRoaXMuX2R1cmF0aW9uLWk7dGhpcy5fc3RhcnQ9bix0aGlzLl9kdXJhdGlvbj1NYXRoLmZsb29yKE1hdGgubWF4KGEsZS5kdXJhdGlvbikpLHRoaXMuX3RvdGFsKz1pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdG89VW4oW2UudG8sdCxyLGUuZnJvbV0pLHRoaXMuX2Zyb209VW4oW2UuZnJvbSxyLHRdKX19Y2FuY2VsKCl7dGhpcy5fYWN0aXZlJiYodGhpcy50aWNrKERhdGUubm93KCkpLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9ub3RpZnkoITEpKX10aWNrKGUpe2xldCB0PWUtdGhpcy5fc3RhcnQsbj10aGlzLl9kdXJhdGlvbixyPXRoaXMuX3Byb3AsaT10aGlzLl9mcm9tLGE9dGhpcy5fbG9vcCxvPXRoaXMuX3RvLHM7aWYodGhpcy5fYWN0aXZlPWkhPT1vJiYoYXx8dDxuKSwhdGhpcy5fYWN0aXZlKXt0aGlzLl90YXJnZXRbcl09byx0aGlzLl9ub3RpZnkoITApO3JldHVybn1pZih0PDApe3RoaXMuX3RhcmdldFtyXT1pO3JldHVybn1zPXQvbiUyLHM9YSYmcz4xPzItczpzLHM9dGhpcy5fZWFzaW5nKE1hdGgubWluKDEsTWF0aC5tYXgoMCxzKSkpLHRoaXMuX3RhcmdldFtyXT10aGlzLl9mbihpLG8scyl9d2FpdCgpe2xldCBlPXRoaXMuX3Byb21pc2VzfHw9W107cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57ZS5wdXNoKHtyZXM6dCxyZWo6bn0pfSl9X25vdGlmeShlKXtsZXQgdD1lP2ByZXNgOmByZWpgLG49dGhpcy5fcHJvbWlzZXN8fFtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV1bdF0oKX19LGxpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fY2hhcnQ9ZSx0aGlzLl9wcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5jb25maWd1cmUodCl9Y29uZmlndXJlKGUpe2lmKCFOKGUpKXJldHVybjtsZXQgdD1PYmplY3Qua2V5cyhHLmFuaW1hdGlvbiksbj10aGlzLl9wcm9wZXJ0aWVzO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmZvckVhY2gocj0+e2xldCBpPWVbcl07aWYoIU4oaSkpcmV0dXJuO2xldCBhPXt9O2ZvcihsZXQgZSBvZiB0KWFbZV09aVtlXTsoTShpLnByb3BlcnRpZXMpJiZpLnByb3BlcnRpZXN8fFtyXSkuZm9yRWFjaChlPT57KGU9PT1yfHwhbi5oYXMoZSkpJiZuLnNldChlLGEpfSl9KX1fYW5pbWF0ZU9wdGlvbnMoZSx0KXtsZXQgbj10Lm9wdGlvbnMscj1kaShlLG4pO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMocixuKTtyZXR1cm4gbi4kc2hhcmVkJiZ1aShlLm9wdGlvbnMuJGFuaW1hdGlvbnMsbikudGhlbigoKT0+e2Uub3B0aW9ucz1ufSwoKT0+e30pLGl9X2NyZWF0ZUFuaW1hdGlvbnMoZSx0KXtsZXQgbj10aGlzLl9wcm9wZXJ0aWVzLHI9W10saT1lLiRhbmltYXRpb25zfHw9e30sYT1PYmplY3Qua2V5cyh0KSxvPURhdGUubm93KCkscztmb3Iocz1hLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgYz1hW3NdO2lmKGMuY2hhckF0KDApPT09YCRgKWNvbnRpbnVlO2lmKGM9PT1gb3B0aW9uc2Ape3IucHVzaCguLi50aGlzLl9hbmltYXRlT3B0aW9ucyhlLHQpKTtjb250aW51ZX1sZXQgbD10W2NdLHU9aVtjXSxkPW4uZ2V0KGMpO2lmKHUpe2lmKGQmJnUuYWN0aXZlKCkpe3UudXBkYXRlKGQsbCxvKTtjb250aW51ZX11LmNhbmNlbCgpfWlmKCFkfHwhZC5kdXJhdGlvbil7ZVtjXT1sO2NvbnRpbnVlfWlbY109dT1uZXcgY2koZCxlLGMsbCksci5wdXNoKHUpfXJldHVybiByfXVwZGF0ZShlLHQpe2lmKHRoaXMuX3Byb3BlcnRpZXMuc2l6ZT09PTApe09iamVjdC5hc3NpZ24oZSx0KTtyZXR1cm59bGV0IG49dGhpcy5fY3JlYXRlQW5pbWF0aW9ucyhlLHQpO2lmKG4ubGVuZ3RoKXJldHVybiBZLmFkZCh0aGlzLl9jaGFydCxuKSwhMH19O2Z1bmN0aW9uIHVpKGUsdCl7bGV0IG49W10scj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKyl7bGV0IGk9ZVtyW3RdXTtpJiZpLmFjdGl2ZSgpJiZuLnB1c2goaS53YWl0KCkpfXJldHVybiBQcm9taXNlLmFsbChuKX1mdW5jdGlvbiBkaShlLHQpe2lmKCF0KXJldHVybjtsZXQgbj1lLm9wdGlvbnM7aWYoIW4pe2Uub3B0aW9ucz10O3JldHVybn1yZXR1cm4gbi4kc2hhcmVkJiYoZS5vcHRpb25zPW49T2JqZWN0LmFzc2lnbih7fSxuLHskc2hhcmVkOiExLCRhbmltYXRpb25zOnt9fSkpLG59ZnVuY3Rpb24gZmkoZSx0KXtsZXQgbj1lJiZlLm9wdGlvbnN8fHt9LHI9bi5yZXZlcnNlLGk9bi5taW49PT12b2lkIDA/dDowLGE9bi5tYXg9PT12b2lkIDA/dDowO3JldHVybntzdGFydDpyP2E6aSxlbmQ6cj9pOmF9fWZ1bmN0aW9uIHBpKGUsdCxuKXtpZihuPT09ITEpcmV0dXJuITE7bGV0IHI9ZmkoZSxuKSxpPWZpKHQsbik7cmV0dXJue3RvcDppLmVuZCxyaWdodDpyLmVuZCxib3R0b206aS5zdGFydCxsZWZ0OnIuc3RhcnR9fWZ1bmN0aW9uIG1pKGUpe2xldCB0LG4scixpO3JldHVybiBOKGUpPyh0PWUudG9wLG49ZS5yaWdodCxyPWUuYm90dG9tLGk9ZS5sZWZ0KTp0PW49cj1pPWUse3RvcDp0LHJpZ2h0Om4sYm90dG9tOnIsbGVmdDppLGRpc2FibGVkOmU9PT0hMX19ZnVuY3Rpb24gaGkoZSx0KXtsZXQgbj1bXSxyPWUuX2dldFNvcnRlZERhdGFzZXRNZXRhcyh0KSxpLGE7Zm9yKGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpbi5wdXNoKHJbaV0uaW5kZXgpO3JldHVybiBufWZ1bmN0aW9uIGdpKGUsdCxuLHI9e30pe2xldCBpPWUua2V5cyxhPXIubW9kZT09PWBzaW5nbGVgLG8scyxjLGw7aWYodD09PW51bGwpcmV0dXJuO2xldCB1PSExO2ZvcihvPTAscz1pLmxlbmd0aDtvPHM7KytvKXtpZihjPStpW29dLGM9PT1uKXtpZih1PSEwLHIuYWxsKWNvbnRpbnVlO2JyZWFrfWw9ZS52YWx1ZXNbY10sUChsKSYmKGF8fHQ9PT0wfHx5dCh0KT09PXl0KGwpKSYmKHQrPWwpfXJldHVybiF1JiYhci5hbGw/MDp0fWZ1bmN0aW9uIF9pKGUsdCl7bGV0e2lTY2FsZTpuLHZTY2FsZTpyfT10LGk9bi5heGlzPT09YHhgP2B4YDpgeWAsYT1yLmF4aXM9PT1geGA/YHhgOmB5YCxvPU9iamVjdC5rZXlzKGUpLHM9QXJyYXkoby5sZW5ndGgpLGMsbCx1O2ZvcihjPTAsbD1vLmxlbmd0aDtjPGw7KytjKXU9b1tjXSxzW2NdPXtbaV06dSxbYV06ZVt1XX07cmV0dXJuIHN9ZnVuY3Rpb24gdmkoZSx0KXtsZXQgbj1lJiZlLm9wdGlvbnMuc3RhY2tlZDtyZXR1cm4gbnx8bj09PXZvaWQgMCYmdC5zdGFjayE9PXZvaWQgMH1mdW5jdGlvbiB5aShlLHQsbil7cmV0dXJuYCR7ZS5pZH0uJHt0LmlkfS4ke24uc3RhY2t8fG4udHlwZX1gfWZ1bmN0aW9uIGJpKGUpe2xldHttaW46dCxtYXg6bixtaW5EZWZpbmVkOnIsbWF4RGVmaW5lZDppfT1lLmdldFVzZXJCb3VuZHMoKTtyZXR1cm57bWluOnI/dDotMS8wLG1heDppP246MS8wfX1mdW5jdGlvbiB4aShlLHQsbil7bGV0IHI9ZVt0XXx8KGVbdF09e30pO3JldHVybiByW25dfHwocltuXT17fSl9ZnVuY3Rpb24gU2koZSx0LG4scil7Zm9yKGxldCBpIG9mIHQuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMocikucmV2ZXJzZSgpKXtsZXQgdD1lW2kuaW5kZXhdO2lmKG4mJnQ+MHx8IW4mJnQ8MClyZXR1cm4gaS5pbmRleH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDaShlLHQpe2xldHtjaGFydDpuLF9jYWNoZWRNZXRhOnJ9PWUsaT1uLl9zdGFja3N8fD17fSx7aVNjYWxlOmEsdlNjYWxlOm8saW5kZXg6c309cixjPWEuYXhpcyxsPW8uYXhpcyx1PXlpKGEsbyxyKSxkPXQubGVuZ3RoLGY7Zm9yKGxldCBlPTA7ZTxkOysrZSl7bGV0IG49dFtlXSx7W2NdOmEsW2xdOmR9PW4scD1uLl9zdGFja3N8fD17fTtmPXBbbF09eGkoaSx1LGEpLGZbc109ZCxmLl90b3A9U2koZixvLCEwLHIudHlwZSksZi5fYm90dG9tPVNpKGYsbywhMSxyLnR5cGUpO2xldCBtPWYuX3Zpc3VhbFZhbHVlc3x8KGYuX3Zpc3VhbFZhbHVlcz17fSk7bVtzXT1kfX1mdW5jdGlvbiB3aShlLHQpe2xldCBuPWUuc2NhbGVzO3JldHVybiBPYmplY3Qua2V5cyhuKS5maWx0ZXIoZT0+bltlXS5heGlzPT09dCkuc2hpZnQoKX1mdW5jdGlvbiBUaShlLHQpe3JldHVybiBHbihlLHthY3RpdmU6ITEsZGF0YXNldDp2b2lkIDAsZGF0YXNldEluZGV4OnQsaW5kZXg6dCxtb2RlOmBkZWZhdWx0YCx0eXBlOmBkYXRhc2V0YH0pfWZ1bmN0aW9uIEVpKGUsdCxuKXtyZXR1cm4gR24oZSx7YWN0aXZlOiExLGRhdGFJbmRleDp0LHBhcnNlZDp2b2lkIDAscmF3OnZvaWQgMCxlbGVtZW50Om4saW5kZXg6dCxtb2RlOmBkZWZhdWx0YCx0eXBlOmBkYXRhYH0pfWZ1bmN0aW9uIERpKGUsdCl7bGV0IG49ZS5jb250cm9sbGVyLmluZGV4LHI9ZS52U2NhbGUmJmUudlNjYWxlLmF4aXM7aWYocil7dHx8PWUuX3BhcnNlZDtmb3IobGV0IGUgb2YgdCl7bGV0IHQ9ZS5fc3RhY2tzO2lmKCF0fHx0W3JdPT09dm9pZCAwfHx0W3JdW25dPT09dm9pZCAwKXJldHVybjtkZWxldGUgdFtyXVtuXSx0W3JdLl92aXN1YWxWYWx1ZXMhPT12b2lkIDAmJnRbcl0uX3Zpc3VhbFZhbHVlc1tuXSE9PXZvaWQgMCYmZGVsZXRlIHRbcl0uX3Zpc3VhbFZhbHVlc1tuXX19fXZhciBPaT1lPT5lPT09YHJlc2V0YHx8ZT09PWBub25lYCxraT0oZSx0KT0+dD9lOk9iamVjdC5hc3NpZ24oe30sZSksQWk9KGUsdCxuKT0+ZSYmIXQuaGlkZGVuJiZ0Ll9zdGFja2VkJiZ7a2V5czpoaShuLCEwKSx2YWx1ZXM6bnVsbH0samk9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPXt9O3N0YXRpYyBkYXRhc2V0RWxlbWVudFR5cGU9bnVsbDtzdGF0aWMgZGF0YUVsZW1lbnRUeXBlPW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNoYXJ0PWUsdGhpcy5fY3R4PWUuY3R4LHRoaXMuaW5kZXg9dCx0aGlzLl9jYWNoZWREYXRhT3B0cz17fSx0aGlzLl9jYWNoZWRNZXRhPXRoaXMuZ2V0TWV0YSgpLHRoaXMuX3R5cGU9dGhpcy5fY2FjaGVkTWV0YS50eXBlLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5fcGFyc2luZz0hMSx0aGlzLl9kYXRhPXZvaWQgMCx0aGlzLl9vYmplY3REYXRhPXZvaWQgMCx0aGlzLl9zaGFyZWRPcHRpb25zPXZvaWQgMCx0aGlzLl9kcmF3U3RhcnQ9dm9pZCAwLHRoaXMuX2RyYXdDb3VudD12b2lkIDAsdGhpcy5lbmFibGVPcHRpb25TaGFyaW5nPSExLHRoaXMuc3VwcG9ydHNEZWNpbWF0aW9uPSExLHRoaXMuJGNvbnRleHQ9dm9pZCAwLHRoaXMuX3N5bmNMaXN0PVtdLHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlPW5ldy50YXJnZXQuZGF0YXNldEVsZW1lbnRUeXBlLHRoaXMuZGF0YUVsZW1lbnRUeXBlPW5ldy50YXJnZXQuZGF0YUVsZW1lbnRUeXBlLHRoaXMuaW5pdGlhbGl6ZSgpfWluaXRpYWxpemUoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuY29uZmlndXJlKCksdGhpcy5saW5rU2NhbGVzKCksZS5fc3RhY2tlZD12aShlLnZTY2FsZSxlKSx0aGlzLmFkZEVsZW1lbnRzKCksdGhpcy5vcHRpb25zLmZpbGwmJiF0aGlzLmNoYXJ0LmlzUGx1Z2luRW5hYmxlZChgZmlsbGVyYCkmJmNvbnNvbGUud2FybihgVHJpZWQgdG8gdXNlIHRoZSAnZmlsbCcgb3B0aW9uIHdpdGhvdXQgdGhlICdGaWxsZXInIHBsdWdpbiBlbmFibGVkLiBQbGVhc2UgaW1wb3J0IGFuZCByZWdpc3RlciB0aGUgJ0ZpbGxlcicgcGx1Z2luIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IGRpc2FibGVkIGluIHRoZSBvcHRpb25zYCl9dXBkYXRlSW5kZXgoZSl7dGhpcy5pbmRleCE9PWUmJkRpKHRoaXMuX2NhY2hlZE1ldGEpLHRoaXMuaW5kZXg9ZX1saW5rU2NhbGVzKCl7bGV0IGU9dGhpcy5jaGFydCx0PXRoaXMuX2NhY2hlZE1ldGEsbj10aGlzLmdldERhdGFzZXQoKSxyPShlLHQsbixyKT0+ZT09PWB4YD90OmU9PT1gcmA/cjpuLGk9dC54QXhpc0lEPUkobi54QXhpc0lELHdpKGUsYHhgKSksYT10LnlBeGlzSUQ9SShuLnlBeGlzSUQsd2koZSxgeWApKSxvPXQuckF4aXNJRD1JKG4uckF4aXNJRCx3aShlLGByYCkpLHM9dC5pbmRleEF4aXMsYz10LmlBeGlzSUQ9cihzLGksYSxvKSxsPXQudkF4aXNJRD1yKHMsYSxpLG8pO3QueFNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChpKSx0LnlTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoYSksdC5yU2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKG8pLHQuaVNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChjKSx0LnZTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQobCl9Z2V0RGF0YXNldCgpe3JldHVybiB0aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbdGhpcy5pbmRleF19Z2V0TWV0YSgpe3JldHVybiB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKHRoaXMuaW5kZXgpfWdldFNjYWxlRm9ySWQoZSl7cmV0dXJuIHRoaXMuY2hhcnQuc2NhbGVzW2VdfV9nZXRPdGhlclNjYWxlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGE7cmV0dXJuIGU9PT10LmlTY2FsZT90LnZTY2FsZTp0LmlTY2FsZX1yZXNldCgpe3RoaXMuX3VwZGF0ZShgcmVzZXRgKX1fZGVzdHJveSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YSYmSHQodGhpcy5fZGF0YSx0aGlzKSxlLl9zdGFja2VkJiZEaShlKX1fZGF0YUNoZWNrKCl7bGV0IGU9dGhpcy5nZXREYXRhc2V0KCksdD1lLmRhdGF8fD1bXSxuPXRoaXMuX2RhdGE7aWYoTih0KSl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhPV9pKHQsZSl9ZWxzZSBpZihuIT09dCl7aWYobil7SHQobix0aGlzKTtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO0RpKGUpLGUuX3BhcnNlZD1bXX10JiZPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiZWdCh0LHRoaXMpLHRoaXMuX3N5bmNMaXN0PVtdLHRoaXMuX2RhdGE9dH19YWRkRWxlbWVudHMoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGFDaGVjaygpLHRoaXMuZGF0YXNldEVsZW1lbnRUeXBlJiYoZS5kYXRhc2V0PW5ldyB0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSl9YnVpbGRPclVwZGF0ZUVsZW1lbnRzKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEsbj10aGlzLmdldERhdGFzZXQoKSxyPSExO3RoaXMuX2RhdGFDaGVjaygpO2xldCBpPXQuX3N0YWNrZWQ7dC5fc3RhY2tlZD12aSh0LnZTY2FsZSx0KSx0LnN0YWNrIT09bi5zdGFjayYmKHI9ITAsRGkodCksdC5zdGFjaz1uLnN0YWNrKSx0aGlzLl9yZXN5bmNFbGVtZW50cyhlKSwocnx8aSE9PXQuX3N0YWNrZWQpJiYoQ2kodGhpcyx0Ll9wYXJzZWQpLHQuX3N0YWNrZWQ9dmkodC52U2NhbGUsdCkpfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMuY2hhcnQuY29uZmlnLHQ9ZS5kYXRhc2V0U2NvcGVLZXlzKHRoaXMuX3R5cGUpLG49ZS5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksdCwhMCk7dGhpcy5vcHRpb25zPWUuY3JlYXRlUmVzb2x2ZXIobix0aGlzLmdldENvbnRleHQoKSksdGhpcy5fcGFyc2luZz10aGlzLm9wdGlvbnMucGFyc2luZyx0aGlzLl9jYWNoZWREYXRhT3B0cz17fX1wYXJzZShlLHQpe2xldHtfY2FjaGVkTWV0YTpuLF9kYXRhOnJ9PXRoaXMse2lTY2FsZTppLF9zdGFja2VkOmF9PW4sbz1pLmF4aXMscz1lPT09MCYmdD09PXIubGVuZ3RofHxuLl9zb3J0ZWQsYz1lPjAmJm4uX3BhcnNlZFtlLTFdLGwsdSxkO2lmKHRoaXMuX3BhcnNpbmc9PT0hMSluLl9wYXJzZWQ9cixuLl9zb3J0ZWQ9ITAsZD1yO2Vsc2V7ZD1NKHJbZV0pP3RoaXMucGFyc2VBcnJheURhdGEobixyLGUsdCk6TihyW2VdKT90aGlzLnBhcnNlT2JqZWN0RGF0YShuLHIsZSx0KTp0aGlzLnBhcnNlUHJpbWl0aXZlRGF0YShuLHIsZSx0KTtsZXQgaT0oKT0+dVtvXT09PW51bGx8fGMmJnVbb108Y1tvXTtmb3IobD0wO2w8dDsrK2wpbi5fcGFyc2VkW2wrZV09dT1kW2xdLHMmJihpKCkmJihzPSExKSxjPXUpO24uX3NvcnRlZD1zfWEmJkNpKHRoaXMsZCl9cGFyc2VQcmltaXRpdmVEYXRhKGUsdCxuLHIpe2xldHtpU2NhbGU6aSx2U2NhbGU6YX09ZSxvPWkuYXhpcyxzPWEuYXhpcyxjPWkuZ2V0TGFiZWxzKCksbD1pPT09YSx1PUFycmF5KHIpLGQsZixwO2ZvcihkPTAsZj1yO2Q8ZjsrK2QpcD1kK24sdVtkXT17W29dOmx8fGkucGFyc2UoY1twXSxwKSxbc106YS5wYXJzZSh0W3BdLHApfTtyZXR1cm4gdX1wYXJzZUFycmF5RGF0YShlLHQsbixyKXtsZXR7eFNjYWxlOmkseVNjYWxlOmF9PWUsbz1BcnJheShyKSxzLGMsbCx1O2ZvcihzPTAsYz1yO3M8YzsrK3MpbD1zK24sdT10W2xdLG9bc109e3g6aS5wYXJzZSh1WzBdLGwpLHk6YS5wYXJzZSh1WzFdLGwpfTtyZXR1cm4gb31wYXJzZU9iamVjdERhdGEoZSx0LG4scil7bGV0e3hTY2FsZTppLHlTY2FsZTphfT1lLHt4QXhpc0tleTpvPWB4YCx5QXhpc0tleTpzPWB5YH09dGhpcy5fcGFyc2luZyxjPUFycmF5KHIpLGwsdSxkLGY7Zm9yKGw9MCx1PXI7bDx1OysrbClkPWwrbixmPXRbZF0sY1tsXT17eDppLnBhcnNlKHN0KGYsbyksZCkseTphLnBhcnNlKHN0KGYscyksZCl9O3JldHVybiBjfWdldFBhcnNlZChlKXtyZXR1cm4gdGhpcy5fY2FjaGVkTWV0YS5fcGFyc2VkW2VdfWdldERhdGFFbGVtZW50KGUpe3JldHVybiB0aGlzLl9jYWNoZWRNZXRhLmRhdGFbZV19YXBwbHlTdGFjayhlLHQsbil7bGV0IHI9dGhpcy5jaGFydCxpPXRoaXMuX2NhY2hlZE1ldGEsYT10W2UuYXhpc107cmV0dXJuIGdpKHtrZXlzOmhpKHIsITApLHZhbHVlczp0Ll9zdGFja3NbZS5heGlzXS5fdmlzdWFsVmFsdWVzfSxhLGkuaW5kZXgse21vZGU6bn0pfXVwZGF0ZVJhbmdlRnJvbVBhcnNlZChlLHQsbixyKXtsZXQgaT1uW3QuYXhpc10sYT1pPT09bnVsbD9OYU46aSxvPXImJm4uX3N0YWNrc1t0LmF4aXNdO3ImJm8mJihyLnZhbHVlcz1vLGE9Z2kocixpLHRoaXMuX2NhY2hlZE1ldGEuaW5kZXgpKSxlLm1pbj1NYXRoLm1pbihlLm1pbixhKSxlLm1heD1NYXRoLm1heChlLm1heCxhKX1nZXRNaW5NYXgoZSx0KXtsZXQgbj10aGlzLl9jYWNoZWRNZXRhLHI9bi5fcGFyc2VkLGk9bi5fc29ydGVkJiZlPT09bi5pU2NhbGUsYT1yLmxlbmd0aCxvPXRoaXMuX2dldE90aGVyU2NhbGUoZSkscz1BaSh0LG4sdGhpcy5jaGFydCksYz17bWluOjEvMCxtYXg6LTEvMH0se21pbjpsLG1heDp1fT1iaShvKSxkLGY7ZnVuY3Rpb24gcCgpe2Y9cltkXTtsZXQgdD1mW28uYXhpc107cmV0dXJuIVAoZltlLmF4aXNdKXx8bD50fHx1PHR9Zm9yKGQ9MDtkPGEmJiEoIXAoKSYmKHRoaXMudXBkYXRlUmFuZ2VGcm9tUGFyc2VkKGMsZSxmLHMpLGkpKTsrK2QpO2lmKGkpe2ZvcihkPWEtMTtkPj0wOy0tZClpZighcCgpKXt0aGlzLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChjLGUsZixzKTticmVha319cmV0dXJuIGN9Z2V0QWxsUGFyc2VkVmFsdWVzKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZCxuPVtdLHIsaSxhO2ZvcihyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWE9dFtyXVtlLmF4aXNdLFAoYSkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXRNYXhPdmVyZmxvdygpe3JldHVybiExfWdldExhYmVsQW5kVmFsdWUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YSxuPXQuaVNjYWxlLHI9dC52U2NhbGUsaT10aGlzLmdldFBhcnNlZChlKTtyZXR1cm57bGFiZWw6bj9gYCtuLmdldExhYmVsRm9yVmFsdWUoaVtuLmF4aXNdKTpgYCx2YWx1ZTpyP2BgK3IuZ2V0TGFiZWxGb3JWYWx1ZShpW3IuYXhpc10pOmBgfX1fdXBkYXRlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGE7dGhpcy51cGRhdGUoZXx8YGRlZmF1bHRgKSx0Ll9jbGlwPW1pKEkodGhpcy5vcHRpb25zLmNsaXAscGkodC54U2NhbGUsdC55U2NhbGUsdGhpcy5nZXRNYXhPdmVyZmxvdygpKSkpfXVwZGF0ZShlKXt9ZHJhdygpe2xldCBlPXRoaXMuX2N0eCx0PXRoaXMuY2hhcnQsbj10aGlzLl9jYWNoZWRNZXRhLHI9bi5kYXRhfHxbXSxpPXQuY2hhcnRBcmVhLGE9W10sbz10aGlzLl9kcmF3U3RhcnR8fDAscz10aGlzLl9kcmF3Q291bnR8fHIubGVuZ3RoLW8sYz10aGlzLm9wdGlvbnMuZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AsbDtmb3Iobi5kYXRhc2V0JiZuLmRhdGFzZXQuZHJhdyhlLGksbyxzKSxsPW87bDxvK3M7KytsKXtsZXQgdD1yW2xdO3QuaGlkZGVufHwodC5hY3RpdmUmJmM/YS5wdXNoKHQpOnQuZHJhdyhlLGkpKX1mb3IobD0wO2w8YS5sZW5ndGg7KytsKWFbbF0uZHJhdyhlLGkpfWdldFN0eWxlKGUsdCl7bGV0IG49dD9gYWN0aXZlYDpgZGVmYXVsdGA7cmV0dXJuIGU9PT12b2lkIDAmJnRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldD90aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMobik6dGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGV8fDAsbil9Z2V0Q29udGV4dChlLHQsbil7bGV0IHI9dGhpcy5nZXREYXRhc2V0KCksaTtpZihlPj0wJiZlPHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEuZGF0YVtlXTtpPXQuJGNvbnRleHR8fD1FaSh0aGlzLmdldENvbnRleHQoKSxlLHQpLGkucGFyc2VkPXRoaXMuZ2V0UGFyc2VkKGUpLGkucmF3PXIuZGF0YVtlXSxpLmluZGV4PWkuZGF0YUluZGV4PWV9ZWxzZSBpPXRoaXMuJGNvbnRleHR8fD1UaSh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzLmluZGV4KSxpLmRhdGFzZXQ9cixpLmluZGV4PWkuZGF0YXNldEluZGV4PXRoaXMuaW5kZXg7cmV0dXJuIGkuYWN0aXZlPSEhdCxpLm1vZGU9bixpfXJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMoZSl7cmV0dXJuIHRoaXMuX3Jlc29sdmVFbGVtZW50T3B0aW9ucyh0aGlzLmRhdGFzZXRFbGVtZW50VHlwZS5pZCxlKX1yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGUsdCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVFbGVtZW50T3B0aW9ucyh0aGlzLmRhdGFFbGVtZW50VHlwZS5pZCx0LGUpfV9yZXNvbHZlRWxlbWVudE9wdGlvbnMoZSx0PWBkZWZhdWx0YCxuKXtsZXQgcj10PT09YGFjdGl2ZWAsaT10aGlzLl9jYWNoZWREYXRhT3B0cyxhPWUrYC1gK3Qsbz1pW2FdLHM9dGhpcy5lbmFibGVPcHRpb25TaGFyaW5nJiZsdChuKTtpZihvKXJldHVybiBraShvLHMpO2xldCBjPXRoaXMuY2hhcnQuY29uZmlnLGw9Yy5kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyh0aGlzLl90eXBlLGUpLHU9cj9bYCR7ZX1Ib3ZlcmAsYGhvdmVyYCxlLGBgXTpbZSxgYF0sZD1jLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSxsKSxmPU9iamVjdC5rZXlzKEcuZWxlbWVudHNbZV0pLHA9Yy5yZXNvbHZlTmFtZWRPcHRpb25zKGQsZiwoKT0+dGhpcy5nZXRDb250ZXh0KG4scix0KSx1KTtyZXR1cm4gcC4kc2hhcmVkJiYocC4kc2hhcmVkPXMsaVthXT1PYmplY3QuZnJlZXplKGtpKHAscykpKSxwfV9yZXNvbHZlQW5pbWF0aW9ucyhlLHQsbil7bGV0IHI9dGhpcy5jaGFydCxpPXRoaXMuX2NhY2hlZERhdGFPcHRzLGE9YGFuaW1hdGlvbi0ke3R9YCxvPWlbYV07aWYobylyZXR1cm4gbztsZXQgcztpZihyLm9wdGlvbnMuYW5pbWF0aW9uIT09ITEpe2xldCByPXRoaXMuY2hhcnQuY29uZmlnLGk9ci5kYXRhc2V0QW5pbWF0aW9uU2NvcGVLZXlzKHRoaXMuX3R5cGUsdCksYT1yLmdldE9wdGlvblNjb3Blcyh0aGlzLmdldERhdGFzZXQoKSxpKTtzPXIuY3JlYXRlUmVzb2x2ZXIoYSx0aGlzLmdldENvbnRleHQoZSxuLHQpKX1sZXQgYz1uZXcgbGkocixzJiZzLmFuaW1hdGlvbnMpO3JldHVybiBzJiZzLl9jYWNoZWFibGUmJihpW2FdPU9iamVjdC5mcmVlemUoYykpLGN9Z2V0U2hhcmVkT3B0aW9ucyhlKXtpZihlLiRzaGFyZWQpcmV0dXJuIHRoaXMuX3NoYXJlZE9wdGlvbnN8fD1PYmplY3QuYXNzaWduKHt9LGUpfWluY2x1ZGVPcHRpb25zKGUsdCl7cmV0dXJuIXR8fE9pKGUpfHx0aGlzLmNoYXJ0Ll9hbmltYXRpb25zRGlzYWJsZWR9X2dldFNoYXJlZE9wdGlvbnMoZSx0KXtsZXQgbj10aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoZSx0KSxyPXRoaXMuX3NoYXJlZE9wdGlvbnMsaT10aGlzLmdldFNoYXJlZE9wdGlvbnMobiksYT10aGlzLmluY2x1ZGVPcHRpb25zKHQsaSl8fGkhPT1yO3JldHVybiB0aGlzLnVwZGF0ZVNoYXJlZE9wdGlvbnMoaSx0LG4pLHtzaGFyZWRPcHRpb25zOmksaW5jbHVkZU9wdGlvbnM6YX19dXBkYXRlRWxlbWVudChlLHQsbixyKXtPaShyKT9PYmplY3QuYXNzaWduKGUsbik6dGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnModCxyKS51cGRhdGUoZSxuKX11cGRhdGVTaGFyZWRPcHRpb25zKGUsdCxuKXtlJiYhT2kodCkmJnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKHZvaWQgMCx0KS51cGRhdGUoZSxuKX1fc2V0U3R5bGUoZSx0LG4scil7ZS5hY3RpdmU9cjtsZXQgaT10aGlzLmdldFN0eWxlKHQscik7dGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnModCxuLHIpLnVwZGF0ZShlLHtvcHRpb25zOiFyJiZ0aGlzLmdldFNoYXJlZE9wdGlvbnMoaSl8fGl9KX1yZW1vdmVIb3ZlclN0eWxlKGUsdCxuKXt0aGlzLl9zZXRTdHlsZShlLG4sYGFjdGl2ZWAsITEpfXNldEhvdmVyU3R5bGUoZSx0LG4pe3RoaXMuX3NldFN0eWxlKGUsbixgYWN0aXZlYCwhMCl9X3JlbW92ZURhdGFzZXRIb3ZlclN0eWxlKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O2UmJnRoaXMuX3NldFN0eWxlKGUsdm9pZCAwLGBhY3RpdmVgLCExKX1fc2V0RGF0YXNldEhvdmVyU3R5bGUoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ7ZSYmdGhpcy5fc2V0U3R5bGUoZSx2b2lkIDAsYGFjdGl2ZWAsITApfV9yZXN5bmNFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9kYXRhLG49dGhpcy5fY2FjaGVkTWV0YS5kYXRhO2ZvcihsZXRbZSx0LG5db2YgdGhpcy5fc3luY0xpc3QpdGhpc1tlXSh0LG4pO3RoaXMuX3N5bmNMaXN0PVtdO2xldCByPW4ubGVuZ3RoLGk9dC5sZW5ndGgsYT1NYXRoLm1pbihpLHIpO2EmJnRoaXMucGFyc2UoMCxhKSxpPnI/dGhpcy5faW5zZXJ0RWxlbWVudHMocixpLXIsZSk6aTxyJiZ0aGlzLl9yZW1vdmVFbGVtZW50cyhpLHItaSl9X2luc2VydEVsZW1lbnRzKGUsdCxuPSEwKXtsZXQgcj10aGlzLl9jYWNoZWRNZXRhLGk9ci5kYXRhLGE9ZSt0LG8scz1lPT57Zm9yKGUubGVuZ3RoKz10LG89ZS5sZW5ndGgtMTtvPj1hO28tLSllW29dPWVbby10XX07Zm9yKHMoaSksbz1lO288YTsrK28paVtvXT1uZXcgdGhpcy5kYXRhRWxlbWVudFR5cGU7dGhpcy5fcGFyc2luZyYmcyhyLl9wYXJzZWQpLHRoaXMucGFyc2UoZSx0KSxuJiZ0aGlzLnVwZGF0ZUVsZW1lbnRzKGksZSx0LGByZXNldGApfXVwZGF0ZUVsZW1lbnRzKGUsdCxuLHIpe31fcmVtb3ZlRWxlbWVudHMoZSx0KXtsZXQgbj10aGlzLl9jYWNoZWRNZXRhO2lmKHRoaXMuX3BhcnNpbmcpe2xldCByPW4uX3BhcnNlZC5zcGxpY2UoZSx0KTtuLl9zdGFja2VkJiZEaShuLHIpfW4uZGF0YS5zcGxpY2UoZSx0KX1fc3luYyhlKXtpZih0aGlzLl9wYXJzaW5nKXRoaXMuX3N5bmNMaXN0LnB1c2goZSk7ZWxzZXtsZXRbdCxuLHJdPWU7dGhpc1t0XShuLHIpfXRoaXMuY2hhcnQuX2RhdGFDaGFuZ2VzLnB1c2goW3RoaXMuaW5kZXgsLi4uZV0pfV9vbkRhdGFQdXNoKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aDt0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCx0aGlzLmdldERhdGFzZXQoKS5kYXRhLmxlbmd0aC1lLGVdKX1fb25EYXRhUG9wKCl7dGhpcy5fc3luYyhbYF9yZW1vdmVFbGVtZW50c2AsdGhpcy5fY2FjaGVkTWV0YS5kYXRhLmxlbmd0aC0xLDFdKX1fb25EYXRhU2hpZnQoKXt0aGlzLl9zeW5jKFtgX3JlbW92ZUVsZW1lbnRzYCwwLDFdKX1fb25EYXRhU3BsaWNlKGUsdCl7dCYmdGhpcy5fc3luYyhbYF9yZW1vdmVFbGVtZW50c2AsZSx0XSk7bGV0IG49YXJndW1lbnRzLmxlbmd0aC0yO24mJnRoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLGUsbl0pfV9vbkRhdGFVbnNoaWZ0KCl7dGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsMCxhcmd1bWVudHMubGVuZ3RoXSl9fSxNaT1jbGFzcyBleHRlbmRzIGppe3N0YXRpYyBpZD1gbGluZWA7c3RhdGljIGRlZmF1bHRzPXtkYXRhc2V0RWxlbWVudFR5cGU6YGxpbmVgLGRhdGFFbGVtZW50VHlwZTpgcG9pbnRgLHNob3dMaW5lOiEwLHNwYW5HYXBzOiExfTtzdGF0aWMgb3ZlcnJpZGVzPXtzY2FsZXM6e19pbmRleF86e3R5cGU6YGNhdGVnb3J5YH0sX3ZhbHVlXzp7dHlwZTpgbGluZWFyYH19fTtpbml0aWFsaXplKCl7dGhpcy5lbmFibGVPcHRpb25TaGFyaW5nPSEwLHRoaXMuc3VwcG9ydHNEZWNpbWF0aW9uPSEwLHN1cGVyLmluaXRpYWxpemUoKX11cGRhdGUoZSl7bGV0IHQ9dGhpcy5fY2FjaGVkTWV0YSx7ZGF0YXNldDpuLGRhdGE6cj1bXSxfZGF0YXNldDppfT10LGE9dGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkLHtzdGFydDpvLGNvdW50OnN9PVl0KHQscixhKTt0aGlzLl9kcmF3U3RhcnQ9byx0aGlzLl9kcmF3Q291bnQ9cyxYdCh0KSYmKG89MCxzPXIubGVuZ3RoKSxuLl9jaGFydD10aGlzLmNoYXJ0LG4uX2RhdGFzZXRJbmRleD10aGlzLmluZGV4LG4uX2RlY2ltYXRlZD0hIWkuX2RlY2ltYXRlZCxuLnBvaW50cz1yO2xldCBjPXRoaXMucmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyhlKTt0aGlzLm9wdGlvbnMuc2hvd0xpbmV8fChjLmJvcmRlcldpZHRoPTApLGMuc2VnbWVudD10aGlzLm9wdGlvbnMuc2VnbWVudCx0aGlzLnVwZGF0ZUVsZW1lbnQobix2b2lkIDAse2FuaW1hdGVkOiFhLG9wdGlvbnM6Y30sZSksdGhpcy51cGRhdGVFbGVtZW50cyhyLG8scyxlKX11cGRhdGVFbGVtZW50cyhlLHQsbixyKXtsZXQgaT1yPT09YHJlc2V0YCx7aVNjYWxlOmEsdlNjYWxlOm8sX3N0YWNrZWQ6cyxfZGF0YXNldDpjfT10aGlzLl9jYWNoZWRNZXRhLHtzaGFyZWRPcHRpb25zOmwsaW5jbHVkZU9wdGlvbnM6dX09dGhpcy5fZ2V0U2hhcmVkT3B0aW9ucyh0LHIpLGQ9YS5heGlzLGY9by5heGlzLHtzcGFuR2FwczpwLHNlZ21lbnQ6bX09dGhpcy5vcHRpb25zLGg9d3QocCk/cDoxLzAsZz10aGlzLmNoYXJ0Ll9hbmltYXRpb25zRGlzYWJsZWR8fGl8fHI9PT1gbm9uZWAsXz10K24sdj1lLmxlbmd0aCx5PXQ+MCYmdGhpcy5nZXRQYXJzZWQodC0xKTtmb3IobGV0IG49MDtuPHY7KytuKXtsZXQgcD1lW25dLHY9Zz9wOnt9O2lmKG48dHx8bj49Xyl7di5za2lwPSEwO2NvbnRpbnVlfWxldCBiPXRoaXMuZ2V0UGFyc2VkKG4pLHg9aihiW2ZdKSxTPXZbZF09YS5nZXRQaXhlbEZvclZhbHVlKGJbZF0sbiksQz12W2ZdPWl8fHg/by5nZXRCYXNlUGl4ZWwoKTpvLmdldFBpeGVsRm9yVmFsdWUocz90aGlzLmFwcGx5U3RhY2sobyxiLHMpOmJbZl0sbik7di5za2lwPWlzTmFOKFMpfHxpc05hTihDKXx8eCx2LnN0b3A9bj4wJiZNYXRoLmFicyhiW2RdLXlbZF0pPmgsbSYmKHYucGFyc2VkPWIsdi5yYXc9Yy5kYXRhW25dKSx1JiYodi5vcHRpb25zPWx8fHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhuLHAuYWN0aXZlP2BhY3RpdmVgOnIpKSxnfHx0aGlzLnVwZGF0ZUVsZW1lbnQocCxuLHYscikseT1ifX1nZXRNYXhPdmVyZmxvdygpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEsdD1lLmRhdGFzZXQsbj10Lm9wdGlvbnMmJnQub3B0aW9ucy5ib3JkZXJXaWR0aHx8MCxyPWUuZGF0YXx8W107aWYoIXIubGVuZ3RoKXJldHVybiBuO2xldCBpPXJbMF0uc2l6ZSh0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoMCkpLGE9cltyLmxlbmd0aC0xXS5zaXplKHRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhyLmxlbmd0aC0xKSk7cmV0dXJuIE1hdGgubWF4KG4saSxhKS8yfWRyYXcoKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO2UuZGF0YXNldC51cGRhdGVDb250cm9sUG9pbnRzKHRoaXMuY2hhcnQuY2hhcnRBcmVhLGUuaVNjYWxlLmF4aXMpLHN1cGVyLmRyYXcoKX19O2Z1bmN0aW9uIE5pKCl7dGhyb3cgRXJyb3IoYFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZDogQ2hlY2sgdGhhdCBhIGNvbXBsZXRlIGRhdGUgYWRhcHRlciBpcyBwcm92aWRlZC5gKX12YXIgUGk9e19kYXRlOmNsYXNzIGV7c3RhdGljIG92ZXJyaWRlKHQpe09iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9b3B0aW9ucztjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8e319aW5pdCgpe31mb3JtYXRzKCl7cmV0dXJuIE5pKCl9cGFyc2UoKXtyZXR1cm4gTmkoKX1mb3JtYXQoKXtyZXR1cm4gTmkoKX1hZGQoKXtyZXR1cm4gTmkoKX1kaWZmKCl7cmV0dXJuIE5pKCl9c3RhcnRPZigpe3JldHVybiBOaSgpfWVuZE9mKCl7cmV0dXJuIE5pKCl9fX07ZnVuY3Rpb24gRmkoZSx0LG4scil7bGV0e2NvbnRyb2xsZXI6aSxkYXRhOmEsX3NvcnRlZDpvfT1lLHM9aS5fY2FjaGVkTWV0YS5pU2NhbGUsYz1lLmRhdGFzZXQmJmUuZGF0YXNldC5vcHRpb25zP2UuZGF0YXNldC5vcHRpb25zLnNwYW5HYXBzOm51bGw7aWYocyYmdD09PXMuYXhpcyYmdCE9PWByYCYmbyYmYS5sZW5ndGgpe2xldCBvPXMuX3JldmVyc2VQaXhlbHM/UnQ6THQ7aWYoIXIpe2xldCByPW8oYSx0LG4pO2lmKGMpe2xldHt2U2NhbGU6dH09aS5fY2FjaGVkTWV0YSx7X3BhcnNlZDpufT1lLGE9bi5zbGljZSgwLHIubG8rMSkucmV2ZXJzZSgpLmZpbmRJbmRleChlPT4haihlW3QuYXhpc10pKTtyLmxvLT1NYXRoLm1heCgwLGEpO2xldCBvPW4uc2xpY2Uoci5oaSkuZmluZEluZGV4KGU9PiFqKGVbdC5heGlzXSkpO3IuaGkrPU1hdGgubWF4KDAsbyl9cmV0dXJuIHJ9aWYoaS5fc2hhcmVkT3B0aW9ucyl7bGV0IGU9YVswXSxyPXR5cGVvZiBlLmdldFJhbmdlPT1gZnVuY3Rpb25gJiZlLmdldFJhbmdlKHQpO2lmKHIpe2xldCBlPW8oYSx0LG4tciksaT1vKGEsdCxuK3IpO3JldHVybntsbzplLmxvLGhpOmkuaGl9fX19cmV0dXJue2xvOjAsaGk6YS5sZW5ndGgtMX19ZnVuY3Rpb24gSWkoZSx0LG4scixpKXtsZXQgYT1lLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxvPW5bdF07Zm9yKGxldCBlPTAsbj1hLmxlbmd0aDtlPG47KytlKXtsZXR7aW5kZXg6bixkYXRhOnN9PWFbZV0se2xvOmMsaGk6bH09RmkoYVtlXSx0LG8saSk7Zm9yKGxldCBlPWM7ZTw9bDsrK2Upe2xldCB0PXNbZV07dC5za2lwfHxyKHQsbixlKX19fWZ1bmN0aW9uIExpKGUpe2xldCB0PWUuaW5kZXhPZihgeGApIT09LTEsbj1lLmluZGV4T2YoYHlgKSE9PS0xO3JldHVybiBmdW5jdGlvbihlLHIpe2xldCBpPXQ/TWF0aC5hYnMoZS54LXIueCk6MCxhPW4/TWF0aC5hYnMoZS55LXIueSk6MDtyZXR1cm4gTWF0aC5zcXJ0KGkqKjIrYSoqMil9fWZ1bmN0aW9uIFJpKGUsdCxuLHIsaSl7bGV0IGE9W107cmV0dXJuIWkmJiFlLmlzUG9pbnRJbkFyZWEodCl8fElpKGUsbix0LGZ1bmN0aW9uKG4sbyxzKXshaSYmIUsobixlLmNoYXJ0QXJlYSwwKXx8bi5pblJhbmdlKHQueCx0LnkscikmJmEucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpvLGluZGV4OnN9KX0sITApLGF9ZnVuY3Rpb24gemkoZSx0LG4scil7bGV0IGk9W107ZnVuY3Rpb24gYShlLG4sYSl7bGV0e3N0YXJ0QW5nbGU6byxlbmRBbmdsZTpzfT1lLmdldFByb3BzKFtgc3RhcnRBbmdsZWAsYGVuZEFuZ2xlYF0scikse2FuZ2xlOmN9PUF0KGUse3g6dC54LHk6dC55fSk7TnQoYyxvLHMpJiZpLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6bixpbmRleDphfSl9cmV0dXJuIElpKGUsbix0LGEpLGl9ZnVuY3Rpb24gQmkoZSx0LG4scixpLGEpe2xldCBvPVtdLHM9TGkobiksYz0xLzA7ZnVuY3Rpb24gbChuLGwsdSl7bGV0IGQ9bi5pblJhbmdlKHQueCx0LnksaSk7aWYociYmIWQpcmV0dXJuO2xldCBmPW4uZ2V0Q2VudGVyUG9pbnQoaSk7aWYoIShhfHxlLmlzUG9pbnRJbkFyZWEoZikpJiYhZClyZXR1cm47bGV0IHA9cyh0LGYpO3A8Yz8obz1be2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6bCxpbmRleDp1fV0sYz1wKTpwPT09YyYmby5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX0pfXJldHVybiBJaShlLG4sdCxsKSxvfWZ1bmN0aW9uIFZpKGUsdCxuLHIsaSxhKXtyZXR1cm4hYSYmIWUuaXNQb2ludEluQXJlYSh0KT9bXTpuPT09YHJgJiYhcj96aShlLHQsbixpKTpCaShlLHQsbixyLGksYSl9ZnVuY3Rpb24gSGkoZSx0LG4scixpKXtsZXQgYT1bXSxvPW49PT1geGA/YGluWFJhbmdlYDpgaW5ZUmFuZ2VgLHM9ITE7cmV0dXJuIElpKGUsbix0LChlLHIsYyk9PntlW29dJiZlW29dKHRbbl0saSkmJihhLnB1c2goe2VsZW1lbnQ6ZSxkYXRhc2V0SW5kZXg6cixpbmRleDpjfSksc3x8PWUuaW5SYW5nZSh0LngsdC55LGkpKX0pLHImJiFzP1tdOmF9dmFyIFVpPXtldmFsdWF0ZUludGVyYWN0aW9uSXRlbXM6SWksbW9kZXM6e2luZGV4KGUsdCxuLHIpe2xldCBpPUFyKHQsZSksYT1uLmF4aXN8fGB4YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9SaShlLGksYSxyLG8pOlZpKGUsaSxhLCExLHIsbyksYz1bXTtyZXR1cm4gcy5sZW5ndGg/KGUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmZvckVhY2goZT0+e2xldCB0PXNbMF0uaW5kZXgsbj1lLmRhdGFbdF07biYmIW4uc2tpcCYmYy5wdXNoKHtlbGVtZW50Om4sZGF0YXNldEluZGV4OmUuaW5kZXgsaW5kZXg6dH0pfSksYyk6W119LGRhdGFzZXQoZSx0LG4scil7bGV0IGk9QXIodCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITEscz1uLmludGVyc2VjdD9SaShlLGksYSxyLG8pOlZpKGUsaSxhLCExLHIsbyk7aWYocy5sZW5ndGg+MCl7bGV0IHQ9c1swXS5kYXRhc2V0SW5kZXgsbj1lLmdldERhdGFzZXRNZXRhKHQpLmRhdGE7cz1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOysrZSlzLnB1c2goe2VsZW1lbnQ6bltlXSxkYXRhc2V0SW5kZXg6dCxpbmRleDplfSl9cmV0dXJuIHN9LHBvaW50KGUsdCxuLHIpe3JldHVybiBSaShlLEFyKHQsZSksbi5heGlzfHxgeHlgLHIsbi5pbmNsdWRlSW52aXNpYmxlfHwhMSl9LG5lYXJlc3QoZSx0LG4scil7bGV0IGk9QXIodCxlKSxhPW4uYXhpc3x8YHh5YCxvPW4uaW5jbHVkZUludmlzaWJsZXx8ITE7cmV0dXJuIFZpKGUsaSxhLG4uaW50ZXJzZWN0LHIsbyl9LHgoZSx0LG4scil7cmV0dXJuIEhpKGUsQXIodCxlKSxgeGAsbi5pbnRlcnNlY3Qscil9LHkoZSx0LG4scil7cmV0dXJuIEhpKGUsQXIodCxlKSxgeWAsbi5pbnRlcnNlY3Qscil9fX0sV2k9W2BsZWZ0YCxgdG9wYCxgcmlnaHRgLGBib3R0b21gXTtmdW5jdGlvbiBHaShlLHQpe3JldHVybiBlLmZpbHRlcihlPT5lLnBvcz09PXQpfWZ1bmN0aW9uIEtpKGUsdCl7cmV0dXJuIGUuZmlsdGVyKGU9PldpLmluZGV4T2YoZS5wb3MpPT09LTEmJmUuYm94LmF4aXM9PT10KX1mdW5jdGlvbiBxaShlLHQpe3JldHVybiBlLnNvcnQoKGUsbik9PntsZXQgcj10P246ZSxpPXQ/ZTpuO3JldHVybiByLndlaWdodD09PWkud2VpZ2h0P3IuaW5kZXgtaS5pbmRleDpyLndlaWdodC1pLndlaWdodH0pfWZ1bmN0aW9uIEppKGUpe2xldCB0PVtdLG4scixpLGEsbyxzO2ZvcihuPTAscj0oZXx8W10pLmxlbmd0aDtuPHI7KytuKWk9ZVtuXSx7cG9zaXRpb246YSxvcHRpb25zOntzdGFjazpvLHN0YWNrV2VpZ2h0OnM9MX19PWksdC5wdXNoKHtpbmRleDpuLGJveDppLHBvczphLGhvcml6b250YWw6aS5pc0hvcml6b250YWwoKSx3ZWlnaHQ6aS53ZWlnaHQsc3RhY2s6byYmYStvLHN0YWNrV2VpZ2h0OnN9KTtyZXR1cm4gdH1mdW5jdGlvbiBZaShlKXtsZXQgdD17fTtmb3IobGV0IG4gb2YgZSl7bGV0e3N0YWNrOmUscG9zOnIsc3RhY2tXZWlnaHQ6aX09bjtpZighZXx8IVdpLmluY2x1ZGVzKHIpKWNvbnRpbnVlO2xldCBhPXRbZV18fCh0W2VdPXtjb3VudDowLHBsYWNlZDowLHdlaWdodDowLHNpemU6MH0pO2EuY291bnQrKyxhLndlaWdodCs9aX1yZXR1cm4gdH1mdW5jdGlvbiBYaShlLHQpe2xldCBuPVlpKGUpLHt2Qm94TWF4V2lkdGg6cixoQm94TWF4SGVpZ2h0Oml9PXQsYSxvLHM7Zm9yKGE9MCxvPWUubGVuZ3RoO2E8bzsrK2Epe3M9ZVthXTtsZXR7ZnVsbFNpemU6b309cy5ib3gsYz1uW3Muc3RhY2tdLGw9YyYmcy5zdGFja1dlaWdodC9jLndlaWdodDtzLmhvcml6b250YWw/KHMud2lkdGg9bD9sKnI6byYmdC5hdmFpbGFibGVXaWR0aCxzLmhlaWdodD1pKToocy53aWR0aD1yLHMuaGVpZ2h0PWw/bCppOm8mJnQuYXZhaWxhYmxlSGVpZ2h0KX1yZXR1cm4gbn1mdW5jdGlvbiBaaShlKXtsZXQgdD1KaShlKSxuPXFpKHQuZmlsdGVyKGU9PmUuYm94LmZ1bGxTaXplKSwhMCkscj1xaShHaSh0LGBsZWZ0YCksITApLGk9cWkoR2kodCxgcmlnaHRgKSksYT1xaShHaSh0LGB0b3BgKSwhMCksbz1xaShHaSh0LGBib3R0b21gKSkscz1LaSh0LGB4YCksYz1LaSh0LGB5YCk7cmV0dXJue2Z1bGxTaXplOm4sbGVmdEFuZFRvcDpyLmNvbmNhdChhKSxyaWdodEFuZEJvdHRvbTppLmNvbmNhdChjKS5jb25jYXQobykuY29uY2F0KHMpLGNoYXJ0QXJlYTpHaSh0LGBjaGFydEFyZWFgKSx2ZXJ0aWNhbDpyLmNvbmNhdChpKS5jb25jYXQoYyksaG9yaXpvbnRhbDphLmNvbmNhdChvKS5jb25jYXQocyl9fWZ1bmN0aW9uIFFpKGUsdCxuLHIpe3JldHVybiBNYXRoLm1heChlW25dLHRbbl0pK01hdGgubWF4KGVbcl0sdFtyXSl9ZnVuY3Rpb24gJGkoZSx0KXtlLnRvcD1NYXRoLm1heChlLnRvcCx0LnRvcCksZS5sZWZ0PU1hdGgubWF4KGUubGVmdCx0LmxlZnQpLGUuYm90dG9tPU1hdGgubWF4KGUuYm90dG9tLHQuYm90dG9tKSxlLnJpZ2h0PU1hdGgubWF4KGUucmlnaHQsdC5yaWdodCl9ZnVuY3Rpb24gZWEoZSx0LG4scil7bGV0e3BvczppLGJveDphfT1uLG89ZS5tYXhQYWRkaW5nO2lmKCFOKGkpKXtuLnNpemUmJihlW2ldLT1uLnNpemUpO2xldCB0PXJbbi5zdGFja118fHtzaXplOjAsY291bnQ6MX07dC5zaXplPU1hdGgubWF4KHQuc2l6ZSxuLmhvcml6b250YWw/YS5oZWlnaHQ6YS53aWR0aCksbi5zaXplPXQuc2l6ZS90LmNvdW50LGVbaV0rPW4uc2l6ZX1hLmdldFBhZGRpbmcmJiRpKG8sYS5nZXRQYWRkaW5nKCkpO2xldCBzPU1hdGgubWF4KDAsdC5vdXRlcldpZHRoLVFpKG8sZSxgbGVmdGAsYHJpZ2h0YCkpLGM9TWF0aC5tYXgoMCx0Lm91dGVySGVpZ2h0LVFpKG8sZSxgdG9wYCxgYm90dG9tYCkpLGw9cyE9PWUudyx1PWMhPT1lLmg7cmV0dXJuIGUudz1zLGUuaD1jLG4uaG9yaXpvbnRhbD97c2FtZTpsLG90aGVyOnV9OntzYW1lOnUsb3RoZXI6bH19ZnVuY3Rpb24gdGEoZSl7bGV0IHQ9ZS5tYXhQYWRkaW5nO2Z1bmN0aW9uIG4obil7bGV0IHI9TWF0aC5tYXgodFtuXS1lW25dLDApO3JldHVybiBlW25dKz1yLHJ9ZS55Kz1uKGB0b3BgKSxlLngrPW4oYGxlZnRgKSxuKGByaWdodGApLG4oYGJvdHRvbWApfWZ1bmN0aW9uIG5hKGUsdCl7bGV0IG49dC5tYXhQYWRkaW5nO2Z1bmN0aW9uIHIoZSl7bGV0IHI9e2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfTtyZXR1cm4gZS5mb3JFYWNoKGU9PntyW2VdPU1hdGgubWF4KHRbZV0sbltlXSl9KSxyfXJldHVybiByKGU/W2BsZWZ0YCxgcmlnaHRgXTpbYHRvcGAsYGJvdHRvbWBdKX1mdW5jdGlvbiByYShlLHQsbixyKXtsZXQgaT1bXSxhLG8scyxjLGwsdTtmb3IoYT0wLG89ZS5sZW5ndGgsbD0wO2E8bzsrK2Epe3M9ZVthXSxjPXMuYm94LGMudXBkYXRlKHMud2lkdGh8fHQudyxzLmhlaWdodHx8dC5oLG5hKHMuaG9yaXpvbnRhbCx0KSk7bGV0e3NhbWU6byxvdGhlcjpkfT1lYSh0LG4scyxyKTtsfD1vJiZpLmxlbmd0aCx1fHw9ZCxjLmZ1bGxTaXplfHxpLnB1c2gocyl9cmV0dXJuIGwmJnJhKGksdCxuLHIpfHx1fWZ1bmN0aW9uIGlhKGUsdCxuLHIsaSl7ZS50b3A9bixlLmxlZnQ9dCxlLnJpZ2h0PXQrcixlLmJvdHRvbT1uK2ksZS53aWR0aD1yLGUuaGVpZ2h0PWl9ZnVuY3Rpb24gYWEoZSx0LG4scil7bGV0IGk9bi5wYWRkaW5nLHt4OmEseTpvfT10O2ZvcihsZXQgcyBvZiBlKXtsZXQgZT1zLmJveCxjPXJbcy5zdGFja118fHtjb3VudDoxLHBsYWNlZDowLHdlaWdodDoxfSxsPXMuc3RhY2tXZWlnaHQvYy53ZWlnaHR8fDE7aWYocy5ob3Jpem9udGFsKXtsZXQgcj10LncqbCxhPWMuc2l6ZXx8ZS5oZWlnaHQ7bHQoYy5zdGFydCkmJihvPWMuc3RhcnQpLGUuZnVsbFNpemU/aWEoZSxpLmxlZnQsbyxuLm91dGVyV2lkdGgtaS5yaWdodC1pLmxlZnQsYSk6aWEoZSx0LmxlZnQrYy5wbGFjZWQsbyxyLGEpLGMuc3RhcnQ9byxjLnBsYWNlZCs9cixvPWUuYm90dG9tfWVsc2V7bGV0IHI9dC5oKmwsbz1jLnNpemV8fGUud2lkdGg7bHQoYy5zdGFydCkmJihhPWMuc3RhcnQpLGUuZnVsbFNpemU/aWEoZSxhLGkudG9wLG8sbi5vdXRlckhlaWdodC1pLmJvdHRvbS1pLnRvcCk6aWEoZSxhLHQudG9wK2MucGxhY2VkLG8sciksYy5zdGFydD1hLGMucGxhY2VkKz1yLGE9ZS5yaWdodH19dC54PWEsdC55PW99dmFyIG9hPXthZGRCb3goZSx0KXtlLmJveGVzfHw9W10sdC5mdWxsU2l6ZT10LmZ1bGxTaXplfHwhMSx0LnBvc2l0aW9uPXQucG9zaXRpb258fGB0b3BgLHQud2VpZ2h0PXQud2VpZ2h0fHwwLHQuX2xheWVycz10Ll9sYXllcnN8fGZ1bmN0aW9uKCl7cmV0dXJuW3t6OjAsZHJhdyhlKXt0LmRyYXcoZSl9fV19LGUuYm94ZXMucHVzaCh0KX0scmVtb3ZlQm94KGUsdCl7bGV0IG49ZS5ib3hlcz9lLmJveGVzLmluZGV4T2YodCk6LTE7biE9PS0xJiZlLmJveGVzLnNwbGljZShuLDEpfSxjb25maWd1cmUoZSx0LG4pe3QuZnVsbFNpemU9bi5mdWxsU2l6ZSx0LnBvc2l0aW9uPW4ucG9zaXRpb24sdC53ZWlnaHQ9bi53ZWlnaHR9LHVwZGF0ZShlLHQsbixyKXtpZighZSlyZXR1cm47bGV0IGk9cShlLm9wdGlvbnMubGF5b3V0LnBhZGRpbmcpLGE9TWF0aC5tYXgodC1pLndpZHRoLDApLG89TWF0aC5tYXgobi1pLmhlaWdodCwwKSxzPVppKGUuYm94ZXMpLGM9cy52ZXJ0aWNhbCxsPXMuaG9yaXpvbnRhbDtSKGUuYm94ZXMsZT0+e3R5cGVvZiBlLmJlZm9yZUxheW91dD09YGZ1bmN0aW9uYCYmZS5iZWZvcmVMYXlvdXQoKX0pO2xldCB1PWMucmVkdWNlKChlLHQpPT50LmJveC5vcHRpb25zJiZ0LmJveC5vcHRpb25zLmRpc3BsYXk9PT0hMT9lOmUrMSwwKXx8MSxkPU9iamVjdC5mcmVlemUoe291dGVyV2lkdGg6dCxvdXRlckhlaWdodDpuLHBhZGRpbmc6aSxhdmFpbGFibGVXaWR0aDphLGF2YWlsYWJsZUhlaWdodDpvLHZCb3hNYXhXaWR0aDphLzIvdSxoQm94TWF4SGVpZ2h0Om8vMn0pLGY9T2JqZWN0LmFzc2lnbih7fSxpKTskaShmLHEocikpO2xldCBwPU9iamVjdC5hc3NpZ24oe21heFBhZGRpbmc6Zix3OmEsaDpvLHg6aS5sZWZ0LHk6aS50b3B9LGkpLG09WGkoYy5jb25jYXQobCksZCk7cmEocy5mdWxsU2l6ZSxwLGQsbSkscmEoYyxwLGQsbSkscmEobCxwLGQsbSkmJnJhKGMscCxkLG0pLHRhKHApLGFhKHMubGVmdEFuZFRvcCxwLGQsbSkscC54Kz1wLncscC55Kz1wLmgsYWEocy5yaWdodEFuZEJvdHRvbSxwLGQsbSksZS5jaGFydEFyZWE9e2xlZnQ6cC5sZWZ0LHRvcDpwLnRvcCxyaWdodDpwLmxlZnQrcC53LGJvdHRvbTpwLnRvcCtwLmgsaGVpZ2h0OnAuaCx3aWR0aDpwLnd9LFIocy5jaGFydEFyZWEsdD0+e2xldCBuPXQuYm94O09iamVjdC5hc3NpZ24obixlLmNoYXJ0QXJlYSksbi51cGRhdGUocC53LHAuaCx7bGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjB9KX0pfX0sc2E9Y2xhc3N7YWNxdWlyZUNvbnRleHQoZSx0KXt9cmVsZWFzZUNvbnRleHQoZSl7cmV0dXJuITF9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7fXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0LG4pe31nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIDF9Z2V0TWF4aW11bVNpemUoZSx0LG4scil7cmV0dXJuIHQ9TWF0aC5tYXgoMCx0fHxlLndpZHRoKSxufHw9ZS5oZWlnaHQse3dpZHRoOnQsaGVpZ2h0Ok1hdGgubWF4KDAscj9NYXRoLmZsb29yKHQvcik6bil9fWlzQXR0YWNoZWQoZSl7cmV0dXJuITB9dXBkYXRlQ29uZmlnKGUpe319LGNhPWNsYXNzIGV4dGVuZHMgc2F7YWNxdWlyZUNvbnRleHQoZSl7cmV0dXJuIGUmJmUuZ2V0Q29udGV4dCYmZS5nZXRDb250ZXh0KGAyZGApfHxudWxsfXVwZGF0ZUNvbmZpZyhlKXtlLm9wdGlvbnMuYW5pbWF0aW9uPSExfX0sbGE9YCRjaGFydGpzYCx1YT17dG91Y2hzdGFydDpgbW91c2Vkb3duYCx0b3VjaG1vdmU6YG1vdXNlbW92ZWAsdG91Y2hlbmQ6YG1vdXNldXBgLHBvaW50ZXJlbnRlcjpgbW91c2VlbnRlcmAscG9pbnRlcmRvd246YG1vdXNlZG93bmAscG9pbnRlcm1vdmU6YG1vdXNlbW92ZWAscG9pbnRlcnVwOmBtb3VzZXVwYCxwb2ludGVybGVhdmU6YG1vdXNlb3V0YCxwb2ludGVyb3V0OmBtb3VzZW91dGB9LGRhPWU9PmU9PT1udWxsfHxlPT09YGA7ZnVuY3Rpb24gZmEoZSx0KXtsZXQgbj1lLnN0eWxlLHI9ZS5nZXRBdHRyaWJ1dGUoYGhlaWdodGApLGk9ZS5nZXRBdHRyaWJ1dGUoYHdpZHRoYCk7aWYoZVtsYV09e2luaXRpYWw6e2hlaWdodDpyLHdpZHRoOmksc3R5bGU6e2Rpc3BsYXk6bi5kaXNwbGF5LGhlaWdodDpuLmhlaWdodCx3aWR0aDpuLndpZHRofX19LG4uZGlzcGxheT1uLmRpc3BsYXl8fGBibG9ja2Asbi5ib3hTaXppbmc9bi5ib3hTaXppbmd8fGBib3JkZXItYm94YCxkYShpKSl7bGV0IHQ9SXIoZSxgd2lkdGhgKTt0IT09dm9pZCAwJiYoZS53aWR0aD10KX1pZihkYShyKSl7aWYoZS5zdHlsZS5oZWlnaHQ9PT1gYCllLmhlaWdodD1lLndpZHRoLyh0fHwyKTtlbHNle2xldCB0PUlyKGUsYGhlaWdodGApO3QhPT12b2lkIDAmJihlLmhlaWdodD10KX19cmV0dXJuIGV9dmFyIHBhPUZyP3twYXNzaXZlOiEwfTohMTtmdW5jdGlvbiBtYShlLHQsbil7ZSYmZS5hZGRFdmVudExpc3RlbmVyKHQsbixwYSl9ZnVuY3Rpb24gaGEoZSx0LG4pe2UmJmUuY2FudmFzJiZlLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsbixwYSl9ZnVuY3Rpb24gZ2EoZSx0KXtsZXQgbj11YVtlLnR5cGVdfHxlLnR5cGUse3g6cix5Oml9PUFyKGUsdCk7cmV0dXJue3R5cGU6bixjaGFydDp0LG5hdGl2ZTplLHg6cj09PXZvaWQgMD9udWxsOnIseTppPT09dm9pZCAwP251bGw6aX19ZnVuY3Rpb24gX2EoZSx0KXtmb3IobGV0IG4gb2YgZSlpZihuPT09dHx8bi5jb250YWlucyh0KSlyZXR1cm4hMH1mdW5jdGlvbiB2YShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PV9hKG4uYWRkZWROb2RlcyxyKSx0JiY9IV9hKG4ucmVtb3ZlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX1mdW5jdGlvbiB5YShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57bGV0IHQ9ITE7Zm9yKGxldCBuIG9mIGUpdHx8PV9hKG4ucmVtb3ZlZE5vZGVzLHIpLHQmJj0hX2Eobi5hZGRlZE5vZGVzLHIpO3QmJm4oKX0pO3JldHVybiBpLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksaX12YXIgYmE9bmV3IE1hcCx4YT0wO2Z1bmN0aW9uIFNhKCl7bGV0IGU9d2luZG93LmRldmljZVBpeGVsUmF0aW87ZSE9PXhhJiYoeGE9ZSxiYS5mb3JFYWNoKCh0LG4pPT57bi5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyE9PWUmJnQoKX0pKX1mdW5jdGlvbiBDYShlLHQpe2JhLnNpemV8fHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLFNhKSxiYS5zZXQoZSx0KX1mdW5jdGlvbiB3YShlKXtiYS5kZWxldGUoZSksYmEuc2l6ZXx8d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsU2EpfWZ1bmN0aW9uIFRhKGUsdCxuKXtsZXQgcj1lLmNhbnZhcyxpPXImJlNyKHIpO2lmKCFpKXJldHVybjtsZXQgYT1HdCgoZSx0KT0+e2xldCByPWkuY2xpZW50V2lkdGg7bihlLHQpLHI8aS5jbGllbnRXaWR0aCYmbigpfSx3aW5kb3cpLG89bmV3IFJlc2l6ZU9ic2VydmVyKGU9PntsZXQgdD1lWzBdLG49dC5jb250ZW50UmVjdC53aWR0aCxyPXQuY29udGVudFJlY3QuaGVpZ2h0OyhuIT09MHx8ciE9PTApJiZhKG4scil9KTtyZXR1cm4gby5vYnNlcnZlKGkpLENhKGUsYSksb31mdW5jdGlvbiBFYShlLHQsbil7biYmbi5kaXNjb25uZWN0KCksdD09PWByZXNpemVgJiZ3YShlKX1mdW5jdGlvbiBEYShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1HdCh0PT57ZS5jdHghPT1udWxsJiZuKGdhKHQsZSkpfSxlKTtyZXR1cm4gbWEocix0LGkpLGl9dmFyIE9hPWNsYXNzIGV4dGVuZHMgc2F7YWNxdWlyZUNvbnRleHQoZSx0KXtsZXQgbj1lJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKTtyZXR1cm4gbiYmbi5jYW52YXM9PT1lPyhmYShlLHQpLG4pOm51bGx9cmVsZWFzZUNvbnRleHQoZSl7bGV0IHQ9ZS5jYW52YXM7aWYoIXRbbGFdKXJldHVybiExO2xldCBuPXRbbGFdLmluaXRpYWw7W2BoZWlnaHRgLGB3aWR0aGBdLmZvckVhY2goZT0+e2xldCByPW5bZV07aihyKT90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0ZShlLHIpfSk7bGV0IHI9bi5zdHlsZXx8e307cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZT0+e3Quc3R5bGVbZV09cltlXX0pLHQud2lkdGg9dC53aWR0aCxkZWxldGUgdFtsYV0sITB9YWRkRXZlbnRMaXN0ZW5lcihlLHQsbil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCk7bGV0IHI9ZS4kcHJveGllc3x8PXt9O3JbdF09KHthdHRhY2g6dmEsZGV0YWNoOnlhLHJlc2l6ZTpUYX1bdF18fERhKShlLHQsbil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpe2xldCBuPWUuJHByb3hpZXN8fD17fSxyPW5bdF07ciYmKCh7YXR0YWNoOkVhLGRldGFjaDpFYSxyZXNpemU6RWF9W3RdfHxoYSkoZSx0LHIpLG5bdF09dm9pZCAwKX1nZXREZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiBOcihlLHQsbixyKX1pc0F0dGFjaGVkKGUpe2xldCB0PWUmJlNyKGUpO3JldHVybiEhKHQmJnQuaXNDb25uZWN0ZWQpfX07ZnVuY3Rpb24ga2EoZSl7cmV0dXJuIXhyKCl8fHR5cGVvZiBPZmZzY3JlZW5DYW52YXM8YHVgJiZlIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzP2NhOk9hfXZhciBBYT1jbGFzc3tzdGF0aWMgZGVmYXVsdHM9e307c3RhdGljIGRlZmF1bHRSb3V0ZXM9dm9pZCAwO3g7eTthY3RpdmU9ITE7b3B0aW9uczskYW5pbWF0aW9uczt0b29sdGlwUG9zaXRpb24oZSl7bGV0e3g6dCx5Om59PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWBdLGUpO3JldHVybnt4OnQseTpufX1oYXNWYWx1ZSgpe3JldHVybiB3dCh0aGlzLngpJiZ3dCh0aGlzLnkpfWdldFByb3BzKGUsdCl7bGV0IG49dGhpcy4kYW5pbWF0aW9ucztpZighdHx8IW4pcmV0dXJuIHRoaXM7bGV0IHI9e307cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1uW2VdJiZuW2VdLmFjdGl2ZSgpP25bZV0uX3RvOnRoaXNbZV19KSxyfX07ZnVuY3Rpb24gamEoZSx0KXtsZXQgbj1lLm9wdGlvbnMudGlja3Mscj1NYShlKSxpPU1hdGgubWluKG4ubWF4VGlja3NMaW1pdHx8cixyKSxhPW4ubWFqb3IuZW5hYmxlZD9QYSh0KTpbXSxvPWEubGVuZ3RoLHM9YVswXSxjPWFbby0xXSxsPVtdO2lmKG8+aSlyZXR1cm4gRmEodCxsLGEsby9pKSxsO2xldCB1PU5hKGEsdCxpKTtpZihvPjApe2xldCBlLG4scj1vPjE/TWF0aC5yb3VuZCgoYy1zKS8oby0xKSk6bnVsbDtmb3IoSWEodCxsLHUsaihyKT8wOnMtcixzKSxlPTAsbj1vLTE7ZTxuO2UrKylJYSh0LGwsdSxhW2VdLGFbZSsxXSk7cmV0dXJuIElhKHQsbCx1LGMsaihyKT90Lmxlbmd0aDpjK3IpLGx9cmV0dXJuIElhKHQsbCx1KSxsfWZ1bmN0aW9uIE1hKGUpe2xldCB0PWUub3B0aW9ucy5vZmZzZXQsbj1lLl90aWNrU2l6ZSgpLHI9ZS5fbGVuZ3RoL24rICshdCxpPWUuX21heExlbmd0aC9uO3JldHVybiBNYXRoLmZsb29yKE1hdGgubWluKHIsaSkpfWZ1bmN0aW9uIE5hKGUsdCxuKXtsZXQgcj1MYShlKSxpPXQubGVuZ3RoL247aWYoIXIpcmV0dXJuIE1hdGgubWF4KGksMSk7bGV0IGE9U3Qocik7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aC0xO2U8dDtlKyspe2xldCB0PWFbZV07aWYodD5pKXJldHVybiB0fXJldHVybiBNYXRoLm1heChpLDEpfWZ1bmN0aW9uIFBhKGUpe2xldCB0PVtdLG4scjtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dLm1ham9yJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gRmEoZSx0LG4scil7bGV0IGk9MCxhPW5bMF0sbztmb3Iocj1NYXRoLmNlaWwociksbz0wO288ZS5sZW5ndGg7bysrKW89PT1hJiYodC5wdXNoKGVbb10pLGkrKyxhPW5baSpyXSl9ZnVuY3Rpb24gSWEoZSx0LG4scixpKXtsZXQgYT1JKHIsMCksbz1NYXRoLm1pbihJKGksZS5sZW5ndGgpLGUubGVuZ3RoKSxzPTAsYyxsLHU7Zm9yKG49TWF0aC5jZWlsKG4pLGkmJihjPWktcixuPWMvTWF0aC5mbG9vcihjL24pKSx1PWE7dTwwOylzKyssdT1NYXRoLnJvdW5kKGErcypuKTtmb3IobD1NYXRoLm1heChhLDApO2w8bztsKyspbD09PXUmJih0LnB1c2goZVtsXSkscysrLHU9TWF0aC5yb3VuZChhK3MqbikpfWZ1bmN0aW9uIExhKGUpe2xldCB0PWUubGVuZ3RoLG4scjtpZih0PDIpcmV0dXJuITE7Zm9yKHI9ZVswXSxuPTE7bjx0OysrbilpZihlW25dLWVbbi0xXSE9PXIpcmV0dXJuITE7cmV0dXJuIHJ9dmFyIFJhPWU9PmU9PT1gbGVmdGA/YHJpZ2h0YDplPT09YHJpZ2h0YD9gbGVmdGA6ZSx6YT0oZSx0LG4pPT50PT09YHRvcGB8fHQ9PT1gbGVmdGA/ZVt0XStuOmVbdF0tbixCYT0oZSx0KT0+TWF0aC5taW4odHx8ZSxlKTtmdW5jdGlvbiBWYShlLHQpe2xldCBuPVtdLHI9ZS5sZW5ndGgvdCxpPWUubGVuZ3RoLGE9MDtmb3IoO2E8aTthKz1yKW4ucHVzaChlW01hdGguZmxvb3IoYSldKTtyZXR1cm4gbn1mdW5jdGlvbiBIYShlLHQsbil7bGV0IHI9ZS50aWNrcy5sZW5ndGgsaT1NYXRoLm1pbih0LHItMSksYT1lLl9zdGFydFBpeGVsLG89ZS5fZW5kUGl4ZWwscz0xZS02LGM9ZS5nZXRQaXhlbEZvclRpY2soaSksbDtpZighKG4mJihsPXI9PT0xP01hdGgubWF4KGMtYSxvLWMpOnQ9PT0wPyhlLmdldFBpeGVsRm9yVGljaygxKS1jKS8yOihjLWUuZ2V0UGl4ZWxGb3JUaWNrKGktMSkpLzIsYys9aTx0P2w6LWwsYzxhLXN8fGM+bytzKSkpcmV0dXJuIGN9ZnVuY3Rpb24gVWEoZSx0KXtSKGUsZT0+e2xldCBuPWUuZ2Mscj1uLmxlbmd0aC8yLGk7aWYocj50KXtmb3IoaT0wO2k8cjsrK2kpZGVsZXRlIGUuZGF0YVtuW2ldXTtuLnNwbGljZSgwLHIpfX0pfWZ1bmN0aW9uIFdhKGUpe3JldHVybiBlLmRyYXdUaWNrcz9lLnRpY2tMZW5ndGg6MH1mdW5jdGlvbiBHYShlLHQpe2lmKCFlLmRpc3BsYXkpcmV0dXJuIDA7bGV0IG49SihlLmZvbnQsdCkscj1xKGUucGFkZGluZyk7cmV0dXJuKE0oZS50ZXh0KT9lLnRleHQubGVuZ3RoOjEpKm4ubGluZUhlaWdodCtyLmhlaWdodH1mdW5jdGlvbiBLYShlLHQpe3JldHVybiBHbihlLHtzY2FsZTp0LHR5cGU6YHNjYWxlYH0pfWZ1bmN0aW9uIHFhKGUsdCxuKXtyZXR1cm4gR24oZSx7dGljazpuLGluZGV4OnQsdHlwZTpgdGlja2B9KX1mdW5jdGlvbiBKYShlLHQsbil7bGV0IHI9cXQoZSk7cmV0dXJuKG4mJnQhPT1gcmlnaHRgfHwhbiYmdD09PWByaWdodGApJiYocj1SYShyKSkscn1mdW5jdGlvbiBZYShlLHQsbixyKXtsZXR7dG9wOmksbGVmdDphLGJvdHRvbTpvLHJpZ2h0OnMsY2hhcnQ6Y309ZSx7Y2hhcnRBcmVhOmwsc2NhbGVzOnV9PWMsZD0wLGYscCxtLGg9by1pLGc9cy1hO2lmKGUuaXNIb3Jpem9udGFsKCkpe2lmKHA9VyhyLGEscyksTihuKSl7bGV0IGU9T2JqZWN0LmtleXMobilbMF0scj1uW2VdO209dVtlXS5nZXRQaXhlbEZvclZhbHVlKHIpK2gtdH1lbHNlIG09bj09PWBjZW50ZXJgPyhsLmJvdHRvbStsLnRvcCkvMitoLXQ6emEoZSxuLHQpO2Y9cy1hfWVsc2V7aWYoTihuKSl7bGV0IGU9T2JqZWN0LmtleXMobilbMF0scj1uW2VdO3A9dVtlXS5nZXRQaXhlbEZvclZhbHVlKHIpLWcrdH1lbHNlIHA9bj09PWBjZW50ZXJgPyhsLmxlZnQrbC5yaWdodCkvMi1nK3Q6emEoZSxuLHQpO209VyhyLG8saSksZD1uPT09YGxlZnRgPy1WOlZ9cmV0dXJue3RpdGxlWDpwLHRpdGxlWTptLG1heFdpZHRoOmYscm90YXRpb246ZH19dmFyIFhhPWNsYXNzIGUgZXh0ZW5kcyBBYXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuaWQ9ZS5pZCx0aGlzLnR5cGU9ZS50eXBlLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5jdHg9ZS5jdHgsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMudG9wPXZvaWQgMCx0aGlzLmJvdHRvbT12b2lkIDAsdGhpcy5sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5fbWFyZ2lucz17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LHRoaXMubWF4V2lkdGg9dm9pZCAwLHRoaXMubWF4SGVpZ2h0PXZvaWQgMCx0aGlzLnBhZGRpbmdUb3A9dm9pZCAwLHRoaXMucGFkZGluZ0JvdHRvbT12b2lkIDAsdGhpcy5wYWRkaW5nTGVmdD12b2lkIDAsdGhpcy5wYWRkaW5nUmlnaHQ9dm9pZCAwLHRoaXMuYXhpcz12b2lkIDAsdGhpcy5sYWJlbFJvdGF0aW9uPXZvaWQgMCx0aGlzLm1pbj12b2lkIDAsdGhpcy5tYXg9dm9pZCAwLHRoaXMuX3JhbmdlPXZvaWQgMCx0aGlzLnRpY2tzPVtdLHRoaXMuX2dyaWRMaW5lSXRlbXM9bnVsbCx0aGlzLl9sYWJlbEl0ZW1zPW51bGwsdGhpcy5fbGFiZWxTaXplcz1udWxsLHRoaXMuX2xlbmd0aD0wLHRoaXMuX21heExlbmd0aD0wLHRoaXMuX2xvbmdlc3RUZXh0Q2FjaGU9e30sdGhpcy5fc3RhcnRQaXhlbD12b2lkIDAsdGhpcy5fZW5kUGl4ZWw9dm9pZCAwLHRoaXMuX3JldmVyc2VQaXhlbHM9ITEsdGhpcy5fdXNlck1heD12b2lkIDAsdGhpcy5fdXNlck1pbj12b2lkIDAsdGhpcy5fc3VnZ2VzdGVkTWF4PXZvaWQgMCx0aGlzLl9zdWdnZXN0ZWRNaW49dm9pZCAwLHRoaXMuX3RpY2tzTGVuZ3RoPTAsdGhpcy5fYm9yZGVyVmFsdWU9MCx0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExLHRoaXMuJGNvbnRleHQ9dm9pZCAwfWluaXQoZSl7dGhpcy5vcHRpb25zPWUuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSksdGhpcy5heGlzPWUuYXhpcyx0aGlzLl91c2VyTWluPXRoaXMucGFyc2UoZS5taW4pLHRoaXMuX3VzZXJNYXg9dGhpcy5wYXJzZShlLm1heCksdGhpcy5fc3VnZ2VzdGVkTWluPXRoaXMucGFyc2UoZS5zdWdnZXN0ZWRNaW4pLHRoaXMuX3N1Z2dlc3RlZE1heD10aGlzLnBhcnNlKGUuc3VnZ2VzdGVkTWF4KX1wYXJzZShlLHQpe3JldHVybiBlfWdldFVzZXJCb3VuZHMoKXtsZXR7X3VzZXJNaW46ZSxfdXNlck1heDp0LF9zdWdnZXN0ZWRNaW46bixfc3VnZ2VzdGVkTWF4OnJ9PXRoaXM7cmV0dXJuIGU9RihlLDEvMCksdD1GKHQsLTEvMCksbj1GKG4sMS8wKSxyPUYociwtMS8wKSx7bWluOkYoZSxuKSxtYXg6Rih0LHIpLG1pbkRlZmluZWQ6UChlKSxtYXhEZWZpbmVkOlAodCl9fWdldE1pbk1heChlKXtsZXR7bWluOnQsbWF4Om4sbWluRGVmaW5lZDpyLG1heERlZmluZWQ6aX09dGhpcy5nZXRVc2VyQm91bmRzKCksYTtpZihyJiZpKXJldHVybnttaW46dCxtYXg6bn07bGV0IG89dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2ZvcihsZXQgcz0wLGM9by5sZW5ndGg7czxjOysrcylhPW9bc10uY29udHJvbGxlci5nZXRNaW5NYXgodGhpcyxlKSxyfHwodD1NYXRoLm1pbih0LGEubWluKSksaXx8KG49TWF0aC5tYXgobixhLm1heCkpO3JldHVybiB0PWkmJnQ+bj9uOnQsbj1yJiZ0Pm4/dDpuLHttaW46Rih0LEYobix0KSksbWF4OkYobixGKHQsbikpfX1nZXRQYWRkaW5nKCl7cmV0dXJue2xlZnQ6dGhpcy5wYWRkaW5nTGVmdHx8MCx0b3A6dGhpcy5wYWRkaW5nVG9wfHwwLHJpZ2h0OnRoaXMucGFkZGluZ1JpZ2h0fHwwLGJvdHRvbTp0aGlzLnBhZGRpbmdCb3R0b218fDB9fWdldFRpY2tzKCl7cmV0dXJuIHRoaXMudGlja3N9Z2V0TGFiZWxzKCl7bGV0IGU9dGhpcy5jaGFydC5kYXRhO3JldHVybiB0aGlzLm9wdGlvbnMubGFiZWxzfHwodGhpcy5pc0hvcml6b250YWwoKT9lLnhMYWJlbHM6ZS55TGFiZWxzKXx8ZS5sYWJlbHN8fFtdfWdldExhYmVsSXRlbXMoZT10aGlzLmNoYXJ0LmNoYXJ0QXJlYSl7cmV0dXJuIHRoaXMuX2xhYmVsSXRlbXN8fD10aGlzLl9jb21wdXRlTGFiZWxJdGVtcyhlKX1iZWZvcmVMYXlvdXQoKXt0aGlzLl9jYWNoZT17fSx0aGlzLl9kYXRhTGltaXRzQ2FjaGVkPSExfWJlZm9yZVVwZGF0ZSgpe0wodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSxbdGhpc10pfXVwZGF0ZShlLHQsbil7bGV0e2JlZ2luQXRaZXJvOnIsZ3JhY2U6aSx0aWNrczphfT10aGlzLm9wdGlvbnMsbz1hLnNhbXBsZVNpemU7dGhpcy5iZWZvcmVVcGRhdGUoKSx0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW49T2JqZWN0LmFzc2lnbih7bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LG4pLHRoaXMudGlja3M9bnVsbCx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5fZ3JpZExpbmVJdGVtcz1udWxsLHRoaXMuX2xhYmVsSXRlbXM9bnVsbCx0aGlzLmJlZm9yZVNldERpbWVuc2lvbnMoKSx0aGlzLnNldERpbWVuc2lvbnMoKSx0aGlzLmFmdGVyU2V0RGltZW5zaW9ucygpLHRoaXMuX21heExlbmd0aD10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgrbi5sZWZ0K24ucmlnaHQ6dGhpcy5oZWlnaHQrbi50b3Arbi5ib3R0b20sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZHx8PSh0aGlzLmJlZm9yZURhdGFMaW1pdHMoKSx0aGlzLmRldGVybWluZURhdGFMaW1pdHMoKSx0aGlzLmFmdGVyRGF0YUxpbWl0cygpLHRoaXMuX3JhbmdlPVduKHRoaXMsaSxyKSwhMCksdGhpcy5iZWZvcmVCdWlsZFRpY2tzKCksdGhpcy50aWNrcz10aGlzLmJ1aWxkVGlja3MoKXx8W10sdGhpcy5hZnRlckJ1aWxkVGlja3MoKTtsZXQgcz1vPHRoaXMudGlja3MubGVuZ3RoO3RoaXMuX2NvbnZlcnRUaWNrc1RvTGFiZWxzKHM/VmEodGhpcy50aWNrcyxvKTp0aGlzLnRpY2tzKSx0aGlzLmNvbmZpZ3VyZSgpLHRoaXMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuY2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLHRoaXMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCksYS5kaXNwbGF5JiYoYS5hdXRvU2tpcHx8YS5zb3VyY2U9PT1gYXV0b2ApJiYodGhpcy50aWNrcz1qYSh0aGlzLHRoaXMudGlja3MpLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLmFmdGVyQXV0b1NraXAoKSkscyYmdGhpcy5fY29udmVydFRpY2tzVG9MYWJlbHModGhpcy50aWNrcyksdGhpcy5iZWZvcmVGaXQoKSx0aGlzLmZpdCgpLHRoaXMuYWZ0ZXJGaXQoKSx0aGlzLmFmdGVyVXBkYXRlKCl9Y29uZmlndXJlKCl7bGV0IGU9dGhpcy5vcHRpb25zLnJldmVyc2UsdCxuO3RoaXMuaXNIb3Jpem9udGFsKCk/KHQ9dGhpcy5sZWZ0LG49dGhpcy5yaWdodCk6KHQ9dGhpcy50b3Asbj10aGlzLmJvdHRvbSxlPSFlKSx0aGlzLl9zdGFydFBpeGVsPXQsdGhpcy5fZW5kUGl4ZWw9bix0aGlzLl9yZXZlcnNlUGl4ZWxzPWUsdGhpcy5fbGVuZ3RoPW4tdCx0aGlzLl9hbGlnblRvUGl4ZWxzPXRoaXMub3B0aW9ucy5hbGlnblRvUGl4ZWxzfWFmdGVyVXBkYXRlKCl7TCh0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsW3RoaXNdKX1iZWZvcmVTZXREaW1lbnNpb25zKCl7TCh0aGlzLm9wdGlvbnMuYmVmb3JlU2V0RGltZW5zaW9ucyxbdGhpc10pfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PTAsdGhpcy5yaWdodD10aGlzLndpZHRoKToodGhpcy5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsdGhpcy50b3A9MCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCksdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1RvcD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTB9YWZ0ZXJTZXREaW1lbnNpb25zKCl7TCh0aGlzLm9wdGlvbnMuYWZ0ZXJTZXREaW1lbnNpb25zLFt0aGlzXSl9X2NhbGxIb29rcyhlKXt0aGlzLmNoYXJ0Lm5vdGlmeVBsdWdpbnMoZSx0aGlzLmdldENvbnRleHQoKSksTCh0aGlzLm9wdGlvbnNbZV0sW3RoaXNdKX1iZWZvcmVEYXRhTGltaXRzKCl7dGhpcy5fY2FsbEhvb2tzKGBiZWZvcmVEYXRhTGltaXRzYCl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe31hZnRlckRhdGFMaW1pdHMoKXt0aGlzLl9jYWxsSG9va3MoYGFmdGVyRGF0YUxpbWl0c2ApfWJlZm9yZUJ1aWxkVGlja3MoKXt0aGlzLl9jYWxsSG9va3MoYGJlZm9yZUJ1aWxkVGlja3NgKX1idWlsZFRpY2tzKCl7cmV0dXJuW119YWZ0ZXJCdWlsZFRpY2tzKCl7dGhpcy5fY2FsbEhvb2tzKGBhZnRlckJ1aWxkVGlja3NgKX1iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKXtMKHRoaXMub3B0aW9ucy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLG4scixpO2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7bisrKWk9ZVtuXSxpLmxhYmVsPUwodC5jYWxsYmFjayxbaS52YWx1ZSxuLGVdLHRoaXMpfWFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uKCl7TCh0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX1iZWZvcmVDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7TCh0aGlzLm9wdGlvbnMuYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpY2tzLG49QmEodGhpcy50aWNrcy5sZW5ndGgsZS50aWNrcy5tYXhUaWNrc0xpbWl0KSxyPXQubWluUm90YXRpb258fDAsaT10Lm1heFJvdGF0aW9uLGE9cixvLHMsYztpZighdGhpcy5faXNWaXNpYmxlKCl8fCF0LmRpc3BsYXl8fHI+PWl8fG48PTF8fCF0aGlzLmlzSG9yaXpvbnRhbCgpKXt0aGlzLmxhYmVsUm90YXRpb249cjtyZXR1cm59bGV0IGw9dGhpcy5fZ2V0TGFiZWxTaXplcygpLHU9bC53aWRlc3Qud2lkdGgsZD1sLmhpZ2hlc3QuaGVpZ2h0LGY9VSh0aGlzLmNoYXJ0LndpZHRoLXUsMCx0aGlzLm1heFdpZHRoKTtvPWUub2Zmc2V0P3RoaXMubWF4V2lkdGgvbjpmLyhuLTEpLHUrNj5vJiYobz1mLyhuLShlLm9mZnNldD8uNToxKSkscz10aGlzLm1heEhlaWdodC1XYShlLmdyaWQpLXQucGFkZGluZy1HYShlLnRpdGxlLHRoaXMuY2hhcnQub3B0aW9ucy5mb250KSxjPU1hdGguc3FydCh1KnUrZCpkKSxhPU90KE1hdGgubWluKE1hdGguYXNpbihVKChsLmhpZ2hlc3QuaGVpZ2h0KzYpL28sLTEsMSkpLE1hdGguYXNpbihVKHMvYywtMSwxKSktTWF0aC5hc2luKFUoZC9jLC0xLDEpKSkpLGE9TWF0aC5tYXgocixNYXRoLm1pbihpLGEpKSksdGhpcy5sYWJlbFJvdGF0aW9uPWF9YWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7TCh0aGlzLm9wdGlvbnMuYWZ0ZXJDYWxjdWxhdGVMYWJlbFJvdGF0aW9uLFt0aGlzXSl9YWZ0ZXJBdXRvU2tpcCgpe31iZWZvcmVGaXQoKXtMKHRoaXMub3B0aW9ucy5iZWZvcmVGaXQsW3RoaXNdKX1maXQoKXtsZXQgZT17d2lkdGg6MCxoZWlnaHQ6MH0se2NoYXJ0OnQsb3B0aW9uczp7dGlja3M6bix0aXRsZTpyLGdyaWQ6aX19PXRoaXMsYT10aGlzLl9pc1Zpc2libGUoKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk7aWYoYSl7bGV0IGE9R2Eocix0Lm9wdGlvbnMuZm9udCk7aWYobz8oZS53aWR0aD10aGlzLm1heFdpZHRoLGUuaGVpZ2h0PVdhKGkpK2EpOihlLmhlaWdodD10aGlzLm1heEhlaWdodCxlLndpZHRoPVdhKGkpK2EpLG4uZGlzcGxheSYmdGhpcy50aWNrcy5sZW5ndGgpe2xldHtmaXJzdDp0LGxhc3Q6cix3aWRlc3Q6aSxoaWdoZXN0OmF9PXRoaXMuX2dldExhYmVsU2l6ZXMoKSxzPW4ucGFkZGluZyoyLGM9RHQodGhpcy5sYWJlbFJvdGF0aW9uKSxsPU1hdGguY29zKGMpLHU9TWF0aC5zaW4oYyk7aWYobyl7bGV0IHQ9bi5taXJyb3I/MDp1Kmkud2lkdGgrbCphLmhlaWdodDtlLmhlaWdodD1NYXRoLm1pbih0aGlzLm1heEhlaWdodCxlLmhlaWdodCt0K3MpfWVsc2V7bGV0IHQ9bi5taXJyb3I/MDpsKmkud2lkdGgrdSphLmhlaWdodDtlLndpZHRoPU1hdGgubWluKHRoaXMubWF4V2lkdGgsZS53aWR0aCt0K3MpfXRoaXMuX2NhbGN1bGF0ZVBhZGRpbmcodCxyLHUsbCl9fXRoaXMuX2hhbmRsZU1hcmdpbnMoKSxvPyh0aGlzLndpZHRoPXRoaXMuX2xlbmd0aD10LndpZHRoLXRoaXMuX21hcmdpbnMubGVmdC10aGlzLl9tYXJnaW5zLnJpZ2h0LHRoaXMuaGVpZ2h0PWUuaGVpZ2h0KToodGhpcy53aWR0aD1lLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuX2xlbmd0aD10LmhlaWdodC10aGlzLl9tYXJnaW5zLnRvcC10aGlzLl9tYXJnaW5zLmJvdHRvbSl9X2NhbGN1bGF0ZVBhZGRpbmcoZSx0LG4scil7bGV0e3RpY2tzOnthbGlnbjppLHBhZGRpbmc6YX0scG9zaXRpb246b309dGhpcy5vcHRpb25zLHM9dGhpcy5sYWJlbFJvdGF0aW9uIT09MCxjPW8hPT1gdG9wYCYmdGhpcy5heGlzPT09YHhgO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2xldCBvPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKDApLXRoaXMubGVmdCxsPXRoaXMucmlnaHQtdGhpcy5nZXRQaXhlbEZvclRpY2sodGhpcy50aWNrcy5sZW5ndGgtMSksdT0wLGQ9MDtzP2M/KHU9ciplLndpZHRoLGQ9bip0LmhlaWdodCk6KHU9biplLmhlaWdodCxkPXIqdC53aWR0aCk6aT09PWBzdGFydGA/ZD10LndpZHRoOmk9PT1gZW5kYD91PWUud2lkdGg6aSE9PWBpbm5lcmAmJih1PWUud2lkdGgvMixkPXQud2lkdGgvMiksdGhpcy5wYWRkaW5nTGVmdD1NYXRoLm1heCgodS1vK2EpKnRoaXMud2lkdGgvKHRoaXMud2lkdGgtbyksMCksdGhpcy5wYWRkaW5nUmlnaHQ9TWF0aC5tYXgoKGQtbCthKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLWwpLDApfWVsc2V7bGV0IG49dC5oZWlnaHQvMixyPWUuaGVpZ2h0LzI7aT09PWBzdGFydGA/KG49MCxyPWUuaGVpZ2h0KTppPT09YGVuZGAmJihuPXQuaGVpZ2h0LHI9MCksdGhpcy5wYWRkaW5nVG9wPW4rYSx0aGlzLnBhZGRpbmdCb3R0b209cithfX1faGFuZGxlTWFyZ2lucygpe3RoaXMuX21hcmdpbnMmJih0aGlzLl9tYXJnaW5zLmxlZnQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nTGVmdCx0aGlzLl9tYXJnaW5zLmxlZnQpLHRoaXMuX21hcmdpbnMudG9wPU1hdGgubWF4KHRoaXMucGFkZGluZ1RvcCx0aGlzLl9tYXJnaW5zLnRvcCksdGhpcy5fbWFyZ2lucy5yaWdodD1NYXRoLm1heCh0aGlzLnBhZGRpbmdSaWdodCx0aGlzLl9tYXJnaW5zLnJpZ2h0KSx0aGlzLl9tYXJnaW5zLmJvdHRvbT1NYXRoLm1heCh0aGlzLnBhZGRpbmdCb3R0b20sdGhpcy5fbWFyZ2lucy5ib3R0b20pKX1hZnRlckZpdCgpe0wodGhpcy5vcHRpb25zLmFmdGVyRml0LFt0aGlzXSl9aXNIb3Jpem9udGFsKCl7bGV0e2F4aXM6ZSxwb3NpdGlvbjp0fT10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9PT1gdG9wYHx8dD09PWBib3R0b21gfHxlPT09YHhgfWlzRnVsbFNpemUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZ1bGxTaXplfV9jb252ZXJ0VGlja3NUb0xhYmVscyhlKXt0aGlzLmJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbigpLHRoaXMuZ2VuZXJhdGVUaWNrTGFiZWxzKGUpO2xldCB0LG47Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspaihlW3RdLmxhYmVsKSYmKGUuc3BsaWNlKHQsMSksbi0tLHQtLSk7dGhpcy5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpfV9nZXRMYWJlbFNpemVzKCl7bGV0IGU9dGhpcy5fbGFiZWxTaXplcztpZighZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnRpY2tzLnNhbXBsZVNpemUsbj10aGlzLnRpY2tzO3Q8bi5sZW5ndGgmJihuPVZhKG4sdCkpLHRoaXMuX2xhYmVsU2l6ZXM9ZT10aGlzLl9jb21wdXRlTGFiZWxTaXplcyhuLG4ubGVuZ3RoLHRoaXMub3B0aW9ucy50aWNrcy5tYXhUaWNrc0xpbWl0KX1yZXR1cm4gZX1fY29tcHV0ZUxhYmVsU2l6ZXMoZSx0LG4pe2xldHtjdHg6cixfbG9uZ2VzdFRleHRDYWNoZTppfT10aGlzLGE9W10sbz1bXSxzPU1hdGguZmxvb3IodC9CYSh0LG4pKSxjPTAsbD0wLHUsZCxmLHAsbSxoLGcsXyx2LHksYjtmb3IodT0wO3U8dDt1Kz1zKXtpZihwPWVbdV0ubGFiZWwsbT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKHUpLHIuZm9udD1oPW0uc3RyaW5nLGc9aVtoXT1pW2hdfHx7ZGF0YTp7fSxnYzpbXX0sXz1tLmxpbmVIZWlnaHQsdj15PTAsIWoocCkmJiFNKHApKXY9eG4ocixnLmRhdGEsZy5nYyx2LHApLHk9XztlbHNlIGlmKE0ocCkpZm9yKGQ9MCxmPXAubGVuZ3RoO2Q8ZjsrK2QpYj1wW2RdLCFqKGIpJiYhTShiKSYmKHY9eG4ocixnLmRhdGEsZy5nYyx2LGIpLHkrPV8pO2EucHVzaCh2KSxvLnB1c2goeSksYz1NYXRoLm1heCh2LGMpLGw9TWF0aC5tYXgoeSxsKX1VYShpLHQpO2xldCB4PWEuaW5kZXhPZihjKSxTPW8uaW5kZXhPZihsKSxDPWU9Pih7d2lkdGg6YVtlXXx8MCxoZWlnaHQ6b1tlXXx8MH0pO3JldHVybntmaXJzdDpDKDApLGxhc3Q6Qyh0LTEpLHdpZGVzdDpDKHgpLGhpZ2hlc3Q6QyhTKSx3aWR0aHM6YSxoZWlnaHRzOm99fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGV9Z2V0UGl4ZWxGb3JWYWx1ZShlLHQpe3JldHVybiBOYU59Z2V0VmFsdWVGb3JQaXhlbChlKXt9Z2V0UGl4ZWxGb3JUaWNrKGUpe2xldCB0PXRoaXMudGlja3M7cmV0dXJuIGU8MHx8ZT50Lmxlbmd0aC0xP251bGw6dGhpcy5nZXRQaXhlbEZvclZhbHVlKHRbZV0udmFsdWUpfWdldFBpeGVsRm9yRGVjaW1hbChlKXt0aGlzLl9yZXZlcnNlUGl4ZWxzJiYoZT0xLWUpO2xldCB0PXRoaXMuX3N0YXJ0UGl4ZWwrZSp0aGlzLl9sZW5ndGg7cmV0dXJuIFB0KHRoaXMuX2FsaWduVG9QaXhlbHM/Q24odGhpcy5jaGFydCx0LDApOnQpfWdldERlY2ltYWxGb3JQaXhlbChlKXtsZXQgdD0oZS10aGlzLl9zdGFydFBpeGVsKS90aGlzLl9sZW5ndGg7cmV0dXJuIHRoaXMuX3JldmVyc2VQaXhlbHM/MS10OnR9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRCYXNlVmFsdWUoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXM7cmV0dXJuIGU8MCYmdDwwP3Q6ZT4wJiZ0PjA/ZTowfWdldENvbnRleHQoZSl7bGV0IHQ9dGhpcy50aWNrc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gbi4kY29udGV4dHx8PXFhKHRoaXMuZ2V0Q29udGV4dCgpLGUsbil9cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1LYSh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzKX1fdGlja1NpemUoKXtsZXQgZT10aGlzLm9wdGlvbnMudGlja3MsdD1EdCh0aGlzLmxhYmVsUm90YXRpb24pLG49TWF0aC5hYnMoTWF0aC5jb3ModCkpLHI9TWF0aC5hYnMoTWF0aC5zaW4odCkpLGk9dGhpcy5fZ2V0TGFiZWxTaXplcygpLGE9ZS5hdXRvU2tpcFBhZGRpbmd8fDAsbz1pP2kud2lkZXN0LndpZHRoK2E6MCxzPWk/aS5oaWdoZXN0LmhlaWdodCthOjA7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/cypuPm8qcj9vL246cy9yOnMqcjxvKm4/cy9uOm8vcn1faXNWaXNpYmxlKCl7bGV0IGU9dGhpcy5vcHRpb25zLmRpc3BsYXk7cmV0dXJuIGU9PT1gYXV0b2A/dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpLmxlbmd0aD4wOiEhZX1fY29tcHV0ZUdyaWRMaW5lSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5jaGFydCxyPXRoaXMub3B0aW9ucyx7Z3JpZDppLHBvc2l0aW9uOmEsYm9yZGVyOm99PXIscz1pLm9mZnNldCxjPXRoaXMuaXNIb3Jpem9udGFsKCksbD10aGlzLnRpY2tzLmxlbmd0aCsgKyEhcyx1PVdhKGkpLGQ9W10sZj1vLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHA9Zi5kaXNwbGF5P2Yud2lkdGg6MCxtPXAvMixoPWZ1bmN0aW9uKGUpe3JldHVybiBDbihuLGUscCl9LGcsXyx2LHksYix4LFMsQyx3LFQsRSxEO2lmKGE9PT1gdG9wYClnPWgodGhpcy5ib3R0b20pLHg9dGhpcy5ib3R0b20tdSxDPWctbSxUPWgoZS50b3ApK20sRD1lLmJvdHRvbTtlbHNlIGlmKGE9PT1gYm90dG9tYClnPWgodGhpcy50b3ApLFQ9ZS50b3AsRD1oKGUuYm90dG9tKS1tLHg9ZyttLEM9dGhpcy50b3ArdTtlbHNlIGlmKGE9PT1gbGVmdGApZz1oKHRoaXMucmlnaHQpLGI9dGhpcy5yaWdodC11LFM9Zy1tLHc9aChlLmxlZnQpK20sRT1lLnJpZ2h0O2Vsc2UgaWYoYT09PWByaWdodGApZz1oKHRoaXMubGVmdCksdz1lLmxlZnQsRT1oKGUucmlnaHQpLW0sYj1nK20sUz10aGlzLmxlZnQrdTtlbHNlIGlmKHQ9PT1geGApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUudG9wK2UuYm90dG9tKS8yKy41KTtlbHNlIGlmKE4oYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9VD1lLnRvcCxEPWUuYm90dG9tLHg9ZyttLEM9eCt1fWVsc2UgaWYodD09PWB5YCl7aWYoYT09PWBjZW50ZXJgKWc9aCgoZS5sZWZ0K2UucmlnaHQpLzIpO2Vsc2UgaWYoTihhKSl7bGV0IGU9T2JqZWN0LmtleXMoYSlbMF0sdD1hW2VdO2c9aCh0aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpKX1iPWctbSxTPWItdSx3PWUubGVmdCxFPWUucmlnaHR9bGV0IGVlPUkoci50aWNrcy5tYXhUaWNrc0xpbWl0LGwpLHRlPU1hdGgubWF4KDEsTWF0aC5jZWlsKGwvZWUpKTtmb3IoXz0wO188bDtfKz10ZSl7bGV0IGU9dGhpcy5nZXRDb250ZXh0KF8pLHQ9aS5zZXRDb250ZXh0KGUpLHI9by5zZXRDb250ZXh0KGUpLGE9dC5saW5lV2lkdGgsbD10LmNvbG9yLHU9ci5kYXNofHxbXSxmPXIuZGFzaE9mZnNldCxwPXQudGlja1dpZHRoLG09dC50aWNrQ29sb3IsaD10LnRpY2tCb3JkZXJEYXNofHxbXSxnPXQudGlja0JvcmRlckRhc2hPZmZzZXQ7dj1IYSh0aGlzLF8scyksdiE9PXZvaWQgMCYmKHk9Q24obix2LGEpLGM/Yj1TPXc9RT15Ong9Qz1UPUQ9eSxkLnB1c2goe3R4MTpiLHR5MTp4LHR4MjpTLHR5MjpDLHgxOncseTE6VCx4MjpFLHkyOkQsd2lkdGg6YSxjb2xvcjpsLGJvcmRlckRhc2g6dSxib3JkZXJEYXNoT2Zmc2V0OmYsdGlja1dpZHRoOnAsdGlja0NvbG9yOm0sdGlja0JvcmRlckRhc2g6aCx0aWNrQm9yZGVyRGFzaE9mZnNldDpnfSkpfXJldHVybiB0aGlzLl90aWNrc0xlbmd0aD1sLHRoaXMuX2JvcmRlclZhbHVlPWcsZH1fY29tcHV0ZUxhYmVsSXRlbXMoZSl7bGV0IHQ9dGhpcy5heGlzLG49dGhpcy5vcHRpb25zLHtwb3NpdGlvbjpyLHRpY2tzOml9PW4sYT10aGlzLmlzSG9yaXpvbnRhbCgpLG89dGhpcy50aWNrcyx7YWxpZ246cyxjcm9zc0FsaWduOmMscGFkZGluZzpsLG1pcnJvcjp1fT1pLGQ9V2Eobi5ncmlkKSxmPWQrbCxwPXU/LWw6ZixtPS1EdCh0aGlzLmxhYmVsUm90YXRpb24pLGg9W10sZyxfLHYseSxiLHgsUyxDLHcsVCxFLEQsZWU9YG1pZGRsZWA7aWYocj09PWB0b3BgKXg9dGhpcy5ib3R0b20tcCxTPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtlbHNlIGlmKHI9PT1gYm90dG9tYCl4PXRoaXMudG9wK3AsUz10aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCk7ZWxzZSBpZihyPT09YGxlZnRgKXtsZXQgZT10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpO1M9ZS50ZXh0QWxpZ24sYj1lLnh9ZWxzZSBpZihyPT09YHJpZ2h0YCl7bGV0IGU9dGhpcy5fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChkKTtTPWUudGV4dEFsaWduLGI9ZS54fWVsc2UgaWYodD09PWB4YCl7aWYocj09PWBjZW50ZXJgKXg9KGUudG9wK2UuYm90dG9tKS8yK2Y7ZWxzZSBpZihOKHIpKXtsZXQgZT1PYmplY3Qua2V5cyhyKVswXSx0PXJbZV07eD10aGlzLmNoYXJ0LnNjYWxlc1tlXS5nZXRQaXhlbEZvclZhbHVlKHQpK2Z9Uz10aGlzLl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCl9ZWxzZSBpZih0PT09YHlgKXtpZihyPT09YGNlbnRlcmApYj0oZS5sZWZ0K2UucmlnaHQpLzItZjtlbHNlIGlmKE4ocikpe2xldCBlPU9iamVjdC5rZXlzKHIpWzBdLHQ9cltlXTtiPXRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCl9Uz10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpLnRleHRBbGlnbn10PT09YHlgJiYocz09PWBzdGFydGA/ZWU9YHRvcGA6cz09PWBlbmRgJiYoZWU9YGJvdHRvbWApKTtsZXQgdGU9dGhpcy5fZ2V0TGFiZWxTaXplcygpO2ZvcihnPTAsXz1vLmxlbmd0aDtnPF87KytnKXt2PW9bZ10seT12LmxhYmVsO2xldCBlPWkuc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoZykpO0M9dGhpcy5nZXRQaXhlbEZvclRpY2soZykraS5sYWJlbE9mZnNldCx3PXRoaXMuX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoZyksVD13LmxpbmVIZWlnaHQsRT1NKHkpP3kubGVuZ3RoOjE7bGV0IHQ9RS8yLG49ZS5jb2xvcixzPWUudGV4dFN0cm9rZUNvbG9yLGw9ZS50ZXh0U3Ryb2tlV2lkdGgsZD1TO2E/KGI9QyxTPT09YGlubmVyYCYmKGQ9Zz09PV8tMT90aGlzLm9wdGlvbnMucmV2ZXJzZT9gbGVmdGA6YHJpZ2h0YDpnPT09MD90aGlzLm9wdGlvbnMucmV2ZXJzZT9gcmlnaHRgOmBsZWZ0YDpgY2VudGVyYCksRD1yPT09YHRvcGA/Yz09PWBuZWFyYHx8bSE9PTA/LUUqVCtULzI6Yz09PWBjZW50ZXJgPy10ZS5oaWdoZXN0LmhlaWdodC8yLXQqVCtUOi10ZS5oaWdoZXN0LmhlaWdodCtULzI6Yz09PWBuZWFyYHx8bSE9PTA/VC8yOmM9PT1gY2VudGVyYD90ZS5oaWdoZXN0LmhlaWdodC8yLXQqVDp0ZS5oaWdoZXN0LmhlaWdodC1FKlQsdSYmKEQqPS0xKSxtIT09MCYmIWUuc2hvd0xhYmVsQmFja2Ryb3AmJihiKz1ULzIqTWF0aC5zaW4obSkpKTooeD1DLEQ9KDEtRSkqVC8yKTtsZXQgZjtpZihlLnNob3dMYWJlbEJhY2tkcm9wKXtsZXQgdD1xKGUuYmFja2Ryb3BQYWRkaW5nKSxuPXRlLmhlaWdodHNbZ10scj10ZS53aWR0aHNbZ10saT1ELXQudG9wLGE9MC10LmxlZnQ7c3dpdGNoKGVlKXtjYXNlYG1pZGRsZWA6aS09bi8yO2JyZWFrO2Nhc2VgYm90dG9tYDppLT1ufXN3aXRjaChTKXtjYXNlYGNlbnRlcmA6YS09ci8yO2JyZWFrO2Nhc2VgcmlnaHRgOmEtPXI7YnJlYWs7Y2FzZWBpbm5lcmA6Zz09PV8tMT9hLT1yOmc+MCYmKGEtPXIvMil9Zj17bGVmdDphLHRvcDppLHdpZHRoOnIrdC53aWR0aCxoZWlnaHQ6bit0LmhlaWdodCxjb2xvcjplLmJhY2tkcm9wQ29sb3J9fWgucHVzaCh7bGFiZWw6eSxmb250OncsdGV4dE9mZnNldDpELG9wdGlvbnM6e3JvdGF0aW9uOm0sY29sb3I6bixzdHJva2VDb2xvcjpzLHN0cm9rZVdpZHRoOmwsdGV4dEFsaWduOmQsdGV4dEJhc2VsaW5lOmVlLHRyYW5zbGF0aW9uOltiLHhdLGJhY2tkcm9wOmZ9fSl9cmV0dXJuIGh9X2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKXtsZXR7cG9zaXRpb246ZSx0aWNrczp0fT10aGlzLm9wdGlvbnM7aWYoLUR0KHRoaXMubGFiZWxSb3RhdGlvbikpcmV0dXJuIGU9PT1gdG9wYD9gbGVmdGA6YHJpZ2h0YDtsZXQgbj1gY2VudGVyYDtyZXR1cm4gdC5hbGlnbj09PWBzdGFydGA/bj1gbGVmdGA6dC5hbGlnbj09PWBlbmRgP249YHJpZ2h0YDp0LmFsaWduPT09YGlubmVyYCYmKG49YGlubmVyYCksbn1fZ2V0WUF4aXNMYWJlbEFsaWdubWVudChlKXtsZXR7cG9zaXRpb246dCx0aWNrczp7Y3Jvc3NBbGlnbjpuLG1pcnJvcjpyLHBhZGRpbmc6aX19PXRoaXMub3B0aW9ucyxhPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxvPWUraSxzPWEud2lkZXN0LndpZHRoLGMsbDtyZXR1cm4gdD09PWBsZWZ0YD9yPyhsPXRoaXMucmlnaHQraSxuPT09YG5lYXJgP2M9YGxlZnRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsKz1zLzIpOihjPWByaWdodGAsbCs9cykpOihsPXRoaXMucmlnaHQtbyxuPT09YG5lYXJgP2M9YHJpZ2h0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbC09cy8yKTooYz1gbGVmdGAsbD10aGlzLmxlZnQpKTp0PT09YHJpZ2h0YD9yPyhsPXRoaXMubGVmdCtpLG49PT1gbmVhcmA/Yz1gcmlnaHRgOm49PT1gY2VudGVyYD8oYz1gY2VudGVyYCxsLT1zLzIpOihjPWBsZWZ0YCxsLT1zKSk6KGw9dGhpcy5sZWZ0K28sbj09PWBuZWFyYD9jPWBsZWZ0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbCs9cy8yKTooYz1gcmlnaHRgLGw9dGhpcy5yaWdodCkpOmM9YHJpZ2h0YCx7dGV4dEFsaWduOmMseDpsfX1fY29tcHV0ZUxhYmVsQXJlYSgpe2lmKHRoaXMub3B0aW9ucy50aWNrcy5taXJyb3IpcmV0dXJuO2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLm9wdGlvbnMucG9zaXRpb247aWYodD09PWBsZWZ0YHx8dD09PWByaWdodGApcmV0dXJue3RvcDowLGxlZnQ6dGhpcy5sZWZ0LGJvdHRvbTplLmhlaWdodCxyaWdodDp0aGlzLnJpZ2h0fTtpZih0PT09YHRvcGB8fHQ9PT1gYm90dG9tYClyZXR1cm57dG9wOnRoaXMudG9wLGxlZnQ6MCxib3R0b206dGhpcy5ib3R0b20scmlnaHQ6ZS53aWR0aH19ZHJhd0JhY2tncm91bmQoKXtsZXR7Y3R4OmUsb3B0aW9uczp7YmFja2dyb3VuZENvbG9yOnR9LGxlZnQ6bix0b3A6cix3aWR0aDppLGhlaWdodDphfT10aGlzO3QmJihlLnNhdmUoKSxlLmZpbGxTdHlsZT10LGUuZmlsbFJlY3QobixyLGksYSksZS5yZXN0b3JlKCkpfWdldExpbmVXaWR0aEZvclZhbHVlKGUpe2xldCB0PXRoaXMub3B0aW9ucy5ncmlkO2lmKCF0aGlzLl9pc1Zpc2libGUoKXx8IXQuZGlzcGxheSlyZXR1cm4gMDtsZXQgbj10aGlzLnRpY2tzLmZpbmRJbmRleCh0PT50LnZhbHVlPT09ZSk7cmV0dXJuIG4+PTA/dC5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dChuKSkubGluZVdpZHRoOjB9ZHJhd0dyaWQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLmdyaWQsbj10aGlzLmN0eCxyPXRoaXMuX2dyaWRMaW5lSXRlbXN8fD10aGlzLl9jb21wdXRlR3JpZExpbmVJdGVtcyhlKSxpLGEsbz0oZSx0LHIpPT57IXIud2lkdGh8fCFyLmNvbG9yfHwobi5zYXZlKCksbi5saW5lV2lkdGg9ci53aWR0aCxuLnN0cm9rZVN0eWxlPXIuY29sb3Isbi5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2h8fFtdKSxuLmxpbmVEYXNoT2Zmc2V0PXIuYm9yZGVyRGFzaE9mZnNldCxuLmJlZ2luUGF0aCgpLG4ubW92ZVRvKGUueCxlLnkpLG4ubGluZVRvKHQueCx0LnkpLG4uc3Ryb2tlKCksbi5yZXN0b3JlKCkpfTtpZih0LmRpc3BsYXkpZm9yKGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpe2xldCBlPXJbaV07dC5kcmF3T25DaGFydEFyZWEmJm8oe3g6ZS54MSx5OmUueTF9LHt4OmUueDIseTplLnkyfSxlKSx0LmRyYXdUaWNrcyYmbyh7eDplLnR4MSx5OmUudHkxfSx7eDplLnR4Mix5OmUudHkyfSx7Y29sb3I6ZS50aWNrQ29sb3Isd2lkdGg6ZS50aWNrV2lkdGgsYm9yZGVyRGFzaDplLnRpY2tCb3JkZXJEYXNoLGJvcmRlckRhc2hPZmZzZXQ6ZS50aWNrQm9yZGVyRGFzaE9mZnNldH0pfX1kcmF3Qm9yZGVyKCl7bGV0e2NoYXJ0OmUsY3R4OnQsb3B0aW9uczp7Ym9yZGVyOm4sZ3JpZDpyfX09dGhpcyxpPW4uc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoKSksYT1uLmRpc3BsYXk/aS53aWR0aDowO2lmKCFhKXJldHVybjtsZXQgbz1yLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KDApKS5saW5lV2lkdGgscz10aGlzLl9ib3JkZXJWYWx1ZSxjLGwsdSxkO3RoaXMuaXNIb3Jpem9udGFsKCk/KGM9Q24oZSx0aGlzLmxlZnQsYSktYS8yLGw9Q24oZSx0aGlzLnJpZ2h0LG8pK28vMix1PWQ9cyk6KHU9Q24oZSx0aGlzLnRvcCxhKS1hLzIsZD1DbihlLHRoaXMuYm90dG9tLG8pK28vMixjPWw9cyksdC5zYXZlKCksdC5saW5lV2lkdGg9aS53aWR0aCx0LnN0cm9rZVN0eWxlPWkuY29sb3IsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhjLHUpLHQubGluZVRvKGwsZCksdC5zdHJva2UoKSx0LnJlc3RvcmUoKX1kcmF3TGFiZWxzKGUpe2lmKCF0aGlzLm9wdGlvbnMudGlja3MuZGlzcGxheSlyZXR1cm47bGV0IHQ9dGhpcy5jdHgsbj10aGlzLl9jb21wdXRlTGFiZWxBcmVhKCk7biYmRG4odCxuKTtsZXQgcj10aGlzLmdldExhYmVsSXRlbXMoZSk7Zm9yKGxldCBlIG9mIHIpe2xldCBuPWUub3B0aW9ucyxyPWUuZm9udCxpPWUubGFiZWwsYT1lLnRleHRPZmZzZXQ7UG4odCxpLDAsYSxyLG4pfW4mJk9uKHQpfWRyYXdUaXRsZSgpe2xldHtjdHg6ZSxvcHRpb25zOntwb3NpdGlvbjp0LHRpdGxlOm4scmV2ZXJzZTpyfX09dGhpcztpZighbi5kaXNwbGF5KXJldHVybjtsZXQgaT1KKG4uZm9udCksYT1xKG4ucGFkZGluZyksbz1uLmFsaWduLHM9aS5saW5lSGVpZ2h0LzI7dD09PWBib3R0b21gfHx0PT09YGNlbnRlcmB8fE4odCk/KHMrPWEuYm90dG9tLE0obi50ZXh0KSYmKHMrPWkubGluZUhlaWdodCoobi50ZXh0Lmxlbmd0aC0xKSkpOnMrPWEudG9wO2xldHt0aXRsZVg6Yyx0aXRsZVk6bCxtYXhXaWR0aDp1LHJvdGF0aW9uOmR9PVlhKHRoaXMscyx0LG8pO1BuKGUsbi50ZXh0LDAsMCxpLHtjb2xvcjpuLmNvbG9yLG1heFdpZHRoOnUscm90YXRpb246ZCx0ZXh0QWxpZ246SmEobyx0LHIpLHRleHRCYXNlbGluZTpgbWlkZGxlYCx0cmFuc2xhdGlvbjpbYyxsXX0pfWRyYXcoZSl7dGhpcy5faXNWaXNpYmxlKCkmJih0aGlzLmRyYXdCYWNrZ3JvdW5kKCksdGhpcy5kcmF3R3JpZChlKSx0aGlzLmRyYXdCb3JkZXIoKSx0aGlzLmRyYXdUaXRsZSgpLHRoaXMuZHJhd0xhYmVscyhlKSl9X2xheWVycygpe2xldCB0PXRoaXMub3B0aW9ucyxuPXQudGlja3MmJnQudGlja3Muenx8MCxyPUkodC5ncmlkJiZ0LmdyaWQueiwtMSksaT1JKHQuYm9yZGVyJiZ0LmJvcmRlci56LDApO3JldHVybiF0aGlzLl9pc1Zpc2libGUoKXx8dGhpcy5kcmF3IT09ZS5wcm90b3R5cGUuZHJhdz9be3o6bixkcmF3OmU9Pnt0aGlzLmRyYXcoZSl9fV06W3t6OnIsZHJhdzplPT57dGhpcy5kcmF3QmFja2dyb3VuZCgpLHRoaXMuZHJhd0dyaWQoZSksdGhpcy5kcmF3VGl0bGUoKX19LHt6OmksZHJhdzooKT0+e3RoaXMuZHJhd0JvcmRlcigpfX0se3o6bixkcmF3OmU9Pnt0aGlzLmRyYXdMYWJlbHMoZSl9fV19Z2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoZSl7bGV0IHQ9dGhpcy5jaGFydC5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCksbj10aGlzLmF4aXMrYEF4aXNJRGAscj1bXSxpLGE7Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTsrK2kpe2xldCBhPXRbaV07YVtuXT09PXRoaXMuaWQmJighZXx8YS50eXBlPT09ZSkmJnIucHVzaChhKX1yZXR1cm4gcn1fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyhlKXtyZXR1cm4gSih0aGlzLm9wdGlvbnMudGlja3Muc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQoZSkpLmZvbnQpfV9tYXhEaWdpdHMoKXtsZXQgZT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLmxpbmVIZWlnaHQ7cmV0dXJuKHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy53aWR0aDp0aGlzLmhlaWdodCkvZX19LFphPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnR5cGU9ZSx0aGlzLnNjb3BlPXQsdGhpcy5vdmVycmlkZT1uLHRoaXMuaXRlbXM9T2JqZWN0LmNyZWF0ZShudWxsKX1pc0ZvclR5cGUoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKHRoaXMudHlwZS5wcm90b3R5cGUsZS5wcm90b3R5cGUpfXJlZ2lzdGVyKGUpe2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxuO2VvKHQpJiYobj10aGlzLnJlZ2lzdGVyKHQpKTtsZXQgcj10aGlzLml0ZW1zLGk9ZS5pZCxhPXRoaXMuc2NvcGUrYC5gK2k7aWYoIWkpdGhyb3cgRXJyb3IoYGNsYXNzIGRvZXMgbm90IGhhdmUgaWQ6IGArZSk7cmV0dXJuIGkgaW4gcj9hOihyW2ldPWUsUWEoZSxhLG4pLHRoaXMub3ZlcnJpZGUmJkcub3ZlcnJpZGUoZS5pZCxlLm92ZXJyaWRlcyksYSl9Z2V0KGUpe3JldHVybiB0aGlzLml0ZW1zW2VdfXVucmVnaXN0ZXIoZSl7bGV0IHQ9dGhpcy5pdGVtcyxuPWUuaWQscj10aGlzLnNjb3BlO24gaW4gdCYmZGVsZXRlIHRbbl0sciYmbiBpbiBHW3JdJiYoZGVsZXRlIEdbcl1bbl0sdGhpcy5vdmVycmlkZSYmZGVsZXRlIGduW25dKX19O2Z1bmN0aW9uIFFhKGUsdCxuKXtsZXQgcj10dChPYmplY3QuY3JlYXRlKG51bGwpLFtuP0cuZ2V0KG4pOnt9LEcuZ2V0KHQpLGUuZGVmYXVsdHNdKTtHLnNldCh0LHIpLGUuZGVmYXVsdFJvdXRlcyYmJGEodCxlLmRlZmF1bHRSb3V0ZXMpLGUuZGVzY3JpcHRvcnMmJkcuZGVzY3JpYmUodCxlLmRlc2NyaXB0b3JzKX1mdW5jdGlvbiAkYShlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2xldCByPW4uc3BsaXQoYC5gKSxpPXIucG9wKCksYT1bZV0uY29uY2F0KHIpLmpvaW4oYC5gKSxvPXRbbl0uc3BsaXQoYC5gKSxzPW8ucG9wKCksYz1vLmpvaW4oYC5gKTtHLnJvdXRlKGEsaSxjLHMpfSl9ZnVuY3Rpb24gZW8oZSl7cmV0dXJuYGlkYGluIGUmJmBkZWZhdWx0c2BpbiBlfXZhciBYPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udHJvbGxlcnM9bmV3IFphKGppLGBkYXRhc2V0c2AsITApLHRoaXMuZWxlbWVudHM9bmV3IFphKEFhLGBlbGVtZW50c2ApLHRoaXMucGx1Z2lucz1uZXcgWmEoT2JqZWN0LGBwbHVnaW5zYCksdGhpcy5zY2FsZXM9bmV3IFphKFhhLGBzY2FsZXNgKSx0aGlzLl90eXBlZFJlZ2lzdHJpZXM9W3RoaXMuY29udHJvbGxlcnMsdGhpcy5zY2FsZXMsdGhpcy5lbGVtZW50c119YWRkKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlKX1yZW1vdmUoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSl9YWRkQ29udHJvbGxlcnMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5jb250cm9sbGVycyl9YWRkRWxlbWVudHMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5lbGVtZW50cyl9YWRkUGx1Z2lucyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLnBsdWdpbnMpfWFkZFNjYWxlcyguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSx0aGlzLnNjYWxlcyl9Z2V0Q29udHJvbGxlcihlKXtyZXR1cm4gdGhpcy5fZ2V0KGUsdGhpcy5jb250cm9sbGVycyxgY29udHJvbGxlcmApfWdldEVsZW1lbnQoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuZWxlbWVudHMsYGVsZW1lbnRgKX1nZXRQbHVnaW4oZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMucGx1Z2lucyxgcGx1Z2luYCl9Z2V0U2NhbGUoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuc2NhbGVzLGBzY2FsZWApfXJlbW92ZUNvbnRyb2xsZXJzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5jb250cm9sbGVycyl9cmVtb3ZlRWxlbWVudHMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLmVsZW1lbnRzKX1yZW1vdmVQbHVnaW5zKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5wbHVnaW5zKX1yZW1vdmVTY2FsZXMoLi4uZSl7dGhpcy5fZWFjaChgdW5yZWdpc3RlcmAsZSx0aGlzLnNjYWxlcyl9X2VhY2goZSx0LG4pe1suLi50XS5mb3JFYWNoKHQ9PntsZXQgcj1ufHx0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUodCk7bnx8ci5pc0ZvclR5cGUodCl8fHI9PT10aGlzLnBsdWdpbnMmJnQuaWQ/dGhpcy5fZXhlYyhlLHIsdCk6Uih0LHQ9PntsZXQgcj1ufHx0aGlzLl9nZXRSZWdpc3RyeUZvclR5cGUodCk7dGhpcy5fZXhlYyhlLHIsdCl9KX0pfV9leGVjKGUsdCxuKXtsZXQgcj1jdChlKTtMKG5bYGJlZm9yZWArcl0sW10sbiksdFtlXShuKSxMKG5bYGFmdGVyYCtyXSxbXSxuKX1fZ2V0UmVnaXN0cnlGb3JUeXBlKGUpe2ZvcihsZXQgdD0wO3Q8dGhpcy5fdHlwZWRSZWdpc3RyaWVzLmxlbmd0aDt0Kyspe2xldCBuPXRoaXMuX3R5cGVkUmVnaXN0cmllc1t0XTtpZihuLmlzRm9yVHlwZShlKSlyZXR1cm4gbn1yZXR1cm4gdGhpcy5wbHVnaW5zfV9nZXQoZSx0LG4pe2xldCByPXQuZ2V0KGUpO2lmKHI9PT12b2lkIDApdGhyb3cgRXJyb3IoYCJgK2UrYCIgaXMgbm90IGEgcmVnaXN0ZXJlZCBgK24rYC5gKTtyZXR1cm4gcn19LHRvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faW5pdD12b2lkIDB9bm90aWZ5KGUsdCxuLHIpe2lmKHQ9PT1gYmVmb3JlSW5pdGAmJih0aGlzLl9pbml0PXRoaXMuX2NyZWF0ZURlc2NyaXB0b3JzKGUsITApLHRoaXMuX25vdGlmeSh0aGlzLl9pbml0LGUsYGluc3RhbGxgKSksdGhpcy5faW5pdD09PXZvaWQgMClyZXR1cm47bGV0IGk9cj90aGlzLl9kZXNjcmlwdG9ycyhlKS5maWx0ZXIocik6dGhpcy5fZGVzY3JpcHRvcnMoZSksYT10aGlzLl9ub3RpZnkoaSxlLHQsbik7cmV0dXJuIHQ9PT1gYWZ0ZXJEZXN0cm95YCYmKHRoaXMuX25vdGlmeShpLGUsYHN0b3BgKSx0aGlzLl9ub3RpZnkodGhpcy5faW5pdCxlLGB1bmluc3RhbGxgKSx0aGlzLl9pbml0PXZvaWQgMCksYX1fbm90aWZ5KGUsdCxuLHIpe3J8fD17fTtmb3IobGV0IGkgb2YgZSl7bGV0IGU9aS5wbHVnaW4sYT1lW25dO2lmKEwoYSxbdCxyLGkub3B0aW9uc10sZSk9PT0hMSYmci5jYW5jZWxhYmxlKXJldHVybiExfXJldHVybiEwfWludmFsaWRhdGUoKXtqKHRoaXMuX2NhY2hlKXx8KHRoaXMuX29sZENhY2hlPXRoaXMuX2NhY2hlLHRoaXMuX2NhY2hlPXZvaWQgMCl9X2Rlc2NyaXB0b3JzKGUpe2lmKHRoaXMuX2NhY2hlKXJldHVybiB0aGlzLl9jYWNoZTtsZXQgdD10aGlzLl9jYWNoZT10aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhlKTtyZXR1cm4gdGhpcy5fbm90aWZ5U3RhdGVDaGFuZ2VzKGUpLHR9X2NyZWF0ZURlc2NyaXB0b3JzKGUsdCl7bGV0IG49ZSYmZS5jb25maWcscj1JKG4ub3B0aW9ucyYmbi5vcHRpb25zLnBsdWdpbnMse30pLGk9bm8obik7cmV0dXJuIHI9PT0hMSYmIXQ/W106aW8oZSxpLHIsdCl9X25vdGlmeVN0YXRlQ2hhbmdlcyhlKXtsZXQgdD10aGlzLl9vbGRDYWNoZXx8W10sbj10aGlzLl9jYWNoZSxyPShlLHQpPT5lLmZpbHRlcihlPT4hdC5zb21lKHQ9PmUucGx1Z2luLmlkPT09dC5wbHVnaW4uaWQpKTt0aGlzLl9ub3RpZnkocih0LG4pLGUsYHN0b3BgKSx0aGlzLl9ub3RpZnkocihuLHQpLGUsYHN0YXJ0YCl9fTtmdW5jdGlvbiBubyhlKXtsZXQgdD17fSxuPVtdLHI9T2JqZWN0LmtleXMoWC5wbHVnaW5zLml0ZW1zKTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyluLnB1c2goWC5nZXRQbHVnaW4ocltlXSkpO2xldCBpPWUucGx1Z2luc3x8W107Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspe2xldCByPWlbZV07bi5pbmRleE9mKHIpPT09LTEmJihuLnB1c2gociksdFtyLmlkXT0hMCl9cmV0dXJue3BsdWdpbnM6bixsb2NhbElkczp0fX1mdW5jdGlvbiBybyhlLHQpe3JldHVybiF0JiZlPT09ITE/bnVsbDplPT09ITA/e306ZX1mdW5jdGlvbiBpbyhlLHtwbHVnaW5zOnQsbG9jYWxJZHM6bn0scixpKXtsZXQgYT1bXSxvPWUuZ2V0Q29udGV4dCgpO2ZvcihsZXQgcyBvZiB0KXtsZXQgdD1zLmlkLGM9cm8oclt0XSxpKTtjIT09bnVsbCYmYS5wdXNoKHtwbHVnaW46cyxvcHRpb25zOmFvKGUuY29uZmlnLHtwbHVnaW46cyxsb2NhbDpuW3RdfSxjLG8pfSl9cmV0dXJuIGF9ZnVuY3Rpb24gYW8oZSx7cGx1Z2luOnQsbG9jYWw6bn0scixpKXtsZXQgYT1lLnBsdWdpblNjb3BlS2V5cyh0KSxvPWUuZ2V0T3B0aW9uU2NvcGVzKHIsYSk7cmV0dXJuIG4mJnQuZGVmYXVsdHMmJm8ucHVzaCh0LmRlZmF1bHRzKSxlLmNyZWF0ZVJlc29sdmVyKG8saSxbYGBdLHtzY3JpcHRhYmxlOiExLGluZGV4YWJsZTohMSxhbGxLZXlzOiEwfSl9ZnVuY3Rpb24gb28oZSx0KXtsZXQgbj1HLmRhdGFzZXRzW2VdfHx7fTtyZXR1cm4oKHQuZGF0YXNldHN8fHt9KVtlXXx8e30pLmluZGV4QXhpc3x8dC5pbmRleEF4aXN8fG4uaW5kZXhBeGlzfHxgeGB9ZnVuY3Rpb24gc28oZSx0KXtsZXQgbj1lO3JldHVybiBlPT09YF9pbmRleF9gP249dDplPT09YF92YWx1ZV9gJiYobj10PT09YHhgP2B5YDpgeGApLG59ZnVuY3Rpb24gY28oZSx0KXtyZXR1cm4gZT09PXQ/YF9pbmRleF9gOmBfdmFsdWVfYH1mdW5jdGlvbiBsbyhlKXtpZihlPT09YHhgfHxlPT09YHlgfHxlPT09YHJgKXJldHVybiBlfWZ1bmN0aW9uIHVvKGUpe2lmKGU9PT1gdG9wYHx8ZT09PWBib3R0b21gKXJldHVybmB4YDtpZihlPT09YGxlZnRgfHxlPT09YHJpZ2h0YClyZXR1cm5geWB9ZnVuY3Rpb24gZm8oZSwuLi50KXtpZihsbyhlKSlyZXR1cm4gZTtmb3IobGV0IG4gb2YgdCl7bGV0IHQ9bi5heGlzfHx1byhuLnBvc2l0aW9uKXx8ZS5sZW5ndGg+MSYmbG8oZVswXS50b0xvd2VyQ2FzZSgpKTtpZih0KXJldHVybiB0fXRocm93IEVycm9yKGBDYW5ub3QgZGV0ZXJtaW5lIHR5cGUgb2YgJyR7ZX0nIGF4aXMuIFBsZWFzZSBwcm92aWRlICdheGlzJyBvciAncG9zaXRpb24nIG9wdGlvbi5gKX1mdW5jdGlvbiBwbyhlLHQsbil7aWYoblt0K2BBeGlzSURgXT09PWUpcmV0dXJue2F4aXM6dH19ZnVuY3Rpb24gbW8oZSx0KXtpZih0LmRhdGEmJnQuZGF0YS5kYXRhc2V0cyl7bGV0IG49dC5kYXRhLmRhdGFzZXRzLmZpbHRlcih0PT50LnhBeGlzSUQ9PT1lfHx0LnlBeGlzSUQ9PT1lKTtpZihuLmxlbmd0aClyZXR1cm4gcG8oZSxgeGAsblswXSl8fHBvKGUsYHlgLG5bMF0pfXJldHVybnt9fWZ1bmN0aW9uIGhvKGUsdCl7bGV0IG49Z25bZS50eXBlXXx8e3NjYWxlczp7fX0scj10LnNjYWxlc3x8e30saT1vbyhlLnR5cGUsdCksYT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQ9PntsZXQgbz1yW3RdO2lmKCFOKG8pKXJldHVybiBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHNjYWxlIGNvbmZpZ3VyYXRpb24gZm9yIHNjYWxlOiAke3R9YCk7aWYoby5fcHJveHkpcmV0dXJuIGNvbnNvbGUud2FybihgSWdub3JpbmcgcmVzb2x2ZXIgcGFzc2VkIGFzIG9wdGlvbnMgZm9yIHNjYWxlOiAke3R9YCk7bGV0IHM9Zm8odCxvLG1vKHQsZSksRy5zY2FsZXNbby50eXBlXSksYz1jbyhzLGkpLGw9bi5zY2FsZXN8fHt9O2FbdF09bnQoT2JqZWN0LmNyZWF0ZShudWxsKSxbe2F4aXM6c30sbyxsW3NdLGxbY11dKX0pLGUuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKG49PntsZXQgaT1uLnR5cGV8fGUudHlwZSxvPW4uaW5kZXhBeGlzfHxvbyhpLHQpLHM9KGduW2ldfHx7fSkuc2NhbGVzfHx7fTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGU9PntsZXQgdD1zbyhlLG8pLGk9blt0K2BBeGlzSURgXXx8dDthW2ldPWFbaV18fE9iamVjdC5jcmVhdGUobnVsbCksbnQoYVtpXSxbe2F4aXM6dH0scltpXSxzW2VdXSl9KX0pLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZT0+e2xldCB0PWFbZV07bnQodCxbRy5zY2FsZXNbdC50eXBlXSxHLnNjYWxlXSl9KSxhfWZ1bmN0aW9uIGdvKGUpe2xldCB0PWUub3B0aW9uc3x8PXt9O3QucGx1Z2lucz1JKHQucGx1Z2lucyx7fSksdC5zY2FsZXM9aG8oZSx0KX1mdW5jdGlvbiBfbyhlKXtyZXR1cm4gZXx8PXt9LGUuZGF0YXNldHM9ZS5kYXRhc2V0c3x8W10sZS5sYWJlbHM9ZS5sYWJlbHN8fFtdLGV9ZnVuY3Rpb24gdm8oZSl7cmV0dXJuIGV8fD17fSxlLmRhdGE9X28oZS5kYXRhKSxnbyhlKSxlfXZhciB5bz1uZXcgTWFwLGJvPW5ldyBTZXQ7ZnVuY3Rpb24geG8oZSx0KXtsZXQgbj15by5nZXQoZSk7cmV0dXJuIG58fChuPXQoKSx5by5zZXQoZSxuKSxiby5hZGQobikpLG59dmFyIFNvPShlLHQsbik9PntsZXQgcj1zdCh0LG4pO3IhPT12b2lkIDAmJmUuYWRkKHIpfSxDbz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLl9jb25maWc9dm8oZSksdGhpcy5fc2NvcGVDYWNoZT1uZXcgTWFwLHRoaXMuX3Jlc29sdmVyQ2FjaGU9bmV3IE1hcH1nZXQgcGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5fY29uZmlnLnBsYXRmb3JtfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy50eXBlfXNldCB0eXBlKGUpe3RoaXMuX2NvbmZpZy50eXBlPWV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fY29uZmlnLmRhdGF9c2V0IGRhdGEoZSl7dGhpcy5fY29uZmlnLmRhdGE9X28oZSl9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fY29uZmlnLm9wdGlvbnN9c2V0IG9wdGlvbnMoZSl7dGhpcy5fY29uZmlnLm9wdGlvbnM9ZX1nZXQgcGx1Z2lucygpe3JldHVybiB0aGlzLl9jb25maWcucGx1Z2luc311cGRhdGUoKXtsZXQgZT10aGlzLl9jb25maWc7dGhpcy5jbGVhckNhY2hlKCksZ28oZSl9Y2xlYXJDYWNoZSgpe3RoaXMuX3Njb3BlQ2FjaGUuY2xlYXIoKSx0aGlzLl9yZXNvbHZlckNhY2hlLmNsZWFyKCl9ZGF0YXNldFNjb3BlS2V5cyhlKXtyZXR1cm4geG8oZSwoKT0+W1tgZGF0YXNldHMuJHtlfWAsYGBdXSl9ZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyhlLHQpe3JldHVybiB4byhgJHtlfS50cmFuc2l0aW9uLiR7dH1gLCgpPT5bW2BkYXRhc2V0cy4ke2V9LnRyYW5zaXRpb25zLiR7dH1gLGB0cmFuc2l0aW9ucy4ke3R9YF0sW2BkYXRhc2V0cy4ke2V9YCxgYF1dKX1kYXRhc2V0RWxlbWVudFNjb3BlS2V5cyhlLHQpe3JldHVybiB4byhgJHtlfS0ke3R9YCwoKT0+W1tgZGF0YXNldHMuJHtlfS5lbGVtZW50cy4ke3R9YCxgZGF0YXNldHMuJHtlfWAsYGVsZW1lbnRzLiR7dH1gLGBgXV0pfXBsdWdpblNjb3BlS2V5cyhlKXtsZXQgdD1lLmlkLG49dGhpcy50eXBlO3JldHVybiB4byhgJHtufS1wbHVnaW4tJHt0fWAsKCk9PltbYHBsdWdpbnMuJHt0fWAsLi4uZS5hZGRpdGlvbmFsT3B0aW9uU2NvcGVzfHxbXV1dKX1fY2FjaGVkU2NvcGVzKGUsdCl7bGV0IG49dGhpcy5fc2NvcGVDYWNoZSxyPW4uZ2V0KGUpO3JldHVybighcnx8dCkmJihyPW5ldyBNYXAsbi5zZXQoZSxyKSkscn1nZXRPcHRpb25TY29wZXMoZSx0LG4pe2xldHtvcHRpb25zOnIsdHlwZTppfT10aGlzLGE9dGhpcy5fY2FjaGVkU2NvcGVzKGUsbiksbz1hLmdldCh0KTtpZihvKXJldHVybiBvO2xldCBzPW5ldyBTZXQ7dC5mb3JFYWNoKHQ9PntlJiYocy5hZGQoZSksdC5mb3JFYWNoKHQ9PlNvKHMsZSx0KSkpLHQuZm9yRWFjaChlPT5TbyhzLHIsZSkpLHQuZm9yRWFjaChlPT5TbyhzLGduW2ldfHx7fSxlKSksdC5mb3JFYWNoKGU9PlNvKHMsRyxlKSksdC5mb3JFYWNoKGU9PlNvKHMsX24sZSkpfSk7bGV0IGM9QXJyYXkuZnJvbShzKTtyZXR1cm4gYy5sZW5ndGg9PT0wJiZjLnB1c2goT2JqZWN0LmNyZWF0ZShudWxsKSksYm8uaGFzKHQpJiZhLnNldCh0LGMpLGN9Y2hhcnRPcHRpb25TY29wZXMoKXtsZXR7b3B0aW9uczplLHR5cGU6dH09dGhpcztyZXR1cm5bZSxnblt0XXx8e30sRy5kYXRhc2V0c1t0XXx8e30se3R5cGU6dH0sRyxfbl19cmVzb2x2ZU5hbWVkT3B0aW9ucyhlLHQsbixyPVtgYF0pe2xldCBpPXskc2hhcmVkOiEwfSx7cmVzb2x2ZXI6YSxzdWJQcmVmaXhlczpvfT13byh0aGlzLl9yZXNvbHZlckNhY2hlLGUscikscz1hO2lmKEVvKGEsdCkpe2kuJHNoYXJlZD0hMSxuPXV0KG4pP24oKTpuO2xldCB0PXRoaXMuY3JlYXRlUmVzb2x2ZXIoZSxuLG8pO3M9cW4oYSxuLHQpfWZvcihsZXQgZSBvZiB0KWlbZV09c1tlXTtyZXR1cm4gaX1jcmVhdGVSZXNvbHZlcihlLHQsbj1bYGBdLHIpe2xldHtyZXNvbHZlcjppfT13byh0aGlzLl9yZXNvbHZlckNhY2hlLGUsbik7cmV0dXJuIE4odCk/cW4oaSx0LHZvaWQgMCxyKTppfX07ZnVuY3Rpb24gd28oZSx0LG4pe2xldCByPWUuZ2V0KHQpO3J8fChyPW5ldyBNYXAsZS5zZXQodCxyKSk7bGV0IGk9bi5qb2luKCksYT1yLmdldChpKTtyZXR1cm4gYXx8KGE9e3Jlc29sdmVyOktuKHQsbiksc3ViUHJlZml4ZXM6bi5maWx0ZXIoZT0+IWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhgaG92ZXJgKSl9LHIuc2V0KGksYSkpLGF9dmFyIFRvPWU9Pk4oZSkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLnNvbWUodD0+dXQoZVt0XSkpO2Z1bmN0aW9uIEVvKGUsdCl7bGV0e2lzU2NyaXB0YWJsZTpuLGlzSW5kZXhhYmxlOnJ9PUpuKGUpO2ZvcihsZXQgaSBvZiB0KXtsZXQgdD1uKGkpLGE9cihpKSxvPShhfHx0KSYmZVtpXTtpZih0JiYodXQobyl8fFRvKG8pKXx8YSYmTShvKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgRG89YDQuNS4xYCxPbz1bYHRvcGAsYGJvdHRvbWAsYGxlZnRgLGByaWdodGAsYGNoYXJ0QXJlYWBdO2Z1bmN0aW9uIGtvKGUsdCl7cmV0dXJuIGU9PT1gdG9wYHx8ZT09PWBib3R0b21gfHxPby5pbmRleE9mKGUpPT09LTEmJnQ9PT1geGB9ZnVuY3Rpb24gQW8oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gbltlXT09PXJbZV0/blt0XS1yW3RdOm5bZV0tcltlXX19ZnVuY3Rpb24gam8oZSl7bGV0IHQ9ZS5jaGFydCxuPXQub3B0aW9ucy5hbmltYXRpb247dC5ub3RpZnlQbHVnaW5zKGBhZnRlclJlbmRlcmApLEwobiYmbi5vbkNvbXBsZXRlLFtlXSx0KX1mdW5jdGlvbiBNbyhlKXtsZXQgdD1lLmNoYXJ0LG49dC5vcHRpb25zLmFuaW1hdGlvbjtMKG4mJm4ub25Qcm9ncmVzcyxbZV0sdCl9ZnVuY3Rpb24gTm8oZSl7cmV0dXJuIHhyKCkmJnR5cGVvZiBlPT1gc3RyaW5nYD9lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpOmUmJmUubGVuZ3RoJiYoZT1lWzBdKSxlJiZlLmNhbnZhcyYmKGU9ZS5jYW52YXMpLGV9dmFyIFBvPXt9LEZvPWU9PntsZXQgdD1ObyhlKTtyZXR1cm4gT2JqZWN0LnZhbHVlcyhQbykuZmlsdGVyKGU9PmUuY2FudmFzPT09dCkucG9wKCl9O2Z1bmN0aW9uIElvKGUsdCxuKXtsZXQgcj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IGkgb2Ygcil7bGV0IHI9K2k7aWYocj49dCl7bGV0IGE9ZVtpXTtkZWxldGUgZVtpXSwobj4wfHxyPnQpJiYoZVtyK25dPWEpfX19ZnVuY3Rpb24gTG8oZSx0LG4scil7cmV0dXJuIW58fGUudHlwZT09PWBtb3VzZW91dGA/bnVsbDpyP3Q6ZX12YXIgUm89Y2xhc3N7c3RhdGljIGRlZmF1bHRzPUc7c3RhdGljIGluc3RhbmNlcz1QbztzdGF0aWMgb3ZlcnJpZGVzPWduO3N0YXRpYyByZWdpc3RyeT1YO3N0YXRpYyB2ZXJzaW9uPURvO3N0YXRpYyBnZXRDaGFydD1GbztzdGF0aWMgcmVnaXN0ZXIoLi4uZSl7WC5hZGQoLi4uZSksem8oKX1zdGF0aWMgdW5yZWdpc3RlciguLi5lKXtYLnJlbW92ZSguLi5lKSx6bygpfWNvbnN0cnVjdG9yKGUsdCl7bGV0IG49dGhpcy5jb25maWc9bmV3IENvKHQpLHI9Tm8oZSksaT1GbyhyKTtpZihpKXRocm93IEVycm9yKGBDYW52YXMgaXMgYWxyZWFkeSBpbiB1c2UuIENoYXJ0IHdpdGggSUQgJ2AraS5pZCtgJyBtdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGNhbnZhcyB3aXRoIElEICdgK2kuY2FudmFzLmlkK2AnIGNhbiBiZSByZXVzZWQuYCk7bGV0IGE9bi5jcmVhdGVSZXNvbHZlcihuLmNoYXJ0T3B0aW9uU2NvcGVzKCksdGhpcy5nZXRDb250ZXh0KCkpO3RoaXMucGxhdGZvcm09bmV3KG4ucGxhdGZvcm18fChrYShyKSkpLHRoaXMucGxhdGZvcm0udXBkYXRlQ29uZmlnKG4pO2xldCBvPXRoaXMucGxhdGZvcm0uYWNxdWlyZUNvbnRleHQocixhLmFzcGVjdFJhdGlvKSxzPW8mJm8uY2FudmFzLGM9cyYmcy5oZWlnaHQsbD1zJiZzLndpZHRoO2lmKHRoaXMuaWQ9WWUoKSx0aGlzLmN0eD1vLHRoaXMuY2FudmFzPXMsdGhpcy53aWR0aD1sLHRoaXMuaGVpZ2h0PWMsdGhpcy5fb3B0aW9ucz1hLHRoaXMuX2FzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX21ldGFzZXRzPVtdLHRoaXMuX3N0YWNrcz12b2lkIDAsdGhpcy5ib3hlcz1bXSx0aGlzLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXZvaWQgMCx0aGlzLmNoYXJ0QXJlYT12b2lkIDAsdGhpcy5fYWN0aXZlPVtdLHRoaXMuX2xhc3RFdmVudD12b2lkIDAsdGhpcy5fbGlzdGVuZXJzPXt9LHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnM9dm9pZCAwLHRoaXMuX3NvcnRlZE1ldGFzZXRzPVtdLHRoaXMuc2NhbGVzPXt9LHRoaXMuX3BsdWdpbnM9bmV3IHRvLHRoaXMuJHByb3hpZXM9e30sdGhpcy5faGlkZGVuSW5kaWNlcz17fSx0aGlzLmF0dGFjaGVkPSExLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5fZG9SZXNpemU9S3QoZT0+dGhpcy51cGRhdGUoZSksYS5yZXNpemVEZWxheXx8MCksdGhpcy5fZGF0YUNoYW5nZXM9W10sUG9bdGhpcy5pZF09dGhpcywhb3x8IXMpe2NvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgY2hhcnQ6IGNhbid0IGFjcXVpcmUgY29udGV4dCBmcm9tIHRoZSBnaXZlbiBpdGVtYCk7cmV0dXJufVkubGlzdGVuKHRoaXMsYGNvbXBsZXRlYCxqbyksWS5saXN0ZW4odGhpcyxgcHJvZ3Jlc3NgLE1vKSx0aGlzLl9pbml0aWFsaXplKCksdGhpcy5hdHRhY2hlZCYmdGhpcy51cGRhdGUoKX1nZXQgYXNwZWN0UmF0aW8oKXtsZXR7b3B0aW9uczp7YXNwZWN0UmF0aW86ZSxtYWludGFpbkFzcGVjdFJhdGlvOnR9LHdpZHRoOm4saGVpZ2h0OnIsX2FzcGVjdFJhdGlvOml9PXRoaXM7cmV0dXJuIGooZSk/dCYmaT9pOnI/bi9yOm51bGw6ZX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmNvbmZpZy5kYXRhfXNldCBkYXRhKGUpe3RoaXMuY29uZmlnLmRhdGE9ZX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9vcHRpb25zfXNldCBvcHRpb25zKGUpe3RoaXMuY29uZmlnLm9wdGlvbnM9ZX1nZXQgcmVnaXN0cnkoKXtyZXR1cm4gWH1faW5pdGlhbGl6ZSgpe3JldHVybiB0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUluaXRgKSx0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZT90aGlzLnJlc2l6ZSgpOlByKHRoaXMsdGhpcy5vcHRpb25zLmRldmljZVBpeGVsUmF0aW8pLHRoaXMuYmluZEV2ZW50cygpLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJJbml0YCksdGhpc31jbGVhcigpe3JldHVybiB3bih0aGlzLmNhbnZhcyx0aGlzLmN0eCksdGhpc31zdG9wKCl7cmV0dXJuIFkuc3RvcCh0aGlzKSx0aGlzfXJlc2l6ZShlLHQpe1kucnVubmluZyh0aGlzKT90aGlzLl9yZXNpemVCZWZvcmVEcmF3PXt3aWR0aDplLGhlaWdodDp0fTp0aGlzLl9yZXNpemUoZSx0KX1fcmVzaXplKGUsdCl7bGV0IG49dGhpcy5vcHRpb25zLHI9dGhpcy5jYW52YXMsaT1uLm1haW50YWluQXNwZWN0UmF0aW8mJnRoaXMuYXNwZWN0UmF0aW8sYT10aGlzLnBsYXRmb3JtLmdldE1heGltdW1TaXplKHIsZSx0LGkpLG89bi5kZXZpY2VQaXhlbFJhdGlvfHx0aGlzLnBsYXRmb3JtLmdldERldmljZVBpeGVsUmF0aW8oKSxzPXRoaXMud2lkdGg/YHJlc2l6ZWA6YGF0dGFjaGA7dGhpcy53aWR0aD1hLndpZHRoLHRoaXMuaGVpZ2h0PWEuaGVpZ2h0LHRoaXMuX2FzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sUHIodGhpcyxvLCEwKSYmKHRoaXMubm90aWZ5UGx1Z2lucyhgcmVzaXplYCx7c2l6ZTphfSksTChuLm9uUmVzaXplLFt0aGlzLGFdLHRoaXMpLHRoaXMuYXR0YWNoZWQmJnRoaXMuX2RvUmVzaXplKHMpJiZ0aGlzLnJlbmRlcigpKX1lbnN1cmVTY2FsZXNIYXZlSURzKCl7Uih0aGlzLm9wdGlvbnMuc2NhbGVzfHx7fSwoZSx0KT0+e2UuaWQ9dH0pfWJ1aWxkT3JVcGRhdGVTY2FsZXMoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnNjYWxlcyxuPXRoaXMuc2NhbGVzLHI9T2JqZWN0LmtleXMobikucmVkdWNlKChlLHQpPT4oZVt0XT0hMSxlKSx7fSksaT1bXTt0JiYoaT1pLmNvbmNhdChPYmplY3Qua2V5cyh0KS5tYXAoZT0+e2xldCBuPXRbZV0scj1mbyhlLG4pLGk9cj09PWByYCxhPXI9PT1geGA7cmV0dXJue29wdGlvbnM6bixkcG9zaXRpb246aT9gY2hhcnRBcmVhYDphP2Bib3R0b21gOmBsZWZ0YCxkdHlwZTppP2ByYWRpYWxMaW5lYXJgOmE/YGNhdGVnb3J5YDpgbGluZWFyYH19KSkpLFIoaSx0PT57bGV0IGk9dC5vcHRpb25zLGE9aS5pZCxvPWZvKGEsaSkscz1JKGkudHlwZSx0LmR0eXBlKTsoaS5wb3NpdGlvbj09PXZvaWQgMHx8a28oaS5wb3NpdGlvbixvKSE9PWtvKHQuZHBvc2l0aW9uKSkmJihpLnBvc2l0aW9uPXQuZHBvc2l0aW9uKSxyW2FdPSEwO2xldCBjPW51bGw7YSBpbiBuJiZuW2FdLnR5cGU9PT1zP2M9blthXTooYz1uZXcoWC5nZXRTY2FsZShzKSkoe2lkOmEsdHlwZTpzLGN0eDp0aGlzLmN0eCxjaGFydDp0aGlzfSksbltjLmlkXT1jKSxjLmluaXQoaSxlKX0pLFIociwoZSx0KT0+e2V8fGRlbGV0ZSBuW3RdfSksUihuLGU9PntvYS5jb25maWd1cmUodGhpcyxlLGUub3B0aW9ucyksb2EuYWRkQm94KHRoaXMsZSl9KX1fdXBkYXRlTWV0YXNldHMoKXtsZXQgZT10aGlzLl9tZXRhc2V0cyx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj1lLmxlbmd0aDtpZihlLnNvcnQoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCksbj50KXtmb3IobGV0IGU9dDtlPG47KytlKXRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShlKTtlLnNwbGljZSh0LG4tdCl9dGhpcy5fc29ydGVkTWV0YXNldHM9ZS5zbGljZSgwKS5zb3J0KEFvKGBvcmRlcmAsYGluZGV4YCkpfV9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpe2xldHtfbWV0YXNldHM6ZSxkYXRhOntkYXRhc2V0czp0fX09dGhpcztlLmxlbmd0aD50Lmxlbmd0aCYmZGVsZXRlIHRoaXMuX3N0YWNrcyxlLmZvckVhY2goKGUsbik9Pnt0LmZpbHRlcih0PT50PT09ZS5fZGF0YXNldCkubGVuZ3RoPT09MCYmdGhpcy5fZGVzdHJveURhdGFzZXRNZXRhKG4pfSl9YnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCl7bGV0IGU9W10sdD10aGlzLmRhdGEuZGF0YXNldHMsbixyO2Zvcih0aGlzLl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cygpLG49MCxyPXQubGVuZ3RoO248cjtuKyspe2xldCByPXRbbl0saT10aGlzLmdldERhdGFzZXRNZXRhKG4pLGE9ci50eXBlfHx0aGlzLmNvbmZpZy50eXBlO2lmKGkudHlwZSYmaS50eXBlIT09YSYmKHRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShuKSxpPXRoaXMuZ2V0RGF0YXNldE1ldGEobikpLGkudHlwZT1hLGkuaW5kZXhBeGlzPXIuaW5kZXhBeGlzfHxvbyhhLHRoaXMub3B0aW9ucyksaS5vcmRlcj1yLm9yZGVyfHwwLGkuaW5kZXg9bixpLmxhYmVsPWBgK3IubGFiZWwsaS52aXNpYmxlPXRoaXMuaXNEYXRhc2V0VmlzaWJsZShuKSxpLmNvbnRyb2xsZXIpaS5jb250cm9sbGVyLnVwZGF0ZUluZGV4KG4pLGkuY29udHJvbGxlci5saW5rU2NhbGVzKCk7ZWxzZXtsZXQgdD1YLmdldENvbnRyb2xsZXIoYSkse2RhdGFzZXRFbGVtZW50VHlwZTpyLGRhdGFFbGVtZW50VHlwZTpvfT1HLmRhdGFzZXRzW2FdO09iamVjdC5hc3NpZ24odCx7ZGF0YUVsZW1lbnRUeXBlOlguZ2V0RWxlbWVudChvKSxkYXRhc2V0RWxlbWVudFR5cGU6ciYmWC5nZXRFbGVtZW50KHIpfSksaS5jb250cm9sbGVyPW5ldyB0KHRoaXMsbiksZS5wdXNoKGkuY29udHJvbGxlcil9fXJldHVybiB0aGlzLl91cGRhdGVNZXRhc2V0cygpLGV9X3Jlc2V0RWxlbWVudHMoKXtSKHRoaXMuZGF0YS5kYXRhc2V0cywoZSx0KT0+e3RoaXMuZ2V0RGF0YXNldE1ldGEodCkuY29udHJvbGxlci5yZXNldCgpfSx0aGlzKX1yZXNldCgpe3RoaXMuX3Jlc2V0RWxlbWVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2V0YCl9dXBkYXRlKGUpe2xldCB0PXRoaXMuY29uZmlnO3QudXBkYXRlKCk7bGV0IG49dGhpcy5fb3B0aW9ucz10LmNyZWF0ZVJlc29sdmVyKHQuY2hhcnRPcHRpb25TY29wZXMoKSx0aGlzLmdldENvbnRleHQoKSkscj10aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9IW4uYW5pbWF0aW9uO2lmKHRoaXMuX3VwZGF0ZVNjYWxlcygpLHRoaXMuX2NoZWNrRXZlbnRCaW5kaW5ncygpLHRoaXMuX3VwZGF0ZUhpZGRlbkluZGljZXMoKSx0aGlzLl9wbHVnaW5zLmludmFsaWRhdGUoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVVwZGF0ZWAse21vZGU6ZSxjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IGk9dGhpcy5idWlsZE9yVXBkYXRlQ29udHJvbGxlcnMoKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUVsZW1lbnRzVXBkYXRlYCk7bGV0IGE9MDtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0O2UrKyl7bGV0e2NvbnRyb2xsZXI6dH09dGhpcy5nZXREYXRhc2V0TWV0YShlKSxuPSFyJiZpLmluZGV4T2YodCk9PT0tMTt0LmJ1aWxkT3JVcGRhdGVFbGVtZW50cyhuKSxhPU1hdGgubWF4KCt0LmdldE1heE92ZXJmbG93KCksYSl9YT10aGlzLl9taW5QYWRkaW5nPW4ubGF5b3V0LmF1dG9QYWRkaW5nP2E6MCx0aGlzLl91cGRhdGVMYXlvdXQoYSkscnx8UihpLGU9PntlLnJlc2V0KCl9KSx0aGlzLl91cGRhdGVEYXRhc2V0cyhlKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyVXBkYXRlYCx7bW9kZTplfSksdGhpcy5fbGF5ZXJzLnNvcnQoQW8oYHpgLGBfaWR4YCkpO2xldHtfYWN0aXZlOm8sX2xhc3RFdmVudDpzfT10aGlzO3M/dGhpcy5fZXZlbnRIYW5kbGVyKHMsITApOm8ubGVuZ3RoJiZ0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhvLG8sITApLHRoaXMucmVuZGVyKCl9X3VwZGF0ZVNjYWxlcygpe1IodGhpcy5zY2FsZXMsZT0+e29hLnJlbW92ZUJveCh0aGlzLGUpfSksdGhpcy5lbnN1cmVTY2FsZXNIYXZlSURzKCksdGhpcy5idWlsZE9yVXBkYXRlU2NhbGVzKCl9X2NoZWNrRXZlbnRCaW5kaW5ncygpe2xldCBlPXRoaXMub3B0aW9uczsoIWR0KG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKSksbmV3IFNldChlLmV2ZW50cykpfHwhIXRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMhPT1lLnJlc3BvbnNpdmUpJiYodGhpcy51bmJpbmRFdmVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSl9X3VwZGF0ZUhpZGRlbkluZGljZXMoKXtsZXR7X2hpZGRlbkluZGljZXM6ZX09dGhpcyx0PXRoaXMuX2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpfHxbXTtmb3IobGV0e21ldGhvZDpuLHN0YXJ0OnIsY291bnQ6aX1vZiB0KUlvKGUscixuPT09YF9yZW1vdmVFbGVtZW50c2A/LWk6aSl9X2dldFVuaWZvcm1EYXRhQ2hhbmdlcygpe2xldCBlPXRoaXMuX2RhdGFDaGFuZ2VzO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuO3RoaXMuX2RhdGFDaGFuZ2VzPVtdO2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGgsbj10PT5uZXcgU2V0KGUuZmlsdGVyKGU9PmVbMF09PT10KS5tYXAoKGUsdCk9PnQrYCxgK2Uuc3BsaWNlKDEpLmpvaW4oYCxgKSkpLHI9bigwKTtmb3IobGV0IGU9MTtlPHQ7ZSsrKWlmKCFkdChyLG4oZSkpKXJldHVybjtyZXR1cm4gQXJyYXkuZnJvbShyKS5tYXAoZT0+ZS5zcGxpdChgLGApKS5tYXAoZT0+KHttZXRob2Q6ZVsxXSxzdGFydDorZVsyXSxjb3VudDorZVszXX0pKX1fdXBkYXRlTGF5b3V0KGUpe2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlTGF5b3V0YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO29hLnVwZGF0ZSh0aGlzLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZSk7bGV0IHQ9dGhpcy5jaGFydEFyZWEsbj10LndpZHRoPD0wfHx0LmhlaWdodDw9MDt0aGlzLl9sYXllcnM9W10sUih0aGlzLmJveGVzLGU9PntuJiZlLnBvc2l0aW9uPT09YGNoYXJ0QXJlYWB8fChlLmNvbmZpZ3VyZSYmZS5jb25maWd1cmUoKSx0aGlzLl9sYXllcnMucHVzaCguLi5lLl9sYXllcnMoKSkpfSx0aGlzKSx0aGlzLl9sYXllcnMuZm9yRWFjaCgoZSx0KT0+e2UuX2lkeD10fSksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckxheW91dGApfV91cGRhdGVEYXRhc2V0cyhlKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzVXBkYXRlYCx7bW9kZTplLGNhbmNlbGFibGU6ITB9KSE9PSExKXtmb3IobGV0IGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIuY29uZmlndXJlKCk7Zm9yKGxldCB0PTAsbj10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8bjsrK3QpdGhpcy5fdXBkYXRlRGF0YXNldCh0LHV0KGUpP2Uoe2RhdGFzZXRJbmRleDp0fSk6ZSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRzVXBkYXRlYCx7bW9kZTplfSl9fV91cGRhdGVEYXRhc2V0KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKSxyPXttZXRhOm4saW5kZXg6ZSxtb2RlOnQsY2FuY2VsYWJsZTohMH07dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0VXBkYXRlYCxyKSE9PSExJiYobi5jb250cm9sbGVyLl91cGRhdGUodCksci5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0VXBkYXRlYCxyKSl9cmVuZGVyKCl7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVSZW5kZXJgLHtjYW5jZWxhYmxlOiEwfSkhPT0hMSYmKFkuaGFzKHRoaXMpP3RoaXMuYXR0YWNoZWQmJiFZLnJ1bm5pbmcodGhpcykmJlkuc3RhcnQodGhpcyk6KHRoaXMuZHJhdygpLGpvKHtjaGFydDp0aGlzfSkpKX1kcmF3KCl7bGV0IGU7aWYodGhpcy5fcmVzaXplQmVmb3JlRHJhdyl7bGV0e3dpZHRoOmUsaGVpZ2h0OnR9PXRoaXMuX3Jlc2l6ZUJlZm9yZURyYXc7dGhpcy5fcmVzaXplQmVmb3JlRHJhdz1udWxsLHRoaXMuX3Jlc2l6ZShlLHQpfWlmKHRoaXMuY2xlYXIoKSx0aGlzLndpZHRoPD0wfHx0aGlzLmhlaWdodDw9MHx8dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEcmF3YCx7Y2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCB0PXRoaXMuX2xheWVycztmb3IoZT0wO2U8dC5sZW5ndGgmJnRbZV0uejw9MDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTtmb3IodGhpcy5fZHJhd0RhdGFzZXRzKCk7ZTx0Lmxlbmd0aDsrK2UpdFtlXS5kcmF3KHRoaXMuY2hhcnRBcmVhKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRHJhd2ApfV9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoZSl7bGV0IHQ9dGhpcy5fc29ydGVkTWV0YXNldHMsbj1bXSxyLGk7Zm9yKHI9MCxpPXQubGVuZ3RoO3I8aTsrK3Ipe2xldCBpPXRbcl07KCFlfHxpLnZpc2libGUpJiZuLnB1c2goaSl9cmV0dXJuIG59Z2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpe3JldHVybiB0aGlzLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoITApfV9kcmF3RGF0YXNldHMoKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXRzRHJhd2Ase2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgZT10aGlzLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtmb3IobGV0IHQ9ZS5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLl9kcmF3RGF0YXNldChlW3RdKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldHNEcmF3YCl9X2RyYXdEYXRhc2V0KGUpe2xldCB0PXRoaXMuY3R4LG49e21ldGE6ZSxpbmRleDplLmluZGV4LGNhbmNlbGFibGU6ITB9LHI9YWkodGhpcyxlKTt0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZURhdGFzZXREcmF3YCxuKSE9PSExJiYociYmRG4odCxyKSxlLmNvbnRyb2xsZXIuZHJhdygpLHImJk9uKHQpLG4uY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldERyYXdgLG4pKX1pc1BvaW50SW5BcmVhKGUpe3JldHVybiBLKGUsdGhpcy5jaGFydEFyZWEsdGhpcy5fbWluUGFkZGluZyl9Z2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZShlLHQsbixyKXtsZXQgaT1VaS5tb2Rlc1t0XTtyZXR1cm4gdHlwZW9mIGk9PWBmdW5jdGlvbmA/aSh0aGlzLGUsbixyKTpbXX1nZXREYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLmRhdGEuZGF0YXNldHNbZV0sbj10aGlzLl9tZXRhc2V0cyxyPW4uZmlsdGVyKGU9PmUmJmUuX2RhdGFzZXQ9PT10KS5wb3AoKTtyZXR1cm4gcnx8KHI9e3R5cGU6bnVsbCxkYXRhOltdLGRhdGFzZXQ6bnVsbCxjb250cm9sbGVyOm51bGwsaGlkZGVuOm51bGwseEF4aXNJRDpudWxsLHlBeGlzSUQ6bnVsbCxvcmRlcjp0JiZ0Lm9yZGVyfHwwLGluZGV4OmUsX2RhdGFzZXQ6dCxfcGFyc2VkOltdLF9zb3J0ZWQ6ITF9LG4ucHVzaChyKSkscn1nZXRDb250ZXh0KCl7cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1HbihudWxsLHtjaGFydDp0aGlzLHR5cGU6YGNoYXJ0YH0pfWdldFZpc2libGVEYXRhc2V0Q291bnQoKXtyZXR1cm4gdGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCkubGVuZ3RofWlzRGF0YXNldFZpc2libGUoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdO2lmKCF0KXJldHVybiExO2xldCBuPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSk7cmV0dXJuIHR5cGVvZiBuLmhpZGRlbj09YGJvb2xlYW5gPyFuLmhpZGRlbjohdC5oaWRkZW59c2V0RGF0YXNldFZpc2liaWxpdHkoZSx0KXtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO24uaGlkZGVuPSF0fXRvZ2dsZURhdGFWaXNpYmlsaXR5KGUpe3RoaXMuX2hpZGRlbkluZGljZXNbZV09IXRoaXMuX2hpZGRlbkluZGljZXNbZV19Z2V0RGF0YVZpc2liaWxpdHkoZSl7cmV0dXJuIXRoaXMuX2hpZGRlbkluZGljZXNbZV19X3VwZGF0ZVZpc2liaWxpdHkoZSx0LG4pe2xldCByPW4/YHNob3dgOmBoaWRlYCxpPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSksYT1pLmNvbnRyb2xsZXIuX3Jlc29sdmVBbmltYXRpb25zKHZvaWQgMCxyKTtsdCh0KT8oaS5kYXRhW3RdLmhpZGRlbj0hbix0aGlzLnVwZGF0ZSgpKToodGhpcy5zZXREYXRhc2V0VmlzaWJpbGl0eShlLG4pLGEudXBkYXRlKGkse3Zpc2libGU6bn0pLHRoaXMudXBkYXRlKHQ9PnQuZGF0YXNldEluZGV4PT09ZT9yOnZvaWQgMCkpfWhpZGUoZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMSl9c2hvdyhlLHQpe3RoaXMuX3VwZGF0ZVZpc2liaWxpdHkoZSx0LCEwKX1fZGVzdHJveURhdGFzZXRNZXRhKGUpe2xldCB0PXRoaXMuX21ldGFzZXRzW2VdO3QmJnQuY29udHJvbGxlciYmdC5jb250cm9sbGVyLl9kZXN0cm95KCksZGVsZXRlIHRoaXMuX21ldGFzZXRzW2VdfV9zdG9wKCl7bGV0IGUsdDtmb3IodGhpcy5zdG9wKCksWS5yZW1vdmUodGhpcyksZT0wLHQ9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtlPHQ7KytlKXRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShlKX1kZXN0cm95KCl7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEZXN0cm95YCk7bGV0e2NhbnZhczplLGN0eDp0fT10aGlzO3RoaXMuX3N0b3AoKSx0aGlzLmNvbmZpZy5jbGVhckNhY2hlKCksZSYmKHRoaXMudW5iaW5kRXZlbnRzKCksd24oZSx0KSx0aGlzLnBsYXRmb3JtLnJlbGVhc2VDb250ZXh0KHQpLHRoaXMuY2FudmFzPW51bGwsdGhpcy5jdHg9bnVsbCksZGVsZXRlIFBvW3RoaXMuaWRdLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEZXN0cm95YCl9dG9CYXNlNjRJbWFnZSguLi5lKXtyZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKC4uLmUpfWJpbmRFdmVudHMoKXt0aGlzLmJpbmRVc2VyRXZlbnRzKCksdGhpcy5vcHRpb25zLnJlc3BvbnNpdmU/dGhpcy5iaW5kUmVzcG9uc2l2ZUV2ZW50cygpOnRoaXMuYXR0YWNoZWQ9ITB9YmluZFVzZXJFdmVudHMoKXtsZXQgZT10aGlzLl9saXN0ZW5lcnMsdD10aGlzLnBsYXRmb3JtLG49KG4scik9Pnt0LmFkZEV2ZW50TGlzdGVuZXIodGhpcyxuLHIpLGVbbl09cn0scj0oZSx0LG4pPT57ZS5vZmZzZXRYPXQsZS5vZmZzZXRZPW4sdGhpcy5fZXZlbnRIYW5kbGVyKGUpfTtSKHRoaXMub3B0aW9ucy5ldmVudHMsZT0+bihlLHIpKX1iaW5kUmVzcG9uc2l2ZUV2ZW50cygpe3RoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnN8fD17fTtsZXQgZT10aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzLHQ9dGhpcy5wbGF0Zm9ybSxuPShuLHIpPT57dC5hZGRFdmVudExpc3RlbmVyKHRoaXMsbixyKSxlW25dPXJ9LHI9KG4scik9PntlW25dJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsbixyKSxkZWxldGUgZVtuXSl9LGk9KGUsdCk9Pnt0aGlzLmNhbnZhcyYmdGhpcy5yZXNpemUoZSx0KX0sYSxvPSgpPT57cihgYXR0YWNoYCxvKSx0aGlzLmF0dGFjaGVkPSEwLHRoaXMucmVzaXplKCksbihgcmVzaXplYCxpKSxuKGBkZXRhY2hgLGEpfTthPSgpPT57dGhpcy5hdHRhY2hlZD0hMSxyKGByZXNpemVgLGkpLHRoaXMuX3N0b3AoKSx0aGlzLl9yZXNpemUoMCwwKSxuKGBhdHRhY2hgLG8pfSx0LmlzQXR0YWNoZWQodGhpcy5jYW52YXMpP28oKTphKCl9dW5iaW5kRXZlbnRzKCl7Uih0aGlzLl9saXN0ZW5lcnMsKGUsdCk9Pnt0aGlzLnBsYXRmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyx0LGUpfSksdGhpcy5fbGlzdGVuZXJzPXt9LFIodGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycywoZSx0KT0+e3RoaXMucGxhdGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLHQsZSl9KSx0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzPXZvaWQgMH11cGRhdGVIb3ZlclN0eWxlKGUsdCxuKXtsZXQgcj1uP2BzZXRgOmByZW1vdmVgLGksYSxvLHM7Zm9yKHQ9PT1gZGF0YXNldGAmJihpPXRoaXMuZ2V0RGF0YXNldE1ldGEoZVswXS5kYXRhc2V0SW5kZXgpLGkuY29udHJvbGxlcltgX2ArcitgRGF0YXNldEhvdmVyU3R5bGVgXSgpKSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKXthPWVbb107bGV0IHQ9YSYmdGhpcy5nZXREYXRhc2V0TWV0YShhLmRhdGFzZXRJbmRleCkuY29udHJvbGxlcjt0JiZ0W3IrYEhvdmVyU3R5bGVgXShhLmVsZW1lbnQsYS5kYXRhc2V0SW5kZXgsYS5pbmRleCl9fWdldEFjdGl2ZUVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZXx8W119c2V0QWN0aXZlRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fYWN0aXZlfHxbXSxuPWUubWFwKCh7ZGF0YXNldEluZGV4OmUsaW5kZXg6dH0pPT57bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKTtpZighbil0aHJvdyBFcnJvcihgTm8gZGF0YXNldCBmb3VuZCBhdCBpbmRleCBgK2UpO3JldHVybntkYXRhc2V0SW5kZXg6ZSxlbGVtZW50Om4uZGF0YVt0XSxpbmRleDp0fX0pO1plKG4sdCl8fCh0aGlzLl9hY3RpdmU9bix0aGlzLl9sYXN0RXZlbnQ9bnVsbCx0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhuLHQpKX1ub3RpZnlQbHVnaW5zKGUsdCxuKXtyZXR1cm4gdGhpcy5fcGx1Z2lucy5ub3RpZnkodGhpcyxlLHQsbil9aXNQbHVnaW5FbmFibGVkKGUpe3JldHVybiB0aGlzLl9wbHVnaW5zLl9jYWNoZS5maWx0ZXIodD0+dC5wbHVnaW4uaWQ9PT1lKS5sZW5ndGg9PT0xfV91cGRhdGVIb3ZlclN0eWxlcyhlLHQsbil7bGV0IHI9dGhpcy5vcHRpb25zLmhvdmVyLGk9KGUsdCk9PmUuZmlsdGVyKGU9PiF0LnNvbWUodD0+ZS5kYXRhc2V0SW5kZXg9PT10LmRhdGFzZXRJbmRleCYmZS5pbmRleD09PXQuaW5kZXgpKSxhPWkodCxlKSxvPW4/ZTppKGUsdCk7YS5sZW5ndGgmJnRoaXMudXBkYXRlSG92ZXJTdHlsZShhLHIubW9kZSwhMSksby5sZW5ndGgmJnIubW9kZSYmdGhpcy51cGRhdGVIb3ZlclN0eWxlKG8sci5tb2RlLCEwKX1fZXZlbnRIYW5kbGVyKGUsdCl7bGV0IG49e2V2ZW50OmUscmVwbGF5OnQsY2FuY2VsYWJsZTohMCxpbkNoYXJ0QXJlYTp0aGlzLmlzUG9pbnRJbkFyZWEoZSl9LHI9dD0+KHQub3B0aW9ucy5ldmVudHN8fHRoaXMub3B0aW9ucy5ldmVudHMpLmluY2x1ZGVzKGUubmF0aXZlLnR5cGUpO2lmKHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRXZlbnRgLG4scik9PT0hMSlyZXR1cm47bGV0IGk9dGhpcy5faGFuZGxlRXZlbnQoZSx0LG4uaW5DaGFydEFyZWEpO3JldHVybiBuLmNhbmNlbGFibGU9ITEsdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckV2ZW50YCxuLHIpLChpfHxuLmNoYW5nZWQpJiZ0aGlzLnJlbmRlcigpLHRoaXN9X2hhbmRsZUV2ZW50KGUsdCxuKXtsZXR7X2FjdGl2ZTpyPVtdLG9wdGlvbnM6aX09dGhpcyxhPXQsbz10aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLHIsbixhKSxzPWZ0KGUpLGM9TG8oZSx0aGlzLl9sYXN0RXZlbnQsbixzKTtuJiYodGhpcy5fbGFzdEV2ZW50PW51bGwsTChpLm9uSG92ZXIsW2Usbyx0aGlzXSx0aGlzKSxzJiZMKGkub25DbGljayxbZSxvLHRoaXNdLHRoaXMpKTtsZXQgbD0hWmUobyxyKTtyZXR1cm4obHx8dCkmJih0aGlzLl9hY3RpdmU9byx0aGlzLl91cGRhdGVIb3ZlclN0eWxlcyhvLHIsdCkpLHRoaXMuX2xhc3RFdmVudD1jLGx9X2dldEFjdGl2ZUVsZW1lbnRzKGUsdCxuLHIpe2lmKGUudHlwZT09PWBtb3VzZW91dGApcmV0dXJuW107aWYoIW4pcmV0dXJuIHQ7bGV0IGk9dGhpcy5vcHRpb25zLmhvdmVyO3JldHVybiB0aGlzLmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSxpLm1vZGUsaSxyKX19O2Z1bmN0aW9uIHpvKCl7cmV0dXJuIFIoUm8uaW5zdGFuY2VzLGU9PmUuX3BsdWdpbnMuaW52YWxpZGF0ZSgpKX1mdW5jdGlvbiBCbyhlLHQsbj10KXtlLmxpbmVDYXA9SShuLmJvcmRlckNhcFN0eWxlLHQuYm9yZGVyQ2FwU3R5bGUpLGUuc2V0TGluZURhc2goSShuLmJvcmRlckRhc2gsdC5ib3JkZXJEYXNoKSksZS5saW5lRGFzaE9mZnNldD1JKG4uYm9yZGVyRGFzaE9mZnNldCx0LmJvcmRlckRhc2hPZmZzZXQpLGUubGluZUpvaW49SShuLmJvcmRlckpvaW5TdHlsZSx0LmJvcmRlckpvaW5TdHlsZSksZS5saW5lV2lkdGg9SShuLmJvcmRlcldpZHRoLHQuYm9yZGVyV2lkdGgpLGUuc3Ryb2tlU3R5bGU9SShuLmJvcmRlckNvbG9yLHQuYm9yZGVyQ29sb3IpfWZ1bmN0aW9uIFZvKGUsdCxuKXtlLmxpbmVUbyhuLngsbi55KX1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gZS5zdGVwcGVkP2tuOmUudGVuc2lvbnx8ZS5jdWJpY0ludGVycG9sYXRpb25Nb2RlPT09YG1vbm90b25lYD9BbjpWb31mdW5jdGlvbiBVbyhlLHQsbj17fSl7bGV0IHI9ZS5sZW5ndGgse3N0YXJ0Omk9MCxlbmQ6YT1yLTF9PW4se3N0YXJ0Om8sZW5kOnN9PXQsYz1NYXRoLm1heChpLG8pLGw9TWF0aC5taW4oYSxzKSx1PWk8byYmYTxvfHxpPnMmJmE+cztyZXR1cm57Y291bnQ6cixzdGFydDpjLGxvb3A6dC5sb29wLGlsZW46bDxjJiYhdT9yK2wtYzpsLWN9fWZ1bmN0aW9uIFdvKGUsdCxuLHIpe2xldHtwb2ludHM6aSxvcHRpb25zOmF9PXQse2NvdW50Om8sc3RhcnQ6cyxsb29wOmMsaWxlbjpsfT1VbyhpLG4sciksdT1IbyhhKSx7bW92ZTpkPSEwLHJldmVyc2U6Zn09cnx8e30scCxtLGg7Zm9yKHA9MDtwPD1sOysrcCltPWlbKHMrKGY/bC1wOnApKSVvXSwhbS5za2lwJiYoZD8oZS5tb3ZlVG8obS54LG0ueSksZD0hMSk6dShlLGgsbSxmLGEuc3RlcHBlZCksaD1tKTtyZXR1cm4gYyYmKG09aVsocysoZj9sOjApKSVvXSx1KGUsaCxtLGYsYS5zdGVwcGVkKSksISFjfWZ1bmN0aW9uIEdvKGUsdCxuLHIpe2xldCBpPXQucG9pbnRzLHtjb3VudDphLHN0YXJ0Om8saWxlbjpzfT1VbyhpLG4scikse21vdmU6Yz0hMCxyZXZlcnNlOmx9PXJ8fHt9LHU9MCxkPTAsZixwLG0saCxnLF8sdj1lPT4obysobD9zLWU6ZSkpJWEseT0oKT0+e2ghPT1nJiYoZS5saW5lVG8odSxnKSxlLmxpbmVUbyh1LGgpLGUubGluZVRvKHUsXykpfTtmb3IoYyYmKHA9aVt2KDApXSxlLm1vdmVUbyhwLngscC55KSksZj0wO2Y8PXM7KytmKXtpZihwPWlbdihmKV0scC5za2lwKWNvbnRpbnVlO2xldCB0PXAueCxuPXAueSxyPXR8MDtyPT09bT8objxoP2g9bjpuPmcmJihnPW4pLHU9KGQqdSt0KS8rK2QpOih5KCksZS5saW5lVG8odCxuKSxtPXIsZD0wLGg9Zz1uKSxfPW59eSgpfWZ1bmN0aW9uIEtvKGUpe2xldCB0PWUub3B0aW9ucyxuPXQuYm9yZGVyRGFzaCYmdC5ib3JkZXJEYXNoLmxlbmd0aDtyZXR1cm4hZS5fZGVjaW1hdGVkJiYhZS5fbG9vcCYmIXQudGVuc2lvbiYmdC5jdWJpY0ludGVycG9sYXRpb25Nb2RlIT09YG1vbm90b25lYCYmIXQuc3RlcHBlZCYmIW4/R286V299ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGUuc3RlcHBlZD9ScjplLnRlbnNpb258fGUuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZT09PWBtb25vdG9uZWA/enI6THJ9ZnVuY3Rpb24gSm8oZSx0LG4scil7bGV0IGk9dC5fcGF0aDtpfHwoaT10Ll9wYXRoPW5ldyBQYXRoMkQsdC5wYXRoKGksbixyKSYmaS5jbG9zZVBhdGgoKSksQm8oZSx0Lm9wdGlvbnMpLGUuc3Ryb2tlKGkpfWZ1bmN0aW9uIFlvKGUsdCxuLHIpe2xldHtzZWdtZW50czppLG9wdGlvbnM6YX09dCxvPUtvKHQpO2ZvcihsZXQgcyBvZiBpKUJvKGUsYSxzLnN0eWxlKSxlLmJlZ2luUGF0aCgpLG8oZSx0LHMse3N0YXJ0Om4sZW5kOm4rci0xfSkmJmUuY2xvc2VQYXRoKCksZS5zdHJva2UoKX12YXIgWG89dHlwZW9mIFBhdGgyRD09YGZ1bmN0aW9uYDtmdW5jdGlvbiBabyhlLHQsbixyKXtYbyYmIXQub3B0aW9ucy5zZWdtZW50P0pvKGUsdCxuLHIpOllvKGUsdCxuLHIpfXZhciBRbz1jbGFzcyBleHRlbmRzIEFhe3N0YXRpYyBpZD1gbGluZWA7c3RhdGljIGRlZmF1bHRzPXtib3JkZXJDYXBTdHlsZTpgYnV0dGAsYm9yZGVyRGFzaDpbXSxib3JkZXJEYXNoT2Zmc2V0OjAsYm9yZGVySm9pblN0eWxlOmBtaXRlcmAsYm9yZGVyV2lkdGg6MyxjYXBCZXppZXJQb2ludHM6ITAsY3ViaWNJbnRlcnBvbGF0aW9uTW9kZTpgZGVmYXVsdGAsZmlsbDohMSxzcGFuR2FwczohMSxzdGVwcGVkOiExLHRlbnNpb246MH07c3RhdGljIGRlZmF1bHRSb3V0ZXM9e2JhY2tncm91bmRDb2xvcjpgYmFja2dyb3VuZENvbG9yYCxib3JkZXJDb2xvcjpgYm9yZGVyQ29sb3JgfTtzdGF0aWMgZGVzY3JpcHRvcnM9e19zY3JpcHRhYmxlOiEwLF9pbmRleGFibGU6ZT0+ZSE9PWBib3JkZXJEYXNoYCYmZSE9PWBmaWxsYH07Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmFuaW1hdGVkPSEwLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5fY2hhcnQ9dm9pZCAwLHRoaXMuX2xvb3A9dm9pZCAwLHRoaXMuX2Z1bGxMb29wPXZvaWQgMCx0aGlzLl9wYXRoPXZvaWQgMCx0aGlzLl9wb2ludHM9dm9pZCAwLHRoaXMuX3NlZ21lbnRzPXZvaWQgMCx0aGlzLl9kZWNpbWF0ZWQ9ITEsdGhpcy5fcG9pbnRzVXBkYXRlZD0hMSx0aGlzLl9kYXRhc2V0SW5kZXg9dm9pZCAwLGUmJk9iamVjdC5hc3NpZ24odGhpcyxlKX11cGRhdGVDb250cm9sUG9pbnRzKGUsdCl7bGV0IG49dGhpcy5vcHRpb25zO2lmKChuLnRlbnNpb258fG4uY3ViaWNJbnRlcnBvbGF0aW9uTW9kZT09PWBtb25vdG9uZWApJiYhbi5zdGVwcGVkJiYhdGhpcy5fcG9pbnRzVXBkYXRlZCl7bGV0IHI9bi5zcGFuR2Fwcz90aGlzLl9sb29wOnRoaXMuX2Z1bGxMb29wO2JyKHRoaXMuX3BvaW50cyxuLGUscix0KSx0aGlzLl9wb2ludHNVcGRhdGVkPSEwfX1zZXQgcG9pbnRzKGUpe3RoaXMuX3BvaW50cz1lLGRlbGV0ZSB0aGlzLl9zZWdtZW50cyxkZWxldGUgdGhpcy5fcGF0aCx0aGlzLl9wb2ludHNVcGRhdGVkPSExfWdldCBwb2ludHMoKXtyZXR1cm4gdGhpcy5fcG9pbnRzfWdldCBzZWdtZW50cygpe3JldHVybiB0aGlzLl9zZWdtZW50c3x8PVFyKHRoaXMsdGhpcy5vcHRpb25zLnNlZ21lbnQpfWZpcnN0KCl7bGV0IGU9dGhpcy5zZWdtZW50cyx0PXRoaXMucG9pbnRzO3JldHVybiBlLmxlbmd0aCYmdFtlWzBdLnN0YXJ0XX1sYXN0KCl7bGV0IGU9dGhpcy5zZWdtZW50cyx0PXRoaXMucG9pbnRzLG49ZS5sZW5ndGg7cmV0dXJuIG4mJnRbZVtuLTFdLmVuZF19aW50ZXJwb2xhdGUoZSx0KXtsZXQgbj10aGlzLm9wdGlvbnMscj1lW3RdLGk9dGhpcy5wb2ludHMsYT1Zcih0aGlzLHtwcm9wZXJ0eTp0LHN0YXJ0OnIsZW5kOnJ9KTtpZighYS5sZW5ndGgpcmV0dXJuO2xldCBvPVtdLHM9cW8obiksYyxsO2ZvcihjPTAsbD1hLmxlbmd0aDtjPGw7KytjKXtsZXR7c3RhcnQ6bCxlbmQ6dX09YVtjXSxkPWlbbF0sZj1pW3VdO2lmKGQ9PT1mKXtvLnB1c2goZCk7Y29udGludWV9bGV0IHA9cyhkLGYsTWF0aC5hYnMoKHItZFt0XSkvKGZbdF0tZFt0XSkpLG4uc3RlcHBlZCk7cFt0XT1lW3RdLG8ucHVzaChwKX1yZXR1cm4gby5sZW5ndGg9PT0xP29bMF06b31wYXRoU2VnbWVudChlLHQsbil7cmV0dXJuIEtvKHRoaXMpKGUsdGhpcyx0LG4pfXBhdGgoZSx0LG4pe2xldCByPXRoaXMuc2VnbWVudHMsaT1Lbyh0aGlzKSxhPXRoaXMuX2xvb3A7dHx8PTAsbnx8PXRoaXMucG9pbnRzLmxlbmd0aC10O2ZvcihsZXQgbyBvZiByKWEmPWkoZSx0aGlzLG8se3N0YXJ0OnQsZW5kOnQrbi0xfSk7cmV0dXJuISFhfWRyYXcoZSx0LG4scil7bGV0IGk9dGhpcy5vcHRpb25zfHx7fTsodGhpcy5wb2ludHN8fFtdKS5sZW5ndGgmJmkuYm9yZGVyV2lkdGgmJihlLnNhdmUoKSxabyhlLHRoaXMsbixyKSxlLnJlc3RvcmUoKSksdGhpcy5hbmltYXRlZCYmKHRoaXMuX3BvaW50c1VwZGF0ZWQ9ITEsdGhpcy5fcGF0aD12b2lkIDApfX07ZnVuY3Rpb24gJG8oZSx0LG4scil7bGV0IGk9ZS5vcHRpb25zLHtbbl06YX09ZS5nZXRQcm9wcyhbbl0scik7cmV0dXJuIE1hdGguYWJzKHQtYSk8aS5yYWRpdXMraS5oaXRSYWRpdXN9dmFyIGVzPWNsYXNzIGV4dGVuZHMgQWF7c3RhdGljIGlkPWBwb2ludGA7cGFyc2VkO3NraXA7c3RvcDtzdGF0aWMgZGVmYXVsdHM9e2JvcmRlcldpZHRoOjEsaGl0UmFkaXVzOjEsaG92ZXJCb3JkZXJXaWR0aDoxLGhvdmVyUmFkaXVzOjQscG9pbnRTdHlsZTpgY2lyY2xlYCxyYWRpdXM6Myxyb3RhdGlvbjowfTtzdGF0aWMgZGVmYXVsdFJvdXRlcz17YmFja2dyb3VuZENvbG9yOmBiYWNrZ3JvdW5kQ29sb3JgLGJvcmRlckNvbG9yOmBib3JkZXJDb2xvcmB9O2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5vcHRpb25zPXZvaWQgMCx0aGlzLnBhcnNlZD12b2lkIDAsdGhpcy5za2lwPXZvaWQgMCx0aGlzLnN0b3A9dm9pZCAwLGUmJk9iamVjdC5hc3NpZ24odGhpcyxlKX1pblJhbmdlKGUsdCxuKXtsZXQgcj10aGlzLm9wdGlvbnMse3g6aSx5OmF9PXRoaXMuZ2V0UHJvcHMoW2B4YCxgeWBdLG4pO3JldHVybihlLWkpKioyKyh0LWEpKioyPChyLmhpdFJhZGl1cytyLnJhZGl1cykqKjJ9aW5YUmFuZ2UoZSx0KXtyZXR1cm4gJG8odGhpcyxlLGB4YCx0KX1pbllSYW5nZShlLHQpe3JldHVybiAkbyh0aGlzLGUsYHlgLHQpfWdldENlbnRlclBvaW50KGUpe2xldHt4OnQseTpufT10aGlzLmdldFByb3BzKFtgeGAsYHlgXSxlKTtyZXR1cm57eDp0LHk6bn19c2l6ZShlKXtlPWV8fHRoaXMub3B0aW9uc3x8e307bGV0IHQ9ZS5yYWRpdXN8fDA7dD1NYXRoLm1heCh0LHQmJmUuaG92ZXJSYWRpdXN8fDApO2xldCBuPXQmJmUuYm9yZGVyV2lkdGh8fDA7cmV0dXJuKHQrbikqMn1kcmF3KGUsdCl7bGV0IG49dGhpcy5vcHRpb25zO3RoaXMuc2tpcHx8bi5yYWRpdXM8LjF8fCFLKHRoaXMsdCx0aGlzLnNpemUobikvMil8fChlLnN0cm9rZVN0eWxlPW4uYm9yZGVyQ29sb3IsZS5saW5lV2lkdGg9bi5ib3JkZXJXaWR0aCxlLmZpbGxTdHlsZT1uLmJhY2tncm91bmRDb2xvcixUbihlLG4sdGhpcy54LHRoaXMueSkpfWdldFJhbmdlKCl7bGV0IGU9dGhpcy5vcHRpb25zfHx7fTtyZXR1cm4gZS5yYWRpdXMrZS5oaXRSYWRpdXN9fTtmdW5jdGlvbiB0cyhlLHQsbil7bGV0IHI9ZS5zZWdtZW50cyxpPWUucG9pbnRzLGE9dC5wb2ludHMsbz1bXTtmb3IobGV0IGUgb2Ygcil7bGV0e3N0YXJ0OnIsZW5kOnN9PWU7cz1pcyhyLHMsaSk7bGV0IGM9bnMobixpW3JdLGlbc10sZS5sb29wKTtpZighdC5zZWdtZW50cyl7by5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6YyxzdGFydDppW3JdLGVuZDppW3NdfSk7Y29udGludWV9bGV0IGw9WXIodCxjKTtmb3IobGV0IHQgb2YgbCl7bGV0IHI9bnMobixhW3Quc3RhcnRdLGFbdC5lbmRdLHQubG9vcCkscz1KcihlLGkscik7Zm9yKGxldCBlIG9mIHMpby5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6dCxzdGFydDp7W25dOmFzKGMscixgc3RhcnRgLE1hdGgubWF4KX0sZW5kOntbbl06YXMoYyxyLGBlbmRgLE1hdGgubWluKX19KX19cmV0dXJuIG99ZnVuY3Rpb24gbnMoZSx0LG4scil7aWYocilyZXR1cm47bGV0IGk9dFtlXSxhPW5bZV07cmV0dXJuIGU9PT1gYW5nbGVgJiYoaT1IKGkpLGE9SChhKSkse3Byb3BlcnR5OmUsc3RhcnQ6aSxlbmQ6YX19ZnVuY3Rpb24gcnMoZSx0KXtsZXR7eDpuPW51bGwseTpyPW51bGx9PWV8fHt9LGk9dC5wb2ludHMsYT1bXTtyZXR1cm4gdC5zZWdtZW50cy5mb3JFYWNoKCh7c3RhcnQ6ZSxlbmQ6dH0pPT57dD1pcyhlLHQsaSk7bGV0IG89aVtlXSxzPWlbdF07cj09PW51bGw/biE9PW51bGwmJihhLnB1c2goe3g6bix5Om8ueX0pLGEucHVzaCh7eDpuLHk6cy55fSkpOihhLnB1c2goe3g6by54LHk6cn0pLGEucHVzaCh7eDpzLngseTpyfSkpfSksYX1mdW5jdGlvbiBpcyhlLHQsbil7Zm9yKDt0PmU7dC0tKXtsZXQgZT1uW3RdO2lmKCFpc05hTihlLngpJiYhaXNOYU4oZS55KSlicmVha31yZXR1cm4gdH1mdW5jdGlvbiBhcyhlLHQsbixyKXtyZXR1cm4gZSYmdD9yKGVbbl0sdFtuXSk6ZT9lW25dOnQ/dFtuXTowfWZ1bmN0aW9uIG9zKGUsdCl7bGV0IG49W10scj0hMTtyZXR1cm4gTShlKT8ocj0hMCxuPWUpOm49cnMoZSx0KSxuLmxlbmd0aD9uZXcgUW8oe3BvaW50czpuLG9wdGlvbnM6e3RlbnNpb246MH0sX2xvb3A6cixfZnVsbExvb3A6cn0pOm51bGx9ZnVuY3Rpb24gc3MoZSl7cmV0dXJuIGUmJmUuZmlsbCE9PSExfWZ1bmN0aW9uIGNzKGUsdCxuKXtsZXQgcj1lW3RdLmZpbGwsaT1bdF0sYTtpZighbilyZXR1cm4gcjtmb3IoO3IhPT0hMSYmaS5pbmRleE9mKHIpPT09LTE7KXtpZighUChyKSlyZXR1cm4gcjtpZihhPWVbcl0sIWEpcmV0dXJuITE7aWYoYS52aXNpYmxlKXJldHVybiByO2kucHVzaChyKSxyPWEuZmlsbH1yZXR1cm4hMX1mdW5jdGlvbiBscyhlLHQsbil7bGV0IHI9cHMoZSk7aWYoTihyKSlyZXR1cm4haXNOYU4oci52YWx1ZSkmJnI7bGV0IGk9cGFyc2VGbG9hdChyKTtyZXR1cm4gUChpKSYmTWF0aC5mbG9vcihpKT09PWk/dXMoclswXSx0LGksbik6W2BvcmlnaW5gLGBzdGFydGAsYGVuZGAsYHN0YWNrYCxgc2hhcGVgXS5pbmRleE9mKHIpPj0wJiZyfWZ1bmN0aW9uIHVzKGUsdCxuLHIpe3JldHVybihlPT09YC1gfHxlPT09YCtgKSYmKG49dCtuKSxuPT09dHx8bjwwfHxuPj1yPyExOm59ZnVuY3Rpb24gZHMoZSx0KXtsZXQgbj1udWxsO3JldHVybiBlPT09YHN0YXJ0YD9uPXQuYm90dG9tOmU9PT1gZW5kYD9uPXQudG9wOk4oZSk/bj10LmdldFBpeGVsRm9yVmFsdWUoZS52YWx1ZSk6dC5nZXRCYXNlUGl4ZWwmJihuPXQuZ2V0QmFzZVBpeGVsKCkpLG59ZnVuY3Rpb24gZnMoZSx0LG4pe2xldCByO3JldHVybiByPWU9PT1gc3RhcnRgP246ZT09PWBlbmRgP3Qub3B0aW9ucy5yZXZlcnNlP3QubWluOnQubWF4Ok4oZSk/ZS52YWx1ZTp0LmdldEJhc2VWYWx1ZSgpLHJ9ZnVuY3Rpb24gcHMoZSl7bGV0IHQ9ZS5vcHRpb25zLG49dC5maWxsLHI9SShuJiZuLnRhcmdldCxuKTtyZXR1cm4gcj09PXZvaWQgMCYmKHI9ISF0LmJhY2tncm91bmRDb2xvcikscj09PSExfHxyPT09bnVsbD8hMTpyPT09ITA/YG9yaWdpbmA6cn1mdW5jdGlvbiBtcyhlKXtsZXR7c2NhbGU6dCxpbmRleDpuLGxpbmU6cn09ZSxpPVtdLGE9ci5zZWdtZW50cyxvPXIucG9pbnRzLHM9aHModCxuKTtzLnB1c2gob3Moe3g6bnVsbCx5OnQuYm90dG9tfSxyKSk7Zm9yKGxldCBlPTA7ZTxhLmxlbmd0aDtlKyspe2xldCB0PWFbZV07Zm9yKGxldCBlPXQuc3RhcnQ7ZTw9dC5lbmQ7ZSsrKWdzKGksb1tlXSxzKX1yZXR1cm4gbmV3IFFvKHtwb2ludHM6aSxvcHRpb25zOnt9fSl9ZnVuY3Rpb24gaHMoZSx0KXtsZXQgbj1bXSxyPWUuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoYGxpbmVgKTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyl7bGV0IGk9cltlXTtpZihpLmluZGV4PT09dClicmVhaztpLmhpZGRlbnx8bi51bnNoaWZ0KGkuZGF0YXNldCl9cmV0dXJuIG59ZnVuY3Rpb24gZ3MoZSx0LG4pe2xldCByPVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1uW2ldLHtmaXJzdDpvLGxhc3Q6cyxwb2ludDpjfT1fcyhhLHQsYHhgKTtpZighKCFjfHxvJiZzKSl7aWYobylyLnVuc2hpZnQoYyk7ZWxzZSBpZihlLnB1c2goYyksIXMpYnJlYWt9fWUucHVzaCguLi5yKX1mdW5jdGlvbiBfcyhlLHQsbil7bGV0IHI9ZS5pbnRlcnBvbGF0ZSh0LG4pO2lmKCFyKXJldHVybnt9O2xldCBpPXJbbl0sYT1lLnNlZ21lbnRzLG89ZS5wb2ludHMscz0hMSxjPSExO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdLHI9b1t0LnN0YXJ0XVtuXSxsPW9bdC5lbmRdW25dO2lmKEZ0KGkscixsKSl7cz1pPT09cixjPWk9PT1sO2JyZWFrfX1yZXR1cm57Zmlyc3Q6cyxsYXN0OmMscG9pbnQ6cn19dmFyIHZzPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMueD1lLngsdGhpcy55PWUueSx0aGlzLnJhZGl1cz1lLnJhZGl1c31wYXRoU2VnbWVudChlLHQsbil7bGV0e3g6cix5OmkscmFkaXVzOmF9PXRoaXM7cmV0dXJuIHR8fD17c3RhcnQ6MCxlbmQ6Qn0sZS5hcmMocixpLGEsdC5lbmQsdC5zdGFydCwhMCksIW4uYm91bmRzfWludGVycG9sYXRlKGUpe2xldHt4OnQseTpuLHJhZGl1czpyfT10aGlzLGk9ZS5hbmdsZTtyZXR1cm57eDp0K01hdGguY29zKGkpKnIseTpuK01hdGguc2luKGkpKnIsYW5nbGU6aX19fTtmdW5jdGlvbiB5cyhlKXtsZXR7Y2hhcnQ6dCxmaWxsOm4sbGluZTpyfT1lO2lmKFAobikpcmV0dXJuIGJzKHQsbik7aWYobj09PWBzdGFja2ApcmV0dXJuIG1zKGUpO2lmKG49PT1gc2hhcGVgKXJldHVybiEwO2xldCBpPXhzKGUpO3JldHVybiBpIGluc3RhbmNlb2YgdnM/aTpvcyhpLHIpfWZ1bmN0aW9uIGJzKGUsdCl7bGV0IG49ZS5nZXREYXRhc2V0TWV0YSh0KTtyZXR1cm4gbiYmZS5pc0RhdGFzZXRWaXNpYmxlKHQpP24uZGF0YXNldDpudWxsfWZ1bmN0aW9uIHhzKGUpe3JldHVybihlLnNjYWxlfHx7fSkuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlP0NzKGUpOlNzKGUpfWZ1bmN0aW9uIFNzKGUpe2xldHtzY2FsZTp0PXt9LGZpbGw6bn09ZSxyPWRzKG4sdCk7aWYoUChyKSl7bGV0IGU9dC5pc0hvcml6b250YWwoKTtyZXR1cm57eDplP3I6bnVsbCx5OmU/bnVsbDpyfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDcyhlKXtsZXR7c2NhbGU6dCxmaWxsOm59PWUscj10Lm9wdGlvbnMsaT10LmdldExhYmVscygpLmxlbmd0aCxhPXIucmV2ZXJzZT90Lm1heDp0Lm1pbixvPWZzKG4sdCxhKSxzPVtdO2lmKHIuZ3JpZC5jaXJjdWxhcil7bGV0IGU9dC5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoMCxhKTtyZXR1cm4gbmV3IHZzKHt4OmUueCx5OmUueSxyYWRpdXM6dC5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZShvKX0pfWZvcihsZXQgZT0wO2U8aTsrK2Upcy5wdXNoKHQuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGUsbykpO3JldHVybiBzfWZ1bmN0aW9uIHdzKGUsdCxuKXtsZXQgcj15cyh0KSx7Y2hhcnQ6aSxpbmRleDphLGxpbmU6byxzY2FsZTpzLGF4aXM6Y309dCxsPW8ub3B0aW9ucyx1PWwuZmlsbCxkPWwuYmFja2dyb3VuZENvbG9yLHthYm92ZTpmPWQsYmVsb3c6cD1kfT11fHx7fSxtPWFpKGksaS5nZXREYXRhc2V0TWV0YShhKSk7ciYmby5wb2ludHMubGVuZ3RoJiYoRG4oZSxuKSxUcyhlLHtsaW5lOm8sdGFyZ2V0OnIsYWJvdmU6ZixiZWxvdzpwLGFyZWE6bixzY2FsZTpzLGF4aXM6YyxjbGlwOm19KSxPbihlKSl9ZnVuY3Rpb24gVHMoZSx0KXtsZXR7bGluZTpuLHRhcmdldDpyLGFib3ZlOmksYmVsb3c6YSxhcmVhOm8sc2NhbGU6cyxjbGlwOmN9PXQsbD1uLl9sb29wP2BhbmdsZWA6dC5heGlzO2Uuc2F2ZSgpO2xldCB1PWE7YSE9PWkmJihsPT09YHhgPyhFcyhlLHIsby50b3ApLE9zKGUse2xpbmU6bix0YXJnZXQ6cixjb2xvcjppLHNjYWxlOnMscHJvcGVydHk6bCxjbGlwOmN9KSxlLnJlc3RvcmUoKSxlLnNhdmUoKSxFcyhlLHIsby5ib3R0b20pKTpsPT09YHlgJiYoRHMoZSxyLG8ubGVmdCksT3MoZSx7bGluZTpuLHRhcmdldDpyLGNvbG9yOmEsc2NhbGU6cyxwcm9wZXJ0eTpsLGNsaXA6Y30pLGUucmVzdG9yZSgpLGUuc2F2ZSgpLERzKGUscixvLnJpZ2h0KSx1PWkpKSxPcyhlLHtsaW5lOm4sdGFyZ2V0OnIsY29sb3I6dSxzY2FsZTpzLHByb3BlcnR5OmwsY2xpcDpjfSksZS5yZXN0b3JlKCl9ZnVuY3Rpb24gRXMoZSx0LG4pe2xldHtzZWdtZW50czpyLHBvaW50czppfT10LGE9ITAsbz0hMTtlLmJlZ2luUGF0aCgpO2ZvcihsZXQgcyBvZiByKXtsZXR7c3RhcnQ6cixlbmQ6Y309cyxsPWlbcl0sdT1pW2lzKHIsYyxpKV07YT8oZS5tb3ZlVG8obC54LGwueSksYT0hMSk6KGUubGluZVRvKGwueCxuKSxlLmxpbmVUbyhsLngsbC55KSksbz0hIXQucGF0aFNlZ21lbnQoZSxzLHttb3ZlOm99KSxvP2UuY2xvc2VQYXRoKCk6ZS5saW5lVG8odS54LG4pfWUubGluZVRvKHQuZmlyc3QoKS54LG4pLGUuY2xvc2VQYXRoKCksZS5jbGlwKCl9ZnVuY3Rpb24gRHMoZSx0LG4pe2xldHtzZWdtZW50czpyLHBvaW50czppfT10LGE9ITAsbz0hMTtlLmJlZ2luUGF0aCgpO2ZvcihsZXQgcyBvZiByKXtsZXR7c3RhcnQ6cixlbmQ6Y309cyxsPWlbcl0sdT1pW2lzKHIsYyxpKV07YT8oZS5tb3ZlVG8obC54LGwueSksYT0hMSk6KGUubGluZVRvKG4sbC55KSxlLmxpbmVUbyhsLngsbC55KSksbz0hIXQucGF0aFNlZ21lbnQoZSxzLHttb3ZlOm99KSxvP2UuY2xvc2VQYXRoKCk6ZS5saW5lVG8obix1LnkpfWUubGluZVRvKG4sdC5maXJzdCgpLnkpLGUuY2xvc2VQYXRoKCksZS5jbGlwKCl9ZnVuY3Rpb24gT3MoZSx0KXtsZXR7bGluZTpuLHRhcmdldDpyLHByb3BlcnR5OmksY29sb3I6YSxzY2FsZTpvLGNsaXA6c309dCxjPXRzKG4scixpKTtmb3IobGV0e3NvdXJjZTp0LHRhcmdldDpsLHN0YXJ0OnUsZW5kOmR9b2YgYyl7bGV0e3N0eWxlOntiYWNrZ3JvdW5kQ29sb3I6Yz1hfT17fX09dCxmPXIhPT0hMDtlLnNhdmUoKSxlLmZpbGxTdHlsZT1jLGtzKGUsbyxzLGYmJm5zKGksdSxkKSksZS5iZWdpblBhdGgoKTtsZXQgcD0hIW4ucGF0aFNlZ21lbnQoZSx0KSxtO2lmKGYpe3A/ZS5jbG9zZVBhdGgoKTpBcyhlLHIsZCxpKTtsZXQgdD0hIXIucGF0aFNlZ21lbnQoZSxsLHttb3ZlOnAscmV2ZXJzZTohMH0pO209cCYmdCxtfHxBcyhlLHIsdSxpKX1lLmNsb3NlUGF0aCgpLGUuZmlsbChtP2BldmVub2RkYDpgbm9uemVyb2ApLGUucmVzdG9yZSgpfX1mdW5jdGlvbiBrcyhlLHQsbixyKXtsZXQgaT10LmNoYXJ0LmNoYXJ0QXJlYSx7cHJvcGVydHk6YSxzdGFydDpvLGVuZDpzfT1yfHx7fTtpZihhPT09YHhgfHxhPT09YHlgKXtsZXQgdCxyLGMsbDthPT09YHhgPyh0PW8scj1pLnRvcCxjPXMsbD1pLmJvdHRvbSk6KHQ9aS5sZWZ0LHI9byxjPWkucmlnaHQsbD1zKSxlLmJlZ2luUGF0aCgpLG4mJih0PU1hdGgubWF4KHQsbi5sZWZ0KSxjPU1hdGgubWluKGMsbi5yaWdodCkscj1NYXRoLm1heChyLG4udG9wKSxsPU1hdGgubWluKGwsbi5ib3R0b20pKSxlLnJlY3QodCxyLGMtdCxsLXIpLGUuY2xpcCgpfX1mdW5jdGlvbiBBcyhlLHQsbixyKXtsZXQgaT10LmludGVycG9sYXRlKG4scik7aSYmZS5saW5lVG8oaS54LGkueSl9dmFyIGpzPXtpZDpgZmlsbGVyYCxhZnRlckRhdGFzZXRzVXBkYXRlKGUsdCxuKXtsZXQgcj0oZS5kYXRhLmRhdGFzZXRzfHxbXSkubGVuZ3RoLGk9W10sYSxvLHMsYztmb3Iobz0wO288cjsrK28pYT1lLmdldERhdGFzZXRNZXRhKG8pLHM9YS5kYXRhc2V0LGM9bnVsbCxzJiZzLm9wdGlvbnMmJnMgaW5zdGFuY2VvZiBRbyYmKGM9e3Zpc2libGU6ZS5pc0RhdGFzZXRWaXNpYmxlKG8pLGluZGV4Om8sZmlsbDpscyhzLG8sciksY2hhcnQ6ZSxheGlzOmEuY29udHJvbGxlci5vcHRpb25zLmluZGV4QXhpcyxzY2FsZTphLnZTY2FsZSxsaW5lOnN9KSxhLiRmaWxsZXI9YyxpLnB1c2goYyk7Zm9yKG89MDtvPHI7KytvKWM9aVtvXSwhKCFjfHxjLmZpbGw9PT0hMSkmJihjLmZpbGw9Y3MoaSxvLG4ucHJvcGFnYXRlKSl9LGJlZm9yZURyYXcoZSx0LG4pe2xldCByPW4uZHJhd1RpbWU9PT1gYmVmb3JlRHJhd2AsaT1lLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKSxhPWUuY2hhcnRBcmVhO2ZvcihsZXQgdD1pLmxlbmd0aC0xO3Q+PTA7LS10KXtsZXQgbj1pW3RdLiRmaWxsZXI7biYmKG4ubGluZS51cGRhdGVDb250cm9sUG9pbnRzKGEsbi5heGlzKSxyJiZuLmZpbGwmJndzKGUuY3R4LG4sYSkpfX0sYmVmb3JlRGF0YXNldHNEcmF3KGUsdCxuKXtpZihuLmRyYXdUaW1lIT09YGJlZm9yZURhdGFzZXRzRHJhd2ApcmV0dXJuO2xldCByPWUuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpO2ZvcihsZXQgdD1yLmxlbmd0aC0xO3Q+PTA7LS10KXtsZXQgbj1yW3RdLiRmaWxsZXI7c3MobikmJndzKGUuY3R4LG4sZS5jaGFydEFyZWEpfX0sYmVmb3JlRGF0YXNldERyYXcoZSx0LG4pe2xldCByPXQubWV0YS4kZmlsbGVyOyFzcyhyKXx8bi5kcmF3VGltZSE9PWBiZWZvcmVEYXRhc2V0RHJhd2B8fHdzKGUuY3R4LHIsZS5jaGFydEFyZWEpfSxkZWZhdWx0czp7cHJvcGFnYXRlOiEwLGRyYXdUaW1lOmBiZWZvcmVEYXRhc2V0RHJhd2B9fSxNcz0oZSx0KT0+e2xldHtib3hIZWlnaHQ6bj10LGJveFdpZHRoOnI9dH09ZTtyZXR1cm4gZS51c2VQb2ludFN0eWxlJiYobj1NYXRoLm1pbihuLHQpLHI9ZS5wb2ludFN0eWxlV2lkdGh8fE1hdGgubWluKHIsdCkpLHtib3hXaWR0aDpyLGJveEhlaWdodDpuLGl0ZW1IZWlnaHQ6TWF0aC5tYXgodCxuKX19LE5zPShlLHQpPT5lIT09bnVsbCYmdCE9PW51bGwmJmUuZGF0YXNldEluZGV4PT09dC5kYXRhc2V0SW5kZXgmJmUuaW5kZXg9PT10LmluZGV4LFBzPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9hZGRlZD0hMSx0aGlzLmxlZ2VuZEhpdEJveGVzPVtdLHRoaXMuX2hvdmVyZWRJdGVtPW51bGwsdGhpcy5kb3VnaG51dE1vZGU9ITEsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5jdHg9ZS5jdHgsdGhpcy5sZWdlbmRJdGVtcz12b2lkIDAsdGhpcy5jb2x1bW5TaXplcz12b2lkIDAsdGhpcy5saW5lV2lkdGhzPXZvaWQgMCx0aGlzLm1heEhlaWdodD12b2lkIDAsdGhpcy5tYXhXaWR0aD12b2lkIDAsdGhpcy50b3A9dm9pZCAwLHRoaXMuYm90dG9tPXZvaWQgMCx0aGlzLmxlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLl9tYXJnaW5zPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLndlaWdodD12b2lkIDAsdGhpcy5mdWxsU2l6ZT12b2lkIDB9dXBkYXRlKGUsdCxuKXt0aGlzLm1heFdpZHRoPWUsdGhpcy5tYXhIZWlnaHQ9dCx0aGlzLl9tYXJnaW5zPW4sdGhpcy5zZXREaW1lbnNpb25zKCksdGhpcy5idWlsZExhYmVscygpLHRoaXMuZml0KCl9c2V0RGltZW5zaW9ucygpe3RoaXMuaXNIb3Jpem9udGFsKCk/KHRoaXMud2lkdGg9dGhpcy5tYXhXaWR0aCx0aGlzLmxlZnQ9dGhpcy5fbWFyZ2lucy5sZWZ0LHRoaXMucmlnaHQ9dGhpcy53aWR0aCk6KHRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LHRoaXMudG9wPXRoaXMuX21hcmdpbnMudG9wLHRoaXMuYm90dG9tPXRoaXMuaGVpZ2h0KX1idWlsZExhYmVscygpe2xldCBlPXRoaXMub3B0aW9ucy5sYWJlbHN8fHt9LHQ9TChlLmdlbmVyYXRlTGFiZWxzLFt0aGlzLmNoYXJ0XSx0aGlzKXx8W107ZS5maWx0ZXImJih0PXQuZmlsdGVyKHQ9PmUuZmlsdGVyKHQsdGhpcy5jaGFydC5kYXRhKSkpLGUuc29ydCYmKHQ9dC5zb3J0KCh0LG4pPT5lLnNvcnQodCxuLHRoaXMuY2hhcnQuZGF0YSkpKSx0aGlzLm9wdGlvbnMucmV2ZXJzZSYmdC5yZXZlcnNlKCksdGhpcy5sZWdlbmRJdGVtcz10fWZpdCgpe2xldHtvcHRpb25zOmUsY3R4OnR9PXRoaXM7aWYoIWUuZGlzcGxheSl7dGhpcy53aWR0aD10aGlzLmhlaWdodD0wO3JldHVybn1sZXQgbj1lLmxhYmVscyxyPUoobi5mb250KSxpPXIuc2l6ZSxhPXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpLHtib3hXaWR0aDpvLGl0ZW1IZWlnaHQ6c309TXMobixpKSxjLGw7dC5mb250PXIuc3RyaW5nLHRoaXMuaXNIb3Jpem9udGFsKCk/KGM9dGhpcy5tYXhXaWR0aCxsPXRoaXMuX2ZpdFJvd3MoYSxpLG8scykrMTApOihsPXRoaXMubWF4SGVpZ2h0LGM9dGhpcy5fZml0Q29scyhhLHIsbyxzKSsxMCksdGhpcy53aWR0aD1NYXRoLm1pbihjLGUubWF4V2lkdGh8fHRoaXMubWF4V2lkdGgpLHRoaXMuaGVpZ2h0PU1hdGgubWluKGwsZS5tYXhIZWlnaHR8fHRoaXMubWF4SGVpZ2h0KX1fZml0Um93cyhlLHQsbixyKXtsZXR7Y3R4OmksbWF4V2lkdGg6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMubGluZVdpZHRocz1bMF0sbD1yK28sdT1lO2kudGV4dEFsaWduPWBsZWZ0YCxpLnRleHRCYXNlbGluZT1gbWlkZGxlYDtsZXQgZD0tMSxmPS1sO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUscCk9PntsZXQgbT1uK3QvMitpLm1lYXN1cmVUZXh0KGUudGV4dCkud2lkdGg7KHA9PT0wfHxjW2MubGVuZ3RoLTFdK20rMipvPmEpJiYodSs9bCxjW2MubGVuZ3RoLShwPjA/MDoxKV09MCxmKz1sLGQrKyksc1twXT17bGVmdDowLHRvcDpmLHJvdzpkLHdpZHRoOm0saGVpZ2h0OnJ9LGNbYy5sZW5ndGgtMV0rPW0rb30pLHV9X2ZpdENvbHMoZSx0LG4scil7bGV0e2N0eDppLG1heEhlaWdodDphLG9wdGlvbnM6e2xhYmVsczp7cGFkZGluZzpvfX19PXRoaXMscz10aGlzLmxlZ2VuZEhpdEJveGVzPVtdLGM9dGhpcy5jb2x1bW5TaXplcz1bXSxsPWEtZSx1PW8sZD0wLGY9MCxwPTAsbT0wO3JldHVybiB0aGlzLmxlZ2VuZEl0ZW1zLmZvckVhY2goKGUsYSk9PntsZXR7aXRlbVdpZHRoOmgsaXRlbUhlaWdodDpnfT1GcyhuLHQsaSxlLHIpO2E+MCYmZitnKzIqbz5sJiYodSs9ZCtvLGMucHVzaCh7d2lkdGg6ZCxoZWlnaHQ6Zn0pLHArPWQrbyxtKyssZD1mPTApLHNbYV09e2xlZnQ6cCx0b3A6Zixjb2w6bSx3aWR0aDpoLGhlaWdodDpnfSxkPU1hdGgubWF4KGQsaCksZis9ZytvfSksdSs9ZCxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSx1fWFkanVzdEhpdEJveGVzKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNwbGF5KXJldHVybjtsZXQgZT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7bGVnZW5kSGl0Qm94ZXM6dCxvcHRpb25zOnthbGlnbjpuLGxhYmVsczp7cGFkZGluZzpyfSxydGw6aX19PXRoaXMsYT1IcihpLHRoaXMubGVmdCx0aGlzLndpZHRoKTtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgaT0wLG89VyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKTtmb3IobGV0IHMgb2YgdClpIT09cy5yb3cmJihpPXMucm93LG89VyhuLHRoaXMubGVmdCtyLHRoaXMucmlnaHQtdGhpcy5saW5lV2lkdGhzW2ldKSkscy50b3ArPXRoaXMudG9wK2UrcixzLmxlZnQ9YS5sZWZ0Rm9yTHRyKGEueChvKSxzLndpZHRoKSxvKz1zLndpZHRoK3J9ZWxzZXtsZXQgaT0wLG89VyhuLHRoaXMudG9wK2Urcix0aGlzLmJvdHRvbS10aGlzLmNvbHVtblNpemVzW2ldLmhlaWdodCk7Zm9yKGxldCBzIG9mIHQpcy5jb2whPT1pJiYoaT1zLmNvbCxvPVcobix0aGlzLnRvcCtlK3IsdGhpcy5ib3R0b20tdGhpcy5jb2x1bW5TaXplc1tpXS5oZWlnaHQpKSxzLnRvcD1vLHMubGVmdCs9dGhpcy5sZWZ0K3Iscy5sZWZ0PWEubGVmdEZvckx0cihhLngocy5sZWZ0KSxzLndpZHRoKSxvKz1zLmhlaWdodCtyfX1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9uPT09YHRvcGB8fHRoaXMub3B0aW9ucy5wb3NpdGlvbj09PWBib3R0b21gfWRyYXcoKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxheSl7bGV0IGU9dGhpcy5jdHg7RG4oZSx0aGlzKSx0aGlzLl9kcmF3KCksT24oZSl9fV9kcmF3KCl7bGV0e29wdGlvbnM6ZSxjb2x1bW5TaXplczp0LGxpbmVXaWR0aHM6bixjdHg6cn09dGhpcyx7YWxpZ246aSxsYWJlbHM6YX09ZSxvPUcuY29sb3Iscz1IcihlLnJ0bCx0aGlzLmxlZnQsdGhpcy53aWR0aCksYz1KKGEuZm9udCkse3BhZGRpbmc6bH09YSx1PWMuc2l6ZSxkPXUvMixmO3RoaXMuZHJhd1RpdGxlKCksci50ZXh0QWxpZ249cy50ZXh0QWxpZ24oYGxlZnRgKSxyLnRleHRCYXNlbGluZT1gbWlkZGxlYCxyLmxpbmVXaWR0aD0uNSxyLmZvbnQ9Yy5zdHJpbmc7bGV0e2JveFdpZHRoOnAsYm94SGVpZ2h0Om0saXRlbUhlaWdodDpofT1NcyhhLHUpLGc9ZnVuY3Rpb24oZSx0LG4pe2lmKGlzTmFOKHApfHxwPD0wfHxpc05hTihtKXx8bTwwKXJldHVybjtyLnNhdmUoKTtsZXQgaT1JKG4ubGluZVdpZHRoLDEpO2lmKHIuZmlsbFN0eWxlPUkobi5maWxsU3R5bGUsbyksci5saW5lQ2FwPUkobi5saW5lQ2FwLGBidXR0YCksci5saW5lRGFzaE9mZnNldD1JKG4ubGluZURhc2hPZmZzZXQsMCksci5saW5lSm9pbj1JKG4ubGluZUpvaW4sYG1pdGVyYCksci5saW5lV2lkdGg9aSxyLnN0cm9rZVN0eWxlPUkobi5zdHJva2VTdHlsZSxvKSxyLnNldExpbmVEYXNoKEkobi5saW5lRGFzaCxbXSkpLGEudXNlUG9pbnRTdHlsZSl7bGV0IG89e3JhZGl1czptKk1hdGguU1FSVDIvMixwb2ludFN0eWxlOm4ucG9pbnRTdHlsZSxyb3RhdGlvbjpuLnJvdGF0aW9uLGJvcmRlcldpZHRoOml9LGM9cy54UGx1cyhlLHAvMiksbD10K2Q7RW4ocixvLGMsbCxhLnBvaW50U3R5bGVXaWR0aCYmcCl9ZWxzZXtsZXQgYT10K01hdGgubWF4KCh1LW0pLzIsMCksbz1zLmxlZnRGb3JMdHIoZSxwKSxjPUhuKG4uYm9yZGVyUmFkaXVzKTtyLmJlZ2luUGF0aCgpLE9iamVjdC52YWx1ZXMoYykuc29tZShlPT5lIT09MCk/Rm4ocix7eDpvLHk6YSx3OnAsaDptLHJhZGl1czpjfSk6ci5yZWN0KG8sYSxwLG0pLHIuZmlsbCgpLGkhPT0wJiZyLnN0cm9rZSgpfXIucmVzdG9yZSgpfSxfPWZ1bmN0aW9uKGUsdCxuKXtQbihyLG4udGV4dCxlLHQraC8yLGMse3N0cmlrZXRocm91Z2g6bi5oaWRkZW4sdGV4dEFsaWduOnMudGV4dEFsaWduKG4udGV4dEFsaWduKX0pfSx2PXRoaXMuaXNIb3Jpem9udGFsKCkseT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKTtmPXY/e3g6VyhpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtblswXSkseTp0aGlzLnRvcCtsK3ksbGluZTowfTp7eDp0aGlzLmxlZnQrbCx5OlcoaSx0aGlzLnRvcCt5K2wsdGhpcy5ib3R0b20tdFswXS5oZWlnaHQpLGxpbmU6MH0sVXIodGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKTtsZXQgYj1oK2w7dGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChvLHUpPT57ci5zdHJva2VTdHlsZT1vLmZvbnRDb2xvcixyLmZpbGxTdHlsZT1vLmZvbnRDb2xvcjtsZXQgbT1yLm1lYXN1cmVUZXh0KG8udGV4dCkud2lkdGgsaD1zLnRleHRBbGlnbihvLnRleHRBbGlnbnx8PWEudGV4dEFsaWduKSx4PXArZCttLFM9Zi54LEM9Zi55O3Muc2V0V2lkdGgodGhpcy53aWR0aCksdj91PjAmJlMreCtsPnRoaXMucmlnaHQmJihDPWYueSs9YixmLmxpbmUrKyxTPWYueD1XKGksdGhpcy5sZWZ0K2wsdGhpcy5yaWdodC1uW2YubGluZV0pKTp1PjAmJkMrYj50aGlzLmJvdHRvbSYmKFM9Zi54PVMrdFtmLmxpbmVdLndpZHRoK2wsZi5saW5lKyssQz1mLnk9VyhpLHRoaXMudG9wK3krbCx0aGlzLmJvdHRvbS10W2YubGluZV0uaGVpZ2h0KSk7bGV0IHc9cy54KFMpO2lmKGcodyxDLG8pLFM9SnQoaCxTK3ArZCx2P1MreDp0aGlzLnJpZ2h0LGUucnRsKSxfKHMueChTKSxDLG8pLHYpZi54Kz14K2w7ZWxzZSBpZih0eXBlb2Ygby50ZXh0IT1gc3RyaW5nYCl7bGV0IGU9Yy5saW5lSGVpZ2h0O2YueSs9UnMobyxlKStsfWVsc2UgZi55Kz1ifSksV3IodGhpcy5jdHgsZS50ZXh0RGlyZWN0aW9uKX1kcmF3VGl0bGUoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpdGxlLG49Sih0LmZvbnQpLHI9cSh0LnBhZGRpbmcpO2lmKCF0LmRpc3BsYXkpcmV0dXJuO2xldCBpPUhyKGUucnRsLHRoaXMubGVmdCx0aGlzLndpZHRoKSxhPXRoaXMuY3R4LG89dC5wb3NpdGlvbixzPW4uc2l6ZS8yLGM9ci50b3ArcyxsLHU9dGhpcy5sZWZ0LGQ9dGhpcy53aWR0aDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKWQ9TWF0aC5tYXgoLi4udGhpcy5saW5lV2lkdGhzKSxsPXRoaXMudG9wK2MsdT1XKGUuYWxpZ24sdSx0aGlzLnJpZ2h0LWQpO2Vsc2V7bGV0IHQ9dGhpcy5jb2x1bW5TaXplcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5oZWlnaHQpLDApO2w9YytXKGUuYWxpZ24sdGhpcy50b3AsdGhpcy5ib3R0b20tdC1lLmxhYmVscy5wYWRkaW5nLXRoaXMuX2NvbXB1dGVUaXRsZUhlaWdodCgpKX1sZXQgZj1XKG8sdSx1K2QpO2EudGV4dEFsaWduPWkudGV4dEFsaWduKHF0KG8pKSxhLnRleHRCYXNlbGluZT1gbWlkZGxlYCxhLnN0cm9rZVN0eWxlPXQuY29sb3IsYS5maWxsU3R5bGU9dC5jb2xvcixhLmZvbnQ9bi5zdHJpbmcsUG4oYSx0LnRleHQsZixsLG4pfV9jb21wdXRlVGl0bGVIZWlnaHQoKXtsZXQgZT10aGlzLm9wdGlvbnMudGl0bGUsdD1KKGUuZm9udCksbj1xKGUucGFkZGluZyk7cmV0dXJuIGUuZGlzcGxheT90LmxpbmVIZWlnaHQrbi5oZWlnaHQ6MH1fZ2V0TGVnZW5kSXRlbUF0KGUsdCl7bGV0IG4scixpO2lmKEZ0KGUsdGhpcy5sZWZ0LHRoaXMucmlnaHQpJiZGdCh0LHRoaXMudG9wLHRoaXMuYm90dG9tKSl7Zm9yKGk9dGhpcy5sZWdlbmRIaXRCb3hlcyxuPTA7bjxpLmxlbmd0aDsrK24paWYocj1pW25dLEZ0KGUsci5sZWZ0LHIubGVmdCtyLndpZHRoKSYmRnQodCxyLnRvcCxyLnRvcCtyLmhlaWdodCkpcmV0dXJuIHRoaXMubGVnZW5kSXRlbXNbbl19cmV0dXJuIG51bGx9aGFuZGxlRXZlbnQoZSl7bGV0IHQ9dGhpcy5vcHRpb25zO2lmKCF6cyhlLnR5cGUsdCkpcmV0dXJuO2xldCBuPXRoaXMuX2dldExlZ2VuZEl0ZW1BdChlLngsZS55KTtpZihlLnR5cGU9PT1gbW91c2Vtb3ZlYHx8ZS50eXBlPT09YG1vdXNlb3V0YCl7bGV0IHI9dGhpcy5faG92ZXJlZEl0ZW0saT1OcyhyLG4pO3ImJiFpJiZMKHQub25MZWF2ZSxbZSxyLHRoaXNdLHRoaXMpLHRoaXMuX2hvdmVyZWRJdGVtPW4sbiYmIWkmJkwodC5vbkhvdmVyLFtlLG4sdGhpc10sdGhpcyl9ZWxzZSBuJiZMKHQub25DbGljayxbZSxuLHRoaXNdLHRoaXMpfX07ZnVuY3Rpb24gRnMoZSx0LG4scixpKXtyZXR1cm57aXRlbVdpZHRoOklzKHIsZSx0LG4pLGl0ZW1IZWlnaHQ6THMoaSxyLHQubGluZUhlaWdodCl9fWZ1bmN0aW9uIElzKGUsdCxuLHIpe2xldCBpPWUudGV4dDtyZXR1cm4gaSYmdHlwZW9mIGkhPWBzdHJpbmdgJiYoaT1pLnJlZHVjZSgoZSx0KT0+ZS5sZW5ndGg+dC5sZW5ndGg/ZTp0KSksdCtuLnNpemUvMityLm1lYXN1cmVUZXh0KGkpLndpZHRofWZ1bmN0aW9uIExzKGUsdCxuKXtsZXQgcj1lO3JldHVybiB0eXBlb2YgdC50ZXh0IT1gc3RyaW5nYCYmKHI9UnModCxuKSkscn1mdW5jdGlvbiBScyhlLHQpe3JldHVybiB0KihlLnRleHQ/ZS50ZXh0Lmxlbmd0aDowKX1mdW5jdGlvbiB6cyhlLHQpe3JldHVybiEhKChlPT09YG1vdXNlbW92ZWB8fGU9PT1gbW91c2VvdXRgKSYmKHQub25Ib3Zlcnx8dC5vbkxlYXZlKXx8dC5vbkNsaWNrJiYoZT09PWBjbGlja2B8fGU9PT1gbW91c2V1cGApKX12YXIgQnM9e2lkOmBsZWdlbmRgLF9lbGVtZW50OlBzLHN0YXJ0KGUsdCxuKXtsZXQgcj1lLmxlZ2VuZD1uZXcgUHMoe2N0eDplLmN0eCxvcHRpb25zOm4sY2hhcnQ6ZX0pO29hLmNvbmZpZ3VyZShlLHIsbiksb2EuYWRkQm94KGUscil9LHN0b3AoZSl7b2EucmVtb3ZlQm94KGUsZS5sZWdlbmQpLGRlbGV0ZSBlLmxlZ2VuZH0sYmVmb3JlVXBkYXRlKGUsdCxuKXtsZXQgcj1lLmxlZ2VuZDtvYS5jb25maWd1cmUoZSxyLG4pLHIub3B0aW9ucz1ufSxhZnRlclVwZGF0ZShlKXtsZXQgdD1lLmxlZ2VuZDt0LmJ1aWxkTGFiZWxzKCksdC5hZGp1c3RIaXRCb3hlcygpfSxhZnRlckV2ZW50KGUsdCl7dC5yZXBsYXl8fGUubGVnZW5kLmhhbmRsZUV2ZW50KHQuZXZlbnQpfSxkZWZhdWx0czp7ZGlzcGxheTohMCxwb3NpdGlvbjpgdG9wYCxhbGlnbjpgY2VudGVyYCxmdWxsU2l6ZTohMCxyZXZlcnNlOiExLHdlaWdodDoxZTMsb25DbGljayhlLHQsbil7bGV0IHI9dC5kYXRhc2V0SW5kZXgsaT1uLmNoYXJ0O2kuaXNEYXRhc2V0VmlzaWJsZShyKT8oaS5oaWRlKHIpLHQuaGlkZGVuPSEwKTooaS5zaG93KHIpLHQuaGlkZGVuPSExKX0sb25Ib3ZlcjpudWxsLG9uTGVhdmU6bnVsbCxsYWJlbHM6e2NvbG9yOmU9PmUuY2hhcnQub3B0aW9ucy5jb2xvcixib3hXaWR0aDo0MCxwYWRkaW5nOjEwLGdlbmVyYXRlTGFiZWxzKGUpe2xldCB0PWUuZGF0YS5kYXRhc2V0cyx7bGFiZWxzOnt1c2VQb2ludFN0eWxlOm4scG9pbnRTdHlsZTpyLHRleHRBbGlnbjppLGNvbG9yOmEsdXNlQm9yZGVyUmFkaXVzOm8sYm9yZGVyUmFkaXVzOnN9fT1lLmxlZ2VuZC5vcHRpb25zO3JldHVybiBlLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMoKS5tYXAoZT0+e2xldCBjPWUuY29udHJvbGxlci5nZXRTdHlsZShuPzA6dm9pZCAwKSxsPXEoYy5ib3JkZXJXaWR0aCk7cmV0dXJue3RleHQ6dFtlLmluZGV4XS5sYWJlbCxmaWxsU3R5bGU6Yy5iYWNrZ3JvdW5kQ29sb3IsZm9udENvbG9yOmEsaGlkZGVuOiFlLnZpc2libGUsbGluZUNhcDpjLmJvcmRlckNhcFN0eWxlLGxpbmVEYXNoOmMuYm9yZGVyRGFzaCxsaW5lRGFzaE9mZnNldDpjLmJvcmRlckRhc2hPZmZzZXQsbGluZUpvaW46Yy5ib3JkZXJKb2luU3R5bGUsbGluZVdpZHRoOihsLndpZHRoK2wuaGVpZ2h0KS80LHN0cm9rZVN0eWxlOmMuYm9yZGVyQ29sb3IscG9pbnRTdHlsZTpyfHxjLnBvaW50U3R5bGUscm90YXRpb246Yy5yb3RhdGlvbix0ZXh0QWxpZ246aXx8Yy50ZXh0QWxpZ24sYm9yZGVyUmFkaXVzOm8mJihzfHxjLmJvcmRlclJhZGl1cyksZGF0YXNldEluZGV4OmUuaW5kZXh9fSx0aGlzKX19LHRpdGxlOntjb2xvcjplPT5lLmNoYXJ0Lm9wdGlvbnMuY29sb3IsZGlzcGxheTohMSxwb3NpdGlvbjpgY2VudGVyYCx0ZXh0OmBgfX0sZGVzY3JpcHRvcnM6e19zY3JpcHRhYmxlOmU9PiFlLnN0YXJ0c1dpdGgoYG9uYCksbGFiZWxzOntfc2NyaXB0YWJsZTplPT4hW2BnZW5lcmF0ZUxhYmVsc2AsYGZpbHRlcmAsYHNvcnRgXS5pbmNsdWRlcyhlKX19fSxWcz17YXZlcmFnZShlKXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IHQsbixyPW5ldyBTZXQsaT0wLGE9MDtmb3IodD0wLG49ZS5sZW5ndGg7dDxuOysrdCl7bGV0IG49ZVt0XS5lbGVtZW50O2lmKG4mJm4uaGFzVmFsdWUoKSl7bGV0IGU9bi50b29sdGlwUG9zaXRpb24oKTtyLmFkZChlLngpLGkrPWUueSwrK2F9fXJldHVybiBhPT09MHx8ci5zaXplPT09MD8hMTp7eDpbLi4ucl0ucmVkdWNlKChlLHQpPT5lK3QpL3Iuc2l6ZSx5OmkvYX19LG5lYXJlc3QoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuITE7bGV0IG49dC54LHI9dC55LGk9MS8wLGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtsZXQgbj1lW2FdLmVsZW1lbnQ7aWYobiYmbi5oYXNWYWx1ZSgpKXtsZXQgZT1qdCh0LG4uZ2V0Q2VudGVyUG9pbnQoKSk7ZTxpJiYoaT1lLHM9bil9fWlmKHMpe2xldCBlPXMudG9vbHRpcFBvc2l0aW9uKCk7bj1lLngscj1lLnl9cmV0dXJue3g6bix5OnJ9fX07ZnVuY3Rpb24gWihlLHQpe3JldHVybiB0JiYoTSh0KT9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlLHQpOmUucHVzaCh0KSksZX1mdW5jdGlvbiBIcyhlKXtyZXR1cm4odHlwZW9mIGU9PWBzdHJpbmdgfHxlIGluc3RhbmNlb2YgU3RyaW5nKSYmZS5pbmRleE9mKGAKYCk+LTE/ZS5zcGxpdChgCmApOmV9ZnVuY3Rpb24gVXMoZSx0KXtsZXR7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpyLGluZGV4Oml9PXQsYT1lLmdldERhdGFzZXRNZXRhKHIpLmNvbnRyb2xsZXIse2xhYmVsOm8sdmFsdWU6c309YS5nZXRMYWJlbEFuZFZhbHVlKGkpO3JldHVybntjaGFydDplLGxhYmVsOm8scGFyc2VkOmEuZ2V0UGFyc2VkKGkpLHJhdzplLmRhdGEuZGF0YXNldHNbcl0uZGF0YVtpXSxmb3JtYXR0ZWRWYWx1ZTpzLGRhdGFzZXQ6YS5nZXREYXRhc2V0KCksZGF0YUluZGV4OmksZGF0YXNldEluZGV4OnIsZWxlbWVudDpufX1mdW5jdGlvbiBXcyhlLHQpe2xldCBuPWUuY2hhcnQuY3R4LHtib2R5OnIsZm9vdGVyOmksdGl0bGU6YX09ZSx7Ym94V2lkdGg6byxib3hIZWlnaHQ6c309dCxjPUoodC5ib2R5Rm9udCksbD1KKHQudGl0bGVGb250KSx1PUoodC5mb290ZXJGb250KSxkPWEubGVuZ3RoLGY9aS5sZW5ndGgscD1yLmxlbmd0aCxtPXEodC5wYWRkaW5nKSxoPW0uaGVpZ2h0LGc9MCxfPXIucmVkdWNlKChlLHQpPT5lK3QuYmVmb3JlLmxlbmd0aCt0LmxpbmVzLmxlbmd0aCt0LmFmdGVyLmxlbmd0aCwwKTtpZihfKz1lLmJlZm9yZUJvZHkubGVuZ3RoK2UuYWZ0ZXJCb2R5Lmxlbmd0aCxkJiYoaCs9ZCpsLmxpbmVIZWlnaHQrKGQtMSkqdC50aXRsZVNwYWNpbmcrdC50aXRsZU1hcmdpbkJvdHRvbSksXyl7bGV0IGU9dC5kaXNwbGF5Q29sb3JzP01hdGgubWF4KHMsYy5saW5lSGVpZ2h0KTpjLmxpbmVIZWlnaHQ7aCs9cCplKyhfLXApKmMubGluZUhlaWdodCsoXy0xKSp0LmJvZHlTcGFjaW5nfWYmJihoKz10LmZvb3Rlck1hcmdpblRvcCtmKnUubGluZUhlaWdodCsoZi0xKSp0LmZvb3RlclNwYWNpbmcpO2xldCB2PTAseT1mdW5jdGlvbihlKXtnPU1hdGgubWF4KGcsbi5tZWFzdXJlVGV4dChlKS53aWR0aCt2KX07cmV0dXJuIG4uc2F2ZSgpLG4uZm9udD1sLnN0cmluZyxSKGUudGl0bGUseSksbi5mb250PWMuc3RyaW5nLFIoZS5iZWZvcmVCb2R5LmNvbmNhdChlLmFmdGVyQm9keSkseSksdj10LmRpc3BsYXlDb2xvcnM/bysyK3QuYm94UGFkZGluZzowLFIocixlPT57UihlLmJlZm9yZSx5KSxSKGUubGluZXMseSksUihlLmFmdGVyLHkpfSksdj0wLG4uZm9udD11LnN0cmluZyxSKGUuZm9vdGVyLHkpLG4ucmVzdG9yZSgpLGcrPW0ud2lkdGgse3dpZHRoOmcsaGVpZ2h0Omh9fWZ1bmN0aW9uIEdzKGUsdCl7bGV0e3k6bixoZWlnaHQ6cn09dDtyZXR1cm4gbjxyLzI/YHRvcGA6bj5lLmhlaWdodC1yLzI/YGJvdHRvbWA6YGNlbnRlcmB9ZnVuY3Rpb24gS3MoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1yLG89bi5jYXJldFNpemUrbi5jYXJldFBhZGRpbmc7aWYoZT09PWBsZWZ0YCYmaSthK28+dC53aWR0aHx8ZT09PWByaWdodGAmJmktYS1vPDApcmV0dXJuITB9ZnVuY3Rpb24gcXMoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1uLHt3aWR0aDpvLGNoYXJ0QXJlYTp7bGVmdDpzLHJpZ2h0OmN9fT1lLGw9YGNlbnRlcmA7cmV0dXJuIHI9PT1gY2VudGVyYD9sPWk8PShzK2MpLzI/YGxlZnRgOmByaWdodGA6aTw9YS8yP2w9YGxlZnRgOmk+PW8tYS8yJiYobD1gcmlnaHRgKSxLcyhsLGUsdCxuKSYmKGw9YGNlbnRlcmApLGx9ZnVuY3Rpb24gSnMoZSx0LG4pe2xldCByPW4ueUFsaWdufHx0LnlBbGlnbnx8R3MoZSxuKTtyZXR1cm57eEFsaWduOm4ueEFsaWdufHx0LnhBbGlnbnx8cXMoZSx0LG4scikseUFsaWduOnJ9fWZ1bmN0aW9uIFlzKGUsdCl7bGV0e3g6bix3aWR0aDpyfT1lO3JldHVybiB0PT09YHJpZ2h0YD9uLT1yOnQ9PT1gY2VudGVyYCYmKG4tPXIvMiksbn1mdW5jdGlvbiBYcyhlLHQsbil7bGV0e3k6cixoZWlnaHQ6aX09ZTtyZXR1cm4gdD09PWB0b3BgP3IrPW46ci09dD09PWBib3R0b21gP2krbjppLzIscn1mdW5jdGlvbiBacyhlLHQsbixyKXtsZXR7Y2FyZXRTaXplOmksY2FyZXRQYWRkaW5nOmEsY29ybmVyUmFkaXVzOm99PWUse3hBbGlnbjpzLHlBbGlnbjpjfT1uLGw9aSthLHt0b3BMZWZ0OnUsdG9wUmlnaHQ6ZCxib3R0b21MZWZ0OmYsYm90dG9tUmlnaHQ6cH09SG4obyksbT1Zcyh0LHMpLGg9WHModCxjLGwpO3JldHVybiBjPT09YGNlbnRlcmA/cz09PWBsZWZ0YD9tKz1sOnM9PT1gcmlnaHRgJiYobS09bCk6cz09PWBsZWZ0YD9tLT1NYXRoLm1heCh1LGYpK2k6cz09PWByaWdodGAmJihtKz1NYXRoLm1heChkLHApK2kpLHt4OlUobSwwLHIud2lkdGgtdC53aWR0aCkseTpVKGgsMCxyLmhlaWdodC10LmhlaWdodCl9fWZ1bmN0aW9uIFFzKGUsdCxuKXtsZXQgcj1xKG4ucGFkZGluZyk7cmV0dXJuIHQ9PT1gY2VudGVyYD9lLngrZS53aWR0aC8yOnQ9PT1gcmlnaHRgP2UueCtlLndpZHRoLXIucmlnaHQ6ZS54K3IubGVmdH1mdW5jdGlvbiAkcyhlKXtyZXR1cm4gWihbXSxIcyhlKSl9ZnVuY3Rpb24gZWMoZSx0LG4pe3JldHVybiBHbihlLHt0b29sdGlwOnQsdG9vbHRpcEl0ZW1zOm4sdHlwZTpgdG9vbHRpcGB9KX1mdW5jdGlvbiB0YyhlLHQpe2xldCBuPXQmJnQuZGF0YXNldCYmdC5kYXRhc2V0LnRvb2x0aXAmJnQuZGF0YXNldC50b29sdGlwLmNhbGxiYWNrcztyZXR1cm4gbj9lLm92ZXJyaWRlKG4pOmV9dmFyIG5jPXtiZWZvcmVUaXRsZTpBLHRpdGxlKGUpe2lmKGUubGVuZ3RoPjApe2xldCB0PWVbMF0sbj10LmNoYXJ0LmRhdGEubGFiZWxzLHI9bj9uLmxlbmd0aDowO2lmKHRoaXMmJnRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm1vZGU9PT1gZGF0YXNldGApcmV0dXJuIHQuZGF0YXNldC5sYWJlbHx8YGA7aWYodC5sYWJlbClyZXR1cm4gdC5sYWJlbDtpZihyPjAmJnQuZGF0YUluZGV4PHIpcmV0dXJuIG5bdC5kYXRhSW5kZXhdfXJldHVybmBgfSxhZnRlclRpdGxlOkEsYmVmb3JlQm9keTpBLGJlZm9yZUxhYmVsOkEsbGFiZWwoZSl7aWYodGhpcyYmdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubW9kZT09PWBkYXRhc2V0YClyZXR1cm4gZS5sYWJlbCtgOiBgK2UuZm9ybWF0dGVkVmFsdWV8fGUuZm9ybWF0dGVkVmFsdWU7bGV0IHQ9ZS5kYXRhc2V0LmxhYmVsfHxgYDt0JiYodCs9YDogYCk7bGV0IG49ZS5mb3JtYXR0ZWRWYWx1ZTtyZXR1cm4gaihuKXx8KHQrPW4pLHR9LGxhYmVsQ29sb3IoZSl7bGV0IHQ9ZS5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRTdHlsZShlLmRhdGFJbmRleCk7cmV0dXJue2JvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsYmFja2dyb3VuZENvbG9yOnQuYmFja2dyb3VuZENvbG9yLGJvcmRlcldpZHRoOnQuYm9yZGVyV2lkdGgsYm9yZGVyRGFzaDp0LmJvcmRlckRhc2gsYm9yZGVyRGFzaE9mZnNldDp0LmJvcmRlckRhc2hPZmZzZXQsYm9yZGVyUmFkaXVzOjB9fSxsYWJlbFRleHRDb2xvcigpe3JldHVybiB0aGlzLm9wdGlvbnMuYm9keUNvbG9yfSxsYWJlbFBvaW50U3R5bGUoZSl7bGV0IHQ9ZS5jaGFydC5nZXREYXRhc2V0TWV0YShlLmRhdGFzZXRJbmRleCkuY29udHJvbGxlci5nZXRTdHlsZShlLmRhdGFJbmRleCk7cmV0dXJue3BvaW50U3R5bGU6dC5wb2ludFN0eWxlLHJvdGF0aW9uOnQucm90YXRpb259fSxhZnRlckxhYmVsOkEsYWZ0ZXJCb2R5OkEsYmVmb3JlRm9vdGVyOkEsZm9vdGVyOkEsYWZ0ZXJGb290ZXI6QX07ZnVuY3Rpb24gUShlLHQsbixyKXtsZXQgaT1lW3RdLmNhbGwobixyKTtyZXR1cm4gaT09PXZvaWQgMD9uY1t0XS5jYWxsKG4scik6aX12YXIgcmM9Y2xhc3MgZXh0ZW5kcyBBYXtzdGF0aWMgcG9zaXRpb25lcnM9VnM7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm9wYWNpdHk9MCx0aGlzLl9hY3RpdmU9W10sdGhpcy5fZXZlbnRQb3NpdGlvbj12b2lkIDAsdGhpcy5fc2l6ZT12b2lkIDAsdGhpcy5fY2FjaGVkQW5pbWF0aW9ucz12b2lkIDAsdGhpcy5fdG9vbHRpcEl0ZW1zPVtdLHRoaXMuJGFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwLHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLm9wdGlvbnM9ZS5vcHRpb25zLHRoaXMuZGF0YVBvaW50cz12b2lkIDAsdGhpcy50aXRsZT12b2lkIDAsdGhpcy5iZWZvcmVCb2R5PXZvaWQgMCx0aGlzLmJvZHk9dm9pZCAwLHRoaXMuYWZ0ZXJCb2R5PXZvaWQgMCx0aGlzLmZvb3Rlcj12b2lkIDAsdGhpcy54QWxpZ249dm9pZCAwLHRoaXMueUFsaWduPXZvaWQgMCx0aGlzLng9dm9pZCAwLHRoaXMueT12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2FyZXRYPXZvaWQgMCx0aGlzLmNhcmV0WT12b2lkIDAsdGhpcy5sYWJlbENvbG9ycz12b2lkIDAsdGhpcy5sYWJlbFBvaW50U3R5bGVzPXZvaWQgMCx0aGlzLmxhYmVsVGV4dENvbG9ycz12b2lkIDB9aW5pdGlhbGl6ZShlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLl9jYWNoZWRBbmltYXRpb25zPXZvaWQgMCx0aGlzLiRjb250ZXh0PXZvaWQgMH1fcmVzb2x2ZUFuaW1hdGlvbnMoKXtsZXQgZT10aGlzLl9jYWNoZWRBbmltYXRpb25zO2lmKGUpcmV0dXJuIGU7bGV0IHQ9dGhpcy5jaGFydCxuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPW4uZW5hYmxlZCYmdC5vcHRpb25zLmFuaW1hdGlvbiYmbi5hbmltYXRpb25zLGk9bmV3IGxpKHRoaXMuY2hhcnQscik7cmV0dXJuIHIuX2NhY2hlYWJsZSYmKHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9T2JqZWN0LmZyZWV6ZShpKSksaX1nZXRDb250ZXh0KCl7cmV0dXJuIHRoaXMuJGNvbnRleHR8fD1lYyh0aGlzLmNoYXJ0LmdldENvbnRleHQoKSx0aGlzLHRoaXMuX3Rvb2x0aXBJdGVtcyl9Z2V0VGl0bGUoZSx0KXtsZXR7Y2FsbGJhY2tzOm59PXQscj1RKG4sYGJlZm9yZVRpdGxlYCx0aGlzLGUpLGk9UShuLGB0aXRsZWAsdGhpcyxlKSxhPVEobixgYWZ0ZXJUaXRsZWAsdGhpcyxlKSxvPVtdO3JldHVybiBvPVoobyxIcyhyKSksbz1aKG8sSHMoaSkpLG89WihvLEhzKGEpKSxvfWdldEJlZm9yZUJvZHkoZSx0KXtyZXR1cm4gJHMoUSh0LmNhbGxiYWNrcyxgYmVmb3JlQm9keWAsdGhpcyxlKSl9Z2V0Qm9keShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPVtdO3JldHVybiBSKGUsZT0+e2xldCB0PXtiZWZvcmU6W10sbGluZXM6W10sYWZ0ZXI6W119LGk9dGMobixlKTtaKHQuYmVmb3JlLEhzKFEoaSxgYmVmb3JlTGFiZWxgLHRoaXMsZSkpKSxaKHQubGluZXMsUShpLGBsYWJlbGAsdGhpcyxlKSksWih0LmFmdGVyLEhzKFEoaSxgYWZ0ZXJMYWJlbGAsdGhpcyxlKSkpLHIucHVzaCh0KX0pLHJ9Z2V0QWZ0ZXJCb2R5KGUsdCl7cmV0dXJuICRzKFEodC5jYWxsYmFja3MsYGFmdGVyQm9keWAsdGhpcyxlKSl9Z2V0Rm9vdGVyKGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9UShuLGBiZWZvcmVGb290ZXJgLHRoaXMsZSksaT1RKG4sYGZvb3RlcmAsdGhpcyxlKSxhPVEobixgYWZ0ZXJGb290ZXJgLHRoaXMsZSksbz1bXTtyZXR1cm4gbz1aKG8sSHMocikpLG89WihvLEhzKGkpKSxvPVoobyxIcyhhKSksb31fY3JlYXRlSXRlbXMoZSl7bGV0IHQ9dGhpcy5fYWN0aXZlLG49dGhpcy5jaGFydC5kYXRhLHI9W10saT1bXSxhPVtdLG89W10scyxjO2ZvcihzPTAsYz10Lmxlbmd0aDtzPGM7KytzKW8ucHVzaChVcyh0aGlzLmNoYXJ0LHRbc10pKTtyZXR1cm4gZS5maWx0ZXImJihvPW8uZmlsdGVyKCh0LHIsaSk9PmUuZmlsdGVyKHQscixpLG4pKSksZS5pdGVtU29ydCYmKG89by5zb3J0KCh0LHIpPT5lLml0ZW1Tb3J0KHQscixuKSkpLFIobyx0PT57bGV0IG49dGMoZS5jYWxsYmFja3MsdCk7ci5wdXNoKFEobixgbGFiZWxDb2xvcmAsdGhpcyx0KSksaS5wdXNoKFEobixgbGFiZWxQb2ludFN0eWxlYCx0aGlzLHQpKSxhLnB1c2goUShuLGBsYWJlbFRleHRDb2xvcmAsdGhpcyx0KSl9KSx0aGlzLmxhYmVsQ29sb3JzPXIsdGhpcy5sYWJlbFBvaW50U3R5bGVzPWksdGhpcy5sYWJlbFRleHRDb2xvcnM9YSx0aGlzLmRhdGFQb2ludHM9byxvfXVwZGF0ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPXRoaXMuX2FjdGl2ZSxpLGE9W107aWYoIXIubGVuZ3RoKXRoaXMub3BhY2l0eSE9PTAmJihpPXtvcGFjaXR5OjB9KTtlbHNle2xldCBlPVZzW24ucG9zaXRpb25dLmNhbGwodGhpcyxyLHRoaXMuX2V2ZW50UG9zaXRpb24pO2E9dGhpcy5fY3JlYXRlSXRlbXMobiksdGhpcy50aXRsZT10aGlzLmdldFRpdGxlKGEsbiksdGhpcy5iZWZvcmVCb2R5PXRoaXMuZ2V0QmVmb3JlQm9keShhLG4pLHRoaXMuYm9keT10aGlzLmdldEJvZHkoYSxuKSx0aGlzLmFmdGVyQm9keT10aGlzLmdldEFmdGVyQm9keShhLG4pLHRoaXMuZm9vdGVyPXRoaXMuZ2V0Rm9vdGVyKGEsbik7bGV0IHQ9dGhpcy5fc2l6ZT1Xcyh0aGlzLG4pLG89T2JqZWN0LmFzc2lnbih7fSxlLHQpLHM9SnModGhpcy5jaGFydCxuLG8pLGM9WnMobixvLHMsdGhpcy5jaGFydCk7dGhpcy54QWxpZ249cy54QWxpZ24sdGhpcy55QWxpZ249cy55QWxpZ24saT17b3BhY2l0eToxLHg6Yy54LHk6Yy55LHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LGNhcmV0WDplLngsY2FyZXRZOmUueX19dGhpcy5fdG9vbHRpcEl0ZW1zPWEsdGhpcy4kY29udGV4dD12b2lkIDAsaSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcyxpKSxlJiZuLmV4dGVybmFsJiZuLmV4dGVybmFsLmNhbGwodGhpcyx7Y2hhcnQ6dGhpcy5jaGFydCx0b29sdGlwOnRoaXMscmVwbGF5OnR9KX1kcmF3Q2FyZXQoZSx0LG4scil7bGV0IGk9dGhpcy5nZXRDYXJldFBvc2l0aW9uKGUsbixyKTt0LmxpbmVUbyhpLngxLGkueTEpLHQubGluZVRvKGkueDIsaS55MiksdC5saW5lVG8oaS54MyxpLnkzKX1nZXRDYXJldFBvc2l0aW9uKGUsdCxuKXtsZXR7eEFsaWduOnIseUFsaWduOml9PXRoaXMse2NhcmV0U2l6ZTphLGNvcm5lclJhZGl1czpvfT1uLHt0b3BMZWZ0OnMsdG9wUmlnaHQ6Yyxib3R0b21MZWZ0OmwsYm90dG9tUmlnaHQ6dX09SG4obykse3g6ZCx5OmZ9PWUse3dpZHRoOnAsaGVpZ2h0Om19PXQsaCxnLF8sdix5LGI7cmV0dXJuIGk9PT1gY2VudGVyYD8oeT1mK20vMixyPT09YGxlZnRgPyhoPWQsZz1oLWEsdj15K2EsYj15LWEpOihoPWQrcCxnPWgrYSx2PXktYSxiPXkrYSksXz1oKTooZz1yPT09YGxlZnRgP2QrTWF0aC5tYXgocyxsKSthOnI9PT1gcmlnaHRgP2QrcC1NYXRoLm1heChjLHUpLWE6dGhpcy5jYXJldFgsaT09PWB0b3BgPyh2PWYseT12LWEsaD1nLWEsXz1nK2EpOih2PWYrbSx5PXYrYSxoPWcrYSxfPWctYSksYj12KSx7eDE6aCx4MjpnLHgzOl8seTE6dix5Mjp5LHkzOmJ9fWRyYXdUaXRsZShlLHQsbil7bGV0IHI9dGhpcy50aXRsZSxpPXIubGVuZ3RoLGEsbyxzO2lmKGkpe2xldCBjPUhyKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKTtmb3IoZS54PVFzKHRoaXMsbi50aXRsZUFsaWduLG4pLHQudGV4dEFsaWduPWMudGV4dEFsaWduKG4udGl0bGVBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT1KKG4udGl0bGVGb250KSxvPW4udGl0bGVTcGFjaW5nLHQuZmlsbFN0eWxlPW4udGl0bGVDb2xvcix0LmZvbnQ9YS5zdHJpbmcscz0wO3M8aTsrK3MpdC5maWxsVGV4dChyW3NdLGMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbyxzKzE9PT1pJiYoZS55Kz1uLnRpdGxlTWFyZ2luQm90dG9tLW8pfX1fZHJhd0NvbG9yQm94KGUsdCxuLHIsaSl7bGV0IGE9dGhpcy5sYWJlbENvbG9yc1tuXSxvPXRoaXMubGFiZWxQb2ludFN0eWxlc1tuXSx7Ym94SGVpZ2h0OnMsYm94V2lkdGg6Y309aSxsPUooaS5ib2R5Rm9udCksdT1Rcyh0aGlzLGBsZWZ0YCxpKSxkPXIueCh1KSxmPXM8bC5saW5lSGVpZ2h0PyhsLmxpbmVIZWlnaHQtcykvMjowLHA9dC55K2Y7aWYoaS51c2VQb2ludFN0eWxlKXtsZXQgdD17cmFkaXVzOk1hdGgubWluKGMscykvMixwb2ludFN0eWxlOm8ucG9pbnRTdHlsZSxyb3RhdGlvbjpvLnJvdGF0aW9uLGJvcmRlcldpZHRoOjF9LG49ci5sZWZ0Rm9yTHRyKGQsYykrYy8yLGw9cCtzLzI7ZS5zdHJva2VTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxUbihlLHQsbixsKSxlLnN0cm9rZVN0eWxlPWEuYm9yZGVyQ29sb3IsZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3IsVG4oZSx0LG4sbCl9ZWxzZXtlLmxpbmVXaWR0aD1OKGEuYm9yZGVyV2lkdGgpP01hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoYS5ib3JkZXJXaWR0aCkpOmEuYm9yZGVyV2lkdGh8fDEsZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuc2V0TGluZURhc2goYS5ib3JkZXJEYXNofHxbXSksZS5saW5lRGFzaE9mZnNldD1hLmJvcmRlckRhc2hPZmZzZXR8fDA7bGV0IHQ9ci5sZWZ0Rm9yTHRyKGQsYyksbj1yLmxlZnRGb3JMdHIoci54UGx1cyhkLDEpLGMtMiksbz1IbihhLmJvcmRlclJhZGl1cyk7T2JqZWN0LnZhbHVlcyhvKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxGbihlLHt4OnQseTpwLHc6YyxoOnMscmFkaXVzOm99KSxlLmZpbGwoKSxlLnN0cm9rZSgpLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLGUuYmVnaW5QYXRoKCksRm4oZSx7eDpuLHk6cCsxLHc6Yy0yLGg6cy0yLHJhZGl1czpvfSksZS5maWxsKCkpOihlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxSZWN0KHQscCxjLHMpLGUuc3Ryb2tlUmVjdCh0LHAsYyxzKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmZpbGxSZWN0KG4scCsxLGMtMixzLTIpKX1lLmZpbGxTdHlsZT10aGlzLmxhYmVsVGV4dENvbG9yc1tuXX1kcmF3Qm9keShlLHQsbil7bGV0e2JvZHk6cn09dGhpcyx7Ym9keVNwYWNpbmc6aSxib2R5QWxpZ246YSxkaXNwbGF5Q29sb3JzOm8sYm94SGVpZ2h0OnMsYm94V2lkdGg6Yyxib3hQYWRkaW5nOmx9PW4sdT1KKG4uYm9keUZvbnQpLGQ9dS5saW5lSGVpZ2h0LGY9MCxwPUhyKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKSxtPWZ1bmN0aW9uKG4pe3QuZmlsbFRleHQobixwLngoZS54K2YpLGUueStkLzIpLGUueSs9ZCtpfSxoPXAudGV4dEFsaWduKGEpLGcsXyx2LHksYix4LFM7Zm9yKHQudGV4dEFsaWduPWEsdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdC5mb250PXUuc3RyaW5nLGUueD1Rcyh0aGlzLGgsbiksdC5maWxsU3R5bGU9bi5ib2R5Q29sb3IsUih0aGlzLmJlZm9yZUJvZHksbSksZj1vJiZoIT09YHJpZ2h0YD9hPT09YGNlbnRlcmA/Yy8yK2w6YysyK2w6MCx5PTAseD1yLmxlbmd0aDt5PHg7Kyt5KXtmb3IoZz1yW3ldLF89dGhpcy5sYWJlbFRleHRDb2xvcnNbeV0sdC5maWxsU3R5bGU9XyxSKGcuYmVmb3JlLG0pLHY9Zy5saW5lcyxvJiZ2Lmxlbmd0aCYmKHRoaXMuX2RyYXdDb2xvckJveCh0LGUseSxwLG4pLGQ9TWF0aC5tYXgodS5saW5lSGVpZ2h0LHMpKSxiPTAsUz12Lmxlbmd0aDtiPFM7KytiKW0odltiXSksZD11LmxpbmVIZWlnaHQ7UihnLmFmdGVyLG0pfWY9MCxkPXUubGluZUhlaWdodCxSKHRoaXMuYWZ0ZXJCb2R5LG0pLGUueS09aX1kcmF3Rm9vdGVyKGUsdCxuKXtsZXQgcj10aGlzLmZvb3RlcixpPXIubGVuZ3RoLGEsbztpZihpKXtsZXQgcz1IcihuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1Rcyh0aGlzLG4uZm9vdGVyQWxpZ24sbiksZS55Kz1uLmZvb3Rlck1hcmdpblRvcCx0LnRleHRBbGlnbj1zLnRleHRBbGlnbihuLmZvb3RlckFsaWduKSx0LnRleHRCYXNlbGluZT1gbWlkZGxlYCxhPUoobi5mb290ZXJGb250KSx0LmZpbGxTdHlsZT1uLmZvb3RlckNvbG9yLHQuZm9udD1hLnN0cmluZyxvPTA7bzxpOysrbyl0LmZpbGxUZXh0KHJbb10scy54KGUueCksZS55K2EubGluZUhlaWdodC8yKSxlLnkrPWEubGluZUhlaWdodCtuLmZvb3RlclNwYWNpbmd9fWRyYXdCYWNrZ3JvdW5kKGUsdCxuLHIpe2xldHt4QWxpZ246aSx5QWxpZ246YX09dGhpcyx7eDpvLHk6c309ZSx7d2lkdGg6YyxoZWlnaHQ6bH09bix7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PUhuKHIuY29ybmVyUmFkaXVzKTt0LmZpbGxTdHlsZT1yLmJhY2tncm91bmRDb2xvcix0LnN0cm9rZVN0eWxlPXIuYm9yZGVyQ29sb3IsdC5saW5lV2lkdGg9ci5ib3JkZXJXaWR0aCx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG8rdSxzKSxhPT09YHRvcGAmJnRoaXMuZHJhd0NhcmV0KGUsdCxuLHIpLHQubGluZVRvKG8rYy1kLHMpLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscyxvK2MscytkKSxhPT09YGNlbnRlcmAmJmk9PT1gcmlnaHRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MscytsLXApLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscytsLG8rYy1wLHMrbCksYT09PWBib3R0b21gJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2YscytsKSx0LnF1YWRyYXRpY0N1cnZlVG8obyxzK2wsbyxzK2wtZiksYT09PWBjZW50ZXJgJiZpPT09YGxlZnRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvLHMrdSksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scyxvK3UscyksdC5jbG9zZVBhdGgoKSx0LmZpbGwoKSxyLmJvcmRlcldpZHRoPjAmJnQuc3Ryb2tlKCl9X3VwZGF0ZUFuaW1hdGlvblRhcmdldChlKXtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy4kYW5pbWF0aW9ucyxyPW4mJm4ueCxpPW4mJm4ueTtpZihyfHxpKXtsZXQgbj1Wc1tlLnBvc2l0aW9uXS5jYWxsKHRoaXMsdGhpcy5fYWN0aXZlLHRoaXMuX2V2ZW50UG9zaXRpb24pO2lmKCFuKXJldHVybjtsZXQgYT10aGlzLl9zaXplPVdzKHRoaXMsZSksbz1PYmplY3QuYXNzaWduKHt9LG4sdGhpcy5fc2l6ZSkscz1Kcyh0LGUsbyksYz1acyhlLG8scyx0KTsoci5fdG8hPT1jLnh8fGkuX3RvIT09Yy55KSYmKHRoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLHRoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLmNhcmV0WD1uLngsdGhpcy5jYXJldFk9bi55LHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsYykpfX1fd2lsbFJlbmRlcigpe3JldHVybiEhdGhpcy5vcGFjaXR5fWRyYXcoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLG49dGhpcy5vcGFjaXR5O2lmKCFuKXJldHVybjt0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQodCk7bGV0IHI9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxpPXt4OnRoaXMueCx5OnRoaXMueX07bj1NYXRoLmFicyhuKTwuMDAxPzA6bjtsZXQgYT1xKHQucGFkZGluZyksbz10aGlzLnRpdGxlLmxlbmd0aHx8dGhpcy5iZWZvcmVCb2R5Lmxlbmd0aHx8dGhpcy5ib2R5Lmxlbmd0aHx8dGhpcy5hZnRlckJvZHkubGVuZ3RofHx0aGlzLmZvb3Rlci5sZW5ndGg7dC5lbmFibGVkJiZvJiYoZS5zYXZlKCksZS5nbG9iYWxBbHBoYT1uLHRoaXMuZHJhd0JhY2tncm91bmQoaSxlLHIsdCksVXIoZSx0LnRleHREaXJlY3Rpb24pLGkueSs9YS50b3AsdGhpcy5kcmF3VGl0bGUoaSxlLHQpLHRoaXMuZHJhd0JvZHkoaSxlLHQpLHRoaXMuZHJhd0Zvb3RlcihpLGUsdCksV3IoZSx0LnRleHREaXJlY3Rpb24pLGUucmVzdG9yZSgpKX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fYWN0aXZlLHI9ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KSxpPSFaZShuLHIpLGE9dGhpcy5fcG9zaXRpb25DaGFuZ2VkKHIsdCk7KGl8fGEpJiYodGhpcy5fYWN0aXZlPXIsdGhpcy5fZXZlbnRQb3NpdGlvbj10LHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMCx0aGlzLnVwZGF0ZSghMCkpfWhhbmRsZUV2ZW50KGUsdCxuPSEwKXtpZih0JiZ0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHMpcmV0dXJuITE7dGhpcy5faWdub3JlUmVwbGF5RXZlbnRzPSExO2xldCByPXRoaXMub3B0aW9ucyxpPXRoaXMuX2FjdGl2ZXx8W10sYT10aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLGksdCxuKSxvPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChhLGUpLHM9dHx8IVplKGEsaSl8fG87cmV0dXJuIHMmJih0aGlzLl9hY3RpdmU9YSwoci5lbmFibGVkfHxyLmV4dGVybmFsKSYmKHRoaXMuX2V2ZW50UG9zaXRpb249e3g6ZS54LHk6ZS55fSx0aGlzLnVwZGF0ZSghMCx0KSkpLHN9X2dldEFjdGl2ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9ucztpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFyKXJldHVybiB0LmZpbHRlcihlPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZS5kYXRhc2V0SW5kZXhdJiZ0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFBhcnNlZChlLmluZGV4KSE9PXZvaWQgMCk7bGV0IGE9dGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGksbik7cmV0dXJuIGkucmV2ZXJzZSYmYS5yZXZlcnNlKCksYX1fcG9zaXRpb25DaGFuZ2VkKGUsdCl7bGV0e2NhcmV0WDpuLGNhcmV0WTpyLG9wdGlvbnM6aX09dGhpcyxhPVZzW2kucG9zaXRpb25dLmNhbGwodGhpcyxlLHQpO3JldHVybiBhIT09ITEmJihuIT09YS54fHxyIT09YS55KX19LGljPXtpZDpgdG9vbHRpcGAsX2VsZW1lbnQ6cmMscG9zaXRpb25lcnM6VnMsYWZ0ZXJJbml0KGUsdCxuKXtuJiYoZS50b29sdGlwPW5ldyByYyh7Y2hhcnQ6ZSxvcHRpb25zOm59KSl9LGJlZm9yZVVwZGF0ZShlLHQsbil7ZS50b29sdGlwJiZlLnRvb2x0aXAuaW5pdGlhbGl6ZShuKX0scmVzZXQoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LGFmdGVyRHJhdyhlKXtsZXQgdD1lLnRvb2x0aXA7aWYodCYmdC5fd2lsbFJlbmRlcigpKXtsZXQgbj17dG9vbHRpcDp0fTtpZihlLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVRvb2x0aXBEcmF3YCx7Li4ubixjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47dC5kcmF3KGUuY3R4KSxlLm5vdGlmeVBsdWdpbnMoYGFmdGVyVG9vbHRpcERyYXdgLG4pfX0sYWZ0ZXJFdmVudChlLHQpe2lmKGUudG9vbHRpcCl7bGV0IG49dC5yZXBsYXk7ZS50b29sdGlwLmhhbmRsZUV2ZW50KHQuZXZlbnQsbix0LmluQ2hhcnRBcmVhKSYmKHQuY2hhbmdlZD0hMCl9fSxkZWZhdWx0czp7ZW5hYmxlZDohMCxleHRlcm5hbDpudWxsLHBvc2l0aW9uOmBhdmVyYWdlYCxiYWNrZ3JvdW5kQ29sb3I6YHJnYmEoMCwwLDAsMC44KWAsdGl0bGVDb2xvcjpgI2ZmZmAsdGl0bGVGb250Ont3ZWlnaHQ6YGJvbGRgfSx0aXRsZVNwYWNpbmc6Mix0aXRsZU1hcmdpbkJvdHRvbTo2LHRpdGxlQWxpZ246YGxlZnRgLGJvZHlDb2xvcjpgI2ZmZmAsYm9keVNwYWNpbmc6Mixib2R5Rm9udDp7fSxib2R5QWxpZ246YGxlZnRgLGZvb3RlckNvbG9yOmAjZmZmYCxmb290ZXJTcGFjaW5nOjIsZm9vdGVyTWFyZ2luVG9wOjYsZm9vdGVyRm9udDp7d2VpZ2h0OmBib2xkYH0sZm9vdGVyQWxpZ246YGxlZnRgLHBhZGRpbmc6NixjYXJldFBhZGRpbmc6MixjYXJldFNpemU6NSxjb3JuZXJSYWRpdXM6Nixib3hIZWlnaHQ6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxib3hXaWR0aDooZSx0KT0+dC5ib2R5Rm9udC5zaXplLG11bHRpS2V5QmFja2dyb3VuZDpgI2ZmZmAsZGlzcGxheUNvbG9yczohMCxib3hQYWRkaW5nOjAsYm9yZGVyQ29sb3I6YHJnYmEoMCwwLDAsMClgLGJvcmRlcldpZHRoOjAsYW5pbWF0aW9uOntkdXJhdGlvbjo0MDAsZWFzaW5nOmBlYXNlT3V0UXVhcnRgfSxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYHdpZHRoYCxgaGVpZ2h0YCxgY2FyZXRYYCxgY2FyZXRZYF19LG9wYWNpdHk6e2Vhc2luZzpgbGluZWFyYCxkdXJhdGlvbjoyMDB9fSxjYWxsYmFja3M6bmN9LGRlZmF1bHRSb3V0ZXM6e2JvZHlGb250OmBmb250YCxmb290ZXJGb250OmBmb250YCx0aXRsZUZvbnQ6YGZvbnRgfSxkZXNjcmlwdG9yczp7X3NjcmlwdGFibGU6ZT0+ZSE9PWBmaWx0ZXJgJiZlIT09YGl0ZW1Tb3J0YCYmZSE9PWBleHRlcm5hbGAsX2luZGV4YWJsZTohMSxjYWxsYmFja3M6e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9LGFuaW1hdGlvbjp7X2ZhbGxiYWNrOiExfSxhbmltYXRpb25zOntfZmFsbGJhY2s6YGFuaW1hdGlvbmB9fSxhZGRpdGlvbmFsT3B0aW9uU2NvcGVzOltgaW50ZXJhY3Rpb25gXX0sYWM9KGUsdCxuLHIpPT4odHlwZW9mIHQ9PWBzdHJpbmdgPyhuPWUucHVzaCh0KS0xLHIudW5zaGlmdCh7aW5kZXg6bixsYWJlbDp0fSkpOmlzTmFOKHQpJiYobj1udWxsKSxuKTtmdW5jdGlvbiBvYyhlLHQsbixyKXtsZXQgaT1lLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9hYyhlLHQsbixyKTppPT09ZS5sYXN0SW5kZXhPZih0KT9pOm59dmFyIHNjPShlLHQpPT5lPT09bnVsbD9udWxsOlUoTWF0aC5yb3VuZChlKSwwLHQpO2Z1bmN0aW9uIGNjKGUpe2xldCB0PXRoaXMuZ2V0TGFiZWxzKCk7cmV0dXJuIGU+PTAmJmU8dC5sZW5ndGg/dFtlXTplfXZhciBsYz1jbGFzcyBleHRlbmRzIFhhe3N0YXRpYyBpZD1gY2F0ZWdvcnlgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOmNjfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wLHRoaXMuX2FkZGVkTGFiZWxzPVtdfWluaXQoZSl7bGV0IHQ9dGhpcy5fYWRkZWRMYWJlbHM7aWYodC5sZW5ndGgpe2xldCBlPXRoaXMuZ2V0TGFiZWxzKCk7Zm9yKGxldHtpbmRleDpuLGxhYmVsOnJ9b2YgdCllW25dPT09ciYmZS5zcGxpY2UobiwxKTt0aGlzLl9hZGRlZExhYmVscz1bXX1zdXBlci5pbml0KGUpfXBhcnNlKGUsdCl7aWYoaihlKSlyZXR1cm4gbnVsbDtsZXQgbj10aGlzLmdldExhYmVscygpO3JldHVybiB0PWlzRmluaXRlKHQpJiZuW3RdPT09ZT90Om9jKG4sZSxJKHQsZSksdGhpcy5fYWRkZWRMYWJlbHMpLHNjKHQsbi5sZW5ndGgtMSl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOm4sbWF4OnJ9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm9wdGlvbnMuYm91bmRzPT09YHRpY2tzYCYmKGV8fChuPTApLHR8fChyPXRoaXMuZ2V0TGFiZWxzKCkubGVuZ3RoLTEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMubWluLHQ9dGhpcy5tYXgsbj10aGlzLm9wdGlvbnMub2Zmc2V0LHI9W10saT10aGlzLmdldExhYmVscygpO2k9ZT09PTAmJnQ9PT1pLmxlbmd0aC0xP2k6aS5zbGljZShlLHQrMSksdGhpcy5fdmFsdWVSYW5nZT1NYXRoLm1heChpLmxlbmd0aC0rIW4sMSksdGhpcy5fc3RhcnRWYWx1ZT10aGlzLm1pbi0obj8uNTowKTtmb3IobGV0IG49ZTtuPD10O24rKylyLnB1c2goe3ZhbHVlOm59KTtyZXR1cm4gcn1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBjYy5jYWxsKHRoaXMsZSl9Y29uZmlndXJlKCl7c3VwZXIuY29uZmlndXJlKCksdGhpcy5pc0hvcml6b250YWwoKXx8KHRoaXMuX3JldmVyc2VQaXhlbHM9IXRoaXMuX3JldmVyc2VQaXhlbHMpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIHR5cGVvZiBlIT1gbnVtYmVyYCYmKGU9dGhpcy5wYXJzZShlKSksZT09PW51bGw/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKChlLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUrdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkqdGhpcy5fdmFsdWVSYW5nZSl9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuYm90dG9tfX07ZnVuY3Rpb24gdWMoZSx0KXtsZXQgbj1bXSx7Ym91bmRzOnIsc3RlcDppLG1pbjphLG1heDpvLHByZWNpc2lvbjpzLGNvdW50OmMsbWF4VGlja3M6bCxtYXhEaWdpdHM6dSxpbmNsdWRlQm91bmRzOmR9PWUsZj1pfHwxLHA9bC0xLHttaW46bSxtYXg6aH09dCxnPSFqKGEpLF89IWoobyksdj0haihjKSx5PShoLW0pLyh1KzEpLGI9eHQoKGgtbSkvcC9mKSpmLHgsUyxDLHc7aWYoYjwxZS0xNCYmIWcmJiFfKXJldHVyblt7dmFsdWU6bX0se3ZhbHVlOmh9XTt3PU1hdGguY2VpbChoL2IpLU1hdGguZmxvb3IobS9iKSx3PnAmJihiPXh0KHcqYi9wL2YpKmYpLGoocyl8fCh4PTEwKipzLGI9TWF0aC5jZWlsKGIqeCkveCkscj09PWB0aWNrc2A/KFM9TWF0aC5mbG9vcihtL2IpKmIsQz1NYXRoLmNlaWwoaC9iKSpiKTooUz1tLEM9aCksZyYmXyYmaSYmVHQoKG8tYSkvaSxiLzFlMyk/KHc9TWF0aC5yb3VuZChNYXRoLm1pbigoby1hKS9iLGwpKSxiPShvLWEpL3csUz1hLEM9byk6dj8oUz1nP2E6UyxDPV8/bzpDLHc9Yy0xLGI9KEMtUykvdyk6KHc9KEMtUykvYix3PWJ0KHcsTWF0aC5yb3VuZCh3KSxiLzFlMyk/TWF0aC5yb3VuZCh3KTpNYXRoLmNlaWwodykpO2xldCBUPU1hdGgubWF4KGt0KGIpLGt0KFMpKTt4PTEwKiooaihzKT9UOnMpLFM9TWF0aC5yb3VuZChTKngpL3gsQz1NYXRoLnJvdW5kKEMqeCkveDtsZXQgRT0wO2ZvcihnJiYoZCYmUyE9PWE/KG4ucHVzaCh7dmFsdWU6YX0pLFM8YSYmRSsrLGJ0KE1hdGgucm91bmQoKFMrRSpiKSp4KS94LGEsZGMoYSx5LGUpKSYmRSsrKTpTPGEmJkUrKyk7RTx3OysrRSl7bGV0IGU9TWF0aC5yb3VuZCgoUytFKmIpKngpL3g7aWYoXyYmZT5vKWJyZWFrO24ucHVzaCh7dmFsdWU6ZX0pfXJldHVybiBfJiZkJiZDIT09bz9uLmxlbmd0aCYmYnQobltuLmxlbmd0aC0xXS52YWx1ZSxvLGRjKG8seSxlKSk/bltuLmxlbmd0aC0xXS52YWx1ZT1vOm4ucHVzaCh7dmFsdWU6b30pOighX3x8Qz09PW8pJiZuLnB1c2goe3ZhbHVlOkN9KSxufWZ1bmN0aW9uIGRjKGUsdCx7aG9yaXpvbnRhbDpuLG1pblJvdGF0aW9uOnJ9KXtsZXQgaT1EdChyKSxhPShuP01hdGguc2luKGkpOk1hdGguY29zKGkpKXx8LjAwMSxvPS43NSp0KihgYCtlKS5sZW5ndGg7cmV0dXJuIE1hdGgubWluKHQvYSxvKX12YXIgZmM9Y2xhc3MgZXh0ZW5kcyBYYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fZW5kVmFsdWU9dm9pZCAwLHRoaXMuX3ZhbHVlUmFuZ2U9MH1wYXJzZShlLHQpe3JldHVybiBqKGUpfHwodHlwZW9mIGU9PWBudW1iZXJgfHxlIGluc3RhbmNlb2YgTnVtYmVyKSYmIWlzRmluaXRlKCtlKT9udWxsOitlfWhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKXtsZXR7YmVnaW5BdFplcm86ZX09dGhpcy5vcHRpb25zLHttaW5EZWZpbmVkOnQsbWF4RGVmaW5lZDpufT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOnIsbWF4Oml9PXRoaXMsYT1lPT5yPXQ/cjplLG89ZT0+aT1uP2k6ZTtpZihlKXtsZXQgZT15dChyKSx0PXl0KGkpO2U8MCYmdDwwP28oMCk6ZT4wJiZ0PjAmJmEoMCl9aWYocj09PWkpe2xldCB0PWk9PT0wPzE6TWF0aC5hYnMoaSouMDUpO28oaSt0KSxlfHxhKHItdCl9dGhpcy5taW49cix0aGlzLm1heD1pfWdldFRpY2tMaW1pdCgpe2xldHttYXhUaWNrc0xpbWl0OmUsc3RlcFNpemU6dH09dGhpcy5vcHRpb25zLnRpY2tzLG47cmV0dXJuIHQ/KG49TWF0aC5jZWlsKHRoaXMubWF4L3QpLU1hdGguZmxvb3IodGhpcy5taW4vdCkrMSxuPjFlMyYmKGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7dH0gd291bGQgcmVzdWx0IGdlbmVyYXRpbmcgdXAgdG8gJHtufSB0aWNrcy4gTGltaXRpbmcgdG8gMTAwMC5gKSxuPTFlMykpOihuPXRoaXMuY29tcHV0ZVRpY2tMaW1pdCgpLGV8fD0xMSksZSYmKG49TWF0aC5taW4oZSxuKSksbn1jb21wdXRlVGlja0xpbWl0KCl7cmV0dXJuIDEvMH1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aWNrcyxuPXRoaXMuZ2V0VGlja0xpbWl0KCk7bj1NYXRoLm1heCgyLG4pO2xldCByPXVjKHttYXhUaWNrczpuLGJvdW5kczplLmJvdW5kcyxtaW46ZS5taW4sbWF4OmUubWF4LHByZWNpc2lvbjp0LnByZWNpc2lvbixzdGVwOnQuc3RlcFNpemUsY291bnQ6dC5jb3VudCxtYXhEaWdpdHM6dGhpcy5fbWF4RGlnaXRzKCksaG9yaXpvbnRhbDp0aGlzLmlzSG9yaXpvbnRhbCgpLG1pblJvdGF0aW9uOnQubWluUm90YXRpb258fDAsaW5jbHVkZUJvdW5kczp0LmluY2x1ZGVCb3VuZHMhPT0hMX0sdGhpcy5fcmFuZ2V8fHRoaXMpO3JldHVybiBlLmJvdW5kcz09PWB0aWNrc2AmJkV0KHIsdGhpcyxgdmFsdWVgKSxlLnJldmVyc2U/KHIucmV2ZXJzZSgpLHRoaXMuc3RhcnQ9dGhpcy5tYXgsdGhpcy5lbmQ9dGhpcy5taW4pOih0aGlzLnN0YXJ0PXRoaXMubWluLHRoaXMuZW5kPXRoaXMubWF4KSxyfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMudGlja3MsdD10aGlzLm1pbixuPXRoaXMubWF4O2lmKHN1cGVyLmNvbmZpZ3VyZSgpLHRoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoKXtsZXQgcj0obi10KS9NYXRoLm1heChlLmxlbmd0aC0xLDEpLzI7dC09cixuKz1yfXRoaXMuX3N0YXJ0VmFsdWU9dCx0aGlzLl9lbmRWYWx1ZT1uLHRoaXMuX3ZhbHVlUmFuZ2U9bi10fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGRuKGUsdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSx0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KX19LHBjPWNsYXNzIGV4dGVuZHMgZmN7c3RhdGljIGlkPWBsaW5lYXJgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOm1uLmZvcm1hdHRlcnMubnVtZXJpY319O2RldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm1pbj1QKGUpP2U6MCx0aGlzLm1heD1QKHQpP3Q6MSx0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKX1jb21wdXRlVGlja0xpbWl0KCl7bGV0IGU9dGhpcy5pc0hvcml6b250YWwoKSx0PWU/dGhpcy53aWR0aDp0aGlzLmhlaWdodCxuPUR0KHRoaXMub3B0aW9ucy50aWNrcy5taW5Sb3RhdGlvbikscj0oZT9NYXRoLnNpbihuKTpNYXRoLmNvcyhuKSl8fC4wMDEsaT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApO3JldHVybiBNYXRoLmNlaWwodC9NYXRoLm1pbig0MCxpLmxpbmVIZWlnaHQvcikpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgoZS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiB0aGlzLl9zdGFydFZhbHVlK3RoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpKnRoaXMuX3ZhbHVlUmFuZ2V9fSxtYz1lPT5NYXRoLmZsb29yKHZ0KGUpKSxoYz0oZSx0KT0+MTAqKihtYyhlKSt0KTtmdW5jdGlvbiBnYyhlKXtyZXR1cm4gZS8xMCoqbWMoZSk9PTF9ZnVuY3Rpb24gX2MoZSx0LG4pe2xldCByPTEwKipuLGk9TWF0aC5mbG9vcihlL3IpO3JldHVybiBNYXRoLmNlaWwodC9yKS1pfWZ1bmN0aW9uIHZjKGUsdCl7bGV0IG49bWModC1lKTtmb3IoO19jKGUsdCxuKT4xMDspbisrO2Zvcig7X2MoZSx0LG4pPDEwOyluLS07cmV0dXJuIE1hdGgubWluKG4sbWMoZSkpfWZ1bmN0aW9uIHljKGUse21pbjp0LG1heDpufSl7dD1GKGUubWluLHQpO2xldCByPVtdLGk9bWModCksYT12Yyh0LG4pLG89YTwwPzEwKipNYXRoLmFicyhhKToxLHM9MTAqKmEsYz1pPmE/MTAqKmk6MCxsPU1hdGgucm91bmQoKHQtYykqbykvbyx1PU1hdGguZmxvb3IoKHQtYykvcy8xMCkqcyoxMCxkPU1hdGguZmxvb3IoKGwtdSkvMTAqKmEpLGY9RihlLm1pbixNYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbyk7Zm9yKDtmPG47KXIucHVzaCh7dmFsdWU6ZixtYWpvcjpnYyhmKSxzaWduaWZpY2FuZDpkfSksZD49MTA/ZD1kPDE1PzE1OjIwOmQrKyxkPj0yMCYmKGErKyxkPTIsbz1hPj0wPzE6byksZj1NYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbztsZXQgcD1GKGUubWF4LGYpO3JldHVybiByLnB1c2goe3ZhbHVlOnAsbWFqb3I6Z2MocCksc2lnbmlmaWNhbmQ6ZH0pLHJ9KGNsYXNzIGV4dGVuZHMgWGF7c3RhdGljIGlkPWBsb2dhcml0aG1pY2A7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6bW4uZm9ybWF0dGVycy5sb2dhcml0aG1pYyxtYWpvcjp7ZW5hYmxlZDohMH19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wfXBhcnNlKGUsdCl7bGV0IG49ZmMucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsW2UsdF0pO2lmKG49PT0wKXt0aGlzLl96ZXJvPSEwO3JldHVybn1yZXR1cm4gUChuKSYmbj4wP246bnVsbH1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMCk7dGhpcy5taW49UChlKT9NYXRoLm1heCgwLGUpOm51bGwsdGhpcy5tYXg9UCh0KT9NYXRoLm1heCgwLHQpOm51bGwsdGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvJiYodGhpcy5femVybz0hMCksdGhpcy5femVybyYmdGhpcy5taW4hPT10aGlzLl9zdWdnZXN0ZWRNaW4mJiFQKHRoaXMuX3VzZXJNaW4pJiYodGhpcy5taW49ZT09PWhjKHRoaXMubWluLDApP2hjKHRoaXMubWluLC0xKTpoYyh0aGlzLm1pbiwwKSksdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9aGFuZGxlVGlja1JhbmdlT3B0aW9ucygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSxuPXRoaXMubWluLHI9dGhpcy5tYXgsaT10PT5uPWU/bjp0LGE9ZT0+cj10P3I6ZTtuPT09ciYmKG48PTA/KGkoMSksYSgxMCkpOihpKGhjKG4sLTEpKSxhKGhjKHIsMSkpKSksbjw9MCYmaShoYyhyLC0xKSkscjw9MCYmYShoYyhuLDEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PXljKHttaW46dGhpcy5fdXNlck1pbixtYXg6dGhpcy5fdXNlck1heH0sdGhpcyk7cmV0dXJuIGUuYm91bmRzPT09YHRpY2tzYCYmRXQodCx0aGlzLGB2YWx1ZWApLGUucmV2ZXJzZT8odC5yZXZlcnNlKCksdGhpcy5zdGFydD10aGlzLm1heCx0aGlzLmVuZD10aGlzLm1pbik6KHRoaXMuc3RhcnQ9dGhpcy5taW4sdGhpcy5lbmQ9dGhpcy5tYXgpLHR9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PXZvaWQgMD9gMGA6ZG4oZSx0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMubWluO3N1cGVyLmNvbmZpZ3VyZSgpLHRoaXMuX3N0YXJ0VmFsdWU9dnQoZSksdGhpcy5fdmFsdWVSYW5nZT12dCh0aGlzLm1heCktdnQoZSl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4oZT09PXZvaWQgMHx8ZT09PTApJiYoZT10aGlzLm1pbiksZT09PW51bGx8fGlzTmFOKGUpP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbChlPT09dGhpcy5taW4/MDoodnQoZSktdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKTtyZXR1cm4gMTAqKih0aGlzLl9zdGFydFZhbHVlK3QqdGhpcy5fdmFsdWVSYW5nZSl9fSk7ZnVuY3Rpb24gYmMoZSl7bGV0IHQ9ZS50aWNrcztpZih0LmRpc3BsYXkmJmUuZGlzcGxheSl7bGV0IGU9cSh0LmJhY2tkcm9wUGFkZGluZyk7cmV0dXJuIEkodC5mb250JiZ0LmZvbnQuc2l6ZSxHLmZvbnQuc2l6ZSkrZS5oZWlnaHR9cmV0dXJuIDB9ZnVuY3Rpb24geGMoZSx0LG4pe3JldHVybiBuPU0obik/bjpbbl0se3c6U24oZSx0LnN0cmluZyxuKSxoOm4ubGVuZ3RoKnQubGluZUhlaWdodH19ZnVuY3Rpb24gU2MoZSx0LG4scixpKXtyZXR1cm4gZT09PXJ8fGU9PT1pP3tzdGFydDp0LW4vMixlbmQ6dCtuLzJ9OmU8cnx8ZT5pP3tzdGFydDp0LW4sZW5kOnR9OntzdGFydDp0LGVuZDp0K259fWZ1bmN0aW9uIENjKGUpe2xldCB0PXtsOmUubGVmdCtlLl9wYWRkaW5nLmxlZnQscjplLnJpZ2h0LWUuX3BhZGRpbmcucmlnaHQsdDplLnRvcCtlLl9wYWRkaW5nLnRvcCxiOmUuYm90dG9tLWUuX3BhZGRpbmcuYm90dG9tfSxuPU9iamVjdC5hc3NpZ24oe30sdCkscj1bXSxpPVtdLGE9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLG89ZS5vcHRpb25zLnBvaW50TGFiZWxzLHM9by5jZW50ZXJQb2ludExhYmVscz96L2E6MDtmb3IobGV0IGM9MDtjPGE7YysrKXtsZXQgYT1vLnNldENvbnRleHQoZS5nZXRQb2ludExhYmVsQ29udGV4dChjKSk7aVtjXT1hLnBhZGRpbmc7bGV0IGw9ZS5nZXRQb2ludFBvc2l0aW9uKGMsZS5kcmF3aW5nQXJlYStpW2NdLHMpLHU9SihhLmZvbnQpLGQ9eGMoZS5jdHgsdSxlLl9wb2ludExhYmVsc1tjXSk7cltjXT1kO2xldCBmPUgoZS5nZXRJbmRleEFuZ2xlKGMpK3MpLHA9TWF0aC5yb3VuZChPdChmKSk7d2Mobix0LGYsU2MocCxsLngsZC53LDAsMTgwKSxTYyhwLGwueSxkLmgsOTAsMjcwKSl9ZS5zZXRDZW50ZXJQb2ludCh0Lmwtbi5sLG4uci10LnIsdC50LW4udCxuLmItdC5iKSxlLl9wb2ludExhYmVsSXRlbXM9RGMoZSxyLGkpfWZ1bmN0aW9uIHdjKGUsdCxuLHIsaSl7bGV0IGE9TWF0aC5hYnMoTWF0aC5zaW4obikpLG89TWF0aC5hYnMoTWF0aC5jb3MobikpLHM9MCxjPTA7ci5zdGFydDx0Lmw/KHM9KHQubC1yLnN0YXJ0KS9hLGUubD1NYXRoLm1pbihlLmwsdC5sLXMpKTpyLmVuZD50LnImJihzPShyLmVuZC10LnIpL2EsZS5yPU1hdGgubWF4KGUucix0LnIrcykpLGkuc3RhcnQ8dC50PyhjPSh0LnQtaS5zdGFydCkvbyxlLnQ9TWF0aC5taW4oZS50LHQudC1jKSk6aS5lbmQ+dC5iJiYoYz0oaS5lbmQtdC5iKS9vLGUuYj1NYXRoLm1heChlLmIsdC5iK2MpKX1mdW5jdGlvbiBUYyhlLHQsbil7bGV0IHI9ZS5kcmF3aW5nQXJlYSx7ZXh0cmE6aSxhZGRpdGlvbmFsQW5nbGU6YSxwYWRkaW5nOm8sc2l6ZTpzfT1uLGM9ZS5nZXRQb2ludFBvc2l0aW9uKHQscitpK28sYSksbD1NYXRoLnJvdW5kKE90KEgoYy5hbmdsZStWKSkpLHU9QWMoYy55LHMuaCxsKSxkPU9jKGwpLGY9a2MoYy54LHMudyxkKTtyZXR1cm57dmlzaWJsZTohMCx4OmMueCx5OnUsdGV4dEFsaWduOmQsbGVmdDpmLHRvcDp1LHJpZ2h0OmYrcy53LGJvdHRvbTp1K3MuaH19ZnVuY3Rpb24gRWMoZSx0KXtpZighdClyZXR1cm4hMDtsZXR7bGVmdDpuLHRvcDpyLHJpZ2h0OmksYm90dG9tOmF9PWU7cmV0dXJuIShLKHt4Om4seTpyfSx0KXx8Syh7eDpuLHk6YX0sdCl8fEsoe3g6aSx5OnJ9LHQpfHxLKHt4OmkseTphfSx0KSl9ZnVuY3Rpb24gRGMoZSx0LG4pe2xldCByPVtdLGk9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLGE9ZS5vcHRpb25zLHtjZW50ZXJQb2ludExhYmVsczpvLGRpc3BsYXk6c309YS5wb2ludExhYmVscyxjPXtleHRyYTpiYyhhKS8yLGFkZGl0aW9uYWxBbmdsZTpvP3ovaTowfSxsO2ZvcihsZXQgYT0wO2E8aTthKyspe2MucGFkZGluZz1uW2FdLGMuc2l6ZT10W2FdO2xldCBpPVRjKGUsYSxjKTtyLnB1c2goaSkscz09PWBhdXRvYCYmKGkudmlzaWJsZT1FYyhpLGwpLGkudmlzaWJsZSYmKGw9aSkpfXJldHVybiByfWZ1bmN0aW9uIE9jKGUpe3JldHVybiBlPT09MHx8ZT09PTE4MD9gY2VudGVyYDplPDE4MD9gbGVmdGA6YHJpZ2h0YH1mdW5jdGlvbiBrYyhlLHQsbil7cmV0dXJuIG49PT1gcmlnaHRgP2UtPXQ6bj09PWBjZW50ZXJgJiYoZS09dC8yKSxlfWZ1bmN0aW9uIEFjKGUsdCxuKXtyZXR1cm4gbj09PTkwfHxuPT09MjcwP2UtPXQvMjoobj4yNzB8fG48OTApJiYoZS09dCksZX1mdW5jdGlvbiBqYyhlLHQsbil7bGV0e2xlZnQ6cix0b3A6aSxyaWdodDphLGJvdHRvbTpvfT1uLHtiYWNrZHJvcENvbG9yOnN9PXQ7aWYoIWoocykpe2xldCBuPUhuKHQuYm9yZGVyUmFkaXVzKSxjPXEodC5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFN0eWxlPXM7bGV0IGw9ci1jLmxlZnQsdT1pLWMudG9wLGQ9YS1yK2Mud2lkdGgsZj1vLWkrYy5oZWlnaHQ7T2JqZWN0LnZhbHVlcyhuKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxGbihlLHt4OmwseTp1LHc6ZCxoOmYscmFkaXVzOm59KSxlLmZpbGwoKSk6ZS5maWxsUmVjdChsLHUsZCxmKX19ZnVuY3Rpb24gTWMoZSx0KXtsZXR7Y3R4Om4sb3B0aW9uczp7cG9pbnRMYWJlbHM6cn19PWU7Zm9yKGxldCBpPXQtMTtpPj0wO2ktLSl7bGV0IHQ9ZS5fcG9pbnRMYWJlbEl0ZW1zW2ldO2lmKCF0LnZpc2libGUpY29udGludWU7bGV0IGE9ci5zZXRDb250ZXh0KGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO2pjKG4sYSx0KTtsZXQgbz1KKGEuZm9udCkse3g6cyx5OmMsdGV4dEFsaWduOmx9PXQ7UG4obixlLl9wb2ludExhYmVsc1tpXSxzLGMrby5saW5lSGVpZ2h0LzIsbyx7Y29sb3I6YS5jb2xvcix0ZXh0QWxpZ246bCx0ZXh0QmFzZWxpbmU6YG1pZGRsZWB9KX19ZnVuY3Rpb24gTmMoZSx0LG4scil7bGV0e2N0eDppfT1lO2lmKG4paS5hcmMoZS54Q2VudGVyLGUueUNlbnRlcix0LDAsQik7ZWxzZXtsZXQgbj1lLmdldFBvaW50UG9zaXRpb24oMCx0KTtpLm1vdmVUbyhuLngsbi55KTtmb3IobGV0IGE9MTthPHI7YSsrKW49ZS5nZXRQb2ludFBvc2l0aW9uKGEsdCksaS5saW5lVG8obi54LG4ueSl9fWZ1bmN0aW9uIFBjKGUsdCxuLHIsaSl7bGV0IGE9ZS5jdHgsbz10LmNpcmN1bGFyLHtjb2xvcjpzLGxpbmVXaWR0aDpjfT10OyFvJiYhcnx8IXN8fCFjfHxuPDB8fChhLnNhdmUoKSxhLnN0cm9rZVN0eWxlPXMsYS5saW5lV2lkdGg9YyxhLnNldExpbmVEYXNoKGkuZGFzaHx8W10pLGEubGluZURhc2hPZmZzZXQ9aS5kYXNoT2Zmc2V0LGEuYmVnaW5QYXRoKCksTmMoZSxuLG8sciksYS5jbG9zZVBhdGgoKSxhLnN0cm9rZSgpLGEucmVzdG9yZSgpKX1mdW5jdGlvbiBGYyhlLHQsbil7cmV0dXJuIEduKGUse2xhYmVsOm4saW5kZXg6dCx0eXBlOmBwb2ludExhYmVsYH0pfShjbGFzcyBleHRlbmRzIGZje3N0YXRpYyBpZD1gcmFkaWFsTGluZWFyYDtzdGF0aWMgZGVmYXVsdHM9e2Rpc3BsYXk6ITAsYW5pbWF0ZTohMCxwb3NpdGlvbjpgY2hhcnRBcmVhYCxhbmdsZUxpbmVzOntkaXNwbGF5OiEwLGxpbmVXaWR0aDoxLGJvcmRlckRhc2g6W10sYm9yZGVyRGFzaE9mZnNldDowfSxncmlkOntjaXJjdWxhcjohMX0sc3RhcnRBbmdsZTowLHRpY2tzOntzaG93TGFiZWxCYWNrZHJvcDohMCxjYWxsYmFjazptbi5mb3JtYXR0ZXJzLm51bWVyaWN9LHBvaW50TGFiZWxzOntiYWNrZHJvcENvbG9yOnZvaWQgMCxiYWNrZHJvcFBhZGRpbmc6MixkaXNwbGF5OiEwLGZvbnQ6e3NpemU6MTB9LGNhbGxiYWNrKGUpe3JldHVybiBlfSxwYWRkaW5nOjUsY2VudGVyUG9pbnRMYWJlbHM6ITF9fTtzdGF0aWMgZGVmYXVsdFJvdXRlcz17ImFuZ2xlTGluZXMuY29sb3IiOmBib3JkZXJDb2xvcmAsInBvaW50TGFiZWxzLmNvbG9yIjpgY29sb3JgLCJ0aWNrcy5jb2xvciI6YGNvbG9yYH07c3RhdGljIGRlc2NyaXB0b3JzPXthbmdsZUxpbmVzOntfZmFsbGJhY2s6YGdyaWRgfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy54Q2VudGVyPXZvaWQgMCx0aGlzLnlDZW50ZXI9dm9pZCAwLHRoaXMuZHJhd2luZ0FyZWE9dm9pZCAwLHRoaXMuX3BvaW50TGFiZWxzPVtdLHRoaXMuX3BvaW50TGFiZWxJdGVtcz1bXX1zZXREaW1lbnNpb25zKCl7bGV0IGU9dGhpcy5fcGFkZGluZz1xKGJjKHRoaXMub3B0aW9ucykvMiksdD10aGlzLndpZHRoPXRoaXMubWF4V2lkdGgtZS53aWR0aCxuPXRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LWUuaGVpZ2h0O3RoaXMueENlbnRlcj1NYXRoLmZsb29yKHRoaXMubGVmdCt0LzIrZS5sZWZ0KSx0aGlzLnlDZW50ZXI9TWF0aC5mbG9vcih0aGlzLnRvcCtuLzIrZS50b3ApLHRoaXMuZHJhd2luZ0FyZWE9TWF0aC5mbG9vcihNYXRoLm1pbih0LG4pLzIpfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCExKTt0aGlzLm1pbj1QKGUpJiYhaXNOYU4oZSk/ZTowLHRoaXMubWF4PVAodCkmJiFpc05hTih0KT90OjAsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9Y29tcHV0ZVRpY2tMaW1pdCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYS9iYyh0aGlzLm9wdGlvbnMpKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7ZmMucHJvdG90eXBlLmdlbmVyYXRlVGlja0xhYmVscy5jYWxsKHRoaXMsZSksdGhpcy5fcG9pbnRMYWJlbHM9dGhpcy5nZXRMYWJlbHMoKS5tYXAoKGUsdCk9PntsZXQgbj1MKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjayxbZSx0XSx0aGlzKTtyZXR1cm4gbnx8bj09PTA/bjpgYH0pLmZpbHRlcigoZSx0KT0+dGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eSh0KSl9Zml0KCl7bGV0IGU9dGhpcy5vcHRpb25zO2UuZGlzcGxheSYmZS5wb2ludExhYmVscy5kaXNwbGF5P0NjKHRoaXMpOnRoaXMuc2V0Q2VudGVyUG9pbnQoMCwwLDAsMCl9c2V0Q2VudGVyUG9pbnQoZSx0LG4scil7dGhpcy54Q2VudGVyKz1NYXRoLmZsb29yKChlLXQpLzIpLHRoaXMueUNlbnRlcis9TWF0aC5mbG9vcigobi1yKS8yKSx0aGlzLmRyYXdpbmdBcmVhLT1NYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhLzIsTWF0aC5tYXgoZSx0LG4scikpfWdldEluZGV4QW5nbGUoZSl7bGV0IHQ9Qi8odGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RofHwxKSxuPXRoaXMub3B0aW9ucy5zdGFydEFuZ2xlfHwwO3JldHVybiBIKGUqdCtEdChuKSl9Z2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoZSl7aWYoaihlKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2U/KHRoaXMubWF4LWUpKnQ6KGUtdGhpcy5taW4pKnR9Z2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZSl7aWYoaihlKSlyZXR1cm4gTmFOO2xldCB0PWUvKHRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKSk7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXZlcnNlP3RoaXMubWF4LXQ6dGhpcy5taW4rdH1nZXRQb2ludExhYmVsQ29udGV4dChlKXtsZXQgdD10aGlzLl9wb2ludExhYmVsc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gRmModGhpcy5nZXRDb250ZXh0KCksZSxuKX19Z2V0UG9pbnRQb3NpdGlvbihlLHQsbj0wKXtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoZSktVituO3JldHVybnt4Ok1hdGguY29zKHIpKnQrdGhpcy54Q2VudGVyLHk6TWF0aC5zaW4ocikqdCt0aGlzLnlDZW50ZXIsYW5nbGU6cn19Z2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGUsdCl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihlLHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodCkpfWdldEJhc2VQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoZXx8MCx0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRQb2ludExhYmVsUG9zaXRpb24oZSl7bGV0e2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfT10aGlzLl9wb2ludExhYmVsSXRlbXNbZV07cmV0dXJue2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfX1kcmF3QmFja2dyb3VuZCgpe2xldHtiYWNrZ3JvdW5kQ29sb3I6ZSxncmlkOntjaXJjdWxhcjp0fX09dGhpcy5vcHRpb25zO2lmKGUpe2xldCBuPXRoaXMuY3R4O24uc2F2ZSgpLG4uYmVnaW5QYXRoKCksTmModGhpcyx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMuX2VuZFZhbHVlKSx0LHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCksbi5jbG9zZVBhdGgoKSxuLmZpbGxTdHlsZT1lLG4uZmlsbCgpLG4ucmVzdG9yZSgpfX1kcmF3R3JpZCgpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLHthbmdsZUxpbmVzOm4sZ3JpZDpyLGJvcmRlcjppfT10LGE9dGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoLG8scyxjO2lmKHQucG9pbnRMYWJlbHMuZGlzcGxheSYmTWModGhpcyxhKSxyLmRpc3BsYXkmJnRoaXMudGlja3MuZm9yRWFjaCgoZSx0KT0+e2lmKHQhPT0wfHx0PT09MCYmdGhpcy5taW48MCl7cz10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUudmFsdWUpO2xldCBuPXRoaXMuZ2V0Q29udGV4dCh0KSxvPXIuc2V0Q29udGV4dChuKSxjPWkuc2V0Q29udGV4dChuKTtQYyh0aGlzLG8scyxhLGMpfX0pLG4uZGlzcGxheSl7Zm9yKGUuc2F2ZSgpLG89YS0xO28+PTA7by0tKXtsZXQgcj1uLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChvKSkse2NvbG9yOmksbGluZVdpZHRoOmF9PXI7IWF8fCFpfHwoZS5saW5lV2lkdGg9YSxlLnN0cm9rZVN0eWxlPWksZS5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2gpLGUubGluZURhc2hPZmZzZXQ9ci5ib3JkZXJEYXNoT2Zmc2V0LHM9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0LnJldmVyc2U/dGhpcy5taW46dGhpcy5tYXgpLGM9dGhpcy5nZXRQb2ludFBvc2l0aW9uKG8scyksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0aGlzLnhDZW50ZXIsdGhpcy55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpKX1lLnJlc3RvcmUoKX19ZHJhd0JvcmRlcigpe31kcmF3TGFiZWxzKCl7bGV0IGU9dGhpcy5jdHgsdD10aGlzLm9wdGlvbnMsbj10LnRpY2tzO2lmKCFuLmRpc3BsYXkpcmV0dXJuO2xldCByPXRoaXMuZ2V0SW5kZXhBbmdsZSgwKSxpLGE7ZS5zYXZlKCksZS50cmFuc2xhdGUodGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5yb3RhdGUociksZS50ZXh0QWxpZ249YGNlbnRlcmAsZS50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdGhpcy50aWNrcy5mb3JFYWNoKChyLG8pPT57aWYobz09PTAmJnRoaXMubWluPj0wJiYhdC5yZXZlcnNlKXJldHVybjtsZXQgcz1uLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KG8pKSxjPUoocy5mb250KTtpZihpPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGhpcy50aWNrc1tvXS52YWx1ZSkscy5zaG93TGFiZWxCYWNrZHJvcCl7ZS5mb250PWMuc3RyaW5nLGE9ZS5tZWFzdXJlVGV4dChyLmxhYmVsKS53aWR0aCxlLmZpbGxTdHlsZT1zLmJhY2tkcm9wQ29sb3I7bGV0IHQ9cShzLmJhY2tkcm9wUGFkZGluZyk7ZS5maWxsUmVjdCgtYS8yLXQubGVmdCwtaS1jLnNpemUvMi10LnRvcCxhK3Qud2lkdGgsYy5zaXplK3QuaGVpZ2h0KX1QbihlLHIubGFiZWwsMCwtaSxjLHtjb2xvcjpzLmNvbG9yLHN0cm9rZUNvbG9yOnMudGV4dFN0cm9rZUNvbG9yLHN0cm9rZVdpZHRoOnMudGV4dFN0cm9rZVdpZHRofSl9KSxlLnJlc3RvcmUoKX1kcmF3VGl0bGUoKXt9fSk7dmFyIEljPXttaWxsaXNlY29uZDp7Y29tbW9uOiEwLHNpemU6MSxzdGVwczoxZTN9LHNlY29uZDp7Y29tbW9uOiEwLHNpemU6MWUzLHN0ZXBzOjYwfSxtaW51dGU6e2NvbW1vbjohMCxzaXplOjZlNCxzdGVwczo2MH0saG91cjp7Y29tbW9uOiEwLHNpemU6MzZlNSxzdGVwczoyNH0sZGF5Ontjb21tb246ITAsc2l6ZTo4NjRlNSxzdGVwczozMH0sd2Vlazp7Y29tbW9uOiExLHNpemU6NjA0OGU1LHN0ZXBzOjR9LG1vbnRoOntjb21tb246ITAsc2l6ZToyNjI4ZTYsc3RlcHM6MTJ9LHF1YXJ0ZXI6e2NvbW1vbjohMSxzaXplOjc4ODRlNixzdGVwczo0fSx5ZWFyOntjb21tb246ITAsc2l6ZTozMTU0ZTd9fSwkPU9iamVjdC5rZXlzKEljKTtmdW5jdGlvbiBMYyhlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gUmMoZSx0KXtpZihqKHQpKXJldHVybiBudWxsO2xldCBuPWUuX2FkYXB0ZXIse3BhcnNlcjpyLHJvdW5kOmksaXNvV2Vla2RheTphfT1lLl9wYXJzZU9wdHMsbz10O3JldHVybiB0eXBlb2Ygcj09YGZ1bmN0aW9uYCYmKG89cihvKSksUChvKXx8KG89dHlwZW9mIHI9PWBzdHJpbmdgP24ucGFyc2UobyxyKTpuLnBhcnNlKG8pKSxvPT09bnVsbD9udWxsOihpJiYobz1pPT09YHdlZWtgJiYod3QoYSl8fGE9PT0hMCk/bi5zdGFydE9mKG8sYGlzb1dlZWtgLGEpOm4uc3RhcnRPZihvLGkpKSwrbyl9ZnVuY3Rpb24gemMoZSx0LG4scil7bGV0IGk9JC5sZW5ndGg7Zm9yKGxldCBhPSQuaW5kZXhPZihlKTthPGktMTsrK2Epe2xldCBlPUljWyRbYV1dLGk9ZS5zdGVwcz9lLnN0ZXBzOjIqKjUzLTE7aWYoZS5jb21tb24mJk1hdGguY2VpbCgobi10KS8oaSplLnNpemUpKTw9cilyZXR1cm4gJFthXX1yZXR1cm4gJFtpLTFdfWZ1bmN0aW9uIEJjKGUsdCxuLHIsaSl7Zm9yKGxldCBhPSQubGVuZ3RoLTE7YT49JC5pbmRleE9mKG4pO2EtLSl7bGV0IG49JFthXTtpZihJY1tuXS5jb21tb24mJmUuX2FkYXB0ZXIuZGlmZihpLHIsbik+PXQtMSlyZXR1cm4gbn1yZXR1cm4gJFtuPyQuaW5kZXhPZihuKTowXX1mdW5jdGlvbiBWYyhlKXtmb3IobGV0IHQ9JC5pbmRleE9mKGUpKzEsbj0kLmxlbmd0aDt0PG47Kyt0KWlmKEljWyRbdF1dLmNvbW1vbilyZXR1cm4gJFt0XX1mdW5jdGlvbiBIYyhlLHQsbil7aWYoIW4pZVt0XT0hMDtlbHNlIGlmKG4ubGVuZ3RoKXtsZXR7bG86cixoaTppfT1JdChuLHQpLGE9bltyXT49dD9uW3JdOm5baV07ZVthXT0hMH19ZnVuY3Rpb24gVWMoZSx0LG4scil7bGV0IGk9ZS5fYWRhcHRlcixhPStpLnN0YXJ0T2YodFswXS52YWx1ZSxyKSxvPXRbdC5sZW5ndGgtMV0udmFsdWUscyxjO2ZvcihzPWE7czw9bztzPStpLmFkZChzLDEscikpYz1uW3NdLGM+PTAmJih0W2NdLm1ham9yPSEwKTtyZXR1cm4gdH1mdW5jdGlvbiBXYyhlLHQsbil7bGV0IHI9W10saT17fSxhPXQubGVuZ3RoLG8scztmb3Iobz0wO288YTsrK28pcz10W29dLGlbc109byxyLnB1c2goe3ZhbHVlOnMsbWFqb3I6ITF9KTtyZXR1cm4gYT09PTB8fCFuP3I6VWMoZSxyLGksbil9dmFyIEdjPWNsYXNzIGV4dGVuZHMgWGF7c3RhdGljIGlkPWB0aW1lYDtzdGF0aWMgZGVmYXVsdHM9e2JvdW5kczpgZGF0YWAsYWRhcHRlcnM6e30sdGltZTp7cGFyc2VyOiExLHVuaXQ6ITEscm91bmQ6ITEsaXNvV2Vla2RheTohMSxtaW5Vbml0OmBtaWxsaXNlY29uZGAsZGlzcGxheUZvcm1hdHM6e319LHRpY2tzOntzb3VyY2U6YGF1dG9gLGNhbGxiYWNrOiExLG1ham9yOntlbmFibGVkOiExfX19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119LHRoaXMuX3VuaXQ9YGRheWAsdGhpcy5fbWFqb3JVbml0PXZvaWQgMCx0aGlzLl9vZmZzZXRzPXt9LHRoaXMuX25vcm1hbGl6ZWQ9ITEsdGhpcy5fcGFyc2VPcHRzPXZvaWQgMH1pbml0KGUsdD17fSl7bGV0IG49ZS50aW1lfHw9e30scj10aGlzLl9hZGFwdGVyPW5ldyBQaS5fZGF0ZShlLmFkYXB0ZXJzLmRhdGUpO3IuaW5pdCh0KSxudChuLmRpc3BsYXlGb3JtYXRzLHIuZm9ybWF0cygpKSx0aGlzLl9wYXJzZU9wdHM9e3BhcnNlcjpuLnBhcnNlcixyb3VuZDpuLnJvdW5kLGlzb1dlZWtkYXk6bi5pc29XZWVrZGF5fSxzdXBlci5pbml0KGUpLHRoaXMuX25vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkfXBhcnNlKGUsdCl7cmV0dXJuIGU9PT12b2lkIDA/bnVsbDpSYyh0aGlzLGUpfWJlZm9yZUxheW91dCgpe3N1cGVyLmJlZm9yZUxheW91dCgpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119fWRldGVybWluZURhdGFMaW1pdHMoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD10aGlzLl9hZGFwdGVyLG49ZS50aW1lLnVuaXR8fGBkYXlgLHttaW46cixtYXg6aSxtaW5EZWZpbmVkOmEsbWF4RGVmaW5lZDpvfT10aGlzLmdldFVzZXJCb3VuZHMoKTtmdW5jdGlvbiBzKGUpeyFhJiYhaXNOYU4oZS5taW4pJiYocj1NYXRoLm1pbihyLGUubWluKSksIW8mJiFpc05hTihlLm1heCkmJihpPU1hdGgubWF4KGksZS5tYXgpKX0oIWF8fCFvKSYmKHModGhpcy5fZ2V0TGFiZWxCb3VuZHMoKSksKGUuYm91bmRzIT09YHRpY2tzYHx8ZS50aWNrcy5zb3VyY2UhPT1gbGFiZWxzYCkmJnModGhpcy5nZXRNaW5NYXgoITEpKSkscj1QKHIpJiYhaXNOYU4ocik/cjordC5zdGFydE9mKERhdGUubm93KCksbiksaT1QKGkpJiYhaXNOYU4oaSk/aTordC5lbmRPZihEYXRlLm5vdygpLG4pKzEsdGhpcy5taW49TWF0aC5taW4ocixpLTEpLHRoaXMubWF4PU1hdGgubWF4KHIrMSxpKX1fZ2V0TGFiZWxCb3VuZHMoKXtsZXQgZT10aGlzLmdldExhYmVsVGltZXN0YW1wcygpLHQ9MS8wLG49LTEvMDtyZXR1cm4gZS5sZW5ndGgmJih0PWVbMF0sbj1lW2UubGVuZ3RoLTFdKSx7bWluOnQsbWF4Om59fWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpbWUsbj1lLnRpY2tzLHI9bi5zb3VyY2U9PT1gbGFiZWxzYD90aGlzLmdldExhYmVsVGltZXN0YW1wcygpOnRoaXMuX2dlbmVyYXRlKCk7ZS5ib3VuZHM9PT1gdGlja3NgJiZyLmxlbmd0aCYmKHRoaXMubWluPXRoaXMuX3VzZXJNaW58fHJbMF0sdGhpcy5tYXg9dGhpcy5fdXNlck1heHx8cltyLmxlbmd0aC0xXSk7bGV0IGk9dGhpcy5taW4sYT10aGlzLm1heCxvPXp0KHIsaSxhKTtyZXR1cm4gdGhpcy5fdW5pdD10LnVuaXR8fChuLmF1dG9Ta2lwP3pjKHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCx0aGlzLl9nZXRMYWJlbENhcGFjaXR5KGkpKTpCYyh0aGlzLG8ubGVuZ3RoLHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCkpLHRoaXMuX21ham9yVW5pdD0hbi5tYWpvci5lbmFibGVkfHx0aGlzLl91bml0PT09YHllYXJgP3ZvaWQgMDpWYyh0aGlzLl91bml0KSx0aGlzLmluaXRPZmZzZXRzKHIpLGUucmV2ZXJzZSYmby5yZXZlcnNlKCksV2ModGhpcyxvLHRoaXMuX21ham9yVW5pdCl9YWZ0ZXJBdXRvU2tpcCgpe3RoaXMub3B0aW9ucy5vZmZzZXRBZnRlckF1dG9za2lwJiZ0aGlzLmluaXRPZmZzZXRzKHRoaXMudGlja3MubWFwKGU9PitlLnZhbHVlKSl9aW5pdE9mZnNldHMoZT1bXSl7bGV0IHQ9MCxuPTAscixpO3RoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoJiYocj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzBdKSx0PWUubGVuZ3RoPT09MT8xLXI6KHRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbMV0pLXIpLzIsaT10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTFdKSxuPWUubGVuZ3RoPT09MT9pOihpLXRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbZS5sZW5ndGgtMl0pKS8yKTtsZXQgYT1lLmxlbmd0aDwzPy41Oi4yNTt0PVUodCwwLGEpLG49VShuLDAsYSksdGhpcy5fb2Zmc2V0cz17c3RhcnQ6dCxlbmQ6bixmYWN0b3I6MS8odCsxK24pfX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLl9hZGFwdGVyLHQ9dGhpcy5taW4sbj10aGlzLm1heCxyPXRoaXMub3B0aW9ucyxpPXIudGltZSxhPWkudW5pdHx8emMoaS5taW5Vbml0LHQsbix0aGlzLl9nZXRMYWJlbENhcGFjaXR5KHQpKSxvPUkoci50aWNrcy5zdGVwU2l6ZSwxKSxzPWE9PT1gd2Vla2AmJmkuaXNvV2Vla2RheSxjPXd0KHMpfHxzPT09ITAsbD17fSx1PXQsZCxmO2lmKGMmJih1PStlLnN0YXJ0T2YodSxgaXNvV2Vla2AscykpLHU9K2Uuc3RhcnRPZih1LGM/YGRheWA6YSksZS5kaWZmKG4sdCxhKT4xZTUqbyl0aHJvdyBFcnJvcih0K2AgYW5kIGArbitgIGFyZSB0b28gZmFyIGFwYXJ0IHdpdGggc3RlcFNpemUgb2YgYCtvK2AgYCthKTtsZXQgcD1yLnRpY2tzLnNvdXJjZT09PWBkYXRhYCYmdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO2ZvcihkPXUsZj0wO2Q8bjtkPStlLmFkZChkLG8sYSksZisrKUhjKGwsZCxwKTtyZXR1cm4oZD09PW58fHIuYm91bmRzPT09YHRpY2tzYHx8Zj09PTEpJiZIYyhsLGQscCksT2JqZWN0LmtleXMobCkuc29ydChMYykubWFwKGU9PitlKX1nZXRMYWJlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX2FkYXB0ZXIsbj10aGlzLm9wdGlvbnMudGltZTtyZXR1cm4gbi50b29sdGlwRm9ybWF0P3QuZm9ybWF0KGUsbi50b29sdGlwRm9ybWF0KTp0LmZvcm1hdChlLG4uZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpfWZvcm1hdChlLHQpe2xldCBuPXRoaXMub3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzLHI9dGhpcy5fdW5pdCxpPXR8fG5bcl07cmV0dXJuIHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGUsaSl9X3RpY2tGb3JtYXRGdW5jdGlvbihlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnMsYT1pLnRpY2tzLmNhbGxiYWNrO2lmKGEpcmV0dXJuIEwoYSxbZSx0LG5dLHRoaXMpO2xldCBvPWkudGltZS5kaXNwbGF5Rm9ybWF0cyxzPXRoaXMuX3VuaXQsYz10aGlzLl9tYWpvclVuaXQsbD1zJiZvW3NdLHU9YyYmb1tjXSxkPW5bdF0sZj1jJiZ1JiZkJiZkLm1ham9yO3JldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdChlLHJ8fChmP3U6bCkpfWdlbmVyYXRlVGlja0xhYmVscyhlKXtsZXQgdCxuLHI7Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpcj1lW3RdLHIubGFiZWw9dGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKHIudmFsdWUsdCxlKX1nZXREZWNpbWFsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjooZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX1nZXRQaXhlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlKTtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHQuc3RhcnQrbikqdC5mYWN0b3IpfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpL3QuZmFjdG9yLXQuZW5kO3JldHVybiB0aGlzLm1pbituKih0aGlzLm1heC10aGlzLm1pbil9X2dldExhYmVsU2l6ZShlKXtsZXQgdD10aGlzLm9wdGlvbnMudGlja3Msbj10aGlzLmN0eC5tZWFzdXJlVGV4dChlKS53aWR0aCxyPUR0KHRoaXMuaXNIb3Jpem9udGFsKCk/dC5tYXhSb3RhdGlvbjp0Lm1pblJvdGF0aW9uKSxpPU1hdGguY29zKHIpLGE9TWF0aC5zaW4ociksbz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLnNpemU7cmV0dXJue3c6bippK28qYSxoOm4qYStvKml9fV9nZXRMYWJlbENhcGFjaXR5KGUpe2xldCB0PXRoaXMub3B0aW9ucy50aW1lLG49dC5kaXNwbGF5Rm9ybWF0cyxyPW5bdC51bml0XXx8bi5taWxsaXNlY29uZCxpPXRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbihlLDAsV2ModGhpcyxbZV0sdGhpcy5fbWFqb3JVbml0KSxyKSxhPXRoaXMuX2dldExhYmVsU2l6ZShpKSxvPU1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoL2Eudzp0aGlzLmhlaWdodC9hLmgpLTE7cmV0dXJuIG8+MD9vOjF9Z2V0RGF0YVRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5kYXRhfHxbXSx0LG47aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2lmKHRoaXMuX25vcm1hbGl6ZWQmJnIubGVuZ3RoKXJldHVybiB0aGlzLl9jYWNoZS5kYXRhPXJbMF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcyk7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpZT1lLmNvbmNhdChyW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpKTtyZXR1cm4gdGhpcy5fY2FjaGUuZGF0YT10aGlzLm5vcm1hbGl6ZShlKX1nZXRMYWJlbFRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5sYWJlbHN8fFtdLHQsbjtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgcj10aGlzLmdldExhYmVscygpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWUucHVzaChSYyh0aGlzLHJbdF0pKTtyZXR1cm4gdGhpcy5fY2FjaGUubGFiZWxzPXRoaXMuX25vcm1hbGl6ZWQ/ZTp0aGlzLm5vcm1hbGl6ZShlKX1ub3JtYWxpemUoZSl7cmV0dXJuIFV0KGUuc29ydChMYykpfX07ZnVuY3Rpb24gS2MoZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aC0xLGEsbyxzLGM7bj8odD49ZVtyXS5wb3MmJnQ8PWVbaV0ucG9zJiYoe2xvOnIsaGk6aX09THQoZSxgcG9zYCx0KSkse3BvczphLHRpbWU6c309ZVtyXSx7cG9zOm8sdGltZTpjfT1lW2ldKToodD49ZVtyXS50aW1lJiZ0PD1lW2ldLnRpbWUmJih7bG86cixoaTppfT1MdChlLGB0aW1lYCx0KSkse3RpbWU6YSxwb3M6c309ZVtyXSx7dGltZTpvLHBvczpjfT1lW2ldKTtsZXQgbD1vLWE7cmV0dXJuIGw/cysoYy1zKSoodC1hKS9sOnN9KGNsYXNzIGV4dGVuZHMgR2N7c3RhdGljIGlkPWB0aW1lc2VyaWVzYDtzdGF0aWMgZGVmYXVsdHM9R2MuZGVmYXVsdHM7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fdGFibGU9W10sdGhpcy5fbWluUG9zPXZvaWQgMCx0aGlzLl90YWJsZVJhbmdlPXZvaWQgMH1pbml0T2Zmc2V0cygpe2xldCBlPXRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpLHQ9dGhpcy5fdGFibGU9dGhpcy5idWlsZExvb2t1cFRhYmxlKGUpO3RoaXMuX21pblBvcz1LYyh0LHRoaXMubWluKSx0aGlzLl90YWJsZVJhbmdlPUtjKHQsdGhpcy5tYXgpLXRoaXMuX21pblBvcyxzdXBlci5pbml0T2Zmc2V0cyhlKX1idWlsZExvb2t1cFRhYmxlKGUpe2xldHttaW46dCxtYXg6bn09dGhpcyxyPVtdLGk9W10sYSxvLHMsYyxsO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKWM9ZVthXSxjPj10JiZjPD1uJiZyLnB1c2goYyk7aWYoci5sZW5ndGg8MilyZXR1cm5be3RpbWU6dCxwb3M6MH0se3RpbWU6bixwb3M6MX1dO2ZvcihhPTAsbz1yLmxlbmd0aDthPG87KythKWw9clthKzFdLHM9clthLTFdLGM9clthXSxNYXRoLnJvdW5kKChsK3MpLzIpIT09YyYmaS5wdXNoKHt0aW1lOmMscG9zOmEvKG8tMSl9KTtyZXR1cm4gaX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLm1pbix0PXRoaXMubWF4LG49c3VwZXIuZ2V0RGF0YVRpbWVzdGFtcHMoKTtyZXR1cm4oIW4uaW5jbHVkZXMoZSl8fCFuLmxlbmd0aCkmJm4uc3BsaWNlKDAsMCxlKSwoIW4uaW5jbHVkZXModCl8fG4ubGVuZ3RoPT09MSkmJm4ucHVzaCh0KSxuLnNvcnQoKGUsdCk9PmUtdCl9X2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpe2xldCBlPXRoaXMuX2NhY2hlLmFsbHx8W107aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHQ9dGhpcy5nZXREYXRhVGltZXN0YW1wcygpLG49dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtyZXR1cm4gZT10Lmxlbmd0aCYmbi5sZW5ndGg/dGhpcy5ub3JtYWxpemUodC5jb25jYXQobikpOnQubGVuZ3RoP3Q6bixlPXRoaXMuX2NhY2hlLmFsbD1lLGV9Z2V0RGVjaW1hbEZvclZhbHVlKGUpe3JldHVybihLYyh0aGlzLl90YWJsZSxlKS10aGlzLl9taW5Qb3MpL3RoaXMuX3RhYmxlUmFuZ2V9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkvdC5mYWN0b3ItdC5lbmQ7cmV0dXJuIEtjKHRoaXMuX3RhYmxlLG4qdGhpcy5fdGFibGVSYW5nZSt0aGlzLl9taW5Qb3MsITApfX0pO3ZhciBxYz17ZGF0YTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LG9wdGlvbnM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6KCk9Pih7fSl9LHBsdWdpbnM6e3R5cGU6QXJyYXksZGVmYXVsdDooKT0+W119LGRhdGFzZXRJZEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpgbGFiZWxgfSx1cGRhdGVNb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH19LEpjPXthcmlhTGFiZWw6e3R5cGU6U3RyaW5nfSxhcmlhRGVzY3JpYmVkYnk6e3R5cGU6U3RyaW5nfX0sWWM9e3R5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxkZXN0cm95RGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sLi4ucWMsLi4uSmN9LFhjPShlLHQpPT5PYmplY3QuYXNzaWduKGUsdCk7ZnVuY3Rpb24gWmMoZSl7cmV0dXJuIHUoZSk/eChlKTplfWZ1bmN0aW9uIFFjKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTplO3JldHVybiB1KHQpP25ldyBQcm94eShlLHt9KTplfWZ1bmN0aW9uICRjKGUsdCl7bGV0IG49ZS5vcHRpb25zO24mJnQmJk9iamVjdC5hc3NpZ24obix0KX1mdW5jdGlvbiBlbChlLHQpe2UubGFiZWxzPXR9ZnVuY3Rpb24gdGwoZSx0LG4pe2xldCByPVtdO2UuZGF0YXNldHM9dC5tYXAodD0+e2xldCBpPWUuZGF0YXNldHMuZmluZChlPT5lW25dPT09dFtuXSk7cmV0dXJuIWl8fCF0LmRhdGF8fHIuaW5jbHVkZXMoaSk/ey4uLnR9OihyLnB1c2goaSksT2JqZWN0LmFzc2lnbihpLHQpLGkpfSl9ZnVuY3Rpb24gbmwoZSx0KXtsZXQgbj17bGFiZWxzOltdLGRhdGFzZXRzOltdfTtyZXR1cm4gZWwobixlLmxhYmVscyksdGwobixlLmRhdGFzZXRzLHQpLG59dmFyIHJsPWVlKHtwcm9wczpZYyxzZXR1cCh0LG4pe2xldHtleHBvc2U6aSxzbG90czphfT1uLGM9ZihudWxsKSxsPW0obnVsbCk7aSh7Y2hhcnQ6bH0pO2xldCB1PSgpPT57aWYoIWMudmFsdWUpcmV0dXJuO2xldHt0eXBlOmUsZGF0YTpuLG9wdGlvbnM6cixwbHVnaW5zOmksZGF0YXNldElkS2V5OmF9PXQsbz1RYyhubChuLGEpLG4pO2wudmFsdWU9bmV3IFJvKGMudmFsdWUse3R5cGU6ZSxkYXRhOm8sb3B0aW9uczp7Li4ucn0scGx1Z2luczppfSl9LGQ9KCk9PntsZXQgZT14KGwudmFsdWUpO2UmJih0LmRlc3Ryb3lEZWxheT4wP3NldFRpbWVvdXQoKCk9PntlLmRlc3Ryb3koKSxsLnZhbHVlPW51bGx9LHQuZGVzdHJveURlbGF5KTooZS5kZXN0cm95KCksbC52YWx1ZT1udWxsKSl9LHA9ZT0+e2UudXBkYXRlKHQudXBkYXRlTW9kZSl9O3JldHVybiBzKHUpLHkoZCksbyhbKCk9PnQub3B0aW9ucywoKT0+dC5kYXRhXSwoZSxuKT0+e2xldFtpLGFdPWUsW28sc109bixjPXgobC52YWx1ZSk7aWYoIWMpcmV0dXJuO2xldCB1PSExO2lmKGkpe2xldCBlPVpjKGkpLHQ9WmMobyk7ZSYmZSE9PXQmJigkYyhjLGUpLHU9ITApfWlmKGEpe2xldCBlPVpjKGEubGFiZWxzKSxuPVpjKHMubGFiZWxzKSxyPVpjKGEuZGF0YXNldHMpLGk9WmMocy5kYXRhc2V0cyk7ZSE9PW4mJihlbChjLmNvbmZpZy5kYXRhLGUpLHU9ITApLHImJnIhPT1pJiYodGwoYy5jb25maWcuZGF0YSxyLHQuZGF0YXNldElkS2V5KSx1PSEwKX11JiZyKCgpPT57cChjKX0pfSx7ZGVlcDohMH0pLCgpPT5lKGBjYW52YXNgLHtyb2xlOmBpbWdgLCJhcmlhLWxhYmVsIjp0LmFyaWFMYWJlbCwiYXJpYS1kZXNjcmliZWRieSI6dC5hcmlhRGVzY3JpYmVkYnkscmVmOmN9LFtlKGBwYCx7fSxbYS5kZWZhdWx0P2EuZGVmYXVsdCgpOmBgXSldKX19KTtmdW5jdGlvbiBpbCh0LG4pe3JldHVybiBSby5yZWdpc3RlcihuKSxlZSh7cHJvcHM6cWMsc2V0dXAobixyKXtsZXR7ZXhwb3NlOml9PXIsYT1tKG51bGwpLHM9bShudWxsKTtvKCgpPT5zLnZhbHVlPy5jaGFydD8/bnVsbCxlPT57YS52YWx1ZT1lfSx7Zmx1c2g6YHN5bmNgfSksaSh7Y2hhcnQ6YX0pO2xldCBjPWU9PntzLnZhbHVlPWV9O3JldHVybigpPT5lKHJsLFhjKHtyZWY6Y30se3R5cGU6dCwuLi5ufSkpfX0pfXZhciBhbD1pbChgbGluZWAsTWkpO1JvLnJlZ2lzdGVyKGxjLHBjLEJzLGljLE1pLFFvLGVzLGpzKTtmdW5jdGlvbiBvbCgpe2xldCBlPWYoYGApLHQ9ZihgYCksbj1mKGBgKTtmdW5jdGlvbiByKCl7bGV0IHI9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2UudmFsdWU9ci5nZXRQcm9wZXJ0eVZhbHVlKGAtLWZvcmVncm91bmRgKS50cmltKCksdC52YWx1ZT1yLmdldFByb3BlcnR5VmFsdWUoYC0tbXV0ZWQtZm9yZWdyb3VuZGApLnRyaW0oKSxuLnZhbHVlPXIuZ2V0UHJvcGVydHlWYWx1ZShgLS1ib3JkZXJgKS50cmltKCl9bGV0IGE7cmV0dXJuIHMoKCk9PntyKCksYT13aW5kb3cubWF0Y2hNZWRpYShgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKWApLGEuYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCxyKX0pLGkoKCk9PnthPy5yZW1vdmVFdmVudExpc3RlbmVyKGBjaGFuZ2VgLHIpfSkse2ZvcmVncm91bmQ6ZSxtdXRlZEZvcmVncm91bmQ6dCxib3JkZXI6bn19dmFyIHNsPVtgYXJpYS1sYWJlbGBdLGNsPWVlKHtfX25hbWU6YFRpbWVTZXJpZXNDaGFydGAscHJvcHM6e2xhYmVsczp7fSxkYXRhc2V0czp7fSxjb21wYXJpc29uRGF0YXNldHM6e2RlZmF1bHQ6KCk9PltdfSxzdGFja2VkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdmFsdWVGb3JtYXR0ZXI6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDppZX0sYXJpYUxhYmVsOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49YHRpbWVzZXJpZXMtY2hhcnQtZGVzYy0ke0QoKX1gLHI9YigoKT0+dC5kYXRhc2V0cy5sZW5ndGg9PT0wfHx0LmxhYmVscy5sZW5ndGg9PT0wP2BObyBkYXRhIGZvciB0aGlzIHJhbmdlLmA6dC5kYXRhc2V0cy5tYXAoZT0+e2xldCBuPWUuZGF0YS5sZW5ndGg+MD9lLmRhdGFbZS5kYXRhLmxlbmd0aC0xXTowLHI9ZS5kYXRhLnJlZHVjZSgoZSx0KT0+ZSt0LDApO3JldHVybmAke2UubGFiZWx9OiBsYXRlc3QgJHt0LnZhbHVlRm9ybWF0dGVyKG4pfSwgdG90YWwgJHt0LnZhbHVlRm9ybWF0dGVyKHIpfSBvdmVyICR7dC5sYWJlbHMubGVuZ3RofSBidWNrZXRzLmB9KS5qb2luKGAgYCkpLHtmb3JlZ3JvdW5kOmksbXV0ZWRGb3JlZ3JvdW5kOmEsYm9yZGVyOm99PW9sKCk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoZSkudHJpbSgpfWxldCBjPWIoKCk9PntpLnZhbHVlO2xldCBlPXQuZGF0YXNldHMubWFwKGU9PntsZXQgbj1zKGUuY29sb3IpO3JldHVybntsYWJlbDplLmxhYmVsLGRhdGE6ZS5kYXRhLGJvcmRlckNvbG9yOm4sYmFja2dyb3VuZENvbG9yOm4sZmlsbDp0LnN0YWNrZWQsc3RhY2s6dC5zdGFja2VkP2BtYWluYDp2b2lkIDAsdGVuc2lvbjouMixwb2ludFJhZGl1czoyLGJvcmRlcldpZHRoOjJ9fSksbj10LmNvbXBhcmlzb25EYXRhc2V0cy5tYXAoZT0+e2xldCB0PXMoZS5jb2xvcik7cmV0dXJue2xhYmVsOmAke2UubGFiZWx9JHtlLmxhYmVsU3VmZml4Pz9gYH1gLGRhdGE6ZS5kYXRhLGJvcmRlckNvbG9yOnQsYmFja2dyb3VuZENvbG9yOmB0cmFuc3BhcmVudGAsYm9yZGVyRGFzaDpbNiw0XSxmaWxsOiExLHRlbnNpb246LjIscG9pbnRSYWRpdXM6MCxib3JkZXJXaWR0aDoxLjV9fSk7cmV0dXJue2xhYmVsczp0LmxhYmVscyxkYXRhc2V0czpbLi4uZSwuLi5uXX19KSxsPWIoKCk9Pih7cmVzcG9uc2l2ZTohMCxtYWludGFpbkFzcGVjdFJhdGlvOiExLGFuaW1hdGlvbjohMSxpbnRlcmFjdGlvbjp7bW9kZTpgaW5kZXhgLGludGVyc2VjdDohMX0sc2NhbGVzOnt4OntzdGFja2VkOnQuc3RhY2tlZCxncmlkOntjb2xvcjpvLnZhbHVlLGRpc3BsYXk6ITF9LHRpY2tzOntjb2xvcjphLnZhbHVlfX0seTp7c3RhY2tlZDp0LnN0YWNrZWQsYmVnaW5BdFplcm86ITAsZ3JpZDp7Y29sb3I6by52YWx1ZX0sdGlja3M6e2NvbG9yOmEudmFsdWUsY2FsbGJhY2s6ZT0+dC52YWx1ZUZvcm1hdHRlcihOdW1iZXIoZSkpfX19LHBsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTp0LmRhdGFzZXRzLmxlbmd0aD4xfHx0LmNvbXBhcmlzb25EYXRhc2V0cy5sZW5ndGg+MCxsYWJlbHM6e2NvbG9yOmkudmFsdWV9fSx0b29sdGlwOntjYWxsYmFja3M6e2xhYmVsOmU9PmAke2UuZGF0YXNldC5sYWJlbH06ICR7dC52YWx1ZUZvcm1hdHRlcihlLnBhcnNlZC55Pz8wKX1gfX19fSkpO3JldHVybih0LGkpPT4oXygpLEMoYGRpdmAse2NsYXNzOmBoLTcyIHctZnVsbGAscm9sZTpgaW1nYCwiYXJpYS1sYWJlbCI6ZS5hcmlhTGFiZWwsImFyaWEtZGVzY3JpYmVkYnkiOm59LFtkKHcoYWwpLHtkYXRhOmMudmFsdWUsb3B0aW9uczpsLnZhbHVlfSxudWxsLDgsW2BkYXRhYCxgb3B0aW9uc2BdKSxTKGBwYCx7aWQ6bixjbGFzczpgc3Itb25seWB9LEUoci52YWx1ZSksMSldLDgsc2wpKX19KSxsbD1lZSh7X19uYW1lOmBDaGFydENhcmRgLHByb3BzOnt0aXRsZTp7fSxkZXNjcmlwdGlvbjp7ZGVmYXVsdDp2b2lkIDB9LHN0YXRlOnt9LGVycm9yOntkZWZhdWx0OmBgfSxvblJldHJ5Ont0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6dm9pZCAwfSxlbXB0eVRpdGxlOntkZWZhdWx0OmBObyBkYXRhIGZvciB0aGlzIHJhbmdlLmB9LGVtcHR5RGVzY3JpcHRpb246e2RlZmF1bHQ6dm9pZCAwfSxzaG93RW1wdHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxiYXJlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbGFiZWxzOntkZWZhdWx0OigpPT5bXX0sZGF0YXNldHM6e2RlZmF1bHQ6KCk9PltdfSxjb21wYXJpc29uRGF0YXNldHM6e2RlZmF1bHQ6KCk9PltdfSxzdGFja2VkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdmFsdWVGb3JtYXR0ZXI6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDppZX0sYXJpYUxhYmVsOntkZWZhdWx0OmBgfX0sc2V0dXAoZSl7cmV0dXJuKHIsaSk9PmUuYmFyZT8oXygpLEMobCx7a2V5OjB9LFtlLnN0YXRlPT09YHNrZWxldG9uYD8oXygpLHAoYWUse2tleTowfSkpOmUuc3RhdGU9PT1gZXJyb3JgPyhfKCkscChuZSx7a2V5OjEsbWVzc2FnZTplLmVycm9yLCJvbi1yZXRyeSI6ZS5vblJldHJ5fSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOmUuc3RhdGU9PT1gZW1wdHlgJiZlLnNob3dFbXB0eT8oXygpLHAocmUse2tleToyLHRpdGxlOmUuZW1wdHlUaXRsZSxkZXNjcmlwdGlvbjplLmVtcHR5RGVzY3JpcHRpb259LG51bGwsOCxbYHRpdGxlYCxgZGVzY3JpcHRpb25gXSkpOmgoci4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bZChjbCx7bGFiZWxzOmUubGFiZWxzLGRhdGFzZXRzOmUuZGF0YXNldHMsImNvbXBhcmlzb24tZGF0YXNldHMiOmUuY29tcGFyaXNvbkRhdGFzZXRzLHN0YWNrZWQ6ZS5zdGFja2VkLCJ2YWx1ZS1mb3JtYXR0ZXIiOmUudmFsdWVGb3JtYXR0ZXIsYXJpYUxhYmVsOmUuYXJpYUxhYmVsfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2AsYGNvbXBhcmlzb24tZGF0YXNldHNgLGBzdGFja2VkYCxgdmFsdWUtZm9ybWF0dGVyYCxgYXJpYUxhYmVsYF0pXSx2b2lkIDAsMyldLDY0KSk6KF8oKSxwKHcodCkse2tleToxfSx7ZGVmYXVsdDphKCgpPT5bZCh3KGMpLG51bGwse2RlZmF1bHQ6YSgoKT0+W2QodyhUKSxudWxsLHtkZWZhdWx0OmEoKCk9PltnKEUoZS50aXRsZSksMSldKSxfOjF9KSxlLmRlc2NyaXB0aW9uPyhfKCkscCh3KHRlKSx7a2V5OjB9LHtkZWZhdWx0OmEoKCk9PltnKEUoZS5kZXNjcmlwdGlvbiksMSldKSxfOjF9KSk6dihgYCwhMCksaChyLiRzbG90cyxgaGVhZGVyLWV4dHJhYCldKSxfOjN9KSxkKHcobiksbnVsbCx7ZGVmYXVsdDphKCgpPT5bZS5zdGF0ZT09PWBza2VsZXRvbmA/KF8oKSxwKGFlLHtrZXk6MH0pKTplLnN0YXRlPT09YGVycm9yYD8oXygpLHAobmUse2tleToxLG1lc3NhZ2U6ZS5lcnJvciwib24tcmV0cnkiOmUub25SZXRyeX0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTplLnN0YXRlPT09YGVtcHR5YCYmZS5zaG93RW1wdHk/KF8oKSxwKHJlLHtrZXk6Mix0aXRsZTplLmVtcHR5VGl0bGUsZGVzY3JpcHRpb246ZS5lbXB0eURlc2NyaXB0aW9ufSxudWxsLDgsW2B0aXRsZWAsYGRlc2NyaXB0aW9uYF0pKTpoKHIuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W2QoY2wse2xhYmVsczplLmxhYmVscyxkYXRhc2V0czplLmRhdGFzZXRzLCJjb21wYXJpc29uLWRhdGFzZXRzIjplLmNvbXBhcmlzb25EYXRhc2V0cyxzdGFja2VkOmUuc3RhY2tlZCwidmFsdWUtZm9ybWF0dGVyIjplLnZhbHVlRm9ybWF0dGVyLGFyaWFMYWJlbDplLmFyaWFMYWJlbH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgLGBjb21wYXJpc29uLWRhdGFzZXRzYCxgc3RhY2tlZGAsYHZhbHVlLWZvcm1hdHRlcmAsYGFyaWFMYWJlbGBdKV0sdm9pZCAwLDMpXSksXzozfSldKSxfOjN9KSl9fSk7ZXhwb3J0e2NsIGFzIG4sbGwgYXMgdH07", ), }, - "CompactNumber-pr8cJ4cv.js": { + "ClampedRangeNotice-Ch_HqyBO.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e1NpIGFzIGUsX24gYXMgdCxhbiBhcyBuLGNuIGFzIHIsaW4gYXMgaSxuciBhcyBhfWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e2MgYXMgbyxpIGFzIHN9ZnJvbSIuL2JhZGdlLURVaUJURHlBLmpzIjt2YXIgYz1bYHRpdGxlYF0sbD17ImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LHU9e2NsYXNzOmBzci1vbmx5YH0sZD10KHtfX25hbWU6YENvbXBhY3ROdW1iZXJgLHByb3BzOnt2YWx1ZTp7fX0sc2V0dXAodCl7bGV0IGQ9dCxmPWkoKCk9PnMoZC52YWx1ZSkpLHA9aSgoKT0+byhkLnZhbHVlKSk7cmV0dXJuKHQsaSk9PihhKCkscihgc3BhbmAse3RpdGxlOnAudmFsdWV9LFtuKGBzcGFuYCxsLGUoZi52YWx1ZSksMSksbihgc3BhbmAsdSxlKHAudmFsdWUpLDEpXSw4LGMpKX19KTtleHBvcnR7ZCBhcyB0fTs=", + "aW1wb3J0e0xyIGFzIGUsX24gYXMgdCxjbiBhcyBuLGduIGFzIHIsaXIgYXMgaSxsbiBhcyBhLG9uIGFzIG8scyx2aSBhcyBjLHdpIGFzIGwseW4gYXMgdX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHtfIGFzIGQsZyBhcyBmfWZyb20iLi9pbmRleC04OENUUk5IUC5qcyI7dmFyIHA9dSh7X19uYW1lOmBDbGFtcGVkUmFuZ2VOb3RpY2VgLHByb3BzOnt3aW5kb3c6e30sc3Bhbjp7fX0sc2V0dXAodSl7bGV0IHA9dSxtPW8oKCk9PnMocC53aW5kb3cscC5zcGFuKSk7cmV0dXJuKG8scyk9Pm0udmFsdWU/KGkoKSxuKGMoZCkse2tleTowLHZhcmlhbnQ6YHdhcm5gfSx7ZGVmYXVsdDplKCgpPT5bdChjKGYpLG51bGwse2RlZmF1bHQ6ZSgoKT0+W3IobChtLnZhbHVlKSwxKV0pLF86MX0pXSksXzoxfSkpOmEoYGAsITApfX0pO2V4cG9ydHtwIGFzIHR9Ow==", ), }, - "ConfigPage-7IYcafPw.js": { + "ConfigPage-BSEq2-fo.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0MgYXMgZSxFIGFzIHQsRXIgYXMgbixGciBhcyByLEZ0IGFzIGksSnQgYXMgYSxMciBhcyBvLFMgYXMgcyxTaSBhcyBjLFQgYXMgbCxYIGFzIHUsWG4gYXMgZCxfIGFzIGYsX24gYXMgcCxfdCBhcyBtLGFuIGFzIGgsYiBhcyBnLGNuIGFzIF8sY3IgYXMgdixlciBhcyB5LGcgYXMgYixnaSBhcyB4LGhuIGFzIFMsaWkgYXMgQyxpbiBhcyB3LGl0IGFzIFQsbW4gYXMgRSxtdCBhcyBELG4gYXMgTyxuciBhcyBrLG9pIGFzIEEsb24gYXMgaixzbiBhcyBNLHQgYXMgTix1ciBhcyBlZSx3IGFzIFAseCBhcyBGLHkgYXMgdGUseWkgYXMgbmV9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjtpbXBvcnR7biBhcyByZSxyIGFzIGllLHQgYXMgYWV9ZnJvbSIuL3RhYnMtWWxobkhwSy0uanMiO2ltcG9ydHthIGFzIEksYyBhcyBvZSxnIGFzIEwsaCBhcyBSLGkgYXMgeixtIGFzIHNlLG4gYXMgQixvIGFzIFYsciBhcyBILHMgYXMgVX1mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO2ltcG9ydHt0IGFzIGNlfWZyb20iLi9jbGlwYm9hcmQtQjczZlowYzEuanMiO2ltcG9ydHt0IGFzIGxlfWZyb20iLi9FcnJvclN0YXRlLXltNmVTbGoyLmpzIjtpbXBvcnR7dCBhcyB1ZX1mcm9tIi4vY29uc3VtZXJzLUNRdEVKOUs3LmpzIjt2YXIgZGU9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjVgfSxmZT17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMmB9LHBlPXtrZXk6MCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxXPXAoe19fbmFtZTpgU25pcHBldEJsb2NrYCxwcm9wczp7dGV4dDp7fSxsYWJlbDp7fX0sc2V0dXAoZSl7bGV0IGk9ZSxhPW4oYHByZWApLG89QShgaWRsZWApLHMsbD1mKCk7YXN5bmMgZnVuY3Rpb24gZCgpe28udmFsdWU9YXdhaXQgY2UoaS50ZXh0LGEudmFsdWU/P3ZvaWQgMCksby52YWx1ZT09PWBmYWlsZWRgJiZsLnB1c2goe2tpbmQ6YGVycm9yYCxtZXNzYWdlOmBDb3VsZCBub3QgY29weSB0aGUgc25pcHBldC5gfSksY2xlYXJUaW1lb3V0KHMpLHM9c2V0VGltZW91dCgoKT0+e28udmFsdWU9YGlkbGVgfSwxNTAwKX1sZXQgcD17aWRsZTpgQ29weWAsY29waWVkOmBDb3BpZWRgLHNlbGVjdGVkOmBTZWxlY3RlZCDigJQgcHJlc3Mg4oyYL0N0cmwrQ2AsZmFpbGVkOmBDb3B5IGZhaWxlZGB9O3JldHVybiB5KCgpPT5jbGVhclRpbWVvdXQocykpLChuLGkpPT57bGV0IGE9ZWUoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBrKCksXyhgZGl2YCxkZSxbaChgZGl2YCxmZSxbZS5sYWJlbD8oaygpLF8oYHNwYW5gLHBlLGMoZS5sYWJlbCksMSkpOk0oYGAsITApLFMoeCh0KSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsY2xhc3M6YG1sLWF1dG9gLG9uQ2xpY2s6ZH0se2RlZmF1bHQ6cigoKT0+W1MoYSx7aWNvbjpvLnZhbHVlPT09YGlkbGVgP3goVCk6by52YWx1ZT09PWBmYWlsZWRgP3goRCk6eCh1KSxjbGFzczpuZShbYHNpemUtMy41YCxvLnZhbHVlPT09YGZhaWxlZGA/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksRShgIGArYyhwW28udmFsdWVdKSwxKV0pLF86MX0pXSksaChgcHJlYCx7cmVmOmBwcmVgLGNsYXNzOmBvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYmctbXV0ZWQgcC0zIGZvbnQtbW9ubyB0ZXh0LXhzIHNlbGVjdC10ZXh0IHdoaXRlc3BhY2UtcHJlYH0sYyhlLnRleHQpLDUxMyldKX19fSksbWU9YCAgYCxoZT0vXltBLVphLXpfXVtBLVphLXowLTkuXy1dKiQvLGdlPW5ldyBTZXQoW2B0cnVlYCxgZmFsc2VgLGB5ZXNgLGBub2AsYHlgLGBuYCxgb25gLGBvZmZgLGBudWxsYCxgbmlsYCxgbmFuYCxgaW5mYF0pO2Z1bmN0aW9uIF9lKGUpe3JldHVybiFoZS50ZXN0KGUpfHxnZS5oYXMoZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB2ZShlKXtyZXR1cm4gX2UoZSl9dmFyIHllPVJlZ0V4cChgW1xcdTAwN2ZcXHUwMDgwLVxcdTAwOWZcdTIwMjhcdTIwMjldYCxgZ2ApO2Z1bmN0aW9uIGJlKGUpe3JldHVybiBlLnJlcGxhY2UoeWUsZT0+e2xldCB0PWUuY29kZVBvaW50QXQoMCk7cmV0dXJuIHQ8PTI1NT9gXFx4JHt0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLGAwYCl9YDpgXFx1JHt0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCg0LGAwYCl9YH0pfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIHZlKGUpP2JlKEpTT04uc3RyaW5naWZ5KGUpKTplfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGU9PT1udWxsP2BudWxsYDp0eXBlb2YgZT09YGJvb2xlYW5gfHx0eXBlb2YgZT09YG51bWJlcmA/U3RyaW5nKGUpOl9lKGUpP2JlKEpTT04uc3RyaW5naWZ5KGUpKTplfWZ1bmN0aW9uIHhlKGUpe3JldHVybiBlLmxlbmd0aD09PTA/YFtdYDpgWyR7ZS5tYXAoZT0+SyhlKSkuam9pbihgLCBgKX1dYH1mdW5jdGlvbiBTZShlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP2B7fWA6YHsgJHtlLm1hcCgoW2UsdF0pPT5gJHtHKGUpfTogJHtLKHQpfWApLmpvaW4oYCwgYCl9IH1gfWZ1bmN0aW9uIENlKGUpe3JldHVybiB0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIUFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcShlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlPT1gc3RyaW5nYHx8dHlwZW9mIGU9PWBudW1iZXJgfHx0eXBlb2YgZT09YGJvb2xlYW5gfWZ1bmN0aW9uIHdlKGUsdCl7bGV0IG49bWUucmVwZWF0KHQpLHI9W107Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IGU9YCR7bn0ke0coaSl9OmA7aWYocShhKSlyLnB1c2goYCR7ZX0gJHtLKGEpfWApO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoYS5ldmVyeShxKSlyLnB1c2goYCR7ZX0gJHt4ZShhKX1gKTtlbHNle3IucHVzaChlKTtmb3IobGV0IGUgb2YgYSlyLnB1c2goYCR7bn0ke21lfS0gJHtxKGUpP0soZSk6SlNPTi5zdHJpbmdpZnkoZSl9YCl9fWVsc2UgQ2UoYSkmJihPYmplY3Qua2V5cyhhKS5maWx0ZXIoZT0+YVtlXSE9PXZvaWQgMCkubGVuZ3RoPT09MD9yLnB1c2goYCR7ZX0ge31gKTooci5wdXNoKGUpLHIucHVzaCguLi53ZShhLHQrMSkpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gVGUoZSx0PTApe3JldHVybiB3ZShlLHQpLmpvaW4oYApgKX1mdW5jdGlvbiBFZShlLHQpe2xldCBuPXQscj1bYHNwZWNgLGBwbHVnaW5gLGBsbG1nYXRld2F5YCwuLi5lXTtmb3IobGV0IGU9ci5sZW5ndGgtMTtlPj0wO2UtLSluPXtbcltlXV06bn07cmV0dXJuIFRlKG4pfWZ1bmN0aW9uIEooZSl7aWYoZT09PW51bGx8fHR5cGVvZiBlPT1gc3RyaW5nYHx8dHlwZW9mIGU9PWBudW1iZXJgfHx0eXBlb2YgZT09YGJvb2xlYW5gKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKEopO2lmKHR5cGVvZiBlPT1gb2JqZWN0YCl7bGV0IHQ9e307Zm9yKGxldFtuLHJdb2YgT2JqZWN0LmVudHJpZXMoZSkpdFtuXT1KKHIpO3JldHVybiB0fXJldHVybiBTdHJpbmcoZSl9dmFyIERlPS9eW2EtekEtWjAtOS5fLV0rJC87ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIERlLnRlc3QoZSl9ZnVuY3Rpb24gWShlKXtyZXR1cm4gZS50cmltKCkhPT1gYH1mdW5jdGlvbiBYKGUpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUoZSkmJmU+PTB9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTB9ZnVuY3Rpb24gQWUoZSx0KXtyZXR1cm4gdC5sZW5ndGg+MCYmZS5sZW5ndGg9PT0wP2BBIHBlcnNvbmFsIGdyYW50IG5hbWluZyBtb2RlbHMgbmVlZHMgYXQgbGVhc3Qgb25lIHByb3ZpZGVyIHRvbyDigJQgYW4gZW1wdHkgcHJvdmlkZXJzIGxpc3QgbWVhbnMgRVZFUlkgY29uZmlndXJlZCBwcm92aWRlciAobm90IG5vbmUpLCBzbyB0aGlzIHdvdWxkIHNpbGVudGx5IHdpZGVuIGFjY2VzcyBmYXIgYmV5b25kIHdoYXQgd2FzIHR5cGVkIChhdXRoLmdvIHJlamVjdHMgaXQpLmA6bnVsbH12YXIgamU9W2ByZXF1ZXN0c1Blck1pbnV0ZWAsYHJlcXVlc3RzUGVyRGF5YCxgdG9rZW5zUGVyRGF5YCxgdG9rZW5zUGVyTW9udGhgLGBjb3N0UGVyRGF5VVNEYCxgY29zdFBlck1vbnRoVVNEYF07ZnVuY3Rpb24gWihlKXtsZXQgdD1bXTtmb3IobGV0IG4gb2YgamUpe2xldCByPWVbbl07ciYmdC5wdXNoKFtuLHJdKX1yZXR1cm4gdH1mdW5jdGlvbiBNZShlLHQpe2xldCBuPXt9O2ZvcihsZXRbZSxyXW9mIFoodCkpbltlXT1yO3JldHVybiBFZShbYGdyb3Vwc2AsZV0se2xpbWl0czpufSl9ZnVuY3Rpb24gUShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9ZnVuY3Rpb24gJChlKXtyZXR1cm5gWyR7ZS5tYXAoUSkuam9pbihgLCBgKX1dYH1mdW5jdGlvbiBOZShlKXtyZXR1cm5geyR7WihlKS5tYXAoKFtlLHRdKT0+YCR7UShlKX06ICR7dH1gKS5qb2luKGAsIGApfX1gfWZ1bmN0aW9uIFBlKGUpe3JldHVybmAibGltaXRzIjogJHtOZShlKX1gfWZ1bmN0aW9uIEZlKGUsdCl7cmV0dXJuIEVlKFtgZ3JvdXBzYCxlXSx7cHJvdmlkZXJzOnQucHJvdmlkZXJzLG1vZGVsczp0Lm1vZGVscyxtY3BTZXJ2ZXJzOnQubWNwU2VydmVycyxhZ2VudHM6dC5hZ2VudHN9KX1mdW5jdGlvbiBJZShlKXtsZXQgdD1bXTtyZXR1cm4gZS5wcm92aWRlcnMubGVuZ3RoPjAmJnQucHVzaChgInByb3ZpZGVycyI6ICR7JChlLnByb3ZpZGVycyl9YCksZS5tb2RlbHMubGVuZ3RoPjAmJnQucHVzaChgIm1vZGVscyI6ICR7JChlLm1vZGVscyl9YCksdC5qb2luKGAsIGApfWZ1bmN0aW9uIExlKGUsdCl7bGV0IG49W107dC5jb250ZXh0VG9rZW5zIT09dm9pZCAwJiZuLnB1c2goW2Bjb250ZXh0VG9rZW5zYCx0LmNvbnRleHRUb2tlbnNdKSx0LmZyZWUhPT12b2lkIDAmJm4ucHVzaChbYGZyZWVgLHQuZnJlZV0pO2xldCByPVNlKG4pO3JldHVybltgc3BlYzpgLGAgIHBsdWdpbjpgLGAgICAgbGxtZ2F0ZXdheTpgLGAgICAgICBtb2RlbE1ldGE6YCxgICAgICAgICAke0pTT04uc3RyaW5naWZ5KGUpfTogJHtyfWBdLmpvaW4oYApgKX1mdW5jdGlvbiBSZShlLHQpe2xldCBuPVNlKFtbYGlucHV0UGVyTWAsdC5pbnB1dFBlck1dLFtgb3V0cHV0UGVyTWAsdC5vdXRwdXRQZXJNXV0pO3JldHVybltgc3BlYzpgLGAgIHBsdWdpbjpgLGAgICAgbGxtZ2F0ZXdheTpgLGAgICAgICBwcmljaW5nOmAsYCAgICAgICAgJHtHKGUpfTogJHtufWBdLmpvaW4oYApgKX12YXIgemU9YHNrLWxsbWd3LVJFUExBQ0VfTUVgO2Z1bmN0aW9uIEJlKCl7bGV0IGU9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMikpLHQ9YGA7Zm9yKGxldCBuIG9mIGUpdCs9U3RyaW5nLmZyb21DaGFyQ29kZShuKTtyZXR1cm5gc2stbGxtZ3ctJHtidG9hKHQpLnJlcGxhY2UoL1wrL2csYC1gKS5yZXBsYWNlKC9cLy9nLGBfYCkucmVwbGFjZSgvPSskLyxgYCl9YH1mdW5jdGlvbiBWZShlKXtsZXQgdD1bYCJuYW1lIjogJHtRKGUubmFtZSl9YCxgImFwaUtleSI6ICR7UShlLmFwaUtleSl9YF07cmV0dXJuIGUuZ3JvdXAmJnQucHVzaChgImdyb3VwIjogJHtRKGUuZ3JvdXApfWApLGUuZ3JvdXBzJiZlLmdyb3Vwcy5sZW5ndGg+MCYmdC5wdXNoKGAiZ3JvdXBzIjogJHskKGUuZ3JvdXBzKX1gKSxlLnByb3ZpZGVycyYmZS5wcm92aWRlcnMubGVuZ3RoPjAmJnQucHVzaChgInByb3ZpZGVycyI6ICR7JChlLnByb3ZpZGVycyl9YCksZS5tb2RlbHMmJmUubW9kZWxzLmxlbmd0aD4wJiZ0LnB1c2goYCJtb2RlbHMiOiAkeyQoZS5tb2RlbHMpfWApLGUubGltaXRzJiZaKGUubGltaXRzKS5sZW5ndGg+MCYmdC5wdXNoKGAibGltaXRzIjogJHtOZShlLmxpbWl0cyl9YCksZS5hZG1pbiYmdC5wdXNoKGAiYWRtaW4iOiAke0soITApfWApLGB7JHt0LmpvaW4oYCwgYCl9fWB9dmFyIEhlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LFVlPXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtMmB9LFdlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LEdlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LEtlPXtpZDpgZ3JhbnQtdGFyZ2V0LW5hbWUtbGFiZWxgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHFlPXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtMmB9LEplPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFllPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFhlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFplPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFFlPXtrZXk6MixjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSwkZT1wKHtfX25hbWU6YEdyYW50Rm9ybWAscHJvcHM6e2dyb3VwTmFtZXM6e30sdXNlck5hbWVzOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49QShgZ3JvdXBgKSxpPUEoYGApLG89QShgYCkscz1BKGBgKSxsPUEoYGApLHU9QShgYCk7ZnVuY3Rpb24gZChlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlLnNwbGl0KGAsYCkpe2xldCBlPW4udHJpbSgpO2UmJnQuYWRkKGUpfXJldHVybiBBcnJheS5mcm9tKHQpfWxldCBmPXcoKCk9PmQoby52YWx1ZSkpLHA9dygoKT0+ZChzLnZhbHVlKSksbT13KCgpPT5kKGwudmFsdWUpKSxnPXcoKCk9PmQodS52YWx1ZSkpLHk9dygoKT0+bi52YWx1ZT09PWBncm91cGA/dC5ncm91cE5hbWVzOnQudXNlck5hbWVzKSxiPXcoKCk9Pm4udmFsdWU9PT1gZ3JvdXBgP09lKGkudmFsdWUudHJpbSgpKTpZKGkudmFsdWUpKSxDPXcoKCk9Pm4udmFsdWU9PT1gdXNlcmA/QWUoZi52YWx1ZSxwLnZhbHVlKTpudWxsKSxUPXcoKCk9PmYudmFsdWUubGVuZ3RoPT09MCYmcC52YWx1ZS5sZW5ndGg9PT0wJiZtLnZhbHVlLmxlbmd0aD09PTAmJmcudmFsdWUubGVuZ3RoPT09MCksRD13KCgpPT4hYi52YWx1ZXx8Qy52YWx1ZXx8VC52YWx1ZT9udWxsOm4udmFsdWU9PT1gZ3JvdXBgP0ZlKGkudmFsdWUudHJpbSgpLHtwcm92aWRlcnM6Zi52YWx1ZSxtb2RlbHM6cC52YWx1ZSxtY3BTZXJ2ZXJzOm0udmFsdWUsYWdlbnRzOmcudmFsdWV9KTpJZSh7cHJvdmlkZXJzOmYudmFsdWUsbW9kZWxzOnAudmFsdWV9KXx8bnVsbCk7cmV0dXJuKGUsdCk9PihrKCksXyhgZGl2YCxIZSxbaChgZGl2YCxVZSxbaChgZGl2YCxXZSxbdFs4XXx8PWgoYGxhYmVsYCx7aWQ6YGdyYW50LXRhcmdldC1raW5kLWxhYmVsYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVGFyZ2V0YCwtMSksUyh4KFYpLHsibW9kZWwtdmFsdWUiOm4udmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5uLnZhbHVlPWV9LHtkZWZhdWx0OnIoKCk9PltTKHgoSCkseyJhcmlhLWxhYmVsbGVkYnkiOmBncmFudC10YXJnZXQta2luZC1sYWJlbGB9LHtkZWZhdWx0OnIoKCk9PltTKHgoQikpXSksXzoxfSksUyh4KEkpLG51bGwse2RlZmF1bHQ6cigoKT0+W1MoeCh6KSx7dmFsdWU6YGdyb3VwYH0se2RlZmF1bHQ6cigoKT0+Wy4uLnRbNl18fD1bRShgR3JvdXBgLC0xKV1dKSxfOjF9KSxTKHgoeikse3ZhbHVlOmB1c2VyYH0se2RlZmF1bHQ6cigoKT0+Wy4uLnRbN118fD1bRShgVXNlciAocGVyc29uYWwgZ3JhbnQsIGV4aXN0aW5nIHVzZXJzLmpzb24gZW50cnkpYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSksaChgZGl2YCxHZSxbaChgbGFiZWxgLEtlLGMobi52YWx1ZT09PWBncm91cGA/YEdyb3VwIG5hbWVgOmBVc2VyIG5hbWVgKSwxKSxTKHgoVikseyJtb2RlbC12YWx1ZSI6aS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFsxXXx8PWU9PmkudmFsdWU9U3RyaW5nKGUpfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KEgpLHsiYXJpYS1sYWJlbGxlZGJ5IjpgZ3JhbnQtdGFyZ2V0LW5hbWUtbGFiZWxgfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KEIpLHtwbGFjZWhvbGRlcjpgU2VsZWN04oCmYH0pXSksXzoxfSksUyh4KEkpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhrKCEwKSxfKGEsbnVsbCx2KHkudmFsdWUsZT0+KGsoKSxqKHgoeikse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9PltFKGMoZSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSksaChgZGl2YCxxZSxbaChgZGl2YCxKZSxbdFs5XXx8PWgoYGxhYmVsYCx7Zm9yOmBncmFudC1wcm92aWRlcnNgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBQcm92aWRlcnMgKGNvbW1hLXNlcGFyYXRlZCwgZW1wdHkgPSBhbGwpYCwtMSksUyh4KFUpLHtpZDpgZ3JhbnQtcHJvdmlkZXJzYCxtb2RlbFZhbHVlOm8udmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMl18fD1lPT5vLnZhbHVlPWUscGxhY2Vob2xkZXI6YGFudGhyb3BpYywgb3BlbmFpYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLGgoYGRpdmAsWWUsW3RbMTBdfHw9aChgbGFiZWxgLHtmb3I6YGdyYW50LW1vZGVsc2AsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE1vZGVscyAoY29tbWEtc2VwYXJhdGVkLCBlbXB0eSA9IGFsbClgLC0xKSxTKHgoVSkse2lkOmBncmFudC1tb2RlbHNgLG1vZGVsVmFsdWU6cy52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFszXXx8PWU9PnMudmFsdWU9ZSxwbGFjZWhvbGRlcjpgYW50aHJvcGljL2NsYXVkZS1zb25uZXQtNWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxuLnZhbHVlPT09YGdyb3VwYD8oaygpLF8oYSx7a2V5OjB9LFtoKGBkaXZgLFhlLFt0WzExXXx8PWgoYGxhYmVsYCx7Zm9yOmBncmFudC1tY3BgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNQ1Agc2VydmVycyAoY29tbWEtc2VwYXJhdGVkLCBlbXB0eSA9IGFsbClgLC0xKSxTKHgoVSkse2lkOmBncmFudC1tY3BgLG1vZGVsVmFsdWU6bC52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFs0XXx8PWU9PmwudmFsdWU9ZSxwbGFjZWhvbGRlcjpgZmV0Y2gsIHdlYXRoZXJgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksaChgZGl2YCxaZSxbdFsxMl18fD1oKGBsYWJlbGAse2ZvcjpgZ3JhbnQtYWdlbnRzYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQWdlbnRzIChjb21tYS1zZXBhcmF0ZWQsIGVtcHR5ID0gYWxsKWAsLTEpLFMoeChVKSx7aWQ6YGdyYW50LWFnZW50c2AsbW9kZWxWYWx1ZTp1LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzVdfHw9ZT0+dS52YWx1ZT1lLHBsYWNlaG9sZGVyOmBhZ2VudGtpdGB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKV0sNjQpKTpNKGBgLCEwKV0pLEMudmFsdWU/KGsoKSxqKHgoTCkse2tleTowLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6cigoKT0+W1MoeChSKSxudWxsLHtkZWZhdWx0OnIoKCk9PltFKGMoQy52YWx1ZSksMSldKSxfOjF9KV0pLF86MX0pKTpNKGBgLCEwKSxELnZhbHVlPyhrKCksaihXLHtrZXk6MSxsYWJlbDpuLnZhbHVlPT09YGdyb3VwYD9gUGFzdGUgaW50byBtaWRkbGV3YXJlLnlhbWxgOmBNZXJnZSBpbnRvICR7aS52YWx1ZX3igJlzIHVzZXJzLmpzb24gbGluZWAsdGV4dDpELnZhbHVlfSxudWxsLDgsW2BsYWJlbGAsYHRleHRgXSkpOihrKCksXyhgcGAsUWUsYFBpY2sgYSB0YXJnZXQgYW5kIGF0IGxlYXN0IG9uZSBsaXN0IHRvIGJ1aWxkIGEgc25pcHBldC5gKSldKSl9fSksZXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sdHQ9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC0zIHNtOmdyaWQtY29scy0yYH0sbnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0scnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0saXQ9e2lkOmBsaW1pdHMtdGFyZ2V0LW5hbWUtbGFiZWxgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGF0PXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtM2B9LG90PVtgZm9yYF0sc3Q9e2tleTowfSxjdD17a2V5OjF9LGx0PXtrZXk6MixjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx1dD1wKHtfX25hbWU6YExpbWl0c0Zvcm1gLHByb3BzOntncm91cE5hbWVzOnt9LHVzZXJOYW1lczp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUEoYGdyb3VwYCksaT1BKGBgKSxvPW5ldyBTZXQoW2ByZXF1ZXN0c1Blck1pbnV0ZWAsYHJlcXVlc3RzUGVyRGF5YCxgdG9rZW5zUGVyRGF5YCxgdG9rZW5zUGVyTW9udGhgXSk7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBvLmhhcyhlKT9rZSh0KTpYKHQpfWxldCBsPVt7a2V5OmByZXF1ZXN0c1Blck1pbnV0ZWAsbGFiZWw6YFJlcXVlc3RzL21pbnV0ZWB9LHtrZXk6YHJlcXVlc3RzUGVyRGF5YCxsYWJlbDpgUmVxdWVzdHMvZGF5YH0se2tleTpgdG9rZW5zUGVyRGF5YCxsYWJlbDpgVG9rZW5zL2RheSAoaW4rb3V0KWB9LHtrZXk6YHRva2Vuc1Blck1vbnRoYCxsYWJlbDpgVG9rZW5zL21vbnRoIChpbitvdXQpYH0se2tleTpgY29zdFBlckRheVVTRGAsbGFiZWw6YENvc3QvZGF5IChVU0QpYH0se2tleTpgY29zdFBlck1vbnRoVVNEYCxsYWJlbDpgQ29zdC9tb250aCAoVVNEKWB9XSx1PUMoe3JlcXVlc3RzUGVyTWludXRlOmBgLHJlcXVlc3RzUGVyRGF5OmBgLHRva2Vuc1BlckRheTpgYCx0b2tlbnNQZXJNb250aDpgYCxjb3N0UGVyRGF5VVNEOmBgLGNvc3RQZXJNb250aFVTRDpgYH0pLGQ9dygoKT0+bi52YWx1ZT09PWBncm91cGA/dC5ncm91cE5hbWVzOnQudXNlck5hbWVzKSxmPXcoKCk9PmwuZmlsdGVyKCh7a2V5OmV9KT0+dVtlXS50cmltKCkhPT1gYCYmIXMoZSxOdW1iZXIodVtlXSkpKS5tYXAoZT0+ZS5sYWJlbCkpLHA9dygoKT0+bC5maWx0ZXIoKHtrZXk6ZX0pPT5vLmhhcyhlKSYmdVtlXS50cmltKCkhPT1gYCYmIXMoZSxOdW1iZXIodVtlXSkpKS5tYXAoZT0+ZS5sYWJlbCkpLG09dygoKT0+bC5maWx0ZXIoKHtrZXk6ZX0pPT4hby5oYXMoZSkmJnVbZV0udHJpbSgpIT09YGAmJiFzKGUsTnVtYmVyKHVbZV0pKSkubWFwKGU9PmUubGFiZWwpKSxnPXcoKCk9PntsZXQgZT17fTtmb3IobGV0e2tleTp0fW9mIGwpe2xldCBuPU51bWJlcih1W3RdKTt1W3RdLnRyaW0oKSE9PWBgJiZzKHQsbikmJm4+MCYmKGVbdF09bil9cmV0dXJuIGV9KSx5PXcoKCk9Pm4udmFsdWU9PT1gZ3JvdXBgP09lKGkudmFsdWUudHJpbSgpKTpZKGkudmFsdWUpKSxiPXcoKCk9PiF5LnZhbHVlfHxmLnZhbHVlLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhnLnZhbHVlKS5sZW5ndGg9PT0wP251bGw6bi52YWx1ZT09PWBncm91cGA/TWUoaS52YWx1ZS50cmltKCksZy52YWx1ZSk6UGUoZy52YWx1ZSkpO3JldHVybihlLHQpPT4oaygpLF8oYGRpdmAsZXQsW2goYGRpdmAsdHQsW2goYGRpdmAsbnQsW3RbNF18fD1oKGBsYWJlbGAse2lkOmBsaW1pdHMtdGFyZ2V0LWtpbmQtbGFiZWxgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBUYXJnZXRgLC0xKSxTKHgoVikseyJtb2RlbC12YWx1ZSI6bi52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9Pm4udmFsdWU9ZX0se2RlZmF1bHQ6cigoKT0+W1MoeChIKSx7ImFyaWEtbGFiZWxsZWRieSI6YGxpbWl0cy10YXJnZXQta2luZC1sYWJlbGB9LHtkZWZhdWx0OnIoKCk9PltTKHgoQikpXSksXzoxfSksUyh4KEkpLG51bGwse2RlZmF1bHQ6cigoKT0+W1MoeCh6KSx7dmFsdWU6YGdyb3VwYH0se2RlZmF1bHQ6cigoKT0+Wy4uLnRbMl18fD1bRShgR3JvdXBgLC0xKV1dKSxfOjF9KSxTKHgoeikse3ZhbHVlOmB1c2VyYH0se2RlZmF1bHQ6cigoKT0+Wy4uLnRbM118fD1bRShgVXNlciAoZXhpc3RpbmcgdXNlcnMuanNvbiBlbnRyeSlgLC0xKV1dKSxfOjF9KV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSxoKGBkaXZgLHJ0LFtoKGBsYWJlbGAsaXQsYyhuLnZhbHVlPT09YGdyb3VwYD9gR3JvdXAgbmFtZWA6YFVzZXIgbmFtZWApLDEpLFMoeChWKSx7Im1vZGVsLXZhbHVlIjppLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+aS52YWx1ZT1TdHJpbmcoZSl9LHtkZWZhdWx0OnIoKCk9PltTKHgoSCkseyJhcmlhLWxhYmVsbGVkYnkiOmBsaW1pdHMtdGFyZ2V0LW5hbWUtbGFiZWxgfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KEIpLHtwbGFjZWhvbGRlcjpgU2VsZWN04oCmYH0pXSksXzoxfSksUyh4KEkpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhrKCEwKSxfKGEsbnVsbCx2KGQudmFsdWUsZT0+KGsoKSxqKHgoeikse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9PltFKGMoZSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSksaChgZGl2YCxhdCxbKGsoKSxfKGEsbnVsbCx2KGwsZT0+aChgZGl2YCx7a2V5OmUua2V5LGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sW2goYGxhYmVsYCx7Zm9yOmBsaW1pdHMtJHtlLmtleX1gLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGMoZS5sYWJlbCksOSxvdCksUyh4KFUpLHtpZDpgbGltaXRzLSR7ZS5rZXl9YCxtb2RlbFZhbHVlOnVbZS5rZXldLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0PT51W2Uua2V5XT10LHR5cGU6YG51bWJlcmAsbWluOmAwYCxzdGVwOngobykuaGFzKGUua2V5KT9gMWA6YGFueWAscGxhY2Vob2xkZXI6YHVuc2V0YH0sbnVsbCw4LFtgaWRgLGBtb2RlbFZhbHVlYCxgb25VcGRhdGU6bW9kZWxWYWx1ZWAsYHN0ZXBgXSldKSksNjQpKV0pLGYudmFsdWUubGVuZ3RoPyhrKCksaih4KEwpLHtrZXk6MCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0OnIoKCk9PltTKHgoUiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bcC52YWx1ZS5sZW5ndGg/KGsoKSxfKGBwYCxzdCxgRW50ZXIgYSBub24tbmVnYXRpdmUgd2hvbGUgbnVtYmVyIGZvcjogYCtjKHAudmFsdWUuam9pbihgLCBgKSkrYC5gLDEpKTpNKGBgLCEwKSxtLnZhbHVlLmxlbmd0aD8oaygpLF8oYHBgLGN0LGBFbnRlciBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgZm9yOiBgK2MobS52YWx1ZS5qb2luKGAsIGApKStgLmAsMSkpOk0oYGAsITApXSksXzoxfSldKSxfOjF9KSk6TShgYCwhMCksYi52YWx1ZT8oaygpLGooVyx7a2V5OjEsbGFiZWw6bi52YWx1ZT09PWBncm91cGA/YFBhc3RlIGludG8gbWlkZGxld2FyZS55YW1sYDpgTWVyZ2UgaW50byAke2kudmFsdWV94oCZcyB1c2Vycy5qc29uIGxpbmVgLHRleHQ6Yi52YWx1ZX0sbnVsbCw4LFtgbGFiZWxgLGB0ZXh0YF0pKTooaygpLF8oYHBgLGx0LGBQaWNrIGEgdGFyZ2V0IGFuZCBhdCBsZWFzdCBvbmUgbGltaXQgdG8gYnVpbGQgYSBzbmlwcGV0LmApKV0pKX19KSxkdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxmdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxwdD17Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgc206Z3JpZC1jb2xzLTIgc206aXRlbXMtZW5kYH0sbXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0saHQ9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBwYi0xLjUgdGV4dC1zbWB9LGd0PXtrZXk6MixjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxfdD1wKHtfX25hbWU6YE1vZGVsTWV0YUZvcm1gLHNldHVwKGUpe2xldCB0PUEoYGApLG49QShgYCksYT1BKCExKSxzPXcoKCk9PnQudmFsdWUudHJpbSgpIT09YGApLGM9dygoKT0+TnVtYmVyKG4udmFsdWUpKSxsPXcoKCk9Pm4udmFsdWUudHJpbSgpIT09YGApLHU9dygoKT0+IWwudmFsdWV8fGtlKGMudmFsdWUpJiZjLnZhbHVlPjApLGQ9dygoKT0+IXMudmFsdWV8fCF1LnZhbHVlfHwhbC52YWx1ZSYmIWEudmFsdWU/bnVsbDpMZSh0LnZhbHVlLnRyaW0oKSx7Y29udGV4dFRva2VuczpsLnZhbHVlP2MudmFsdWU6dm9pZCAwLGZyZWU6YS52YWx1ZXx8dm9pZCAwfSkpO3JldHVybihlLHMpPT4oaygpLF8oYGRpdmAsZHQsW2goYGRpdmAsZnQsW3NbM118fD1oKGBsYWJlbGAse2ZvcjpgbW9kZWxtZXRhLW1vZGVsLWlkYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTW9kZWwgaWQgKHByb3ZpZGVyL21vZGVsKWAsLTEpLFMoeChVKSx7aWQ6YG1vZGVsbWV0YS1tb2RlbC1pZGAsbW9kZWxWYWx1ZTp0LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpzWzBdfHw9ZT0+dC52YWx1ZT1lLHBsYWNlaG9sZGVyOmBneDEwL2N1cnJlbnRgLGNsYXNzOmBmb250LW1vbm9gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksaChgZGl2YCxwdCxbaChgZGl2YCxtdCxbc1s0XXx8PWgoYGxhYmVsYCx7Zm9yOmBtb2RlbG1ldGEtY29udGV4dGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYENvbnRleHQgd2luZG93ICh0b2tlbnMpYCwtMSksUyh4KFUpLHtpZDpgbW9kZWxtZXRhLWNvbnRleHRgLG1vZGVsVmFsdWU6bi52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6c1sxXXx8PWU9Pm4udmFsdWU9ZSx0eXBlOmBudW1iZXJgLG1pbjpgMWAsc3RlcDpgMWAscGxhY2Vob2xkZXI6YDEzMTA3MmB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxoKGBsYWJlbGAsaHQsW28oaChgaW5wdXRgLHtpZDpgbW9kZWxtZXRhLWZyZWVgLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpzWzJdfHw9ZT0+YS52YWx1ZT1lLHR5cGU6YGNoZWNrYm94YCxjbGFzczpgc2l6ZS00IHJvdW5kZWQgYm9yZGVyLWlucHV0YH0sbnVsbCw1MTIpLFtbaSxhLnZhbHVlXV0pLHNbNV18fD1FKGAgRnJlZSAoYmlsbGVkIGFzICQwIHJlZ2FyZGxlc3Mgb2YgYW55IHJlc29sdmVkIHByaWNlKSBgLC0xKV0pXSksbC52YWx1ZSYmIXUudmFsdWU/KGsoKSxqKHgoTCkse2tleTowLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6cigoKT0+W1MoeChSKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5zWzZdfHw9W0UoYENvbnRleHQgd2luZG93IG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgb2YgdG9rZW5zLmAsLTEpXV0pLF86MX0pXSksXzoxfSkpOk0oYGAsITApLGQudmFsdWU/KGsoKSxqKFcse2tleToxLGxhYmVsOmBQYXN0ZSBpbnRvIG1pZGRsZXdhcmUueWFtbGAsdGV4dDpkLnZhbHVlfSxudWxsLDgsW2B0ZXh0YF0pKTooaygpLF8oYHBgLGd0LGBFbnRlciBhIG1vZGVsIGlkIGFuZCBzZXQgYSBjb250ZXh0IHdpbmRvdyBhbmQvb3IgZnJlZSB0byBidWlsZCBhIHNuaXBwZXQuYCkpXSkpfX0pLHZ0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHl0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LGJ0PXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtMmB9LHh0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFN0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LEN0PXtrZXk6MixjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx3dD1wKHtfX25hbWU6YFByaWNpbmdGb3JtYCxzZXR1cChlKXtsZXQgdD1BKGBgKSxuPUEoYGApLGk9QShgYCksbz13KCgpPT50LnZhbHVlLnRyaW0oKSE9PWBgKSxzPXcoKCk9Pk51bWJlcihuLnZhbHVlKSksbD13KCgpPT5OdW1iZXIoaS52YWx1ZSkpLHU9dygoKT0+bi52YWx1ZS50cmltKCkhPT1gYCYmWChzLnZhbHVlKSksZD13KCgpPT5pLnZhbHVlLnRyaW0oKSE9PWBgJiZYKGwudmFsdWUpKSxmPXcoKCk9PntsZXQgZT1bXTtyZXR1cm4gbi52YWx1ZS50cmltKCkhPT1gYCYmIXUudmFsdWUmJmUucHVzaChgSW5wdXQgcHJpY2UvTVRvayBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5gKSxpLnZhbHVlLnRyaW0oKSE9PWBgJiYhZC52YWx1ZSYmZS5wdXNoKGBPdXRwdXQgcHJpY2UvTVRvayBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5gKSwodS52YWx1ZSYmIWQudmFsdWV8fCF1LnZhbHVlJiZkLnZhbHVlKSYmZS5wdXNoKGBTZXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHByaWNlL01Ub2sg4oCUIGEgb25lLXNpZGVkIG92ZXJyaWRlIGhhcyBubyBiaWxsaW5nIG1lYW5pbmcuYCksZX0pLHA9dygoKT0+IW8udmFsdWV8fCF1LnZhbHVlfHwhZC52YWx1ZT9udWxsOlJlKHQudmFsdWUudHJpbSgpLHtpbnB1dFBlck06cy52YWx1ZSxvdXRwdXRQZXJNOmwudmFsdWV9KSk7cmV0dXJuKGUsbyk9PihrKCksXyhgZGl2YCx2dCxbaChgZGl2YCx5dCxbb1szXXx8PWgoYGxhYmVsYCx7Zm9yOmBwcmljaW5nLW1vZGVsLWlkYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTW9kZWwgaWQgKHByb3ZpZGVyL21vZGVsKWAsLTEpLFMoeChVKSx7aWQ6YHByaWNpbmctbW9kZWwtaWRgLG1vZGVsVmFsdWU6dC52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b1swXXx8PWU9PnQudmFsdWU9ZSxwbGFjZWhvbGRlcjpgb3BlbmFpL2dwdC00YCxjbGFzczpgZm9udC1tb25vYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLGgoYGRpdmAsYnQsW2goYGRpdmAseHQsW29bNF18fD1oKGBsYWJlbGAse2ZvcjpgcHJpY2luZy1pbnB1dGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYElucHV0IHByaWNlIC8gTVRvayAoVVNEKWAsLTEpLFMoeChVKSx7aWQ6YHByaWNpbmctaW5wdXRgLG1vZGVsVmFsdWU6bi52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b1sxXXx8PWU9Pm4udmFsdWU9ZSx0eXBlOmBudW1iZXJgLG1pbjpgMGAsc3RlcDpgYW55YCxwbGFjZWhvbGRlcjpgMC41MGB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxoKGBkaXZgLFN0LFtvWzVdfHw9aChgbGFiZWxgLHtmb3I6YHByaWNpbmctb3V0cHV0YCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgT3V0cHV0IHByaWNlIC8gTVRvayAoVVNEKWAsLTEpLFMoeChVKSx7aWQ6YHByaWNpbmctb3V0cHV0YCxtb2RlbFZhbHVlOmkudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm9bMl18fD1lPT5pLnZhbHVlPWUsdHlwZTpgbnVtYmVyYCxtaW46YDBgLHN0ZXA6YGFueWAscGxhY2Vob2xkZXI6YDEuNTBgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSldKSxmLnZhbHVlLmxlbmd0aD8oaygpLGooeChMKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KFIpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhrKCEwKSxfKGEsbnVsbCx2KGYudmFsdWUsKGUsdCk9PihrKCksXyhgcGAse2tleTp0fSxjKGUpLDEpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKTpNKGBgLCEwKSxwLnZhbHVlPyhrKCksaihXLHtrZXk6MSxsYWJlbDpgUGFzdGUgaW50byBtaWRkbGV3YXJlLnlhbWxgLHRleHQ6cC52YWx1ZX0sbnVsbCw4LFtgdGV4dGBdKSk6KGsoKSxfKGBwYCxDdCxgRW50ZXIgYSBtb2RlbCBpZCBhbmQgYm90aCBwcmljZXMgdG8gYnVpbGQgYSBzbmlwcGV0LmApKV0pKX19KSxUdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxFdD17Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgc206Z3JpZC1jb2xzLTJgfSxEdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxPdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxrdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxBdD17Y2xhc3M6YGZsZXggZ2FwLTJgfSxqdD17a2V5OjAsY2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sTXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sTnQ9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC0zIHNtOmdyaWQtY29scy0yYH0sUHQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sRnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sSXQ9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtYH0sTHQ9e2tleToyLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFJ0PXAoe19fbmFtZTpgVXNlckZvcm1gLHByb3BzOntncm91cE5hbWVzOnt9fSxzZXR1cChlKXtsZXQgbj1lLHM9QShgYCksbD1BKHplKSx1PUEoYGApLGQ9QShgYCkscD1BKGBgKSxtPUEoYGApLGc9QSghMSkseT1mKCk7ZnVuY3Rpb24gYigpe3RyeXtsLnZhbHVlPUJlKCkseS5wdXNoKHtraW5kOmBzdWNjZXNzYCxtZXNzYWdlOmBHZW5lcmF0ZWQgYSBuZXcgQVBJIGtleS5gfSl9Y2F0Y2goZSl7eS5wdXNoKHtraW5kOmBlcnJvcmAsbWVzc2FnZTplIGluc3RhbmNlb2YgRXJyb3I/YENvdWxkIG5vdCBnZW5lcmF0ZSBhbiBBUEkga2V5OiAke2UubWVzc2FnZX1gOmBDb3VsZCBub3QgZ2VuZXJhdGUgYW4gQVBJIGtleS5gfSl9fWZ1bmN0aW9uIEMoZSl7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZS5zcGxpdChgLGApKXtsZXQgZT1uLnRyaW0oKTtlJiZ0LmFkZChlKX1yZXR1cm4gQXJyYXkuZnJvbSh0KX1sZXQgVD13KCgpPT5DKGQudmFsdWUpKSxEPXcoKCk9PkMocC52YWx1ZSkpLE89dygoKT0+QyhtLnZhbHVlKSksTj13KCgpPT5ZKHMudmFsdWUpKSxlZT13KCgpPT51LnZhbHVlIT09YGApLFA9dygoKT0+bC52YWx1ZS50cmltKCkhPT1gYCYmbC52YWx1ZSE9PWBzay1sbG1ndy1SRVBMQUNFX01FYCksRj13KCgpPT5BZShELnZhbHVlLE8udmFsdWUpKSx0ZT13KCgpPT57aWYoIU4udmFsdWV8fCFlZS52YWx1ZXx8IVAudmFsdWV8fEYudmFsdWUpcmV0dXJuIG51bGw7bGV0IGU9VC52YWx1ZS5sZW5ndGg+MD9bdS52YWx1ZSwuLi5ULnZhbHVlXTpudWxsO3JldHVybiBWZSh7bmFtZTpzLnZhbHVlLnRyaW0oKSxhcGlLZXk6bC52YWx1ZS50cmltKCksZ3JvdXA6ZT92b2lkIDA6dS52YWx1ZSxncm91cHM6ZT8/dm9pZCAwLHByb3ZpZGVyczpELnZhbHVlLG1vZGVsczpPLnZhbHVlLGFkbWluOmcudmFsdWV9KX0pO3JldHVybihlLGYpPT4oaygpLF8oYGRpdmAsVHQsW2goYGRpdmAsRXQsW2goYGRpdmAsRHQsW2ZbN118fD1oKGBsYWJlbGAse2ZvcjpgdXNlci1uYW1lYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTmFtZWAsLTEpLFMoeChVKSx7aWQ6YHVzZXItbmFtZWAsbW9kZWxWYWx1ZTpzLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpmWzBdfHw9ZT0+cy52YWx1ZT1lLHBsYWNlaG9sZGVyOmBhbGljZWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxoKGBkaXZgLE90LFtmWzhdfHw9aChgbGFiZWxgLHtpZDpgdXNlci1ncm91cC1sYWJlbGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFByaW1hcnkgZ3JvdXBgLC0xKSxTKHgoVikseyJtb2RlbC12YWx1ZSI6dS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6ZlsxXXx8PWU9PnUudmFsdWU9U3RyaW5nKGUpfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KEgpLHsiYXJpYS1sYWJlbGxlZGJ5IjpgdXNlci1ncm91cC1sYWJlbGB9LHtkZWZhdWx0OnIoKCk9PltTKHgoQikse3BsYWNlaG9sZGVyOmBTZWxlY3TigKZgfSldKSxfOjF9KSxTKHgoSSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bKGsoITApLF8oYSxudWxsLHYobi5ncm91cE5hbWVzLGU9PihrKCksaih4KHopLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpyKCgpPT5bRShjKGUpLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKV0pLGgoYGRpdmAsa3QsW2ZbMTBdfHw9aChgbGFiZWxgLHtmb3I6YHVzZXItYXBpLWtleWAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFQSSBrZXlgLC0xKSxoKGBkaXZgLEF0LFtTKHgoVSkse2lkOmB1c2VyLWFwaS1rZXlgLG1vZGVsVmFsdWU6bC52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6ZlsyXXx8PWU9PmwudmFsdWU9ZSxjbGFzczpgZm9udC1tb25vYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKSxTKHgodCkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6Yn0se2RlZmF1bHQ6cigoKT0+Wy4uLmZbOV18fD1bRShgR2VuZXJhdGVgLC0xKV1dKSxfOjF9KV0pLGwudmFsdWU9PT14KGBzay1sbG1ndy1SRVBMQUNFX01FYCk/KGsoKSxfKGBwYCxqdCxgU3RpbGwgdGhlIHBsYWNlaG9sZGVyIOKAlCBjbGljayBHZW5lcmF0ZSBmb3IgYSByZWFsIGtleS5gKSk6TShgYCwhMCldKSxoKGBkaXZgLE10LFtmWzExXXx8PWgoYGxhYmVsYCx7Zm9yOmB1c2VyLWV4dHJhLWdyb3Vwc2AsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFkZGl0aW9uYWwgZ3JvdXBzIChjb21tYS1zZXBhcmF0ZWQsIG9wdGlvbmFsKWAsLTEpLFMoeChVKSx7aWQ6YHVzZXItZXh0cmEtZ3JvdXBzYCxtb2RlbFZhbHVlOmQudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmZbM118fD1lPT5kLnZhbHVlPWUscGxhY2Vob2xkZXI6YGZyaWVuZHNgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksaChgZGl2YCxOdCxbaChgZGl2YCxQdCxbZlsxMl18fD1oKGBsYWJlbGAse2ZvcjpgdXNlci1wcm92aWRlcnNgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBQZXJzb25hbCBncmFudDogcHJvdmlkZXJzIChvcHRpb25hbClgLC0xKSxTKHgoVSkse2lkOmB1c2VyLXByb3ZpZGVyc2AsbW9kZWxWYWx1ZTpwLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpmWzRdfHw9ZT0+cC52YWx1ZT1lLHBsYWNlaG9sZGVyOmBneDEwYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLGgoYGRpdmAsRnQsW2ZbMTNdfHw9aChgbGFiZWxgLHtmb3I6YHVzZXItbW9kZWxzYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUGVyc29uYWwgZ3JhbnQ6IG1vZGVscyAob3B0aW9uYWwpYCwtMSksUyh4KFUpLHtpZDpgdXNlci1tb2RlbHNgLG1vZGVsVmFsdWU6bS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6Zls1XXx8PWU9Pm0udmFsdWU9ZSxwbGFjZWhvbGRlcjpgZ3gxMC9jdXJyZW50YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pXSksaChgbGFiZWxgLEl0LFtvKGgoYGlucHV0YCx7Im9uVXBkYXRlOm1vZGVsVmFsdWUiOmZbNl18fD1lPT5nLnZhbHVlPWUsdHlwZTpgY2hlY2tib3hgLGNsYXNzOmBzaXplLTQgcm91bmRlZCBib3JkZXItaW5wdXRgfSxudWxsLDUxMiksW1tpLGcudmFsdWVdXSksZlsxNF18fD1FKGAgQWRtaW4gKGZ1bGwgYWNjZXNzIHRvIC9hZG1pbi9hcGkvKikgYCwtMSldKSxGLnZhbHVlPyhrKCksaih4KEwpLHtrZXk6MCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0OnIoKCk9PltTKHgoUiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bRShjKEYudmFsdWUpLDEpXSksXzoxfSldKSxfOjF9KSk6TShgYCwhMCksdGUudmFsdWU/KGsoKSxqKFcse2tleToxLGxhYmVsOmBBZGQgYXMgYSBuZXcgbGluZSBpbiB1c2Vycy5qc29uYCx0ZXh0OnRlLnZhbHVlfSxudWxsLDgsW2B0ZXh0YF0pKTooaygpLF8oYHBgLEx0LGBGaWxsIGluIGEgbmFtZSwgZ3JvdXAsIGFuZCBhIHJlYWwgKGdlbmVyYXRlZCkgQVBJIGtleSB0byBidWlsZCBhIHNuaXBwZXQuYCkpXSkpfX0pLHp0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LEJ0PXAoe19fbmFtZTpgQ2hhbmdlSGVscGVyYCxwcm9wczp7Z3JvdXBOYW1lczp7fSx1c2VyTmFtZXM6e319LHNldHVwKGUpe2xldCB0PVtgbGltaXRzYCxgZ3JhbnRgLGBwcmljaW5nYCxgbW9kZWxgLGB1c2VyYF0sbj17bGltaXRzOmBMaW1pdHNgLGdyYW50OmBBY2Nlc3MgZ3JhbnRgLHByaWNpbmc6YFByaWNpbmdgLG1vZGVsOmBNb2RlbCBtZXRhZGF0YWAsdXNlcjpgTmV3IHVzZXJgfSxpPWUsbz1PKCkscz13KCgpPT57bGV0IGU9by5wYXJhbXMuaGVscGVyO3JldHVybiB0LmluY2x1ZGVzKGU/P2BgKT9lOmBsaW1pdHNgfSk7ZnVuY3Rpb24gbChlKXt0eXBlb2YgZSE9YHN0cmluZ2B8fCF0LmluY2x1ZGVzKGUpfHxvLmdvVG8oYGNvbmZpZ2Asey4uLm8ucGFyYW1zLGhlbHBlcjplfSl9cmV0dXJuKGUsbyk9PihrKCksXyhgZGl2YCx6dCxbUyh4KGllKSx7Im1vZGVsLXZhbHVlIjpzLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpsfSx7ZGVmYXVsdDpyKCgpPT5bUyh4KHJlKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsoaygpLF8oYSxudWxsLHYodCxlPT5TKHgoYWUpLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpyKCgpPT5bRShjKG5bZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpLDY0KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pLHMudmFsdWU9PT1gbGltaXRzYD8oaygpLGoodXQse2tleTowLCJncm91cC1uYW1lcyI6aS5ncm91cE5hbWVzLCJ1c2VyLW5hbWVzIjppLnVzZXJOYW1lc30sbnVsbCw4LFtgZ3JvdXAtbmFtZXNgLGB1c2VyLW5hbWVzYF0pKTpzLnZhbHVlPT09YGdyYW50YD8oaygpLGooJGUse2tleToxLCJncm91cC1uYW1lcyI6aS5ncm91cE5hbWVzLCJ1c2VyLW5hbWVzIjppLnVzZXJOYW1lc30sbnVsbCw4LFtgZ3JvdXAtbmFtZXNgLGB1c2VyLW5hbWVzYF0pKTpzLnZhbHVlPT09YHByaWNpbmdgPyhrKCksaih3dCx7a2V5OjJ9KSk6cy52YWx1ZT09PWBtb2RlbGA/KGsoKSxqKF90LHtrZXk6M30pKTooaygpLGooUnQse2tleTo0LCJncm91cC1uYW1lcyI6aS5ncm91cE5hbWVzfSxudWxsLDgsW2Bncm91cC1uYW1lc2BdKSldKSl9fSksVnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sSHQ9cCh7X19uYW1lOmBDb25maWdUcmVlYCxwcm9wczp7Y29uZmlnOnt9LHdhcm5pbmdzOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49dygoKT0+VGUoSih0LmNvbmZpZykpKTtyZXR1cm4odCxpKT0+KGsoKSxfKGBkaXZgLFZ0LFsoayghMCksXyhhLG51bGwsdihlLndhcm5pbmdzLChlLHQpPT4oaygpLGooeChMKSx7a2V5OnQsdmFyaWFudDpgd2FybmB9LHtkZWZhdWx0OnIoKCk9PltTKHgoc2UpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMF18fD1bRShgQ29uZmlnIHdhcm5pbmdgLC0xKV1dKSxfOjF9KSxTKHgoUiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bRShjKGUpLDEpXSksXzoyfSwxMDI0KV0pLF86Mn0sMTAyNCkpKSwxMjgpKSxTKFcse2xhYmVsOmBSZWRhY3RlZCBydW5uaW5nIGNvbmZpZyAocmVhZC1vbmx5KWAsdGV4dDpuLnZhbHVlfSxudWxsLDgsW2B0ZXh0YF0pXSkpfX0pLFV0PW0oYGNvbmZpZ2Ase3N0YXRlOigpPT4oe2RhdGE6bnVsbCxsb2FkaW5nOiExLGVycm9yOmBgfSksYWN0aW9uczp7YXN5bmMgZmV0Y2hDb25maWcoKXtpZihGKCkuaXNBdXRoZW50aWNhdGVkKXt0aGlzLmxvYWRpbmc9ITA7dHJ5e3RoaXMuZGF0YT1hd2FpdCBnKGAvYWRtaW4vYXBpL2NvbmZpZ2ApLHRoaXMuZXJyb3I9YGB9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHRlJiYoZS5zdGF0dXM9PT00MDF8fGUuc3RhdHVzPT09NDAzKSlyZXR1cm47dGhpcy5lcnJvcj1lIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlN0cmluZyhlKX1maW5hbGx5e3RoaXMubG9hZGluZz0hMX19fSxhc3luYyBlbnN1cmVDb25maWcoKXt0aGlzLmxvYWRpbmd8fHRoaXMuZGF0YXx8YXdhaXQgdGhpcy5mZXRjaENvbmZpZygpfX19KSxXdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxHdD1wKHtfX25hbWU6YENvbmZpZ1BhZ2VgLHNldHVwKHQpe2xldCBuPVV0KCksaT1iKCksYT11ZSgpO2QoKCk9PntuLmVuc3VyZUNvbmZpZygpLGEuZW5zdXJlQ29uc3VtZXJzKCl9KTtsZXQgbz13KCgpPT4oaS5vdmVydmlldz8uZ3JvdXBzPz9bXSkubWFwKGU9PmUubmFtZSkpLGM9dygoKT0+KGEuZGF0YT8udXNlcnM/P1tdKS5tYXAoZT0+ZS5uYW1lKSk7cmV0dXJuKHQsaSk9PihrKCksXyhgZGl2YCxXdCxbeChuKS5lcnJvciYmIXgobikuZGF0YT8oaygpLGooeChsKSx7a2V5OjB9LHtkZWZhdWx0OnIoKCk9PltTKHgoZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bUyh4KHMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMF18fD1bRShgQ29uZmlnYCwtMSldXSksXzoxfSldKSxfOjF9KSxTKHgoUCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bUyhsZSx7bWVzc2FnZTp4KG4pLmVycm9yLCJvbi1yZXRyeSI6eChuKS5mZXRjaENvbmZpZ30sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pXSksXzoxfSldKSxfOjF9KSk6eChuKS5sb2FkaW5nJiYheChuKS5kYXRhPyhrKCksaih4KGwpLHtrZXk6MX0se2RlZmF1bHQ6cigoKT0+W1MoeChQKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEuNWB9LHtkZWZhdWx0OnIoKCk9PltTKHgoTikse2NsYXNzOmBoLTMgdy01NmB9KSxTKHgoTikse2NsYXNzOmBoLTY0IHctZnVsbCByb3VuZGVkLW1kYH0pXSksXzoxfSldKSxfOjF9KSk6eChuKS5kYXRhPyhrKCksaihIdCx7a2V5OjIsY29uZmlnOngobikuZGF0YS5jb25maWcsd2FybmluZ3M6eChuKS5kYXRhLndhcm5pbmdzfSxudWxsLDgsW2Bjb25maWdgLGB3YXJuaW5nc2BdKSk6TShgYCwhMCksUyh4KGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W1MoeChlKSxudWxsLHtkZWZhdWx0OnIoKCk9PltTKHgocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uaVsxXXx8PVtFKGBDaGFuZ2UgaGVscGVyYCwtMSldXSksXzoxfSksUyh4KG9lKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzJdfHw9W0UoYEJ1aWxkIGEgcGFzdGUtcmVhZHkgc25pcHBldCBmb3IgbWlkZGxld2FyZS55YW1sIG9yIHVzZXJzLmpzb24g4oCUIG5vdGhpbmcgaGVyZSB3cml0ZXMgdG8gdGhlIHJ1bm5pbmcgY29uZmlnLmAsLTEpXV0pLF86MX0pXSksXzoxfSksUyh4KFApLG51bGwse2RlZmF1bHQ6cigoKT0+W1MoQnQseyJncm91cC1uYW1lcyI6by52YWx1ZSwidXNlci1uYW1lcyI6Yy52YWx1ZX0sbnVsbCw4LFtgZ3JvdXAtbmFtZXNgLGB1c2VyLW5hbWVzYF0pXSksXzoxfSldKSxfOjF9KV0pKX19KTtleHBvcnR7R3QgYXMgZGVmYXVsdH07", + "aW1wb3J0e0MgYXMgZSxEIGFzIHQsRSBhcyBuLExyIGFzIHIsTHQgYXMgaSxPIGFzIGEsT3IgYXMgbyxRIGFzIHMsUW4gYXMgYyxTIGFzIGwsVCBhcyB1LFh0IGFzIGQsXyBhcyBmLF9uIGFzIHAsYiBhcyBtLGNpIGFzIGgsY24gYXMgZyxmciBhcyBfLGcgYXMgdixnbiBhcyB5LGd0IGFzIGIsaXIgYXMgeCxsbiBhcyBTLG4gYXMgQyxvaSBhcyB3LG9uIGFzIFQsb3QgYXMgRSxzbiBhcyBELHQgYXMgTyx1biBhcyBrLHVyIGFzIEEsdmkgYXMgaix3IGFzIE0sd2kgYXMgTix3ciBhcyBQLHggYXMgZWUseGkgYXMgdGUseW4gYXMgRix5dCBhcyBuZSx6ciBhcyByZX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHtuIGFzIGllLHIgYXMgYWUsdCBhcyBvZX1mcm9tIi4vdGFicy1DdWg2RlEwai5qcyI7aW1wb3J0e18gYXMgSSxhIGFzIEwsYyBhcyBSLGcgYXMgeixoIGFzIHNlLGkgYXMgY2UsbCBhcyBsZSxuIGFzIHVlLG8gYXMgZGUsciBhcyBmZSxzIGFzIHBlfWZyb20iLi9pbmRleC04OENUUk5IUC5qcyI7aW1wb3J0e3QgYXMgbWV9ZnJvbSIuL3VzZUNvcHlGZWVkYmFjay1DalJ6T08tVy5qcyI7aW1wb3J0e3QgYXMgaGV9ZnJvbSIuL2NsaXBib2FyZC1CNzNmWjBjMS5qcyI7aW1wb3J0e3QgYXMgZ2V9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHt0IGFzIF9lfWZyb20iLi9jb25zdW1lcnMtQ3d3a09pTXYuanMiO3ZhciB2ZT17Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgc206Z3JpZC1jb2xzLTJgfSx5ZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxiZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxCPUYoe19fbmFtZTpgVGFyZ2V0UGlja2VyYCxwcm9wczp7dGFyZ2V0S2luZDp7fSx0YXJnZXROYW1lOnt9LHRhcmdldE5hbWVzOnt9LHVzZXJPcHRpb25MYWJlbDp7fX0sZW1pdHM6W2B1cGRhdGU6dGFyZ2V0S2luZGAsYHVwZGF0ZTp0YXJnZXROYW1lYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxpPXQsYT1gdGFyZ2V0LXBpY2tlci1raW5kLSR7UCgpfWAsbz1gdGFyZ2V0LXBpY2tlci1uYW1lLSR7UCgpfWA7ZnVuY3Rpb24gcyhlKXsoZT09PWBncm91cGB8fGU9PT1gdXNlcmApJiZpKGB1cGRhdGU6dGFyZ2V0S2luZGAsZSl9ZnVuY3Rpb24gYyhlKXtpKGB1cGRhdGU6dGFyZ2V0TmFtZWAsU3RyaW5nKGUpKX1yZXR1cm4odCxpKT0+KHgoKSxrKGBkaXZgLHZlLFtEKGBkaXZgLHllLFtEKGBsYWJlbGAse2lkOmEsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFRhcmdldGApLHAoaihwZSkseyJtb2RlbC12YWx1ZSI6ZS50YXJnZXRLaW5kLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpzfSx7ZGVmYXVsdDpyKCgpPT5bcChqKGNlKSx7ImFyaWEtbGFiZWxsZWRieSI6YX0se2RlZmF1bHQ6cigoKT0+W3AoaihmZSkpXSksXzoxfSkscChqKGRlKSxudWxsLHtkZWZhdWx0OnIoKCk9PltwKGooTCkse3ZhbHVlOmBncm91cGB9LHtkZWZhdWx0OnIoKCk9PlsuLi5pWzBdfHw9W3koYEdyb3VwYCwtMSldXSksXzoxfSkscChqKEwpLHt2YWx1ZTpgdXNlcmB9LHtkZWZhdWx0OnIoKCk9Plt5KE4obi51c2VyT3B0aW9uTGFiZWwpLDEpXSksXzoxfSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSksRChgZGl2YCxiZSxbRChgbGFiZWxgLHtpZDpvLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LE4oZS50YXJnZXRLaW5kPT09YGdyb3VwYD9gR3JvdXAgbmFtZWA6YFVzZXIgbmFtZWApLDEpLHAoaihwZSkseyJtb2RlbC12YWx1ZSI6ZS50YXJnZXROYW1lLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpjfSx7ZGVmYXVsdDpyKCgpPT5bcChqKGNlKSx7ImFyaWEtbGFiZWxsZWRieSI6b30se2RlZmF1bHQ6cigoKT0+W3AoaihmZSkse3BsYWNlaG9sZGVyOmBTZWxlY3TigKZgfSldKSxfOjF9KSxwKGooZGUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wyh4KCEwKSxrKGQsbnVsbCxBKGUudGFyZ2V0TmFtZXMsZT0+KHgoKSxnKGooTCkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9Plt5KE4oZSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSkpfX0pLHhlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMS41YH0sU2U9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTJgfSxDZT17a2V5OjAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sVj1GKHtfX25hbWU6YFNuaXBwZXRCbG9ja2AscHJvcHM6e3RleHQ6e30sbGFiZWw6e319LHNldHVwKGUpe2xldCB0PWUsbj1vKGBwcmVgKSx7c3RhdGU6aSxzZXQ6Y309bWUoKSxsPWYoKTthc3luYyBmdW5jdGlvbiB1KCl7bGV0IGU9YXdhaXQgaGUodC50ZXh0LG4udmFsdWU/P3ZvaWQgMCk7YyhlKSxlPT09YGZhaWxlZGAmJmwucHVzaCh7a2luZDpgZXJyb3JgLG1lc3NhZ2U6YENvdWxkIG5vdCBjb3B5IHRoZSBzbmlwcGV0LmB9KX1sZXQgZD17aWRsZTpgQ29weWAsY29waWVkOmBDb3BpZWRgLHNlbGVjdGVkOmBTZWxlY3RlZCDigJQgcHJlc3Mg4oyYL0N0cmwrQ2AsZmFpbGVkOmBDb3B5IGZhaWxlZGB9O3JldHVybih0LG4pPT57bGV0IG89XyhgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIHgoKSxrKGBkaXZgLHhlLFtEKGBkaXZgLFNlLFtlLmxhYmVsPyh4KCksayhgc3BhbmAsQ2UsTihlLmxhYmVsKSwxKSk6UyhgYCwhMCkscChqKGEpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YG91dGxpbmVgLHNpemU6YHNtYCxjbGFzczpgbWwtYXV0b2Asb25DbGljazp1fSx7ZGVmYXVsdDpyKCgpPT5bcChvLHtpY29uOmooaSk9PT1gaWRsZWA/aihFKTpqKGkpPT09YGZhaWxlZGA/aihiKTpqKHMpLGNsYXNzOnRlKFtgc2l6ZS0zLjVgLGooaSk9PT1gZmFpbGVkYD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSx5KGAgYCtOKGRbaihpKV0pLDEpXSksXzoxfSldKSxEKGBwcmVgLHtyZWY6YHByZWAsY2xhc3M6YG92ZXJmbG93LXgtYXV0byByb3VuZGVkLW1kIGJvcmRlciBiZy1tdXRlZCBwLTMgZm9udC1tb25vIHRleHQteHMgc2VsZWN0LXRleHQgd2hpdGVzcGFjZS1wcmVgfSxOKGUudGV4dCksNTEzKV0pfX19KSxIPWAgIGAsd2U9L15bQS1aYS16X11bQS1aYS16MC05Ll8tXSokLyxUZT1uZXcgU2V0KFtgdHJ1ZWAsYGZhbHNlYCxgeWVzYCxgbm9gLGB5YCxgbmAsYG9uYCxgb2ZmYCxgbnVsbGAsYG5pbGAsYG5hbmAsYGluZmBdKTtmdW5jdGlvbiBVKGUpe3JldHVybiF3ZS50ZXN0KGUpfHxUZS5oYXMoZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBFZShlKXtyZXR1cm4gVShlKX12YXIgRGU9UmVnRXhwKGBbXFx1MDA3ZlxcdTAwODAtXFx1MDA5Zlx1MjAyOFx1MjAyOV1gLGBnYCk7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZS5yZXBsYWNlKERlLGU9PntsZXQgdD1lLmNvZGVQb2ludEF0KDApO3JldHVybiB0PD0yNTU/YFxceCR7dC50b1N0cmluZygxNikucGFkU3RhcnQoMixgMGApfWA6YFxcdSR7dC50b1N0cmluZygxNikucGFkU3RhcnQoNCxgMGApfWB9KX1mdW5jdGlvbiBHKGUpe3JldHVybiBFZShlKT9XKEpTT04uc3RyaW5naWZ5KGUpKTplfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGU9PT1udWxsP2BudWxsYDp0eXBlb2YgZT09YGJvb2xlYW5gfHx0eXBlb2YgZT09YG51bWJlcmA/U3RyaW5nKGUpOlUoZSk/VyhKU09OLnN0cmluZ2lmeShlKSk6ZX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP2BbXWA6YFske2UubWFwKGU9PksoZSkpLmpvaW4oYCwgYCl9XWB9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIGUubGVuZ3RoPT09MD9ge31gOmB7ICR7ZS5tYXAoKFtlLHRdKT0+YCR7RyhlKX06ICR7Syh0KX1gKS5qb2luKGAsIGApfSB9YH1mdW5jdGlvbiBBZShlKXtyZXR1cm4gdHlwZW9mIGU9PWBvYmplY3RgJiYhIWUmJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHEoZSl7cmV0dXJuIGU9PT1udWxsfHx0eXBlb2YgZT09YHN0cmluZ2B8fHR5cGVvZiBlPT1gbnVtYmVyYHx8dHlwZW9mIGU9PWBib29sZWFuYH1mdW5jdGlvbiBqZShlLHQpe2xldCBuPUgucmVwZWF0KHQpLHI9W107Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IGU9YCR7bn0ke0coaSl9OmA7aWYocShhKSlyLnB1c2goYCR7ZX0gJHtLKGEpfWApO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShhKSl7aWYoYS5ldmVyeShxKSlyLnB1c2goYCR7ZX0gJHtPZShhKX1gKTtlbHNle3IucHVzaChlKTtmb3IobGV0IGUgb2YgYSlyLnB1c2goYCR7bn0ke0h9LSAke3EoZSk/SyhlKTpKU09OLnN0cmluZ2lmeShlKX1gKX19ZWxzZSBBZShhKSYmKE9iamVjdC5rZXlzKGEpLmZpbHRlcihlPT5hW2VdIT09dm9pZCAwKS5sZW5ndGg9PT0wP3IucHVzaChgJHtlfSB7fWApOihyLnB1c2goZSksci5wdXNoKC4uLmplKGEsdCsxKSkpKX1yZXR1cm4gcn1mdW5jdGlvbiBNZShlLHQ9MCl7cmV0dXJuIGplKGUsdCkuam9pbihgCmApfWZ1bmN0aW9uIE5lKGUsdCl7bGV0IG49dCxyPVtgc3BlY2AsYHBsdWdpbmAsYGxsbWdhdGV3YXlgLC4uLmVdO2ZvcihsZXQgZT1yLmxlbmd0aC0xO2U+PTA7ZS0tKW49e1tyW2VdXTpufTtyZXR1cm4gTWUobil9ZnVuY3Rpb24gSihlKXtpZihlPT09bnVsbHx8dHlwZW9mIGU9PWBzdHJpbmdgfHx0eXBlb2YgZT09YG51bWJlcmB8fHR5cGVvZiBlPT1gYm9vbGVhbmApcmV0dXJuIGU7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5tYXAoSik7aWYodHlwZW9mIGU9PWBvYmplY3RgKXtsZXQgdD17fTtmb3IobGV0W24scl1vZiBPYmplY3QuZW50cmllcyhlKSl0W25dPUoocik7cmV0dXJuIHR9cmV0dXJuIFN0cmluZyhlKX12YXIgUGU9L15bYS16QS1aMC05Ll8tXSskLztmdW5jdGlvbiBGZShlKXtyZXR1cm4gUGUudGVzdChlKX1mdW5jdGlvbiBZKGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldCBuIG9mIGUuc3BsaXQoYCxgKSl7bGV0IGU9bi50cmltKCk7ZSYmdC5hZGQoZSl9cmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUudHJpbSgpIT09YGB9ZnVuY3Rpb24gWChlKXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKGUpJiZlPj0wfWZ1bmN0aW9uIExlKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wfWZ1bmN0aW9uIFJlKGUsdCl7cmV0dXJuIHQubGVuZ3RoPjAmJmUubGVuZ3RoPT09MD9gQSBwZXJzb25hbCBncmFudCBuYW1pbmcgbW9kZWxzIG5lZWRzIGF0IGxlYXN0IG9uZSBwcm92aWRlciB0b28g4oCUIGFuIGVtcHR5IHByb3ZpZGVycyBsaXN0IG1lYW5zIEVWRVJZIGNvbmZpZ3VyZWQgcHJvdmlkZXIgKG5vdCBub25lKSwgc28gdGhpcyB3b3VsZCBzaWxlbnRseSB3aWRlbiBhY2Nlc3MgZmFyIGJleW9uZCB3aGF0IHdhcyB0eXBlZCAoYXV0aC5nbyByZWplY3RzIGl0KS5gOm51bGx9dmFyIHplPVtgcmVxdWVzdHNQZXJNaW51dGVgLGByZXF1ZXN0c1BlckRheWAsYHRva2Vuc1BlckRheWAsYHRva2Vuc1Blck1vbnRoYCxgY29zdFBlckRheVVTRGAsYGNvc3RQZXJNb250aFVTRGBdO2Z1bmN0aW9uIFooZSl7bGV0IHQ9W107Zm9yKGxldCBuIG9mIHplKXtsZXQgcj1lW25dO3ImJnQucHVzaChbbixyXSl9cmV0dXJuIHR9ZnVuY3Rpb24gQmUoZSx0KXtsZXQgbj17fTtmb3IobGV0W2Uscl1vZiBaKHQpKW5bZV09cjtyZXR1cm4gTmUoW2Bncm91cHNgLGVdLHtsaW1pdHM6bn0pfWZ1bmN0aW9uIFEoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uICQoZSl7cmV0dXJuYFske2UubWFwKFEpLmpvaW4oYCwgYCl9XWB9ZnVuY3Rpb24gVmUoZSl7cmV0dXJuYHske1ooZSkubWFwKChbZSx0XSk9PmAke1EoZSl9OiAke3R9YCkuam9pbihgLCBgKX19YH1mdW5jdGlvbiBIZShlKXtyZXR1cm5gImxpbWl0cyI6ICR7VmUoZSl9YH1mdW5jdGlvbiBVZShlLHQpe3JldHVybiBOZShbYGdyb3Vwc2AsZV0se3Byb3ZpZGVyczp0LnByb3ZpZGVycyxtb2RlbHM6dC5tb2RlbHMsbWNwU2VydmVyczp0Lm1jcFNlcnZlcnMsYWdlbnRzOnQuYWdlbnRzfSl9ZnVuY3Rpb24gV2UoZSl7bGV0IHQ9W107cmV0dXJuIGUucHJvdmlkZXJzLmxlbmd0aD4wJiZ0LnB1c2goYCJwcm92aWRlcnMiOiAkeyQoZS5wcm92aWRlcnMpfWApLGUubW9kZWxzLmxlbmd0aD4wJiZ0LnB1c2goYCJtb2RlbHMiOiAkeyQoZS5tb2RlbHMpfWApLHQuam9pbihgLCBgKX1mdW5jdGlvbiBHZShlLHQpe2xldCBuPVtdO3QuY29udGV4dFRva2VucyE9PXZvaWQgMCYmbi5wdXNoKFtgY29udGV4dFRva2Vuc2AsdC5jb250ZXh0VG9rZW5zXSksdC5mcmVlIT09dm9pZCAwJiZuLnB1c2goW2BmcmVlYCx0LmZyZWVdKTtsZXQgcj1rZShuKTtyZXR1cm5bYHNwZWM6YCxgICBwbHVnaW46YCxgICAgIGxsbWdhdGV3YXk6YCxgICAgICAgbW9kZWxNZXRhOmAsYCAgICAgICAgJHtKU09OLnN0cmluZ2lmeShlKX06ICR7cn1gXS5qb2luKGAKYCl9ZnVuY3Rpb24gS2UoZSx0KXtsZXQgbj1rZShbW2BpbnB1dFBlck1gLHQuaW5wdXRQZXJNXSxbYG91dHB1dFBlck1gLHQub3V0cHV0UGVyTV1dKTtyZXR1cm5bYHNwZWM6YCxgICBwbHVnaW46YCxgICAgIGxsbWdhdGV3YXk6YCxgICAgICAgcHJpY2luZzpgLGAgICAgICAgICR7RyhlKX06ICR7bn1gXS5qb2luKGAKYCl9dmFyIHFlPWBzay1sbG1ndy1SRVBMQUNFX01FYDtmdW5jdGlvbiBKZSgpe2xldCBlPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzIpKSx0PWBgO2ZvcihsZXQgbiBvZiBlKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUobik7cmV0dXJuYHNrLWxsbWd3LSR7YnRvYSh0KS5yZXBsYWNlKC9cKy9nLGAtYCkucmVwbGFjZSgvXC8vZyxgX2ApLnJlcGxhY2UoLz0rJC8sYGApfWB9ZnVuY3Rpb24gWWUoZSl7bGV0IHQ9W2AibmFtZSI6ICR7UShlLm5hbWUpfWAsYCJhcGlLZXkiOiAke1EoZS5hcGlLZXkpfWBdO3JldHVybiBlLmdyb3VwJiZ0LnB1c2goYCJncm91cCI6ICR7UShlLmdyb3VwKX1gKSxlLmdyb3VwcyYmZS5ncm91cHMubGVuZ3RoPjAmJnQucHVzaChgImdyb3VwcyI6ICR7JChlLmdyb3Vwcyl9YCksZS5wcm92aWRlcnMmJmUucHJvdmlkZXJzLmxlbmd0aD4wJiZ0LnB1c2goYCJwcm92aWRlcnMiOiAkeyQoZS5wcm92aWRlcnMpfWApLGUubW9kZWxzJiZlLm1vZGVscy5sZW5ndGg+MCYmdC5wdXNoKGAibW9kZWxzIjogJHskKGUubW9kZWxzKX1gKSxlLmxpbWl0cyYmWihlLmxpbWl0cykubGVuZ3RoPjAmJnQucHVzaChgImxpbWl0cyI6ICR7VmUoZS5saW1pdHMpfWApLGUuYWRtaW4mJnQucHVzaChgImFkbWluIjogJHtLKCEwKX1gKSxgeyR7dC5qb2luKGAsIGApfX1gfWZ1bmN0aW9uIFhlKGUsdCl7bGV0IG49aChgZ3JvdXBgKSxyPWgoYGApO3JldHVybnt0YXJnZXRLaW5kOm4sdGFyZ2V0TmFtZTpyLHRhcmdldE5hbWVzOlQoKCk9Pm4udmFsdWU9PT1gZ3JvdXBgP2UoKTp0KCkpLG5hbWVWYWxpZDpUKCgpPT5uLnZhbHVlPT09YGdyb3VwYD9GZShyLnZhbHVlLnRyaW0oKSk6SWUoci52YWx1ZSkpLHNuaXBwZXRMYWJlbDpUKCgpPT5uLnZhbHVlPT09YGdyb3VwYD9gUGFzdGUgaW50byBtaWRkbGV3YXJlLnlhbWxgOmBNZXJnZSBpbnRvICR7ci52YWx1ZX3igJlzIHVzZXJzLmpzb24gbGluZWApfX12YXIgWmU9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sUWU9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC0zIHNtOmdyaWQtY29scy0yYH0sJGU9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sZXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sdHQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sbnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0scnQ9e2tleToyLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGl0PUYoe19fbmFtZTpgR3JhbnRGb3JtYCxwcm9wczp7Z3JvdXBOYW1lczp7fSx1c2VyTmFtZXM6e319LHNldHVwKGUpe2xldCB0PWUse3RhcmdldEtpbmQ6bix0YXJnZXROYW1lOmksdGFyZ2V0TmFtZXM6YSxuYW1lVmFsaWQ6byxzbmlwcGV0TGFiZWw6c309WGUoKCk9PnQuZ3JvdXBOYW1lcywoKT0+dC51c2VyTmFtZXMpLGM9aChgYCksbD1oKGBgKSx1PWgoYGApLGY9aChgYCksbT1UKCgpPT5ZKGMudmFsdWUpKSxfPVQoKCk9PlkobC52YWx1ZSkpLHY9VCgoKT0+WSh1LnZhbHVlKSksYj1UKCgpPT5ZKGYudmFsdWUpKSxDPVQoKCk9Pm4udmFsdWU9PT1gdXNlcmA/UmUobS52YWx1ZSxfLnZhbHVlKTpudWxsKSx3PVQoKCk9Pm0udmFsdWUubGVuZ3RoPT09MCYmXy52YWx1ZS5sZW5ndGg9PT0wJiZ2LnZhbHVlLmxlbmd0aD09PTAmJmIudmFsdWUubGVuZ3RoPT09MCksRT1UKCgpPT4hby52YWx1ZXx8Qy52YWx1ZXx8dy52YWx1ZT9udWxsOm4udmFsdWU9PT1gZ3JvdXBgP1VlKGkudmFsdWUudHJpbSgpLHtwcm92aWRlcnM6bS52YWx1ZSxtb2RlbHM6Xy52YWx1ZSxtY3BTZXJ2ZXJzOnYudmFsdWUsYWdlbnRzOmIudmFsdWV9KTpXZSh7cHJvdmlkZXJzOm0udmFsdWUsbW9kZWxzOl8udmFsdWV9KXx8bnVsbCk7cmV0dXJuKGUsdCk9Pih4KCksayhgZGl2YCxaZSxbcChCLHsidGFyZ2V0LWtpbmQiOmoobiksInRhcmdldC1uYW1lIjpqKGkpLCJ0YXJnZXQtbmFtZXMiOmooYSksInVzZXItb3B0aW9uLWxhYmVsIjpgVXNlciAocGVyc29uYWwgZ3JhbnQsIGV4aXN0aW5nIHVzZXJzLmpzb24gZW50cnkpYCwib25VcGRhdGU6dGFyZ2V0S2luZCI6dFswXXx8PWU9Pm4udmFsdWU9ZSwib25VcGRhdGU6dGFyZ2V0TmFtZSI6dFsxXXx8PWU9PmkudmFsdWU9ZX0sbnVsbCw4LFtgdGFyZ2V0LWtpbmRgLGB0YXJnZXQtbmFtZWAsYHRhcmdldC1uYW1lc2BdKSxEKGBkaXZgLFFlLFtEKGBkaXZgLCRlLFt0WzZdfHw9RChgbGFiZWxgLHtmb3I6YGdyYW50LXByb3ZpZGVyc2AsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFByb3ZpZGVycyAoY29tbWEtc2VwYXJhdGVkLCBlbXB0eSA9IGFsbClgLC0xKSxwKGooUikse2lkOmBncmFudC1wcm92aWRlcnNgLG1vZGVsVmFsdWU6Yy52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFsyXXx8PWU9PmMudmFsdWU9ZSxwbGFjZWhvbGRlcjpgYW50aHJvcGljLCBvcGVuYWlgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksRChgZGl2YCxldCxbdFs3XXx8PUQoYGxhYmVsYCx7Zm9yOmBncmFudC1tb2RlbHNgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNb2RlbHMgKGNvbW1hLXNlcGFyYXRlZCwgZW1wdHkgPSBhbGwpYCwtMSkscChqKFIpLHtpZDpgZ3JhbnQtbW9kZWxzYCxtb2RlbFZhbHVlOmwudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbM118fD1lPT5sLnZhbHVlPWUscGxhY2Vob2xkZXI6YGFudGhyb3BpYy9jbGF1ZGUtc29ubmV0LTVgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksaihuKT09PWBncm91cGA/KHgoKSxrKGQse2tleTowfSxbRChgZGl2YCx0dCxbdFs4XXx8PUQoYGxhYmVsYCx7Zm9yOmBncmFudC1tY3BgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNQ1Agc2VydmVycyAoY29tbWEtc2VwYXJhdGVkLCBlbXB0eSA9IGFsbClgLC0xKSxwKGooUikse2lkOmBncmFudC1tY3BgLG1vZGVsVmFsdWU6dS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFs0XXx8PWU9PnUudmFsdWU9ZSxwbGFjZWhvbGRlcjpgZmV0Y2gsIHdlYXRoZXJgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksRChgZGl2YCxudCxbdFs5XXx8PUQoYGxhYmVsYCx7Zm9yOmBncmFudC1hZ2VudHNgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBBZ2VudHMgKGNvbW1hLXNlcGFyYXRlZCwgZW1wdHkgPSBhbGwpYCwtMSkscChqKFIpLHtpZDpgZ3JhbnQtYWdlbnRzYCxtb2RlbFZhbHVlOmYudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbNV18fD1lPT5mLnZhbHVlPWUscGxhY2Vob2xkZXI6YGFnZW50a2l0YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pXSw2NCkpOlMoYGAsITApXSksQy52YWx1ZT8oeCgpLGcoaihJKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bcChqKHopLG51bGwse2RlZmF1bHQ6cigoKT0+W3koTihDLnZhbHVlKSwxKV0pLF86MX0pXSksXzoxfSkpOlMoYGAsITApLEUudmFsdWU/KHgoKSxnKFYse2tleToxLGxhYmVsOmoocyksdGV4dDpFLnZhbHVlfSxudWxsLDgsW2BsYWJlbGAsYHRleHRgXSkpOih4KCksayhgcGAscnQsYFBpY2sgYSB0YXJnZXQgYW5kIGF0IGxlYXN0IG9uZSBsaXN0IHRvIGJ1aWxkIGEgc25pcHBldC5gKSldKSl9fSksYXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sb3Q9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC0zIHNtOmdyaWQtY29scy0zYH0sc3Q9W2Bmb3JgXSxjdD17a2V5OjB9LGx0PXtrZXk6MX0sdXQ9e2tleToyLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGR0PUYoe19fbmFtZTpgTGltaXRzRm9ybWAscHJvcHM6e2dyb3VwTmFtZXM6e30sdXNlck5hbWVzOnt9fSxzZXR1cChlKXtsZXQgdD1lLHt0YXJnZXRLaW5kOm4sdGFyZ2V0TmFtZTppLHRhcmdldE5hbWVzOmEsbmFtZVZhbGlkOm8sc25pcHBldExhYmVsOnN9PVhlKCgpPT50Lmdyb3VwTmFtZXMsKCk9PnQudXNlck5hbWVzKSxjPW5ldyBTZXQoW2ByZXF1ZXN0c1Blck1pbnV0ZWAsYHJlcXVlc3RzUGVyRGF5YCxgdG9rZW5zUGVyRGF5YCxgdG9rZW5zUGVyTW9udGhgXSk7ZnVuY3Rpb24gbChlLHQpe3JldHVybiBjLmhhcyhlKT9MZSh0KTpYKHQpfWxldCB1PVt7a2V5OmByZXF1ZXN0c1Blck1pbnV0ZWAsbGFiZWw6YFJlcXVlc3RzL21pbnV0ZWB9LHtrZXk6YHJlcXVlc3RzUGVyRGF5YCxsYWJlbDpgUmVxdWVzdHMvZGF5YH0se2tleTpgdG9rZW5zUGVyRGF5YCxsYWJlbDpgVG9rZW5zL2RheSAoaW4rb3V0KWB9LHtrZXk6YHRva2Vuc1Blck1vbnRoYCxsYWJlbDpgVG9rZW5zL21vbnRoIChpbitvdXQpYH0se2tleTpgY29zdFBlckRheVVTRGAsbGFiZWw6YENvc3QvZGF5IChVU0QpYH0se2tleTpgY29zdFBlck1vbnRoVVNEYCxsYWJlbDpgQ29zdC9tb250aCAoVVNEKWB9XSxmPXcoe3JlcXVlc3RzUGVyTWludXRlOmBgLHJlcXVlc3RzUGVyRGF5OmBgLHRva2Vuc1BlckRheTpgYCx0b2tlbnNQZXJNb250aDpgYCxjb3N0UGVyRGF5VVNEOmBgLGNvc3RQZXJNb250aFVTRDpgYH0pLG09VCgoKT0+dS5maWx0ZXIoKHtrZXk6ZX0pPT5mW2VdLnRyaW0oKSE9PWBgJiYhbChlLE51bWJlcihmW2VdKSkpLm1hcChlPT5lLmxhYmVsKSksaD1UKCgpPT51LmZpbHRlcigoe2tleTplfSk9PmMuaGFzKGUpJiZmW2VdLnRyaW0oKSE9PWBgJiYhbChlLE51bWJlcihmW2VdKSkpLm1hcChlPT5lLmxhYmVsKSksXz1UKCgpPT51LmZpbHRlcigoe2tleTplfSk9PiFjLmhhcyhlKSYmZltlXS50cmltKCkhPT1gYCYmIWwoZSxOdW1iZXIoZltlXSkpKS5tYXAoZT0+ZS5sYWJlbCkpLHY9VCgoKT0+e2xldCBlPXt9O2ZvcihsZXR7a2V5OnR9b2YgdSl7bGV0IG49TnVtYmVyKGZbdF0pO2ZbdF0udHJpbSgpIT09YGAmJmwodCxuKSYmbj4wJiYoZVt0XT1uKX1yZXR1cm4gZX0pLHk9VCgoKT0+IW8udmFsdWV8fG0udmFsdWUubGVuZ3RoPjB8fE9iamVjdC5rZXlzKHYudmFsdWUpLmxlbmd0aD09PTA/bnVsbDpuLnZhbHVlPT09YGdyb3VwYD9CZShpLnZhbHVlLnRyaW0oKSx2LnZhbHVlKTpIZSh2LnZhbHVlKSk7cmV0dXJuKGUsdCk9Pih4KCksayhgZGl2YCxhdCxbcChCLHsidGFyZ2V0LWtpbmQiOmoobiksInRhcmdldC1uYW1lIjpqKGkpLCJ0YXJnZXQtbmFtZXMiOmooYSksInVzZXItb3B0aW9uLWxhYmVsIjpgVXNlciAoZXhpc3RpbmcgdXNlcnMuanNvbiBlbnRyeSlgLCJvblVwZGF0ZTp0YXJnZXRLaW5kIjp0WzBdfHw9ZT0+bi52YWx1ZT1lLCJvblVwZGF0ZTp0YXJnZXROYW1lIjp0WzFdfHw9ZT0+aS52YWx1ZT1lfSxudWxsLDgsW2B0YXJnZXQta2luZGAsYHRhcmdldC1uYW1lYCxgdGFyZ2V0LW5hbWVzYF0pLEQoYGRpdmAsb3QsWyh4KCksayhkLG51bGwsQSh1LGU9PkQoYGRpdmAse2tleTplLmtleSxjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LFtEKGBsYWJlbGAse2ZvcjpgbGltaXRzLSR7ZS5rZXl9YCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxOKGUubGFiZWwpLDksc3QpLHAoaihSKSx7aWQ6YGxpbWl0cy0ke2Uua2V5fWAsbW9kZWxWYWx1ZTpmW2Uua2V5XSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dD0+ZltlLmtleV09dCx0eXBlOmBudW1iZXJgLG1pbjpgMGAsc3RlcDpqKGMpLmhhcyhlLmtleSk/YDFgOmBhbnlgLHBsYWNlaG9sZGVyOmB1bnNldGB9LG51bGwsOCxbYGlkYCxgbW9kZWxWYWx1ZWAsYG9uVXBkYXRlOm1vZGVsVmFsdWVgLGBzdGVwYF0pXSkpLDY0KSldKSxtLnZhbHVlLmxlbmd0aD8oeCgpLGcoaihJKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bcChqKHopLG51bGwse2RlZmF1bHQ6cigoKT0+W2gudmFsdWUubGVuZ3RoPyh4KCksayhgcGAsY3QsYEVudGVyIGEgbm9uLW5lZ2F0aXZlIHdob2xlIG51bWJlciBmb3I6IGArTihoLnZhbHVlLmpvaW4oYCwgYCkpK2AuYCwxKSk6UyhgYCwhMCksXy52YWx1ZS5sZW5ndGg/KHgoKSxrKGBwYCxsdCxgRW50ZXIgYSBub24tbmVnYXRpdmUgbnVtYmVyIGZvcjogYCtOKF8udmFsdWUuam9pbihgLCBgKSkrYC5gLDEpKTpTKGBgLCEwKV0pLF86MX0pXSksXzoxfSkpOlMoYGAsITApLHkudmFsdWU/KHgoKSxnKFYse2tleToxLGxhYmVsOmoocyksdGV4dDp5LnZhbHVlfSxudWxsLDgsW2BsYWJlbGAsYHRleHRgXSkpOih4KCksayhgcGAsdXQsYFBpY2sgYSB0YXJnZXQgYW5kIGF0IGxlYXN0IG9uZSBsaW1pdCB0byBidWlsZCBhIHNuaXBwZXQuYCkpXSkpfX0pLGZ0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHB0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LG10PXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtMiBzbTppdGVtcy1lbmRgfSxodD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxndD17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHBiLTEuNSB0ZXh0LXNtYH0sX3Q9e2tleToyLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHZ0PUYoe19fbmFtZTpgTW9kZWxNZXRhRm9ybWAsc2V0dXAoZSl7bGV0IHQ9aChgYCksbj1oKGBgKSxhPWgoITEpLG89VCgoKT0+dC52YWx1ZS50cmltKCkhPT1gYCkscz1UKCgpPT5OdW1iZXIobi52YWx1ZSkpLGM9VCgoKT0+bi52YWx1ZS50cmltKCkhPT1gYCksbD1UKCgpPT4hYy52YWx1ZXx8TGUocy52YWx1ZSkmJnMudmFsdWU+MCksdT1UKCgpPT4hby52YWx1ZXx8IWwudmFsdWV8fCFjLnZhbHVlJiYhYS52YWx1ZT9udWxsOkdlKHQudmFsdWUudHJpbSgpLHtjb250ZXh0VG9rZW5zOmMudmFsdWU/cy52YWx1ZTp2b2lkIDAsZnJlZTphLnZhbHVlfHx2b2lkIDB9KSk7cmV0dXJuKGUsbyk9Pih4KCksayhgZGl2YCxmdCxbRChgZGl2YCxwdCxbb1szXXx8PUQoYGxhYmVsYCx7Zm9yOmBtb2RlbG1ldGEtbW9kZWwtaWRgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNb2RlbCBpZCAocHJvdmlkZXIvbW9kZWwpYCwtMSkscChqKFIpLHtpZDpgbW9kZWxtZXRhLW1vZGVsLWlkYCxtb2RlbFZhbHVlOnQudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm9bMF18fD1lPT50LnZhbHVlPWUscGxhY2Vob2xkZXI6YGd4MTAvY3VycmVudGAsY2xhc3M6YGZvbnQtbW9ub2B9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxEKGBkaXZgLG10LFtEKGBkaXZgLGh0LFtvWzRdfHw9RChgbGFiZWxgLHtmb3I6YG1vZGVsbWV0YS1jb250ZXh0YCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQ29udGV4dCB3aW5kb3cgKHRva2VucylgLC0xKSxwKGooUikse2lkOmBtb2RlbG1ldGEtY29udGV4dGAsbW9kZWxWYWx1ZTpuLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpvWzFdfHw9ZT0+bi52YWx1ZT1lLHR5cGU6YG51bWJlcmAsbWluOmAxYCxzdGVwOmAxYCxwbGFjZWhvbGRlcjpgMTMxMDcyYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLEQoYGxhYmVsYCxndCxbcmUoRChgaW5wdXRgLHtpZDpgbW9kZWxtZXRhLWZyZWVgLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpvWzJdfHw9ZT0+YS52YWx1ZT1lLHR5cGU6YGNoZWNrYm94YCxjbGFzczpgc2l6ZS00IHJvdW5kZWQgYm9yZGVyLWlucHV0YH0sbnVsbCw1MTIpLFtbaSxhLnZhbHVlXV0pLG9bNV18fD15KGAgRnJlZSAoYmlsbGVkIGFzICQwIHJlZ2FyZGxlc3Mgb2YgYW55IHJlc29sdmVkIHByaWNlKSBgLC0xKV0pXSksYy52YWx1ZSYmIWwudmFsdWU/KHgoKSxnKGooSSkse2tleTowLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6cigoKT0+W3Aoaih6KSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5vWzZdfHw9W3koYENvbnRleHQgd2luZG93IG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgb2YgdG9rZW5zLmAsLTEpXV0pLF86MX0pXSksXzoxfSkpOlMoYGAsITApLHUudmFsdWU/KHgoKSxnKFYse2tleToxLGxhYmVsOmBQYXN0ZSBpbnRvIG1pZGRsZXdhcmUueWFtbGAsdGV4dDp1LnZhbHVlfSxudWxsLDgsW2B0ZXh0YF0pKTooeCgpLGsoYHBgLF90LGBFbnRlciBhIG1vZGVsIGlkIGFuZCBzZXQgYSBjb250ZXh0IHdpbmRvdyBhbmQvb3IgZnJlZSB0byBidWlsZCBhIHNuaXBwZXQuYCkpXSkpfX0pLHl0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LGJ0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LHh0PXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtMyBzbTpncmlkLWNvbHMtMmB9LFN0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LEN0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LHd0PXtrZXk6MixjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxUdD1GKHtfX25hbWU6YFByaWNpbmdGb3JtYCxzZXR1cChlKXtsZXQgdD1oKGBgKSxuPWgoYGApLGk9aChgYCksYT1UKCgpPT50LnZhbHVlLnRyaW0oKSE9PWBgKSxvPVQoKCk9Pk51bWJlcihuLnZhbHVlKSkscz1UKCgpPT5OdW1iZXIoaS52YWx1ZSkpLGM9VCgoKT0+bi52YWx1ZS50cmltKCkhPT1gYCYmWChvLnZhbHVlKSksbD1UKCgpPT5pLnZhbHVlLnRyaW0oKSE9PWBgJiZYKHMudmFsdWUpKSx1PVQoKCk9PntsZXQgZT1bXTtyZXR1cm4gbi52YWx1ZS50cmltKCkhPT1gYCYmIWMudmFsdWUmJmUucHVzaChgSW5wdXQgcHJpY2UvTVRvayBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5gKSxpLnZhbHVlLnRyaW0oKSE9PWBgJiYhbC52YWx1ZSYmZS5wdXNoKGBPdXRwdXQgcHJpY2UvTVRvayBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5gKSwoYy52YWx1ZSYmIWwudmFsdWV8fCFjLnZhbHVlJiZsLnZhbHVlKSYmZS5wdXNoKGBTZXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHByaWNlL01Ub2sg4oCUIGEgb25lLXNpZGVkIG92ZXJyaWRlIGhhcyBubyBiaWxsaW5nIG1lYW5pbmcuYCksZX0pLGY9VCgoKT0+IWEudmFsdWV8fCFjLnZhbHVlfHwhbC52YWx1ZT9udWxsOktlKHQudmFsdWUudHJpbSgpLHtpbnB1dFBlck06by52YWx1ZSxvdXRwdXRQZXJNOnMudmFsdWV9KSk7cmV0dXJuKGUsYSk9Pih4KCksayhgZGl2YCx5dCxbRChgZGl2YCxidCxbYVszXXx8PUQoYGxhYmVsYCx7Zm9yOmBwcmljaW5nLW1vZGVsLWlkYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTW9kZWwgaWQgKHByb3ZpZGVyL21vZGVsKWAsLTEpLHAoaihSKSx7aWQ6YHByaWNpbmctbW9kZWwtaWRgLG1vZGVsVmFsdWU6dC52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YVswXXx8PWU9PnQudmFsdWU9ZSxwbGFjZWhvbGRlcjpgb3BlbmFpL2dwdC00YCxjbGFzczpgZm9udC1tb25vYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLEQoYGRpdmAseHQsW0QoYGRpdmAsU3QsW2FbNF18fD1EKGBsYWJlbGAse2ZvcjpgcHJpY2luZy1pbnB1dGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYElucHV0IHByaWNlIC8gTVRvayAoVVNEKWAsLTEpLHAoaihSKSx7aWQ6YHByaWNpbmctaW5wdXRgLG1vZGVsVmFsdWU6bi52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YVsxXXx8PWU9Pm4udmFsdWU9ZSx0eXBlOmBudW1iZXJgLG1pbjpgMGAsc3RlcDpgYW55YCxwbGFjZWhvbGRlcjpgMC41MGB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxEKGBkaXZgLEN0LFthWzVdfHw9RChgbGFiZWxgLHtmb3I6YHByaWNpbmctb3V0cHV0YCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgT3V0cHV0IHByaWNlIC8gTVRvayAoVVNEKWAsLTEpLHAoaihSKSx7aWQ6YHByaWNpbmctb3V0cHV0YCxtb2RlbFZhbHVlOmkudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmFbMl18fD1lPT5pLnZhbHVlPWUsdHlwZTpgbnVtYmVyYCxtaW46YDBgLHN0ZXA6YGFueWAscGxhY2Vob2xkZXI6YDEuNTBgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSldKSx1LnZhbHVlLmxlbmd0aD8oeCgpLGcoaihJKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bcChqKHopLG51bGwse2RlZmF1bHQ6cigoKT0+Wyh4KCEwKSxrKGQsbnVsbCxBKHUudmFsdWUsKGUsdCk9Pih4KCksayhgcGAse2tleTp0fSxOKGUpLDEpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKTpTKGBgLCEwKSxmLnZhbHVlPyh4KCksZyhWLHtrZXk6MSxsYWJlbDpgUGFzdGUgaW50byBtaWRkbGV3YXJlLnlhbWxgLHRleHQ6Zi52YWx1ZX0sbnVsbCw4LFtgdGV4dGBdKSk6KHgoKSxrKGBwYCx3dCxgRW50ZXIgYSBtb2RlbCBpZCBhbmQgYm90aCBwcmljZXMgdG8gYnVpbGQgYSBzbmlwcGV0LmApKV0pKX19KSxFdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxEdD17Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgc206Z3JpZC1jb2xzLTJgfSxPdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxrdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxBdD17Y2xhc3M6YGZsZXggZ2FwLTJgfSxqdD17a2V5OjAsY2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sTXQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sTnQ9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC0zIHNtOmdyaWQtY29scy0yYH0sUHQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sRnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sSXQ9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtYH0sTHQ9e2tleToyLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFJ0PUYoe19fbmFtZTpgVXNlckZvcm1gLHByb3BzOntncm91cE5hbWVzOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49VCgoKT0+dC5ncm91cE5hbWVzLm1hcChlPT4oe3ZhbHVlOmUsbGFiZWw6ZX0pKSksbz1oKGBgKSxzPWgocWUpLGM9aChgYCksbD1oKGBgKSx1PWgoYGApLGQ9aChgYCksbT1oKCExKSxfPWYoKTtmdW5jdGlvbiB2KCl7dHJ5e3MudmFsdWU9SmUoKSxfLnB1c2goe2tpbmQ6YHN1Y2Nlc3NgLG1lc3NhZ2U6YEdlbmVyYXRlZCBhIG5ldyBBUEkga2V5LmB9KX1jYXRjaChlKXtfLnB1c2goe2tpbmQ6YGVycm9yYCxtZXNzYWdlOmUgaW5zdGFuY2VvZiBFcnJvcj9gQ291bGQgbm90IGdlbmVyYXRlIGFuIEFQSSBrZXk6ICR7ZS5tZXNzYWdlfWA6YENvdWxkIG5vdCBnZW5lcmF0ZSBhbiBBUEkga2V5LmB9KX19bGV0IGI9VCgoKT0+WShsLnZhbHVlKSksQz1UKCgpPT5ZKHUudmFsdWUpKSx3PVQoKCk9PlkoZC52YWx1ZSkpLEU9VCgoKT0+SWUoby52YWx1ZSkpLE89VCgoKT0+Yy52YWx1ZSE9PWBgKSxBPVQoKCk9PnMudmFsdWUudHJpbSgpIT09YGAmJnMudmFsdWUhPT1gc2stbGxtZ3ctUkVQTEFDRV9NRWApLE09VCgoKT0+UmUoQy52YWx1ZSx3LnZhbHVlKSksUD1UKCgpPT57aWYoIUUudmFsdWV8fCFPLnZhbHVlfHwhQS52YWx1ZXx8TS52YWx1ZSlyZXR1cm4gbnVsbDtsZXQgZT1iLnZhbHVlLmxlbmd0aD4wP1tjLnZhbHVlLC4uLmIudmFsdWVdOm51bGw7cmV0dXJuIFllKHtuYW1lOm8udmFsdWUudHJpbSgpLGFwaUtleTpzLnZhbHVlLnRyaW0oKSxncm91cDplP3ZvaWQgMDpjLnZhbHVlLGdyb3VwczplPz92b2lkIDAscHJvdmlkZXJzOkMudmFsdWUsbW9kZWxzOncudmFsdWUsYWRtaW46bS52YWx1ZX0pfSk7cmV0dXJuKGUsdCk9Pih4KCksayhgZGl2YCxFdCxbRChgZGl2YCxEdCxbRChgZGl2YCxPdCxbdFs3XXx8PUQoYGxhYmVsYCx7Zm9yOmB1c2VyLW5hbWVgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBOYW1lYCwtMSkscChqKFIpLHtpZDpgdXNlci1uYW1lYCxtb2RlbFZhbHVlOm8udmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbMF18fD1lPT5vLnZhbHVlPWUscGxhY2Vob2xkZXI6YGFsaWNlYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLHAodWUse2xhYmVsOmBQcmltYXJ5IGdyb3VwYCwibW9kZWwtdmFsdWUiOmMudmFsdWUsb3B0aW9uczpuLnZhbHVlLHBsYWNlaG9sZGVyOmBTZWxlY3TigKZgLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzFdfHw9ZT0+Yy52YWx1ZT1lfSxudWxsLDgsW2Btb2RlbC12YWx1ZWAsYG9wdGlvbnNgXSldKSxEKGBkaXZgLGt0LFt0WzldfHw9RChgbGFiZWxgLHtmb3I6YHVzZXItYXBpLWtleWAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFQSSBrZXlgLC0xKSxEKGBkaXZgLEF0LFtwKGooUikse2lkOmB1c2VyLWFwaS1rZXlgLG1vZGVsVmFsdWU6cy52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFsyXXx8PWU9PnMudmFsdWU9ZSxjbGFzczpgZm9udC1tb25vYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKSxwKGooYSkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6dn0se2RlZmF1bHQ6cigoKT0+Wy4uLnRbOF18fD1beShgR2VuZXJhdGVgLC0xKV1dKSxfOjF9KV0pLHMudmFsdWU9PT1qKGBzay1sbG1ndy1SRVBMQUNFX01FYCk/KHgoKSxrKGBwYCxqdCxgU3RpbGwgdGhlIHBsYWNlaG9sZGVyIOKAlCBjbGljayBHZW5lcmF0ZSBmb3IgYSByZWFsIGtleS5gKSk6UyhgYCwhMCldKSxEKGBkaXZgLE10LFt0WzEwXXx8PUQoYGxhYmVsYCx7Zm9yOmB1c2VyLWV4dHJhLWdyb3Vwc2AsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEFkZGl0aW9uYWwgZ3JvdXBzIChjb21tYS1zZXBhcmF0ZWQsIG9wdGlvbmFsKWAsLTEpLHAoaihSKSx7aWQ6YHVzZXItZXh0cmEtZ3JvdXBzYCxtb2RlbFZhbHVlOmwudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnRbM118fD1lPT5sLnZhbHVlPWUscGxhY2Vob2xkZXI6YGZyaWVuZHNgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksRChgZGl2YCxOdCxbRChgZGl2YCxQdCxbdFsxMV18fD1EKGBsYWJlbGAse2ZvcjpgdXNlci1wcm92aWRlcnNgLGNsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBQZXJzb25hbCBncmFudDogcHJvdmlkZXJzIChvcHRpb25hbClgLC0xKSxwKGooUikse2lkOmB1c2VyLXByb3ZpZGVyc2AsbW9kZWxWYWx1ZTp1LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzRdfHw9ZT0+dS52YWx1ZT1lLHBsYWNlaG9sZGVyOmBneDEwYH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pLEQoYGRpdmAsRnQsW3RbMTJdfHw9RChgbGFiZWxgLHtmb3I6YHVzZXItbW9kZWxzYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUGVyc29uYWwgZ3JhbnQ6IG1vZGVscyAob3B0aW9uYWwpYCwtMSkscChqKFIpLHtpZDpgdXNlci1tb2RlbHNgLG1vZGVsVmFsdWU6ZC52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFs1XXx8PWU9PmQudmFsdWU9ZSxwbGFjZWhvbGRlcjpgZ3gxMC9jdXJyZW50YH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pXSksRChgbGFiZWxgLEl0LFtyZShEKGBpbnB1dGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzZdfHw9ZT0+bS52YWx1ZT1lLHR5cGU6YGNoZWNrYm94YCxjbGFzczpgc2l6ZS00IHJvdW5kZWQgYm9yZGVyLWlucHV0YH0sbnVsbCw1MTIpLFtbaSxtLnZhbHVlXV0pLHRbMTNdfHw9eShgIEFkbWluIChmdWxsIGFjY2VzcyB0byAvYWRtaW4vYXBpLyopIGAsLTEpXSksTS52YWx1ZT8oeCgpLGcoaihJKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bcChqKHopLG51bGwse2RlZmF1bHQ6cigoKT0+W3koTihNLnZhbHVlKSwxKV0pLF86MX0pXSksXzoxfSkpOlMoYGAsITApLFAudmFsdWU/KHgoKSxnKFYse2tleToxLGxhYmVsOmBBZGQgYXMgYSBuZXcgbGluZSBpbiB1c2Vycy5qc29uYCx0ZXh0OlAudmFsdWV9LG51bGwsOCxbYHRleHRgXSkpOih4KCksayhgcGAsTHQsYEZpbGwgaW4gYSBuYW1lLCBncm91cCwgYW5kIGEgcmVhbCAoZ2VuZXJhdGVkKSBBUEkga2V5IHRvIGJ1aWxkIGEgc25pcHBldC5gKSldKSl9fSksenQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sQnQ9Rih7X19uYW1lOmBDaGFuZ2VIZWxwZXJgLHByb3BzOntncm91cE5hbWVzOnt9LHVzZXJOYW1lczp7fX0sc2V0dXAoZSl7bGV0IHQ9W2BsaW1pdHNgLGBncmFudGAsYHByaWNpbmdgLGBtb2RlbGAsYHVzZXJgXSxuPXtsaW1pdHM6YExpbWl0c2AsZ3JhbnQ6YEFjY2VzcyBncmFudGAscHJpY2luZzpgUHJpY2luZ2AsbW9kZWw6YE1vZGVsIG1ldGFkYXRhYCx1c2VyOmBOZXcgdXNlcmB9LGk9ZSxhPUMoKSxvPVQoKCk9PntsZXQgZT1hLnBhcmFtcy5oZWxwZXI7cmV0dXJuIHQuaW5jbHVkZXMoZT8/YGApP2U6YGxpbWl0c2B9KTtmdW5jdGlvbiBzKGUpe3R5cGVvZiBlIT1gc3RyaW5nYHx8IXQuaW5jbHVkZXMoZSl8fGEuZ29UbyhgY29uZmlnYCx7Li4uYS5wYXJhbXMsaGVscGVyOmV9KX1yZXR1cm4oZSxhKT0+KHgoKSxrKGBkaXZgLHp0LFtwKGooYWUpLHsibW9kZWwtdmFsdWUiOm8udmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnN9LHtkZWZhdWx0OnIoKCk9PltwKGooaWUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wyh4KCksayhkLG51bGwsQSh0LGU9PnAoaihvZSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9Plt5KE4obltlXSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSksNjQpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSksby52YWx1ZT09PWBsaW1pdHNgPyh4KCksZyhkdCx7a2V5OjAsImdyb3VwLW5hbWVzIjppLmdyb3VwTmFtZXMsInVzZXItbmFtZXMiOmkudXNlck5hbWVzfSxudWxsLDgsW2Bncm91cC1uYW1lc2AsYHVzZXItbmFtZXNgXSkpOm8udmFsdWU9PT1gZ3JhbnRgPyh4KCksZyhpdCx7a2V5OjEsImdyb3VwLW5hbWVzIjppLmdyb3VwTmFtZXMsInVzZXItbmFtZXMiOmkudXNlck5hbWVzfSxudWxsLDgsW2Bncm91cC1uYW1lc2AsYHVzZXItbmFtZXNgXSkpOm8udmFsdWU9PT1gcHJpY2luZ2A/KHgoKSxnKFR0LHtrZXk6Mn0pKTpvLnZhbHVlPT09YG1vZGVsYD8oeCgpLGcodnQse2tleTozfSkpOih4KCksZyhSdCx7a2V5OjQsImdyb3VwLW5hbWVzIjppLmdyb3VwTmFtZXN9LG51bGwsOCxbYGdyb3VwLW5hbWVzYF0pKV0pKX19KSxWdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxIdD1GKHtfX25hbWU6YENvbmZpZ1RyZWVgLHByb3BzOntjb25maWc6e30sd2FybmluZ3M6e319LHNldHVwKGUpe2xldCB0PWUsbj1UKCgpPT5NZShKKHQuY29uZmlnKSkpO3JldHVybih0LGkpPT4oeCgpLGsoYGRpdmAsVnQsWyh4KCEwKSxrKGQsbnVsbCxBKGUud2FybmluZ3MsKGUsdCk9Pih4KCksZyhqKEkpLHtrZXk6dCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6cigoKT0+W3AoaihzZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uaVswXXx8PVt5KGBDb25maWcgd2FybmluZ2AsLTEpXV0pLF86MX0pLHAoaih6KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KE4oZSksMSldKSxfOjJ9LDEwMjQpXSksXzoyfSwxMDI0KSkpLDEyOCkpLHAoVix7bGFiZWw6YFJlZGFjdGVkIHJ1bm5pbmcgY29uZmlnIChyZWFkLW9ubHkpYCx0ZXh0Om4udmFsdWV9LG51bGwsOCxbYHRleHRgXSldKSl9fSksVXQ9bmUoYGNvbmZpZ2Ase3N0YXRlOigpPT4oe2RhdGE6bnVsbCxsb2FkaW5nOiExLGVycm9yOmBgfSksYWN0aW9uczp7YXN5bmMgZmV0Y2hDb25maWcoKXtpZihlKCkuaXNBdXRoZW50aWNhdGVkKXt0aGlzLmxvYWRpbmc9ITA7dHJ5e3RoaXMuZGF0YT1hd2FpdCBtKGAvYWRtaW4vYXBpL2NvbmZpZ2ApLHRoaXMuZXJyb3I9YGB9Y2F0Y2goZSl7aWYoZWUoZSkpcmV0dXJuO3RoaXMuZXJyb3I9bChlKX1maW5hbGx5e3RoaXMubG9hZGluZz0hMX19fSxhc3luYyBlbnN1cmVDb25maWcoKXt0aGlzLmxvYWRpbmd8fHRoaXMuZGF0YXx8YXdhaXQgdGhpcy5mZXRjaENvbmZpZygpfX19KSxXdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxHdD1GKHtfX25hbWU6YENvbmZpZ1BhZ2VgLHNldHVwKGUpe2xldCBpPVV0KCksYT12KCksbz1fZSgpO2MoKCk9PntpLmVuc3VyZUNvbmZpZygpLG8uZW5zdXJlQ29uc3VtZXJzKCl9KTtsZXQgcz1UKCgpPT4oYS5vdmVydmlldz8uZ3JvdXBzPz9bXSkubWFwKGU9PmUubmFtZSkpLGw9VCgoKT0+KG8uZGF0YT8udXNlcnM/P1tdKS5tYXAoZT0+ZS5uYW1lKSk7cmV0dXJuKGUsYSk9Pih4KCksayhgZGl2YCxXdCxbaihpKS5lcnJvciYmIWooaSkuZGF0YT8oeCgpLGcoaih0KSx7a2V5OjB9LHtkZWZhdWx0OnIoKCk9PltwKGoodSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bcChqKE0pLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMF18fD1beShgQ29uZmlnYCwtMSldXSksXzoxfSldKSxfOjF9KSxwKGoobiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bcChnZSx7bWVzc2FnZTpqKGkpLmVycm9yLCJvbi1yZXRyeSI6aihpKS5mZXRjaENvbmZpZ30sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pXSksXzoxfSldKSxfOjF9KSk6aihpKS5sb2FkaW5nJiYhaihpKS5kYXRhPyh4KCksZyhqKHQpLHtrZXk6MX0se2RlZmF1bHQ6cigoKT0+W3AoaihuKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEuNWB9LHtkZWZhdWx0OnIoKCk9PltwKGooTykse2NsYXNzOmBoLTMgdy01NmB9KSxwKGooTykse2NsYXNzOmBoLTY0IHctZnVsbCByb3VuZGVkLW1kYH0pXSksXzoxfSldKSxfOjF9KSk6aihpKS5kYXRhPyh4KCksZyhIdCx7a2V5OjIsY29uZmlnOmooaSkuZGF0YS5jb25maWcsd2FybmluZ3M6aihpKS5kYXRhLndhcm5pbmdzfSxudWxsLDgsW2Bjb25maWdgLGB3YXJuaW5nc2BdKSk6UyhgYCwhMCkscChqKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3Aoaih1KSxudWxsLHtkZWZhdWx0OnIoKCk9PltwKGooTSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxXXx8PVt5KGBDaGFuZ2UgaGVscGVyYCwtMSldXSksXzoxfSkscChqKGxlKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzJdfHw9W3koYEJ1aWxkIGEgcGFzdGUtcmVhZHkgc25pcHBldCBmb3IgbWlkZGxld2FyZS55YW1sIG9yIHVzZXJzLmpzb24g4oCUIG5vdGhpbmcgaGVyZSB3cml0ZXMgdG8gdGhlIHJ1bm5pbmcgY29uZmlnLmAsLTEpXV0pLF86MX0pXSksXzoxfSkscChqKG4pLG51bGwse2RlZmF1bHQ6cigoKT0+W3AoQnQseyJncm91cC1uYW1lcyI6cy52YWx1ZSwidXNlci1uYW1lcyI6bC52YWx1ZX0sbnVsbCw4LFtgZ3JvdXAtbmFtZXNgLGB1c2VyLW5hbWVzYF0pXSksXzoxfSldKSxfOjF9KV0pKX19KTtleHBvcnR7R3QgYXMgZGVmYXVsdH07", ), }, - "ConsumersPage-i8sZV9MX.js": { + "ConsumersPage-B_49_UCI.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEUgYXMgbixGciBhcyByLEp0IGFzIGksSyBhcyBhLE9uIGFzIG8sUXIgYXMgcyxTIGFzIGMsU2kgYXMgbCxUIGFzIHUsVyBhcyBkLFggYXMgZixYbiBhcyBwLF9uIGFzIG0sYW4gYXMgaCxjbiBhcyBnLGNyIGFzIF8sZXIgYXMgZWUsZyBhcyB0ZSxnaSBhcyB2LGhuIGFzIHksaHQgYXMgYixpaSBhcyB4LGluIGFzIFMsbW4gYXMgQyxtdCBhcyB3LG4gYXMgbmUsbnIgYXMgVCxvaSBhcyBFLG9uIGFzIEQsc24gYXMgTyx1ciBhcyByZSx3IGFzIGsseGkgYXMgQSx5aSBhcyBqfWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e2EgYXMgaWUsYyBhcyBhZSxpIGFzIE0sbiBhcyBOLG8gYXMgUCxyIGFzIEYscyBhcyBJLHQgYXMgTH1mcm9tIi4vc2VhcmNoLWV4cGFuZC1DSGQ0RldaWi5qcyI7aW1wb3J0e24gYXMgb2UsciBhcyBSLHQgYXMgen1mcm9tIi4vdGFicy1ZbGhuSHBLLS5qcyI7aW1wb3J0e2MgYXMgQixnIGFzIHNlLGggYXMgY2UsbSBhcyBWLHQgYXMgSH1mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO2ltcG9ydHt0IGFzIFV9ZnJvbSIuL0Vycm9yU3RhdGUteW02ZVNsajIuanMiO2ltcG9ydHt0IGFzIGxlfWZyb20iLi9jb25zdW1lcnMtQ1F0RUo5SzcuanMiO2ltcG9ydHtfIGFzIFcsYyBhcyBHLGYgYXMgSyxvIGFzIHEsciBhcyB1ZSx0IGFzIEosdSBhcyBZLHYgYXMgZGV9ZnJvbSIuL2JhZGdlLURVaUJURHlBLmpzIjtpbXBvcnR7YSBhcyBmZSxjIGFzIFgsZCBhcyBwZSxmIGFzIG1lLGkgYXMgaGUsbCBhcyBnZSxuIGFzIF9lLG8gYXMgdmUsciBhcyB5ZSxzIGFzIGJlLHQgYXMgeGUsdSBhcyBTZX1mcm9tIi4vRGF0YVRhYmxlLUNReFJWRFNZLmpzIjtpbXBvcnR7dCBhcyBafWZyb20iLi9Db21wYWN0TnVtYmVyLXByOGNKNGN2LmpzIjtpbXBvcnR7YSBhcyBDZSxjIGFzIHdlLGkgYXMgUSxuIGFzIFRlLG8gYXMgRWUsciBhcyBEZSxzIGFzIE9lLHQgYXMga2V9ZnJvbSIuL1RyeUxvbmdlclJhbmdlQnV0dG9uLUNqa1VuYU96LmpzIjtpbXBvcnR7YSBhcyBBZSxpIGFzIGplLG8gYXMgTWUsciBhcyBOZSxzIGFzIFBlfWZyb20iLi9idXJuZG93bi1CejQ0eDctZC5qcyI7aW1wb3J0e24gYXMgRmUsdCBhcyBJZX1mcm9tIi4vdXNlU2VhcmNoUXVlcnktYlFaUDRUc1ouanMiO2ltcG9ydHt0IGFzIExlfWZyb20iLi9Ta2VsZXRvbkxpc3QtQ21xejNoZmEuanMiO2ltcG9ydHt0IGFzIFJlfWZyb20iLi9FbnRpdHlMaW5rLURnOTNLR1ZULmpzIjtpbXBvcnR7dCBhcyB6ZX1mcm9tIi4vQ2xhbXBlZFJhbmdlTm90aWNlLUQyd2FsblhmLmpzIjtpbXBvcnR7biBhcyBCZSx0IGFzIFZlfWZyb20iLi9UaW1lU2VyaWVzQ2hhcnQtQkZjVDZ3b0EuanMiO2ltcG9ydHt0IGFzIEhlfWZyb20iLi9ldmVudHMtUFV4aEVlZ2EuanMiO2Z1bmN0aW9uIFVlKGUsdCl7dC52YWx1ZT10eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQudmFsdWUpOmV9ZnVuY3Rpb24gV2UoZSx0KXtpZighZS5hbGxvd2VkUHJvdmlkZXJzLmluY2x1ZGVzKHQpKXJldHVybnthbGxvd2VkOiExfTtsZXQgbj1lLm1vZGVsQWNjZXNzW3RdO2lmKCFuKXJldHVybnthbGxvd2VkOiEwfTtsZXQgcj1uLmFsbG93ZWQ9PT0wJiZuLnRvdGFsPjB8fHZvaWQgMDtyZXR1cm57YWxsb3dlZDohMCxkZXRhaWw6YCR7bi5hbGxvd2VkfS8ke24udG90YWx9IG1vZGVsc2AsemVybzpyfX1mdW5jdGlvbiBHZShlLHQpe3JldHVybiB0LmFjY2Vzcz09PXZvaWQgMHx8dC5hY2Nlc3M9PT1udWxsP3thbGxvd2VkOiEwfTp7YWxsb3dlZDp0LmFjY2Vzcy5pbmNsdWRlcyhlLm5hbWUpfX12YXIgS2U9W2Btb2RlbHNgLGBtY3BgLGBhZ2VudHNgXSxxZT17bW9kZWxzOmBNb2RlbHNgLG1jcDpgTUNQIHNlcnZlcnNgLGFnZW50czpgQWdlbnRzYH07ZnVuY3Rpb24gSmUoZSl7cmV0dXJuIEtlLmluY2x1ZGVzKGU/P2BgKT9lOmBtb2RlbHNgfWZ1bmN0aW9uIFllKGUsdCxuLHIpe3JldHVybiBlLm1hcChlPT4oe2dyb3VwOmUubmFtZSxwcm92aWRlcnM6T2JqZWN0LmZyb21FbnRyaWVzKHQubWFwKHQ9Plt0LFdlKGUsdCldKSksbWNwU2VydmVyczpPYmplY3QuZnJvbUVudHJpZXMobi5tYXAodD0+W3QubmFtZSxHZShlLHQpXSkpLGFnZW50czpPYmplY3QuZnJvbUVudHJpZXMoci5tYXAodD0+W3QubmFtZSxHZShlLHQpXSkpfSkpfWZ1bmN0aW9uIFhlKGUsdCxuKXtyZXR1cm4gZT90PT09MD9gZW1wdHlgOmByZWFkeWA6bj9gZXJyb3JgOmBsb2FkaW5nYH12YXIgWmU9e2tleTowLCJhcmlhLWhpZGRlbiI6YHRydWVgLGNsYXNzOmBtbC0xIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sUWU9e2NsYXNzOmBzci1vbmx5YH0sJGU9bSh7X19uYW1lOmBBY2Nlc3NNYXRyaXhgLHByb3BzOntraW5kOnt9fSxlbWl0czpbYHVwZGF0ZTpraW5kYF0sc2V0dXAoZSx7ZW1pdDphfSl7bGV0IG89ZSxzPWEsZD1sZSgpLG09dGUoKSxlZT1uZSgpO3AoKCk9PntkLmVuc3VyZUNvbnN1bWVycygpfSk7bGV0IHg9UygoKT0+KG0ub3ZlcnZpZXc/LnByb3ZpZGVycz8/W10pLm1hcChlPT5lLm5hbWUpKSxFPVMoKCk9Pm0udGFyZ2V0cz8ubWNwU2VydmVycz8/W10pLEE9UygoKT0+bS50YXJnZXRzPy5hZ2VudHM/P1tdKSxpZT17bW9kZWxzOmBwcm92aWRlcnNgLG1jcDpgbWNwU2VydmVyc2AsYWdlbnRzOmBhZ2VudHNgfSxhZT17bW9kZWxzOmBXaGljaCBncm91cHMgY2FuIHJlYWNoIHdoaWNoIHByb3ZpZGVycywgYW5kIGhvdyBtYW55IG9mIGVhY2ggcHJvdmlkZXIncyBtb2RlbHMuYCxtY3A6YFdoaWNoIGdyb3VwcyBjYW4gcmVhY2ggd2hpY2ggTUNQIHNlcnZlcnMuYCxhZ2VudHM6YFdoaWNoIGdyb3VwcyBjYW4gcmVhY2ggd2hpY2ggYWdlbnRzLmB9LE09e21vZGVsczpgTm8gcHJvdmlkZXJzIGNvbmZpZ3VyZWQuYCxtY3A6YE5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQuYCxhZ2VudHM6YE5vIGFnZW50cyBjb25maWd1cmVkLmB9LE49UygoKT0+e2xldCBlPWllW28ua2luZF07cmV0dXJuIG8ua2luZD09PWBtb2RlbHNgP3gudmFsdWUubWFwKHQ9Pih7a2V5OnQsbGFiZWw6dCxzZWN0aW9uOmV9KSk6KG8ua2luZD09PWBtY3BgP0UudmFsdWU6QS52YWx1ZSkubWFwKHQ9Pih7a2V5OnQubmFtZSxsYWJlbDp0Lm5hbWUsc2VjdGlvbjplfSkpfSksUD1TKCgpPT5ZZShkLmRhdGE/Lmdyb3Vwcz8/W10seC52YWx1ZSxFLnZhbHVlLEEudmFsdWUpKSxGPVMoKCk9Pm8ua2luZD09PWBtb2RlbHNgP20ub3ZlcnZpZXchPT1udWxsOm0udGFyZ2V0cyE9PW51bGwpLEk9UygoKT0+WGUoRi52YWx1ZSxOLnZhbHVlLmxlbmd0aCxtLmVycm9yKSksTD1TKCgpPT5XKHtsb2FkaW5nOmQubG9hZGluZyxoYXNEYXRhOmQuZGF0YSE9PW51bGwsZXJyb3I6ZC5lcnJvcn0pKSxzZT1TKCgpPT5MLnZhbHVlPT09YHJlYWR5YCYmUC52YWx1ZS5sZW5ndGg9PT0wKSxjZT17YWxsb3dlZDohMX07ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlW3Quc2VjdGlvbl1bdC5rZXldPz9jZX1mdW5jdGlvbiBIKGUpe3R5cGVvZiBlIT1gc3RyaW5nYHx8IUtlLmluY2x1ZGVzKGUpfHxzKGB1cGRhdGU6a2luZGAsZSl9ZnVuY3Rpb24gRyhlKXtyZXR1cm4gZS5hbGxvd2VkP2UuemVybz9gQWxsb3dlZCwgYnV0ICR7ZS5kZXRhaWx9IHJlYWNoYWJsZSDigJQgdGhlIG1vZGVsIGdyYW50IG1hdGNoZXMgbm9uZSBvZiB0aGlzIHByb3ZpZGVyJ3MgbW9kZWxzYDplLmRldGFpbD9gQWxsb3dlZCwgJHtlLmRldGFpbH1gOmBBbGxvd2VkYDpgTm90IGFsbG93ZWRgfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUuYWxsb3dlZD9lLnplcm8/dzpmOmJ9ZnVuY3Rpb24gcShlKXtyZXR1cm4gZS5hbGxvd2VkP2UuemVybz9gdGV4dC1zdGF0dXMtd2FybmA6YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmQvNDBgfXJldHVybihlLGEpPT57bGV0IHM9cmUoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBUKCksRCh2KHUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoYyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxXXx8PVtDKGBBY2Nlc3MgbWF0cml4YCwtMSldXSksXzoxfSkseSh2KEIpLG51bGwse2RlZmF1bHQ6cigoKT0+W0MobChhZVtvLmtpbmRdKSwxKV0pLF86MX0pLHkodihSKSx7Im1vZGVsLXZhbHVlIjpvLmtpbmQsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOkh9LHtkZWZhdWx0OnIoKCk9Plt5KHYob2UpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhUKCEwKSxnKGksbnVsbCxfKHYoS2UpLGU9PihUKCksRCh2KHopLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKHYocWUpW2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSksXzoxfSksTC52YWx1ZT09PWBlcnJvcmA/KFQoKSxEKHYoaykse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5beShVLHttZXNzYWdlOnYoZCkuZXJyb3IsIm9uLXJldHJ5Ijp2KGQpLmZldGNoQ29uc3VtZXJzfSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSldKSxfOjF9KSk6TC52YWx1ZT09PWBza2VsZXRvbmA/KFQoKSxEKHYoaykse2tleToxfSx7ZGVmYXVsdDpyKCgpPT5beSh2ZSx7cm93czo0LGNvbHM6NH0pXSksXzoxfSkpOnNlLnZhbHVlPyhUKCksRCh2KGspLHtrZXk6Mn0se2RlZmF1bHQ6cigoKT0+W3koZGUse3RpdGxlOmBObyBncm91cHMgY29uZmlndXJlZC5gLGRlc2NyaXB0aW9uOmBHcmFudCBhIGdyb3VwIGFjY2VzcyBmcm9tIHRoZSBDb25maWcgcGFnZSdzIGNoYW5nZSBoZWxwZXIuYH0se2RlZmF1bHQ6cigoKT0+W3kodihuKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsb25DbGljazphWzBdfHw9ZT0+dihlZSkuZ29UbyhgY29uZmlnYCx7aGVscGVyOmBncmFudGB9KX0se2RlZmF1bHQ6cigoKT0+Wy4uLmFbMl18fD1bQyhgT3BlbiBjaGFuZ2UgaGVscGVyYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKTpJLnZhbHVlPT09YGVycm9yYD8oVCgpLEQodihrKSx7a2V5OjN9LHtkZWZhdWx0OnIoKCk9Plt5KFUse21lc3NhZ2U6dihtKS5lcnJvcn0sbnVsbCw4LFtgbWVzc2FnZWBdKV0pLF86MX0pKTpJLnZhbHVlPT09YGxvYWRpbmdgPyhUKCksRCh2KGspLHtrZXk6NH0se2RlZmF1bHQ6cigoKT0+W3kodmUse3Jvd3M6UC52YWx1ZS5sZW5ndGgsY29sczo0fSxudWxsLDgsW2Byb3dzYF0pXSksXzoxfSkpOkkudmFsdWU9PT1gZW1wdHlgPyhUKCksRCh2KGspLHtrZXk6NX0se2RlZmF1bHQ6cigoKT0+W3koZGUse3RpdGxlOk1bby5raW5kXX0sbnVsbCw4LFtgdGl0bGVgXSldKSxfOjF9KSk6KFQoKSxEKHYoaykse2tleTo2LGNsYXNzOmBvdmVyZmxvdy14LWF1dG9gfSx7ZGVmYXVsdDpyKCgpPT5beSh2KG1lKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoYmUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihnZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KFgpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbM118fD1bQyhgR3JvdXBgLC0xKV1dKSxfOjF9KSwoVCghMCksZyhpLG51bGwsXyhOLnZhbHVlLGU9PihUKCksRCh2KFgpLHtrZXk6ZS5rZXl9LHtkZWZhdWx0OnIoKCk9PltDKGwoZS5sYWJlbCksMSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pLHkodihwZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bKFQoITApLGcoaSxudWxsLF8oUC52YWx1ZSxlPT4oVCgpLEQodihnZSkse2tleTplLmdyb3VwfSx7ZGVmYXVsdDpyKCgpPT5beSh2KFgpLHtzY29wZTpgcm93YCxjbGFzczpgZm9udC1tZWRpdW1gfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKGUuZ3JvdXApLDEpXSksXzoyfSwxMDI0KSwoVCghMCksZyhpLG51bGwsXyhOLnZhbHVlLHQ9PihUKCksRCh2KFNlKSx7a2V5OnQua2V5LGNsYXNzOmB0ZXh0LWNlbnRlcmAsdGl0bGU6VihlLHQpLmRldGFpbH0se2RlZmF1bHQ6cigoKT0+W3kocyx7aWNvbjpLKFYoZSx0KSksY2xhc3M6aihbcShWKGUsdCkpLGBzaXplLTMuNWBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLFYoZSx0KS5kZXRhaWw/KFQoKSxnKGBzcGFuYCxaZSxsKFYoZSx0KS5kZXRhaWwpLDEpKTpPKGBgLCEwKSxoKGBzcGFuYCxRZSxsKEcoVihlLHQpKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSkpLDEyOCkpXSksXzoyfSwxMDI0KSkpLDEyOCkpXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKV0pLF86MX0pfX19KSxldD1bYGFyaWEtbGFiZWxgLGBhcmlhLXZhbHVlbm93YCxgYXJpYS12YWx1ZXRleHRgLGB0aXRsZWBdLHR0PW0oe19fbmFtZTpgVXNhZ2VCYXJgLHByb3BzOntyYXRpbzp7fSxsYWJlbDp7fSx2YWx1ZVRleHQ6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1TKCgpPT53ZSh0LnJhdGlvKSkscj1TKCgpPT5NYXRoLm1pbigxMDAsTWF0aC5tYXgoMCx0LnJhdGlvKjEwMCkpKSxpPVMoKCk9Pk1hdGgucm91bmQoci52YWx1ZSkpLGE9e25vcm1hbDpgYmctcHJpbWFyeWAsYW1iZXI6YGJnLWJhci1hbWJlcmAscmVkOmBiZy1kZXN0cnVjdGl2ZWB9O3JldHVybihvLHMpPT4oVCgpLGcoYHNwYW5gLHtyb2xlOmBtZXRlcmAsImFyaWEtbGFiZWwiOmUubGFiZWwsImFyaWEtdmFsdWVub3ciOmkudmFsdWUsImFyaWEtdmFsdWVtaW4iOmAwYCwiYXJpYS12YWx1ZW1heCI6YDEwMGAsImFyaWEtdmFsdWV0ZXh0IjplLnZhbHVlVGV4dCx0aXRsZTplLnZhbHVlVGV4dCxjbGFzczpqKHYoZCkoYHJlbGF0aXZlIGlubGluZS1ibG9jayBoLTEuNSB3LTE0IHNocmluay0wIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctbXV0ZWQgYWxpZ24tbWlkZGxlYCx0LmNsYXNzKSl9LFtoKGBzcGFuYCx7Y2xhc3M6aihbYGFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgcm91bmRlZC1mdWxsYCxhW24udmFsdWVdXSksc3R5bGU6QSh7d2lkdGg6YCR7ci52YWx1ZX0lYH0pfSxudWxsLDYpXSwxMCxldCkpfX0pLG50PTYwLHJ0PTM2MDAsaXQ9ODY0MDAsYXQ9NjAsb3Q9MzA7ZnVuY3Rpb24gc3QoZSx0PW5ldyBEYXRlKXtpZighZSlyZXR1cm5gbmV2ZXJgO2xldCBuPU1hdGguZmxvb3IodC5nZXRUaW1lKCkvMWUzKSxyPU1hdGgubWF4KDAsbi1lKTtpZihyPG50KXJldHVybmBqdXN0IG5vd2A7aWYocjxydClyZXR1cm5gJHtNYXRoLmZsb29yKHIvbnQpfW0gYWdvYDtpZihyPGl0KXJldHVybmAke01hdGguZmxvb3Ioci9ydCl9aCBhZ29gO2xldCBpPU1hdGguZmxvb3Ioci9pdCk7cmV0dXJuIGk8YXQ/YCR7aX1kIGFnb2A6YCR7TWF0aC5mbG9vcihpL290KX1tbyBhZ29gfWZ1bmN0aW9uICQoZSx0LG4scj1TdHJpbmcsaT0hMCxhKXtyZXR1cm57aWQ6ZSxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sbWV0YTp7YWxpZ246YHJpZ2h0YH0sY2VsbDooe3JvdzplfSk9PntpZihlLm9yaWdpbmFsLnN0b3JlRG93bilyZXR1cm5gP2A7bGV0IHM9bihlLm9yaWdpbmFsKSxjPWk/byhaLHt2YWx1ZTpzfSk6cihzKTtpZighYSlyZXR1cm4gYztsZXQgbD1PZShlLm9yaWdpbmFsKS5maW5kKGU9PmUuaWQ9PT1hKTtpZighbClyZXR1cm4gYztsZXQgdT1pP2Ake0cobC51c2VkKX0gLyAke0cobC5saW1pdCl9YDpgJHtyKGwudXNlZCl9IC8gJHtyKGwubGltaXQpfWA7cmV0dXJuIG8oYHNwYW5gLHtjbGFzczpgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xLjVgfSxbYyxvKHR0LHtyYXRpbzpsLnJhdGlvLGxhYmVsOkNlW2FdPz90LHZhbHVlVGV4dDp1fSldKX19fWZ1bmN0aW9uIGN0KCl7cmV0dXJue2lkOmByZWpEYXlgLGhlYWRlcjpgcmVqZWN0ZWQvZGF5YCxhY2Nlc3NvckZuOmU9PmUucmVqZWN0aW9uc1BlckRheSxtZXRhOnthbGlnbjpgcmlnaHRgfSxjZWxsOih7cm93OmV9KT0+e2lmKGUub3JpZ2luYWwuc3RvcmVEb3duKXJldHVybmA/YDtsZXQgdD1lLm9yaWdpbmFsLnJlamVjdGlvbnNQZXJEYXk7cmV0dXJuIG8oWix7dmFsdWU6dCxjbGFzczp0PjA/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMH0pfX19ZnVuY3Rpb24gbHQoZSl7cmV0dXJue2lkOmBjb3N0TW9udGhQcm9qYCxoZWFkZXI6YGNvc3QvbW9udGggKHByb2ouKWAsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjp0PT5RKHQuY29zdFBlck1vbnRoTWljcm9Vc2QsZSk/PzAsY2VsbDooe3Jvdzp0fSk9PntpZih0Lm9yaWdpbmFsLnN0b3JlRG93bilyZXR1cm5gP2A7bGV0IG49USh0Lm9yaWdpbmFsLmNvc3RQZXJNb250aE1pY3JvVXNkLGUpO2lmKG49PT1udWxsKXJldHVybiBvKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBub3QgZW5vdWdoIGRhdGEgeWV0YCk7bGV0IHI9VGUobix0Lm9yaWdpbmFsLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEKTtyZXR1cm4gbyhgc3BhbmAse2NsYXNzOnIud2lsbEV4Y2VlZD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwLHRpdGxlOnIud2lsbEV4Y2VlZD9gUHJvamVjdGVkIHRvIGV4Y2VlZCB0aGUgY29uZmlndXJlZCBjb3N0L21vbnRoIGxpbWl0YDp2b2lkIDB9LHEobikpfX19ZnVuY3Rpb24gdXQoZSl7cmV0dXJue2lkOmBzb3VyY2VgLGhlYWRlcjpgU291cmNlYCxhY2Nlc3NvckZuOnQ9PmUodCk/P2BgLGNlbGw6KHtyb3c6dH0pPT5vKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGUodC5vcmlnaW5hbCk/P2DigJRgKX19ZnVuY3Rpb24gZHQoZSl7cmV0dXJue2lkOmBsYXN0U2VlbmAsaGVhZGVyOmBMYXN0IHNlZW5gLGFjY2Vzc29yRm46ZT0+ZS5sYXN0U2Vlbj8/MCxjZWxsOih7cm93OnR9KT0+c3QodC5vcmlnaW5hbC5sYXN0U2VlbixlKX19ZnVuY3Rpb24gZnQoZSx0LG4scj1uZXcgRGF0ZSxpKXtsZXQgYT1EZShyKSxzPVt7aWQ6YGlkYCxoZWFkZXI6ZSxhY2Nlc3NvckZuOmU9PmUuaWQsY2VsbDooe3JvdzplfSk9Pm8oUmUse2NsYXNzOmBmb250LW1lZGl1bWAsbGFiZWw6ZS5vcmlnaW5hbC5pZCxraW5kOmB1c2VyYCxpZDplLm9yaWdpbmFsLmlkfSl9LHtpZDpgc2Vjb25kYXJ5YCxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sc29ydGluZ0ZuOmBhbHBoYW51bWVyaWNgLGNlbGw6KHtyb3c6ZX0pPT5vKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LG4oZS5vcmlnaW5hbCkpfV07cmV0dXJuIGkmJnMucHVzaCh1dChpKSkscy5wdXNoKHtpZDpgbGltaXRzYCxoZWFkZXI6YExpbWl0c2AsYWNjZXNzb3JGbjplPT5ZKGUubGltaXRzKSxjZWxsOih7cm93OmV9KT0+byhgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxZKGUub3JpZ2luYWwubGltaXRzKSl9LCQoYHJlcU1pbmAsYHJlcS9taW5gLGU9PmUucmVxdWVzdHNQZXJNaW51dGUsU3RyaW5nLCEwLGByZXFNaW5gKSwkKGByZXFEYXlgLGByZXEvZGF5YCxlPT5lLnJlcXVlc3RzUGVyRGF5LFN0cmluZywhMCxgcmVxRGF5YCksY3QoKSwkKGB0b2tJbkRheWAsYHRva0luL2RheWAsZT0+ZS50b2tlbnNJblBlckRheSxTdHJpbmcsITAsYHRva0RheWApLCQoYHRva091dERheWAsYHRva091dC9kYXlgLGU9PmUudG9rZW5zT3V0UGVyRGF5LFN0cmluZywhMCxgdG9rRGF5YCksJChgdG9rSW5Nb250aGAsYHRva0luL21vbnRoYCxlPT5lLnRva2Vuc0luUGVyTW9udGgsU3RyaW5nLCEwLGB0b2tNb250aGApLCQoYHRva091dE1vbnRoYCxgdG9rT3V0L21vbnRoYCxlPT5lLnRva2Vuc091dFBlck1vbnRoLFN0cmluZywhMCxgdG9rTW9udGhgKSwkKGBjb3N0RGF5YCxgY29zdC9kYXlgLGU9PmUuY29zdFBlckRheU1pY3JvVXNkLHEsITEsYGNvc3REYXlgKSwkKGBjb3N0TW9udGhgLGBjb3N0L21vbnRoYCxlPT5lLmNvc3RQZXJNb250aE1pY3JvVXNkLHEsITEsYGNvc3RNb250aGApLGx0KGEpLGR0KHIpKSxzfXZhciBwdD1tKHtfX25hbWU6YFVzYWdlVGFibGVgLHByb3BzOntpZExhYmVsOnt9LGVudHJpZXM6e30sc2Vjb25kYXJ5Q29sdW1uTGFiZWw6e30sc2Vjb25kYXJ5VmFsdWU6e3R5cGU6RnVuY3Rpb259LGVtcHR5TWVzc2FnZTp7fSxub3c6e30sc29ydGluZzp7fSxzb3VyY2VWYWx1ZTp7dHlwZTpGdW5jdGlvbn19LGVtaXRzOltgdXBkYXRlOnNvcnRpbmdgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9dCxpPVMoKCk9PmZ0KG4uaWRMYWJlbCxuLnNlY29uZGFyeUNvbHVtbkxhYmVsLG4uc2Vjb25kYXJ5VmFsdWUsbi5ub3csbi5zb3VyY2VWYWx1ZSkpO3JldHVybih0LG4pPT4oVCgpLEQoeGUse2NvbHVtbnM6aS52YWx1ZSxkYXRhOmUuZW50cmllcywiZW1wdHktbWVzc2FnZSI6ZS5lbXB0eU1lc3NhZ2UsInJvdy1jbGFzcyI6ZT0+ZS5zdG9yZURvd24/YGJnLWRlc3RydWN0aXZlLzEwYDp2b2lkIDAsc29ydGluZzplLnNvcnRpbmcsIm9uVXBkYXRlOnNvcnRpbmciOm5bMF18fD1lPT5yKGB1cGRhdGU6c29ydGluZ2AsZSl9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWAsYHJvdy1jbGFzc2AsYHNvcnRpbmdgXSkpfX0pLG10PXt1c2VyczpgR3JvdXBgLGdyb3VwczpgTWVtYmVyc2B9O2Z1bmN0aW9uIGh0KGUpe3JldHVybihlL0VlKS50b0ZpeGVkKDYpfWZ1bmN0aW9uIGd0KGUsdCxuLHI9bmV3IERhdGUpe2xldCBpPURlKHIpLGE9W2BOYW1lYCxtdFt0XSxgTGltaXRzYCxgcmVxL21pbmAsYHJlcS9kYXlgLGByZWplY3RlZC9kYXlgLGB0b2tJbi9kYXlgLGB0b2tPdXQvZGF5YCxgdG9rSW4vbW9udGhgLGB0b2tPdXQvbW9udGhgLGBjb3N0L2RheSAoVVNEKWAsYGNvc3QvbW9udGggKFVTRClgLGBjb3N0L21vbnRoIChwcm9qLiwgVVNEKWAsYGxhc3Qgc2VlbiAodW5peCBzZWNvbmRzKWBdLG89ZS5tYXAoZT0+e2xldCB0PWUuc3RvcmVEb3duLHI9dD9udWxsOlEoZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxpKTtyZXR1cm5bZS5pZCxuKGUpLFkoZS5saW1pdHMpLHQ/YD9gOmUucmVxdWVzdHNQZXJNaW51dGUsdD9gP2A6ZS5yZXF1ZXN0c1BlckRheSx0P2A/YDplLnJlamVjdGlvbnNQZXJEYXksdD9gP2A6ZS50b2tlbnNJblBlckRheSx0P2A/YDplLnRva2Vuc091dFBlckRheSx0P2A/YDplLnRva2Vuc0luUGVyTW9udGgsdD9gP2A6ZS50b2tlbnNPdXRQZXJNb250aCx0P2A/YDpodChlLmNvc3RQZXJEYXlNaWNyb1VzZCksdD9gP2A6aHQoZS5jb3N0UGVyTW9udGhNaWNyb1VzZCksdD9gP2A6cj09PW51bGw/YG5vdCBlbm91Z2ggZGF0YSB5ZXRgOmh0KHIpLGUubGFzdFNlZW4/PzBdfSk7cmV0dXJuIGplKGEsbyl9ZnVuY3Rpb24gX3QoZSx0KXtyZXR1cm4gZS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIHZ0KGUsdCl7cmV0dXJuIGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX1mdW5jdGlvbiB5dChlLHQpe3JldHVybiB0LmZpbHRlcih0PT4odC5ncm91cHM/P1t0Lmdyb3VwTmFtZV0pLmluY2x1ZGVzKGUuaWQpKX1mdW5jdGlvbiBidChlLHQsbil7cmV0dXJuIHl0KGUsdCkuZmlsdGVyKGU9Pl90KGUsbikpfWZ1bmN0aW9uIHh0KGUsdCxuKXtyZXR1cm4gdnQoZSxuKXx8YnQoZSx0LG4pLmxlbmd0aD4wfXZhciBTdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxDdD17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSx3dD17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxUdD17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxFdD17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxEdD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0sT3Q9e2tleTowLGNsYXNzOmBtYi0zIGZsZXggZmxleC13cmFwIGdhcC14LTQgZ2FwLXktMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGt0PXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxBdD17Y2xhc3M6YHNocmluay0wIHB5LTIuNSBmb250LW1lZGl1bWB9LGp0PXtjbGFzczpgc3Itb25seWB9LE10PXtjbGFzczpgZmxleCBmbGV4LTEgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC00IGdhcC15LTEgcHItMiB0ZXh0LWxlZnRgfSxOdD17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LFB0PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sRnQ9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxJdD17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sTHQ9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sUnQ9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx6dD17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxCdD17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFZ0PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LEh0PXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sVXQ9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sV3Q9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxHdD17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sS3Q9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxxdD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LEp0PXtjbGFzczpgdGFidWxhci1udW1zYH0sWXQ9e2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxYdD17Y2xhc3M6YHRhYnVsYXItbnVtc2B9LFp0PXtjbGFzczpgdGFidWxhci1udW1zYH0sUXQ9W2B0aXRsZWBdLCR0PXtrZXk6MCxjbGFzczpgbWItMyBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtNCBnYXAteS0xLjVgfSxlbj17a2V5OjMsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx0bj17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0sbm49YEdsb2IgcGF0dGVybiDigJQgbWF0Y2hlcyBsaWtlIGEgc2hlbGwgd2lsZGNhcmQgKCosID8sIFsuLi5dKWAscm49bSh7X19uYW1lOmBDb25zdW1lckRpcmVjdG9yeWAsc2V0dXAoYSl7bGV0IG89dGUoKSxkPWxlKCksZj1uZSgpLG09UygoKT0+by51c2FnZSksYj1TKCgpPT5XKHtsb2FkaW5nOiFvLmxhc3RVcGRhdGVkLGhhc0RhdGE6bS52YWx1ZSE9PW51bGwsZXJyb3I6by5lcnJvcn0pKTtwKCgpPT57ZC5lbnN1cmVDb25zdW1lcnMoKX0pO2xldHtub3c6dyxzdGFydDpyZSxzdG9wOkF9PUFlKCk7cChyZSksZWUoQSk7bGV0IG9lPVMoKCk9PntsZXQgZT17fTtmb3IobGV0IHQgb2Ygby5vdmVydmlldz8uZ3JvdXBzPz9bXSllW3QubmFtZV09dC5tZW1iZXJDb3VudDtyZXR1cm4gZX0pO2Z1bmN0aW9uIFIoZSl7cmV0dXJuKGUuZ3JvdXBzPz8oZS5ncm91cE5hbWU9PT12b2lkIDA/W106W2UuZ3JvdXBOYW1lXSkpLmpvaW4oYCwgYCl9ZnVuY3Rpb24geihlKXtsZXQgdD1vZS52YWx1ZVtlLmlkXTtyZXR1cm4gdD09PXZvaWQgMD9gYDpTdHJpbmcodCl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGQuZGF0YT8udXNlcnMuZmluZCh0PT50Lm5hbWU9PT1lLmlkKT8uc291cmNlfWxldCBjZT1TKHtnZXQ6KCk9PmYucGFyYW1zLnE/P2BgLHNldDplPT5mLmdvVG8oYGNvbnN1bWVyc2Asey4uLmYucGFyYW1zLHE6ZX0pfSkse3F1ZXJ5OlYsbm9ybWFsaXplZDpILGhhc1F1ZXJ5Okt9PUllKGNlKSx1ZT1TKCgpPT57bGV0IGU9bS52YWx1ZT8uZ3JvdXBzPz9bXTtpZighSy52YWx1ZSlyZXR1cm4gZTtsZXQgdD1tLnZhbHVlPy51c2Vycz8/W107cmV0dXJuIGUuZmlsdGVyKGU9Pnh0KGUsdCxILnZhbHVlKSl9KSxYPVMoKCk9PksudmFsdWU/dWUudmFsdWUuZmlsdGVyKGU9PiF2dChlLEgudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIHBlKGUpe2xldCB0PW0udmFsdWU/LnVzZXJzPz9bXTtyZXR1cm4hSy52YWx1ZXx8dnQoZSxILnZhbHVlKT95dChlLHQpOmJ0KGUsdCxILnZhbHVlKX1sZXQgbWU9UygoKT0+bS52YWx1ZT8uZ3JvdXBzLmxlbmd0aD9LLnZhbHVlP2BubyBncm91cHMgbWF0Y2ggIiR7Vi52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGApLGdlPVMoKCk9PihtLnZhbHVlPy5ncm91cHMubGVuZ3RoPz8wKT09PTAmJiFLLnZhbHVlKSxiZT1TKCgpPT57bGV0IGU9bS52YWx1ZT8udXNlcnM/P1tdO2lmKCFLLnZhbHVlKXJldHVybiBlO2xldCB0PW0udmFsdWU/Lmdyb3Vwcz8/W10sbj1uZXcgU2V0KHQuZmlsdGVyKGU9PnZ0KGUsSC52YWx1ZSkpLm1hcChlPT5lLmlkKSk7cmV0dXJuIGUuZmlsdGVyKGU9Pl90KGUsSC52YWx1ZSl8fChlLmdyb3Vwcz8/W2UuZ3JvdXBOYW1lXSkuc29tZShlPT5lIT09dm9pZCAwJiZuLmhhcyhlKSkpfSkseGU9UygoKT0+bS52YWx1ZT8udXNlcnMubGVuZ3RoP0sudmFsdWU/YG5vIHVzZXJzIG1hdGNoICIke1YudmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgKSxTZT1TKCgpPT5mdChgTmFtZWAsYE1lbWJlcnNgLHosdy52YWx1ZSkpLHdlPUUoW10pLEVlPXllKHtnZXQgZGF0YSgpe3JldHVybiB1ZS52YWx1ZX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gU2UudmFsdWV9LGdldENvcmVSb3dNb2RlbDpoZSgpLGdldFNvcnRlZFJvd01vZGVsOmZlKCksb25Tb3J0aW5nQ2hhbmdlOmU9PlVlKGUsd2UpLHN0YXRlOntnZXQgc29ydGluZygpe3JldHVybiB3ZS52YWx1ZX19fSksa2U9UygoKT0+RWUuZ2V0Um93TW9kZWwoKS5yb3dzKSxqZT1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLE5lPVMoKCk9PkVlLmdldEhlYWRlckdyb3VwcygpWzBdLmhlYWRlcnMuZmlsdGVyKGU9PmplLmhhcyhlLmNvbHVtbi5pZCkpKSxSZT14KHttYW51YWxseUV4cGFuZGVkOm5ldyBTZXQsbWFudWFsbHlDb2xsYXBzZWQ6bmV3IFNldH0pLHplPVMoKCk9Pk4oUmUsSy52YWx1ZSxYLnZhbHVlKSk7ZnVuY3Rpb24gQmUoZSl7RihSZSxlLHplLnZhbHVlLmhhcyhlKSl9bGV0IFZlPVMoe2dldDooKT0+QXJyYXkuZnJvbSh6ZS52YWx1ZSksc2V0OmU9PntsZXQgdD1uZXcgU2V0KGUpO2ZvcihsZXQgZSBvZiB6ZS52YWx1ZSl0LmhhcyhlKXx8QmUoZSk7Zm9yKGxldCBlIG9mIHQpemUudmFsdWUuaGFzKGUpfHxCZShlKX19KTtlKFYsZT0+e2UudHJpbSgpPT09YGAmJkwoUmUpfSk7ZnVuY3Rpb24gSGUoZSl7cmV0dXJuL1sqP1tdLy50ZXN0KGUpfWZ1bmN0aW9uIFdlKGUpe3JldHVybiBlLmlkLnN0YXJ0c1dpdGgoYGNvc3RgKT9gJHtxKGUudXNlZCl9IC8gJHtxKGUubGltaXQpfWA6YCR7RyhlLnVzZWQpfSAvICR7RyhlLmxpbWl0KX1gfWZ1bmN0aW9uIEdlKGUsdCl7bGV0IG49RGUodCkscj1RKGUuY29zdFBlck1vbnRoTWljcm9Vc2Qsbik7cmV0dXJuIHI9PT1udWxsP3t0ZXh0OmBub3QgZW5vdWdoIGRhdGEgeWV0YCx3aWxsRXhjZWVkOiExfTp7dGV4dDpxKHIpLHdpbGxFeGNlZWQ6VGUocixlLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEKS53aWxsRXhjZWVkfX1sZXQgS2U9UygoKT0+ZnQoYE5hbWVgLGBHcm91cGAsUix3LnZhbHVlLHNlKSkscWU9RShbXSksSmU9eWUoe2dldCBkYXRhKCl7cmV0dXJuIGJlLnZhbHVlfSxnZXQgY29sdW1ucygpe3JldHVybiBLZS52YWx1ZX0sZ2V0Q29yZVJvd01vZGVsOmhlKCksZ2V0U29ydGVkUm93TW9kZWw6ZmUoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+VWUoZSxxZSksc3RhdGU6e2dldCBzb3J0aW5nKCl7cmV0dXJuIHFlLnZhbHVlfX19KTtmdW5jdGlvbiBZZSgpe3JldHVybiBndChKZS5nZXRSb3dNb2RlbCgpLnJvd3MubWFwKGU9PmUub3JpZ2luYWwpLGB1c2Vyc2AsUix3LnZhbHVlKX1mdW5jdGlvbiBYZSgpe3JldHVybiBndChrZS52YWx1ZS5tYXAoZT0+ZS5vcmlnaW5hbCksYGdyb3Vwc2Aseix3LnZhbHVlKX1yZXR1cm4oZSxhKT0+KFQoKSxnKGBkaXZgLFN0LFt5KEZlLHttb2RlbFZhbHVlOnYoViksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmFbMF18fD1lPT5zKFYpP1YudmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgdXNlcnMgb3IgZ3JvdXBzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLG0udmFsdWU/KFQoKSxEKHYodSkse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihjKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzRdfHw9W0MoYFRvdGFsYCwtMSldXSksXzoxfSkseSh2KEIpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbNV18fD1bQyhgVXNhZ2Ugc3VtbWVkIGFjcm9zcyBldmVyeSB1c2VyIGFuZCBncm91cCBjb21iaW5lZC5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHkodihrKSx7Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQgdGV4dC1zbSBzbTpncmlkLWNvbHMtNWB9LHtkZWZhdWx0OnIoKCk9PltoKGBkaXZgLG51bGwsW2FbNl18fD1oKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBSZXF1ZXN0cy9kYXlgLC0xKSxoKGBwYCxDdCxbeShaLHt2YWx1ZTptLnZhbHVlLnRvdGFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksaChgZGl2YCxudWxsLFthWzddfHw9aChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUmVqZWN0ZWQvZGF5YCwtMSksaChgcGAse2NsYXNzOmooW2B0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYCxtLnZhbHVlLnRvdGFsLnJlamVjdGlvbnNQZXJEYXk+MD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwXSl9LFt5KFose3ZhbHVlOm0udmFsdWUudG90YWwucmVqZWN0aW9uc1BlckRheX0sbnVsbCw4LFtgdmFsdWVgXSldLDIpXSksaChgZGl2YCxudWxsLFthWzhdfHw9aChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgVG9rZW5zIGluL2RheWAsLTEpLGgoYHBgLHd0LFt5KFose3ZhbHVlOm0udmFsdWUudG90YWwudG9rZW5zSW5QZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxoKGBkaXZgLG51bGwsW2FbOV18fD1oKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBUb2tlbnMgb3V0L2RheWAsLTEpLGgoYHBgLFR0LFt5KFose3ZhbHVlOm0udmFsdWUudG90YWwudG9rZW5zT3V0UGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pXSksaChgZGl2YCxudWxsLFthWzEwXXx8PWgoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYENvc3QvZGF5YCwtMSksaChgcGAsRXQsbCh2KHEpKG0udmFsdWUudG90YWwuY29zdFBlckRheU1pY3JvVXNkKSksMSldKV0pLF86MX0pXSksXzoxfSkpOk8oYGAsITApLG0udmFsdWU/KFQoKSxEKFBlLHtrZXk6MSwibXRkLW1pY3JvcyI6bS52YWx1ZS50b3RhbC5jb3N0UGVyTW9udGhNaWNyb1VzZCxsaW1pdHM6bS52YWx1ZS50b3RhbC5saW1pdHMsbm93OnYodyl9LG51bGwsOCxbYG10ZC1taWNyb3NgLGBsaW1pdHNgLGBub3dgXSkpOk8oYGAsITApLHkodih1KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5baChgZGl2YCxEdCxbaChgZGl2YCxudWxsLFt5KHYoYyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxMV18fD1bQyhgR3JvdXBzYCwtMSldXSksXzoxfSkseSh2KEIpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMTJdfHw9W0MoYEV4cGFuZCBhIGdyb3VwIHRvIHNlZSBpdHMgbWVtYmVyIHVzZXJzJyBvd24gdXNhZ2UuYCwtMSldXSksXzoxfSldKSx5KE1lLHtmaWxlbmFtZTpgY29uc3VtZXJzLWdyb3Vwcy5jc3ZgLGJ1aWxkOlhlfSldKV0pLF86MX0pLHkodihrKSxudWxsLHtkZWZhdWx0OnIoKCk9PltiLnZhbHVlPT09YHNrZWxldG9uYD8oVCgpLEQoTGUse2tleTowLHJvd3M6M30pKTpiLnZhbHVlPT09YGVycm9yYD8oVCgpLEQoVSx7a2V5OjEsbWVzc2FnZTp2KG8pLmVycm9yLCJvbi1yZXRyeSI6dihvKS5yZWZyZXNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOihUKCksZyhpLHtrZXk6Mn0sW2tlLnZhbHVlLmxlbmd0aD8oVCgpLGcoYGRpdmAsT3QsWyhUKCEwKSxnKGksbnVsbCxfKE5lLnZhbHVlLGU9PihUKCksRChfZSx7a2V5OmUuaWQsaGVhZGVyOmV9LG51bGwsOCxbYGhlYWRlcmBdKSkpLDEyOCkpXSkpOk8oYGAsITApLGtlLnZhbHVlLmxlbmd0aD8oVCgpLEQodihJKSx7a2V5OjEsbW9kZWxWYWx1ZTpWZS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YVsxXXx8PWU9PlZlLnZhbHVlPWUsdHlwZTpgbXVsdGlwbGVgLGNsYXNzOmByb3VuZGVkLW1kIGJvcmRlciBweC0zYH0se2RlZmF1bHQ6cigoKT0+WyhUKCEwKSxnKGksbnVsbCxfKGtlLnZhbHVlLGU9PihUKCksRCh2KGllKSx7a2V5OmUub3JpZ2luYWwuaWQsdmFsdWU6ZS5vcmlnaW5hbC5pZH0se2RlZmF1bHQ6cigoKT0+W2goYGRpdmAsa3QsW2goYHNwYW5gLEF0LGwoZS5vcmlnaW5hbC5pZCksMSkseSh2KE0pLHsiaGVhZGVyLWNsYXNzIjpgZmxleC0xYH0se2RlZmF1bHQ6cigoKT0+W2goYHNwYW5gLGp0LGBHcm91cCBgK2woZS5vcmlnaW5hbC5pZCkrYCBkZXRhaWxzYCwxKSxoKGBzcGFuYCxNdCxbaChgc3BhbmAsTnQsbCh6KGUub3JpZ2luYWwpfHxgMGApK2AgbWVtYmVyc2AsMSksaChgc3BhbmAsUHQsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhUKCksZyhpLHtrZXk6MH0sW0MoYD9gKV0sNjQpKTooVCgpLEQoWix7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZXF1ZXN0c1BlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpLGFbMTNdfHw9QyhgIHJlcS9kYXkgYCwtMSldKSxoKGBzcGFuYCxGdCxsKGUub3JpZ2luYWwuc3RvcmVEb3duP2A/YDp2KHEpKGUub3JpZ2luYWwuY29zdFBlckRheU1pY3JvVXNkKSkrYC9kYXkgYCwxKV0pXSksXzoyfSwxMDI0KV0pLHkodihQKSxudWxsLHtkZWZhdWx0OnIoKCk9PltoKGBkbGAsSXQsW2goYGRpdmAsbnVsbCxbaChgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOm5ufSxgUHJvdmlkZXJzYCksaChgZGRgLG51bGwsW2Uub3JpZ2luYWwucHJvdmlkZXJzPy5sZW5ndGg/KFQoKSxnKGBkaXZgLEx0LFsoVCghMCksZyhpLG51bGwsXyhlLm9yaWdpbmFsLnByb3ZpZGVycyxlPT4oVCgpLEQodihKKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooVCgpLGcoYHNwYW5gLFJ0LGBBbGwgcHJvdmlkZXJzYCkpXSldKSxoKGBkaXZgLG51bGwsW2goYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpubn0sYE1vZGVsc2ApLGgoYGRkYCxudWxsLFtlLm9yaWdpbmFsLm1vZGVscz8ubGVuZ3RoPyhUKCksZyhgZGl2YCx6dCxbKFQoITApLGcoaSxudWxsLF8oZS5vcmlnaW5hbC5tb2RlbHMsZT0+KFQoKSxnKGkse2tleTplfSxbSGUoZSk/KFQoKSxEKHYoSikse2tleToxLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBtYXgtdy1mdWxsIHRydW5jYXRlIGZvbnQtbW9ubyBmb250LW5vcm1hbGAsdGl0bGU6ZX0se2RlZmF1bHQ6cigoKT0+W0MobChlKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTooVCgpLEQoYWUse2tleTowLGlkOmV9LG51bGwsOCxbYGlkYF0pKV0sNjQpKSksMTI4KSldKSk6KFQoKSxnKGBzcGFuYCxCdCxgQWxsIG1vZGVsc2ApKV0pXSksaChgZGl2YCxudWxsLFtoKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6bm59LGBNQ1Agc2VydmVyc2ApLGgoYGRkYCxudWxsLFtlLm9yaWdpbmFsLm1jcFNlcnZlcnM/Lmxlbmd0aD8oVCgpLGcoYGRpdmAsVnQsWyhUKCEwKSxnKGksbnVsbCxfKGUub3JpZ2luYWwubWNwU2VydmVycyxlPT4oVCgpLEQodihKKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooVCgpLGcoYHNwYW5gLEh0LGBBbGwgTUNQIHNlcnZlcnNgKSldKV0pLGgoYGRpdmAsbnVsbCxbaChgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgLHRpdGxlOm5ufSxgQWdlbnRzYCksaChgZGRgLG51bGwsW2Uub3JpZ2luYWwuYWdlbnRzPy5sZW5ndGg/KFQoKSxnKGBkaXZgLFV0LFsoVCghMCksZyhpLG51bGwsXyhlLm9yaWdpbmFsLmFnZW50cyxlPT4oVCgpLEQodihKKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooVCgpLGcoYHNwYW5gLFd0LGBBbGwgYWdlbnRzYCkpXSldKV0pLGgoYGRsYCxHdCxbaChgZGl2YCxudWxsLFthWzE0XXx8PWgoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYExpbWl0c2AsLTEpLGgoYGRkYCxudWxsLGwodihZKShlLm9yaWdpbmFsLmxpbWl0cykpLDEpXSksaChgZGl2YCxudWxsLFthWzE1XXx8PWgoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHJlcS9taW5gLC0xKSxoKGBkZGAsS3QsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhUKCksZyhpLHtrZXk6MH0sW0MoYD9gKV0sNjQpKTooVCgpLEQoWix7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZXF1ZXN0c1Blck1pbnV0ZX0sbnVsbCw4LFtgdmFsdWVgXSkpXSldKSxoKGBkaXZgLG51bGwsW2FbMTZdfHw9aChgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgcmVqZWN0ZWQvZGF5YCwtMSksaChgZGRgLHtjbGFzczpqKFtgdGFidWxhci1udW1zYCwhZS5vcmlnaW5hbC5zdG9yZURvd24mJmUub3JpZ2luYWwucmVqZWN0aW9uc1BlckRheT4wP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKX0sW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhUKCksZyhpLHtrZXk6MH0sW0MoYD9gKV0sNjQpKTooVCgpLEQoWix7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZWplY3Rpb25zUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSldLDIpXSksaChgZGl2YCxudWxsLFthWzE3XXx8PWgoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva0luL2RheWAsLTEpLGgoYGRkYCxxdCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFQoKSxnKGkse2tleTowfSxbQyhgP2ApXSw2NCkpOihUKCksRChaLHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc0luUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSldKV0pLGgoYGRpdmAsbnVsbCxbYVsxOF18fD1oKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGB0b2tPdXQvZGF5YCwtMSksaChgZGRgLEp0LFtlLm9yaWdpbmFsLnN0b3JlRG93bj8oVCgpLGcoaSx7a2V5OjB9LFtDKGA/YCldLDY0KSk6KFQoKSxEKFose2tleToxLHZhbHVlOmUub3JpZ2luYWwudG9rZW5zT3V0UGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSldKV0pLGgoYGRpdmAsbnVsbCxbYVsxOV18fD1oKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGB0b2tJbi9tb250aGAsLTEpLGgoYGRkYCxZdCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFQoKSxnKGkse2tleTowfSxbQyhgP2ApXSw2NCkpOihUKCksRChaLHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc0luUGVyTW9udGh9LG51bGwsOCxbYHZhbHVlYF0pKV0pXSksaChgZGl2YCxudWxsLFthWzIwXXx8PWgoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYHRva091dC9tb250aGAsLTEpLGgoYGRkYCxYdCxbZS5vcmlnaW5hbC5zdG9yZURvd24/KFQoKSxnKGkse2tleTowfSxbQyhgP2ApXSw2NCkpOihUKCksRChaLHtrZXk6MSx2YWx1ZTplLm9yaWdpbmFsLnRva2Vuc091dFBlck1vbnRofSxudWxsLDgsW2B2YWx1ZWBdKSldKV0pLGgoYGRpdmAsbnVsbCxbYVsyMV18fD1oKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBjb3N0L21vbnRoYCwtMSksaChgZGRgLFp0LGwoZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOnYocSkoZS5vcmlnaW5hbC5jb3N0UGVyTW9udGhNaWNyb1VzZCkpLDEpXSksaChgZGl2YCxudWxsLFthWzIyXXx8PWgoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYGNvc3QvbW9udGggKHByb2ouKWAsLTEpLGgoYGRkYCx7Y2xhc3M6aihbYHRhYnVsYXItbnVtc2AsIWUub3JpZ2luYWwuc3RvcmVEb3duJiZHZShlLm9yaWdpbmFsLHYodykpLndpbGxFeGNlZWQ/YHRleHQtZGVzdHJ1Y3RpdmVgOnZvaWQgMF0pLHRpdGxlOiFlLm9yaWdpbmFsLnN0b3JlRG93biYmR2UoZS5vcmlnaW5hbCx2KHcpKS53aWxsRXhjZWVkP2BQcm9qZWN0ZWQgdG8gZXhjZWVkIHRoZSBjb25maWd1cmVkIGNvc3QvbW9udGggbGltaXRgOnZvaWQgMH0sbChlLm9yaWdpbmFsLnN0b3JlRG93bj9gP2A6R2UoZS5vcmlnaW5hbCx2KHcpKS50ZXh0KSwxMSxRdCldKV0pLHYoT2UpKGUub3JpZ2luYWwpLmxlbmd0aD8oVCgpLGcoYGRpdmAsJHQsWyhUKCEwKSxnKGksbnVsbCxfKHYoT2UpKGUub3JpZ2luYWwpLGU9PihUKCksZyhgc3BhbmAse2tleTplLmlkLGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFtDKGwodihDZSlbZS5pZF0pK2AgYCwxKSx5KHR0LHtyYXRpbzplLnJhdGlvLGxhYmVsOnYoQ2UpW2UuaWRdLCJ2YWx1ZS10ZXh0IjpXZShlKX0sbnVsbCw4LFtgcmF0aW9gLGBsYWJlbGAsYHZhbHVlLXRleHRgXSldKSkpLDEyOCkpXSkpOk8oYGAsITApLGFbMjNdfHw9aChgcGAse2NsYXNzOmBtYi0xLjUgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTWVtYmVyc2AsLTEpLHkocHQseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6cGUoZS5vcmlnaW5hbCksInNlY29uZGFyeS12YWx1ZSI6Uixub3c6dih3KSwic291cmNlLXZhbHVlIjpzZX0sbnVsbCw4LFtgZW50cmllc2AsYG5vd2BdKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKSk6Z2UudmFsdWU/KFQoKSxEKGRlLHtrZXk6Mix0aXRsZTpgTm8gZ3JvdXBzIGNvbmZpZ3VyZWQuYCxkZXNjcmlwdGlvbjpgR3JhbnQgYSBncm91cCBhY2Nlc3MgZnJvbSB0aGUgQ29uZmlnIHBhZ2UncyBjaGFuZ2UgaGVscGVyLmB9LHtkZWZhdWx0OnIoKCk9Plt5KHYobikse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6YVsyXXx8PWU9PnYoZikuZ29UbyhgY29uZmlnYCx7aGVscGVyOmBncmFudGB9KX0se2RlZmF1bHQ6cigoKT0+Wy4uLmFbMjRdfHw9W0MoYE9wZW4gY2hhbmdlIGhlbHBlcmAsLTEpXV0pLF86MX0pXSksXzoxfSkpOihUKCksZyhgcGAsZW4sbChtZS52YWx1ZSksMSkpXSw2NCkpXSksXzoxfSldKSxfOjF9KSx5KHYodSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2goYGRpdmAsdG4sW2goYGRpdmAsbnVsbCxbeSh2KGMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMjVdfHw9W0MoYFVzZXJzYCwtMSldXSksXzoxfSksdihkKS5kYXRhPy51c2Vyc0ZpbGU/KFQoKSxEKHYoQikse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5bQyhgRmlsZS1iYWNrZWQgdXNlcnMgbG9hZCBmcm9tIGArbCh2KGQpLmRhdGEudXNlcnNGaWxlKStgLmAsMSldKSxfOjF9KSk6TyhgYCwhMCldKSx5KE1lLHtmaWxlbmFtZTpgY29uc3VtZXJzLXVzZXJzLmNzdmAsYnVpbGQ6WWV9KV0pXSksXzoxfSkseSh2KGspLG51bGwse2RlZmF1bHQ6cigoKT0+W2IudmFsdWU9PT1gc2tlbGV0b25gPyhUKCksRCh2ZSx7a2V5OjAscm93czo1LGNvbHM6NX0pKTpiLnZhbHVlPT09YGVycm9yYD8oVCgpLEQoVSx7a2V5OjEsbWVzc2FnZTp2KG8pLmVycm9yLCJvbi1yZXRyeSI6dihvKS5yZWZyZXNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOihUKCksRChwdCx7a2V5OjIsImlkLWxhYmVsIjpgTmFtZWAsInNlY29uZGFyeS1jb2x1bW4tbGFiZWwiOmBHcm91cGAsZW50cmllczpiZS52YWx1ZSwic2Vjb25kYXJ5LXZhbHVlIjpSLCJlbXB0eS1tZXNzYWdlIjp4ZS52YWx1ZSxub3c6dih3KSwic291cmNlLXZhbHVlIjpzZSxzb3J0aW5nOnFlLnZhbHVlLCJvblVwZGF0ZTpzb3J0aW5nIjphWzNdfHw9ZT0+cWUudmFsdWU9ZX0sbnVsbCw4LFtgZW50cmllc2AsYGVtcHR5LW1lc3NhZ2VgLGBub3dgLGBzb3J0aW5nYF0pKV0pLF86MX0pXSksXzoxfSldKSl9fSksYW49e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sb249e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmB9LHNuPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yYH0sY249e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sbG49e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sdW49e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sZG49e2NsYXNzOmB0ZXh0LXNtYH0sZm49e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtc21gfSxwbj17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMmB9LG1uPXtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0saG49e2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxnbj17a2V5OjEsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxfbj17Y2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSx2bj17Y2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSx5bj1tKHtfX25hbWU6YFVzZXJEZXRhaWxgLHByb3BzOnt1c2VySWQ6e319LGVtaXRzOltgY2xvc2VgXSxzZXR1cChvLHtlbWl0OnN9KXtsZXQgZD1vLGY9cyxtPXRlKCksYj1sZSgpLHg9SGUoKSx3PUgoKSxFPW5lKCkse25vdzpBLHN0YXJ0Omosc3RvcDppZX09QWUoKTtwKGopLGVlKGllKTtsZXQgTT1TKCgpPT5tLnVzYWdlPy51c2Vycy5maW5kKGU9PmUuaWQ9PT1kLnVzZXJJZCkpLE49UygoKT0+Yi5kYXRhPy51c2Vycy5maW5kKGU9PmUubmFtZT09PWQudXNlcklkKSksUD1TKCgpPT5tLm92ZXJ2aWV3Py5mZWF0dXJlcy51c2VyTW9kZWxTdGF0cz8/ITEpO2Z1bmN0aW9uIEYoKXtyZXR1cm4gYi5mZXRjaFVzZXJEZXRhaWwoZC51c2VySWQsdy53aW5kb3csdy5zcGFuLFAudmFsdWUpfXAoKCk9PntGKCkseC5yZWZyZXNoKCl9KSxlKFsoKT0+ZC51c2VySWQsKCk9PncucmFuZ2UsUF0sRik7bGV0IEk9UygoKT0+Yi5kZXRhaWxbZC51c2VySWRdKSxMPVMoKCk9PihJLnZhbHVlPy5yZXFTZXJpZXM/LmJ1Y2tldHM/P1tdKS5tYXAoZT0+dWUoZSxJLnZhbHVlPy5yZXFTZXJpZXM/LndpbmRvdz8/dy53aW5kb3cpKSksb2U9UygoKT0+W3tsYWJlbDpgUmVxdWVzdHNgLGRhdGE6SS52YWx1ZT8ucmVxU2VyaWVzPy5zZXJpZXNbMF0/LnBvaW50cz8/W10sY29sb3I6YC0tY2hhcnQtcmVxdWVzdHNgfV0pLFI9UygoKT0+KEkudmFsdWU/LmNvc3RTZXJpZXM/LmJ1Y2tldHM/P1tdKS5tYXAoZT0+dWUoZSxJLnZhbHVlPy5jb3N0U2VyaWVzPy53aW5kb3c/P3cud2luZG93KSkpLHo9UygoKT0+W3tsYWJlbDpgQ29zdGAsZGF0YTooSS52YWx1ZT8uY29zdFNlcmllcz8uc2VyaWVzWzBdPy5wb2ludHM/P1tdKS5tYXAoZT0+ZSksY29sb3I6YC0tY2hhcnQtY29zdGB9XSksZmU9UygoKT0+Vyh7bG9hZGluZzpJLnZhbHVlPy5sb2FkaW5nPz8hMSxoYXNEYXRhOkkudmFsdWU/LnJlcVNlcmllcyE9bnVsbCxlcnJvcjpJLnZhbHVlPy5yZXFFcnJvcj8/YGB9KSksaGU9UygoKT0+Vyh7bG9hZGluZzpJLnZhbHVlPy5sb2FkaW5nPz8hMSxoYXNEYXRhOkkudmFsdWU/LmNvc3RTZXJpZXMhPW51bGwsZXJyb3I6SS52YWx1ZT8uY29zdEVycm9yPz9gYH0pKSxfZT1TKCgpPT4hUC52YWx1ZXx8SS52YWx1ZT8ubW9kZWxUb3RhbHNVbmF2YWlsYWJsZT09PSEwKSx5ZT1TKCgpPT5bLi4uSS52YWx1ZT8ubW9kZWxUb3RhbHM/LnJvd3M/P1tdXS5zb3J0KChlLHQpPT4odC52YWx1ZXMuY29zdD8/dC52YWx1ZXMucmVxPz8wKS0oZS52YWx1ZXMuY29zdD8/ZS52YWx1ZXMucmVxPz8wKSkpLHhlPVMoKCk9Plcoe2xvYWRpbmc6SS52YWx1ZT8ubG9hZGluZz8/ITEsaGFzRGF0YTpJLnZhbHVlPy5tb2RlbFRvdGFscyE9bnVsbCxlcnJvcjpJLnZhbHVlPy5tb2RlbEVycm9yPz9gYH0pKSx3ZT1TKCgpPT54LmV2ZW50cy5maWx0ZXIoZT0+ZS51c2VyPT09ZC51c2VySWQpLnNsaWNlKDAsMTApKSxRPVMoKCk9Pk0udmFsdWU/T2UoTS52YWx1ZSk6W10pO2Z1bmN0aW9uIFRlKGUsdCxuKXtyZXR1cm4gZS5zdGFydHNXaXRoKGBjb3N0YCk/YCR7cSh0KX0gLyAke3Eobil9YDpgJHtHKHQpfSAvICR7RyhuKX1gfWxldCBFZT1TKCgpPT57bGV0IGU9TS52YWx1ZT8ubGltaXRzPy5jb3N0UGVyTW9udGhVU0Q7cmV0dXJuIU0udmFsdWV8fCFlP251bGw6TmUoTS52YWx1ZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxNYXRoLnJvdW5kKGUqMWU2KSxBLnZhbHVlKX0pO3JldHVybihlLHMpPT57bGV0IGQ9cmUoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBUKCksZyhgZGl2YCxhbixbaChgZGl2YCxvbixbeSh2KG4pLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBzbWAsb25DbGljazpzWzBdfHw9ZT0+ZihgY2xvc2VgKX0se2RlZmF1bHQ6cigoKT0+W3koZCx7aWNvbjp2KGEpLGNsYXNzOmBzaXplLTMuNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksc1syXXx8PUMoYCBCYWNrIHRvIGRpcmVjdG9yeSBgLC0xKV0pLF86MX0pXSkseSh2KHUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltoKGBkaXZgLHNuLFt5KHYoYykse2NsYXNzOmBtaW4tdy0wIGJyZWFrLWFsbCBmb250LW1vbm9gfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKG8udXNlcklkKSwxKV0pLF86MX0pLE4udmFsdWU/LmFkbWluPyhUKCksRCh2KEopLHtrZXk6MCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0OnIoKCk9PlsuLi5zWzNdfHw9W0MoYGFkbWluYCwtMSldXSksXzoxfSkpOk8oYGAsITApLE4udmFsdWU/LnNvdXJjZT8oVCgpLEQodihKKSx7a2V5OjEsdmFyaWFudDpgc2Vjb25kYXJ5YH0se2RlZmF1bHQ6cigoKT0+W0MobChOLnZhbHVlLnNvdXJjZSksMSldKSxfOjF9KSk6TyhgYCwhMCldKSxNLnZhbHVlPy5ncm91cHM/Lmxlbmd0aHx8TS52YWx1ZT8uZ3JvdXBOYW1lPyhUKCksRCh2KEIpLHtrZXk6MH0se2RlZmF1bHQ6cigoKT0+W0MoYCBNZW1iZXIgb2YgYCtsKChNLnZhbHVlPy5ncm91cHM/P1tNLnZhbHVlPy5ncm91cE5hbWVdKS5maWx0ZXIoQm9vbGVhbikuam9pbihgLCBgKSksMSldKSxfOjF9KSk6TyhgYCwhMCldKSxfOjF9KSxNLnZhbHVlPyhUKCksRCh2KGspLHtrZXk6MSxjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0se2RlZmF1bHQ6cigoKT0+W2goYGRpdmAsbnVsbCxbc1s1XXx8PWgoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFJlcXVlc3RzL2RheWAsLTEpLGgoYHBgLGNuLFt5KFose3ZhbHVlOk0udmFsdWUucmVxdWVzdHNQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSldKSxoKGBkaXZgLG51bGwsW3NbNl18fD1oKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBDb3N0L2RheWAsLTEpLGgoYHBgLGxuLGwodihxKShNLnZhbHVlLmNvc3RQZXJEYXlNaWNyb1VzZCkpLDEpXSksaChgZGl2YCxudWxsLFtzWzddfHw9aChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQ29zdC9tb250aGAsLTEpLGgoYHBgLHVuLGwodihxKShNLnZhbHVlLmNvc3RQZXJNb250aE1pY3JvVXNkKSksMSldKSxoKGBkaXZgLG51bGwsW3NbOF18fD1oKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMaW1pdHNgLC0xKSxoKGBwYCxkbixsKHYoWSkoTS52YWx1ZS5saW1pdHMpKSwxKV0pXSksXzoxfSkpOihUKCksRCh2KGspLHtrZXk6MCxjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpyKCgpPT5bLi4uc1s0XXx8PVtDKGAgTm8gdXNhZ2Ugc2NvcGUgZm9yIHRoaXMgdXNlciB5ZXQg4oCUIGl0IGFwcGVhcnMgYWZ0ZXIgdGhlaXIgZmlyc3QgcmVxdWVzdC4gYCwtMSldXSksXzoxfSkpXSksXzoxfSksTS52YWx1ZSYmUS52YWx1ZS5sZW5ndGg/KFQoKSxEKHYodSkse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihjKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5zWzldfHw9W0MoYEhlYWRyb29tYCwtMSldXSksXzoxfSksRWUudmFsdWU/KFQoKSxEKHYoQikse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5bQyhgQXQgdGhlIGN1cnJlbnQgcGFjZSwgY29zdC9tb250aCBydW5zIG91dCBhcm91bmQgYCtsKHYoSykoRWUudmFsdWUudG9JU09TdHJpbmcoKSkpK2AuYCwxKV0pLF86MX0pKTpPKGBgLCEwKV0pLF86MX0pLHkodihrKSx7Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC00IGdhcC15LTEuNWB9LHtkZWZhdWx0OnIoKCk9PlsoVCghMCksZyhpLG51bGwsXyhRLnZhbHVlLGU9PihUKCksZyhgc3BhbmAse2tleTplLmlkLGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFtDKGwodihDZSlbZS5pZF0pK2AgYCwxKSx5KHR0LHtyYXRpbzplLnJhdGlvLGxhYmVsOnYoQ2UpW2UuaWRdLCJ2YWx1ZS10ZXh0IjpUZShlLmlkLGUudXNlZCxlLmxpbWl0KX0sbnVsbCw4LFtgcmF0aW9gLGBsYWJlbGAsYHZhbHVlLXRleHRgXSldKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9KSk6TyhgYCwhMCkseSh2KHUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoYyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uc1sxMF18fD1bQyhgUmVxdWVzdHMgb3ZlciB0aW1lYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bZmUudmFsdWU9PT1gc2tlbGV0b25gPyhUKCksRChCZSx7a2V5OjB9KSk6ZmUudmFsdWU9PT1gZXJyb3JgPyhUKCksRChVLHtrZXk6MSxtZXNzYWdlOkkudmFsdWU/LnJlcUVycm9yPz9gYCwib24tcmV0cnkiOkZ9LG51bGwsOCxbYG1lc3NhZ2VgXSkpOihUKCksRChWZSx7a2V5OjIsbGFiZWxzOkwudmFsdWUsZGF0YXNldHM6b2UudmFsdWUsYXJpYUxhYmVsOmBSZXF1ZXN0cyBvdmVyIHRpbWUgZm9yICR7by51c2VySWR9YH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgLGBhcmlhTGFiZWxgXSkpXSksXzoxfSldKSxfOjF9KSx5KHYodSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihjKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5zWzExXXx8PVtDKGBDb3N0IG92ZXIgdGltZWAsLTEpXV0pLF86MX0pXSksXzoxfSkseSh2KGspLG51bGwse2RlZmF1bHQ6cigoKT0+W2hlLnZhbHVlPT09YHNrZWxldG9uYD8oVCgpLEQoQmUse2tleTowfSkpOmhlLnZhbHVlPT09YGVycm9yYD8oVCgpLEQoVSx7a2V5OjEsbWVzc2FnZTpJLnZhbHVlPy5jb3N0RXJyb3I/P2BgLCJvbi1yZXRyeSI6Rn0sbnVsbCw4LFtgbWVzc2FnZWBdKSk6KFQoKSxEKFZlLHtrZXk6MixsYWJlbHM6Ui52YWx1ZSxkYXRhc2V0czp6LnZhbHVlLCJ2YWx1ZS1mb3JtYXR0ZXIiOnYocSksYXJpYUxhYmVsOmBDb3N0IG92ZXIgdGltZSBmb3IgJHtvLnVzZXJJZH1gfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2AsYHZhbHVlLWZvcm1hdHRlcmAsYGFyaWFMYWJlbGBdKSldKSxfOjF9KV0pLF86MX0pLHkodih1KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KGMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLnNbMTJdfHw9W0MoYE1vZGVscyB1c2VkYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoaykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0zYH0se2RlZmF1bHQ6cigoKT0+W3koemUse3dpbmRvdzp2KHcpLndpbmRvdyxzcGFuOnYodykuc3Bhbn0sbnVsbCw4LFtgd2luZG93YCxgc3BhbmBdKSxfZS52YWx1ZT8oVCgpLEQodihzZSkse2tleTowLHZhcmlhbnQ6YHdhcm5gfSx7ZGVmYXVsdDpyKCgpPT5beSh2KFYpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLnNbMTNdfHw9W0MoYFBlci11c2VyLW1vZGVsIHN0YXRpc3RpY3MgYXJlIG9mZmAsLTEpXV0pLF86MX0pLHkodihjZSkse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSx7ZGVmYXVsdDpyKCgpPT5bc1sxNV18fD1oKGBzcGFuYCxudWxsLFtDKGBFbmFibGUgYCksaChgY29kZWAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LGBhZG1pbi5zdGF0cy51c2VyTW9kZWxgKSxDKGAgaW4gdGhlIG1pZGRsZXdhcmUgY29uZmlnIHRvIHNlZSBhIHBlci1tb2RlbCBicmVha2Rvd24gZm9yIHRoaXMgdXNlci5gKV0sLTEpLHkodihuKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsb25DbGljazpzWzFdfHw9ZT0+dihFKS5nb1RvKGBjb25maWdgKX0se2RlZmF1bHQ6cigoKT0+Wy4uLnNbMTRdfHw9W0MoYE9wZW4gQ29uZmlnYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKTp4ZS52YWx1ZT09PWBza2VsZXRvbmA/KFQoKSxEKHZlLHtrZXk6MSxyb3dzOjMsY29sczozfSkpOnhlLnZhbHVlPT09YGVycm9yYD8oVCgpLEQoVSx7a2V5OjIsbWVzc2FnZTpJLnZhbHVlPy5tb2RlbEVycm9yPz9gYCwib24tcmV0cnkiOkZ9LG51bGwsOCxbYG1lc3NhZ2VgXSkpOnllLnZhbHVlLmxlbmd0aD8oVCgpLEQodihtZSkse2tleTo0fSx7ZGVmYXVsdDpyKCgpPT5beSh2KGJlKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoZ2UpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihYKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5zWzE2XXx8PVtDKGBNb2RlbGAsLTEpXV0pLF86MX0pLHkodihYKSx7Y2xhc3M6YHRleHQtcmlnaHRgfSx7ZGVmYXVsdDpyKCgpPT5bLi4uc1sxN118fD1bQyhgUmVxdWVzdHNgLC0xKV1dKSxfOjF9KSx5KHYoWCkse2NsYXNzOmB0ZXh0LXJpZ2h0YH0se2RlZmF1bHQ6cigoKT0+Wy4uLnNbMThdfHw9W0MoYENvc3RgLC0xKV1dKSxfOjF9KV0pLF86MX0pXSksXzoxfSkseSh2KHBlKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsoVCghMCksZyhpLG51bGwsXyh5ZS52YWx1ZSxlPT4oVCgpLEQodihnZSkse2tleTplLmlkfSx7ZGVmYXVsdDpyKCgpPT5beSh2KFNlKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KGFlLHtpZDplLmlkfSxudWxsLDgsW2BpZGBdKV0pLF86Mn0sMTAyNCkseSh2KFNlKSx7Y2xhc3M6YHRleHQtcmlnaHQgdGFidWxhci1udW1zYH0se2RlZmF1bHQ6cigoKT0+W3koWix7dmFsdWU6ZS52YWx1ZXMucmVxPz8wfSxudWxsLDgsW2B2YWx1ZWBdKV0pLF86Mn0sMTAyNCkseSh2KFNlKSx7Y2xhc3M6YHRleHQtcmlnaHQgdGFidWxhci1udW1zYH0se2RlZmF1bHQ6cigoKT0+W0MobCh2KHEpKGUudmFsdWVzLmNvc3Q/PzApKSwxKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKTooVCgpLEQoZGUse2tleTozLHRpdGxlOmBObyB0cmFmZmljIGluIHRoaXMgcmFuZ2UuYH0se2RlZmF1bHQ6cigoKT0+W3koa2UpXSksXzoxfSkpXSksXzoxfSldKSxfOjF9KSx5KHYodSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihjKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5zWzE5XXx8PVtDKGBSZWNlbnQgZXJyb3JzYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bd2UudmFsdWUubGVuZ3RoPyhUKCksZyhgdWxgLGZuLFsoVCghMCksZyhpLG51bGwsXyh3ZS52YWx1ZSwoZSx0KT0+KFQoKSxnKGBsaWAse2tleTp0LGNsYXNzOmBib3JkZXItYiBwYi0yIGxhc3Q6Ym9yZGVyLTAgbGFzdDpwYi0wYH0sW2goYHBgLHBuLFt5KHYoSikse3ZhcmlhbnQ6YHNlY29uZGFyeWB9LHtkZWZhdWx0OnIoKCk9PltDKGwoZS5raW5kKSwxKV0pLF86Mn0sMTAyNCksaChgc3BhbmAsbW4sbCh2KEspKGUudGltZSkpLDEpXSksaChgcGAsaG4sbChlLm1lc3NhZ2UpLDEpXSkpKSwxMjgpKV0pKTooVCgpLGcoYHBgLGduLGBub25lIGluIHRoZSBjdXJyZW50IGV2ZW50IHdpbmRvd2ApKV0pLF86MX0pXSksXzoxfSksTi52YWx1ZT8ucHJvdmlkZXJzPy5sZW5ndGh8fE4udmFsdWU/Lm1vZGVscz8ubGVuZ3RoPyhUKCksRCh2KHUpLHtrZXk6MX0se2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoYyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uc1syMF18fD1bQyhgUGVyc29uYWwgZ3JhbnRgLC0xKV1dKSxfOjF9KSx5KHYoQiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uc1syMV18fD1bQyhgQWNjZXNzIHRoaXMgdXNlciBoYXMgYmV5b25kIHRoZWlyIGdyb3VwJ3Mgb3duLmAsLTEpXV0pLF86MX0pXSksXzoxfSkseSh2KGspLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCBzbTpncmlkLWNvbHMtMmB9LHtkZWZhdWx0OnIoKCk9PltoKGBkaXZgLG51bGwsW3NbMjJdfHw9aChgcGAse2NsYXNzOmBtYi0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUHJvdmlkZXJzYCwtMSksaChgZGl2YCxfbixbKFQoITApLGcoaSxudWxsLF8oTi52YWx1ZT8ucHJvdmlkZXJzPz9bXSxlPT4oVCgpLEQodihKKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpyKCgpPT5bQyhsKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pXSksaChgZGl2YCxudWxsLFtzWzIzXXx8PWgoYHBgLHtjbGFzczpgbWItMS41IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE1vZGVsc2AsLTEpLGgoYGRpdmAsdm4sWyhUKCEwKSxnKGksbnVsbCxfKE4udmFsdWU/Lm1vZGVscz8/W10sZT0+KFQoKSxEKGFlLHtrZXk6ZSxpZDplfSxudWxsLDgsW2BpZGBdKSkpLDEyOCkpXSldKV0pLF86MX0pXSksXzoxfSkpOk8oYGAsITApXSl9fX0pLGJuPXtrZXk6MSxjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHhuPW0oe19fbmFtZTpgQ29uc3VtZXJzUGFnZWAsc2V0dXAoZSl7bGV0IHQ9bmUoKSxuPVMoKCk9PnQucGFyYW1zLnVzZXIpLGk9UygoKT0+dC5wYXJhbXMudmlldz09PWBtYXRyaXhgP2BtYXRyaXhgOmBkaXJlY3RvcnlgKSxhPVMoKCk9PkplKHQucGFyYW1zLm1hdHJpeCkpO2Z1bmN0aW9uIG8oZSl7aWYoZSE9PWBkaXJlY3RvcnlgJiZlIT09YG1hdHJpeGApcmV0dXJuO2xldHt1c2VyOm4sLi4ucn09dC5wYXJhbXM7dC5nb1RvKGBjb25zdW1lcnNgLHsuLi5yLHZpZXc6ZX0pfWZ1bmN0aW9uIHMoZSl7bGV0e3VzZXI6bixtYXRyaXg6ciwuLi5pfT10LnBhcmFtcztpZihlPT09YG1vZGVsc2Ape3QuZ29UbyhgY29uc3VtZXJzYCx7Li4uaSx2aWV3OmBtYXRyaXhgfSk7cmV0dXJufXQuZ29UbyhgY29uc3VtZXJzYCx7Li4uaSx2aWV3OmBtYXRyaXhgLG1hdHJpeDplfSl9ZnVuY3Rpb24gYygpe2xldHt1c2VyOmUsLi4ubn09dC5wYXJhbXM7dC5nb1RvKGBjb25zdW1lcnNgLG4pfXJldHVybihlLHQpPT5uLnZhbHVlPyhUKCksRCh5bix7a2V5OjAsInVzZXItaWQiOm4udmFsdWUsb25DbG9zZTpjfSxudWxsLDgsW2B1c2VyLWlkYF0pKTooVCgpLGcoYGRpdmAsYm4sW3kodihSKSx7Im1vZGVsLXZhbHVlIjppLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpvfSx7ZGVmYXVsdDpyKCgpPT5beSh2KG9lKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYoeikse3ZhbHVlOmBkaXJlY3RvcnlgfSx7ZGVmYXVsdDpyKCgpPT5bLi4udFswXXx8PVtDKGBEaXJlY3RvcnlgLC0xKV1dKSxfOjF9KSx5KHYoeikse3ZhbHVlOmBtYXRyaXhgfSx7ZGVmYXVsdDpyKCgpPT5bLi4udFsxXXx8PVtDKGBBY2Nlc3MgbWF0cml4YCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pLGkudmFsdWU9PT1gZGlyZWN0b3J5YD8oVCgpLEQocm4se2tleTowfSkpOihUKCksRCgkZSx7a2V5OjEsa2luZDphLnZhbHVlLCJvblVwZGF0ZTpraW5kIjpzfSxudWxsLDgsW2BraW5kYF0pKV0pKX19KTtleHBvcnR7eG4gYXMgZGVmYXVsdH07", + "aW1wb3J0e0FuIGFzIGUsQ2kgYXMgdCxEIGFzIG4sRSBhcyByLEogYXMgaSxLIGFzIGEsTHIgYXMgbyxNciBhcyBzLE8gYXMgYyxRIGFzIGwsUW4gYXMgdSxUIGFzIGQsWHQgYXMgZixfbiBhcyBwLF90IGFzIG0sY2kgYXMgaCxjbiBhcyBnLGVpIGFzIGVlLGZyIGFzIF8sZyBhcyB0ZSxnbiBhcyB2LGd0IGFzIHksaXIgYXMgYixsbiBhcyB4LG4gYXMgbmUsbnIgYXMgcmUsb2kgYXMgaWUsb24gYXMgUyxzbiBhcyBDLHVuIGFzIHcsdXIgYXMgVCx2aSBhcyBFLHcgYXMgRCx3aSBhcyBPLHhpIGFzIGsseW4gYXMgQX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHthIGFzIGosYyBhcyBhZSxpIGFzIE0sbCBhcyBOLG4gYXMgUCxvIGFzIG9lLHIgYXMgc2UscyBhcyBjZSx0IGFzIGxlfWZyb20iLi9zZWFyY2gtZXhwYW5kLUItd1JPY25MLmpzIjtpbXBvcnR7biBhcyB1ZSxyIGFzIEYsdCBhcyBJfWZyb20iLi90YWJzLUN1aDZGUTBqLmpzIjtpbXBvcnR7bCBhcyBMLHQgYXMgUn1mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO2ltcG9ydHt0IGFzIGRlfWZyb20iLi9FcnJvclN0YXRlLURESk9LSmx6LmpzIjtpbXBvcnR7dCBhcyBmZX1mcm9tIi4vY29uc3VtZXJzLUN3d2tPaU12LmpzIjtpbXBvcnR7QyBhcyBwZSxEIGFzIHosRSBhcyBCLE8gYXMgVixTIGFzIEgsVCBhcyBVLGIgYXMgVyxkIGFzIEcsZyBhcyBtZSxpIGFzIGhlLGsgYXMgSyxsIGFzIHEsbSBhcyBnZSxuIGFzIF9lLHAgYXMgdmUscyBhcyBKLHQgYXMgWSx3IGFzIFgseCBhcyB5ZX1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHthIGFzIGJlLGMgYXMgeGUsaSBhcyBTZSxsIGFzIENlLG8gYXMgWixzIGFzIHdlfWZyb20iLi9jb2x1bW5zLUNvZWNuZjc0LmpzIjtpbXBvcnR7aSBhcyBUZSxuIGFzIEVlLHIgYXMgRGUsdCBhcyBPZX1mcm9tIi4vdXNhZ2UtYmFycy1CSk9ZSHN1Ui5qcyI7aW1wb3J0e2EgYXMga2UsYyBhcyBRLGkgYXMgQWUsbyBhcyBqZSxyIGFzIE1lLHMgYXMgTmV9ZnJvbSIuL2J1cm5kb3duLWVHY2EtZWxjLmpzIjtpbXBvcnR7YSBhcyBQZSxuIGFzIEZlLHIgYXMgSWUsdCBhcyBMZX1mcm9tIi4vVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQmgxOXlpdjguanMiO2ltcG9ydHt0IGFzIFJlfWZyb20iLi9Mb2FkU3RhdGVWaWV3LUJFYnNleDdZLmpzIjtpbXBvcnR7biBhcyB6ZSx0IGFzIEJlfWZyb20iLi91c2VTZWFyY2hRdWVyeS1CU2tDOGJHZC5qcyI7aW1wb3J0e3QgYXMgVmV9ZnJvbSIuL0VudGl0eUxpbmstQlI2cGxhV1YuanMiO2ltcG9ydHt0IGFzIEhlfWZyb20iLi9DaGFydENhcmQtQ0FDU0lYMWYuanMiO2ltcG9ydHt0IGFzIFVlfWZyb20iLi9DbGFtcGVkUmFuZ2VOb3RpY2UtQ2hfSHF5Qk8uanMiO2ltcG9ydHt0IGFzIFdlfWZyb20iLi9TdGF0RGlzYWJsZWRBbGVydC1CSnRIUlh3RS5qcyI7aW1wb3J0e3QgYXMgR2V9ZnJvbSIuL2V2ZW50cy1SOXlRbEJjMC5qcyI7ZnVuY3Rpb24gS2UoZSx0KXt0LnZhbHVlPXR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodC52YWx1ZSk6ZX1mdW5jdGlvbiBxZShlLHQpe2lmKCFlLmFsbG93ZWRQcm92aWRlcnMuaW5jbHVkZXModCkpcmV0dXJue2FsbG93ZWQ6ITF9O2xldCBuPWUubW9kZWxBY2Nlc3NbdF07aWYoIW4pcmV0dXJue2FsbG93ZWQ6ITB9O2xldCByPW4uYWxsb3dlZD09PTAmJm4udG90YWw+MHx8dm9pZCAwO3JldHVybnthbGxvd2VkOiEwLGRldGFpbDpgJHtuLmFsbG93ZWR9LyR7bi50b3RhbH0gbW9kZWxzYCx6ZXJvOnJ9fWZ1bmN0aW9uIEplKGUsdCl7cmV0dXJuIHQuYWNjZXNzPT09dm9pZCAwfHx0LmFjY2Vzcz09PW51bGw/e2FsbG93ZWQ6ITB9OnthbGxvd2VkOnQuYWNjZXNzLmluY2x1ZGVzKGUubmFtZSl9fXZhciBZZT1bYG1vZGVsc2AsYG1jcGAsYGFnZW50c2BdLFhlPXttb2RlbHM6YE1vZGVsc2AsbWNwOmBNQ1Agc2VydmVyc2AsYWdlbnRzOmBBZ2VudHNgfTtmdW5jdGlvbiBaZShlKXtyZXR1cm4gWWUuaW5jbHVkZXMoZT8/YGApP2U6YG1vZGVsc2B9ZnVuY3Rpb24gUWUoZSx0LG4scil7cmV0dXJuIGUubWFwKGU9Pih7Z3JvdXA6ZS5uYW1lLHByb3ZpZGVyczpPYmplY3QuZnJvbUVudHJpZXModC5tYXAodD0+W3QscWUoZSx0KV0pKSxtY3BTZXJ2ZXJzOk9iamVjdC5mcm9tRW50cmllcyhuLm1hcCh0PT5bdC5uYW1lLEplKGUsdCldKSksYWdlbnRzOk9iamVjdC5mcm9tRW50cmllcyhyLm1hcCh0PT5bdC5uYW1lLEplKGUsdCldKSl9KSl9ZnVuY3Rpb24gJGUoZSx0LG4pe3JldHVybiBlP3Q9PT0wP2BlbXB0eWA6YHJlYWR5YDpuP2BlcnJvcmA6YGxvYWRpbmdgfXZhciBldD17a2V5OjAsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsY2xhc3M6YG1sLTEgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx0dD17Y2xhc3M6YHNyLW9ubHlgfSxudD1BKHtfX25hbWU6YEFjY2Vzc01hdHJpeGAscHJvcHM6e2tpbmQ6e319LGVtaXRzOltgdXBkYXRlOmtpbmRgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgaT1lLGE9dCxzPWZlKCksaD10ZSgpLGVlPW5lKCk7dSgoKT0+e3MuZW5zdXJlQ29uc3VtZXJzKCl9KTtsZXQgcmU9UygoKT0+KGgub3ZlcnZpZXc/LnByb3ZpZGVycz8/W10pLm1hcChlPT5lLm5hbWUpKSxpZT1TKCgpPT5oLnRhcmdldHM/Lm1jcFNlcnZlcnM/P1tdKSxBPVMoKCk9PmgudGFyZ2V0cz8uYWdlbnRzPz9bXSksaj17bW9kZWxzOmBwcm92aWRlcnNgLG1jcDpgbWNwU2VydmVyc2AsYWdlbnRzOmBhZ2VudHNgfSxhZT17bW9kZWxzOmBXaGljaCBncm91cHMgY2FuIHJlYWNoIHdoaWNoIHByb3ZpZGVycywgYW5kIGhvdyBtYW55IG9mIGVhY2ggcHJvdmlkZXIncyBtb2RlbHMuYCxtY3A6YFdoaWNoIGdyb3VwcyBjYW4gcmVhY2ggd2hpY2ggTUNQIHNlcnZlcnMuYCxhZ2VudHM6YFdoaWNoIGdyb3VwcyBjYW4gcmVhY2ggd2hpY2ggYWdlbnRzLmB9LE09e21vZGVsczpgTm8gcHJvdmlkZXJzIGNvbmZpZ3VyZWQuYCxtY3A6YE5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQuYCxhZ2VudHM6YE5vIGFnZW50cyBjb25maWd1cmVkLmB9LE49UygoKT0+e2xldCBlPWpbaS5raW5kXTtyZXR1cm4gaS5raW5kPT09YG1vZGVsc2A/cmUudmFsdWUubWFwKHQ9Pih7a2V5OnQsbGFiZWw6dCxzZWN0aW9uOmV9KSk6KGkua2luZD09PWBtY3BgP2llLnZhbHVlOkEudmFsdWUpLm1hcCh0PT4oe2tleTp0Lm5hbWUsbGFiZWw6dC5uYW1lLHNlY3Rpb246ZX0pKX0pLFA9UygoKT0+UWUocy5kYXRhPy5ncm91cHM/P1tdLHJlLnZhbHVlLGllLnZhbHVlLEEudmFsdWUpKSxvZT1TKCgpPT5pLmtpbmQ9PT1gbW9kZWxzYD9oLm92ZXJ2aWV3IT09bnVsbDpoLnRhcmdldHMhPT1udWxsKSxzZT1TKCgpPT4kZShvZS52YWx1ZSxOLnZhbHVlLmxlbmd0aCxoLmVycm9yKSksY2U9UygoKT0+eWUoe2xvYWRpbmc6cy5sb2FkaW5nLGhhc0RhdGE6cy5kYXRhIT09bnVsbCxlcnJvcjpzLmVycm9yfSkpLGxlPVMoKCk9PmNlLnZhbHVlPT09YHJlYWR5YCYmUC52YWx1ZS5sZW5ndGg9PT0wKSxSPXthbGxvd2VkOiExfTtmdW5jdGlvbiBXKGUsdCl7cmV0dXJuIGVbdC5zZWN0aW9uXVt0LmtleV0/P1J9ZnVuY3Rpb24gRyhlKXt0eXBlb2YgZSE9YHN0cmluZ2B8fCFZZS5pbmNsdWRlcyhlKXx8YShgdXBkYXRlOmtpbmRgLGUpfWZ1bmN0aW9uIG1lKGUpe3JldHVybiBlLmFsbG93ZWQ/ZS56ZXJvP2BBbGxvd2VkLCBidXQgJHtlLmRldGFpbH0gcmVhY2hhYmxlIOKAlCB0aGUgbW9kZWwgZ3JhbnQgbWF0Y2hlcyBub25lIG9mIHRoaXMgcHJvdmlkZXIncyBtb2RlbHNgOmUuZGV0YWlsP2BBbGxvd2VkLCAke2UuZGV0YWlsfWA6YEFsbG93ZWRgOmBOb3QgYWxsb3dlZGB9ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIGUuYWxsb3dlZD9lLnplcm8/eTpsOm19ZnVuY3Rpb24gcShlKXtyZXR1cm4gZS5hbGxvd2VkP2UuemVybz9gdGV4dC1zdGF0dXMtd2FybmA6YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmQvNDBgfXJldHVybihlLHQpPT57bGV0IGE9XyhgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIGIoKSxnKEUobiksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKGQpLG51bGwse2RlZmF1bHQ6bygoKT0+W3AoRShEKSxudWxsLHtkZWZhdWx0Om8oKCk9PlsuLi50WzFdfHw9W3YoYEFjY2VzcyBtYXRyaXhgLC0xKV1dKSxfOjF9KSxwKEUoTCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bdihPKGFlW2kua2luZF0pLDEpXSksXzoxfSkscChFKEYpLHsibW9kZWwtdmFsdWUiOmkua2luZCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6R30se2RlZmF1bHQ6bygoKT0+W3AoRSh1ZSksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bKGIoITApLHcoZixudWxsLFQoRShZZSksZT0+KGIoKSxnKEUoSSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0Om8oKCk9Plt2KE8oRShYZSlbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSxfOjF9KSxjZS52YWx1ZT09PWBlcnJvcmA/KGIoKSxnKEUocikse2tleTowfSx7ZGVmYXVsdDpvKCgpPT5bcChkZSx7bWVzc2FnZTpFKHMpLmVycm9yLCJvbi1yZXRyeSI6RShzKS5mZXRjaENvbnN1bWVyc30sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pXSksXzoxfSkpOmNlLnZhbHVlPT09YHNrZWxldG9uYD8oYigpLGcoRShyKSx7a2V5OjF9LHtkZWZhdWx0Om8oKCk9PltwKEgse3Jvd3M6NCxjb2xzOjR9KV0pLF86MX0pKTpsZS52YWx1ZT8oYigpLGcoRShyKSx7a2V5OjJ9LHtkZWZhdWx0Om8oKCk9PltwKEsse3RpdGxlOmBObyBncm91cHMgY29uZmlndXJlZC5gLGRlc2NyaXB0aW9uOmBHcmFudCBhIGdyb3VwIGFjY2VzcyBmcm9tIHRoZSBDb25maWcgcGFnZSdzIGNoYW5nZSBoZWxwZXIuYH0se2RlZmF1bHQ6bygoKT0+W3AoRShjKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsb25DbGljazp0WzBdfHw9ZT0+RShlZSkuZ29UbyhgY29uZmlnYCx7aGVscGVyOmBncmFudGB9KX0se2RlZmF1bHQ6bygoKT0+Wy4uLnRbMl18fD1bdihgT3BlbiBjaGFuZ2UgaGVscGVyYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKTpzZS52YWx1ZT09PWBlcnJvcmA/KGIoKSxnKEUocikse2tleTozfSx7ZGVmYXVsdDpvKCgpPT5bcChkZSx7bWVzc2FnZTpFKGgpLmVycm9yfSxudWxsLDgsW2BtZXNzYWdlYF0pXSksXzoxfSkpOnNlLnZhbHVlPT09YGxvYWRpbmdgPyhiKCksZyhFKHIpLHtrZXk6NH0se2RlZmF1bHQ6bygoKT0+W3AoSCx7cm93czpQLnZhbHVlLmxlbmd0aCxjb2xzOjR9LG51bGwsOCxbYHJvd3NgXSldKSxfOjF9KSk6c2UudmFsdWU9PT1gZW1wdHlgPyhiKCksZyhFKHIpLHtrZXk6NX0se2RlZmF1bHQ6bygoKT0+W3AoSyx7dGl0bGU6TVtpLmtpbmRdfSxudWxsLDgsW2B0aXRsZWBdKV0pLF86MX0pKTooYigpLGcoRShyKSx7a2V5OjYsY2xhc3M6YG92ZXJmbG93LXgtYXV0b2B9LHtkZWZhdWx0Om8oKCk9PltwKEUoViksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKHBlKSxudWxsLHtkZWZhdWx0Om8oKCk9PltwKEUoVSksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKFgpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLnRbM118fD1bdihgR3JvdXBgLC0xKV1dKSxfOjF9KSwoYighMCksdyhmLG51bGwsVChOLnZhbHVlLGU9PihiKCksZyhFKFgpLHtrZXk6ZS5rZXl9LHtkZWZhdWx0Om8oKCk9Plt2KE8oZS5sYWJlbCksMSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pLHAoRSh6KSxudWxsLHtkZWZhdWx0Om8oKCk9PlsoYighMCksdyhmLG51bGwsVChQLnZhbHVlLGU9PihiKCksZyhFKFUpLHtrZXk6ZS5ncm91cH0se2RlZmF1bHQ6bygoKT0+W3AoRShYKSx7c2NvcGU6YHJvd2AsY2xhc3M6YGZvbnQtbWVkaXVtYH0se2RlZmF1bHQ6bygoKT0+W3YoTyhlLmdyb3VwKSwxKV0pLF86Mn0sMTAyNCksKGIoITApLHcoZixudWxsLFQoTi52YWx1ZSx0PT4oYigpLGcoRShCKSx7a2V5OnQua2V5LGNsYXNzOmB0ZXh0LWNlbnRlcmAsdGl0bGU6VyhlLHQpLmRldGFpbH0se2RlZmF1bHQ6bygoKT0+W3AoYSx7aWNvbjpoZShXKGUsdCkpLGNsYXNzOmsoW3EoVyhlLHQpKSxgc2l6ZS0zLjVgXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSxXKGUsdCkuZGV0YWlsPyhiKCksdyhgc3BhbmAsZXQsTyhXKGUsdCkuZGV0YWlsKSwxKSk6eChgYCwhMCksQyhgc3BhbmAsdHQsTyhtZShXKGUsdCkpKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKSksMTI4KSldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pXSksXzoxfSkpXSksXzoxfSl9fX0pLHJ0PVtgYXJpYS1sYWJlbGAsYGFyaWEtdmFsdWVub3dgLGBhcmlhLXZhbHVldGV4dGAsYHRpdGxlYF0saXQ9QSh7X19uYW1lOmBVc2FnZUJhcmAscHJvcHM6e3JhdGlvOnt9LGxhYmVsOnt9LHZhbHVlVGV4dDp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IG49ZSxyPVMoKCk9PlRlKG4ucmF0aW8pKSxpPVMoKCk9Pk1hdGgubWluKDEwMCxNYXRoLm1heCgwLG4ucmF0aW8qMTAwKSkpLG89UygoKT0+TWF0aC5yb3VuZChpLnZhbHVlKSkscz17bm9ybWFsOmBiZy1wcmltYXJ5YCxhbWJlcjpgYmctYmFyLWFtYmVyYCxyZWQ6YGJnLWRlc3RydWN0aXZlYH07cmV0dXJuKGMsbCk9PihiKCksdyhgc3BhbmAse3JvbGU6YG1ldGVyYCwiYXJpYS1sYWJlbCI6ZS5sYWJlbCwiYXJpYS12YWx1ZW5vdyI6by52YWx1ZSwiYXJpYS12YWx1ZW1pbiI6YDBgLCJhcmlhLXZhbHVlbWF4IjpgMTAwYCwiYXJpYS12YWx1ZXRleHQiOmUudmFsdWVUZXh0LHRpdGxlOmUudmFsdWVUZXh0LGNsYXNzOmsoRShhKShgcmVsYXRpdmUgaW5saW5lLWJsb2NrIGgtMS41IHctMTQgc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtZnVsbCBiZy1tdXRlZCBhbGlnbi1taWRkbGVgLG4uY2xhc3MpKX0sW0MoYHNwYW5gLHtjbGFzczprKFtgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCByb3VuZGVkLWZ1bGxgLHNbci52YWx1ZV1dKSxzdHlsZTp0KHt3aWR0aDpgJHtpLnZhbHVlfSVgfSl9LG51bGwsNildLDEwLHJ0KSl9fSksYXQ9e2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtNCBnYXAteS0xLjVgfSxvdD1BKHtfX25hbWU6YEJ1ZGdldFJhdGlvQmFyc2AscHJvcHM6e3JhdGlvczp7fX0sc2V0dXAoZSl7cmV0dXJuKHQsbik9PihiKCksdyhgZGl2YCxhdCxbKGIoITApLHcoZixudWxsLFQoZS5yYXRpb3MsZT0+KGIoKSx3KGBzcGFuYCx7a2V5OmUuaWQsY2xhc3M6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sW3YoTyhFKE9lKVtlLmlkXSkrYCBgLDEpLHAoaXQse3JhdGlvOmUucmF0aW8sbGFiZWw6RShPZSlbZS5pZF0sInZhbHVlLXRleHQiOkUoRGUpKGUpfSxudWxsLDgsW2ByYXRpb2AsYGxhYmVsYCxgdmFsdWUtdGV4dGBdKV0pKSksMTI4KSldKSl9fSksc3Q9NjAsY3Q9MzYwMCxsdD04NjQwMCx1dD02MCxkdD0zMDtmdW5jdGlvbiBmdChlLHQ9bmV3IERhdGUpe2lmKCFlKXJldHVybmBuZXZlcmA7bGV0IG49TWF0aC5mbG9vcih0LmdldFRpbWUoKS8xZTMpLHI9TWF0aC5tYXgoMCxuLWUpO2lmKHI8c3QpcmV0dXJuYGp1c3Qgbm93YDtpZihyPGN0KXJldHVybmAke01hdGguZmxvb3Ioci9zdCl9bSBhZ29gO2lmKHI8bHQpcmV0dXJuYCR7TWF0aC5mbG9vcihyL2N0KX1oIGFnb2A7bGV0IGk9TWF0aC5mbG9vcihyL2x0KTtyZXR1cm4gaTx1dD9gJHtpfWQgYWdvYDpgJHtNYXRoLmZsb29yKGkvZHQpfW1vIGFnb2B9ZnVuY3Rpb24gJCh0LG4scixpPVN0cmluZyxhPSEwLG8pe3JldHVybntpZDp0LGhlYWRlcjpuLGFjY2Vzc29yRm46cixtZXRhOnthbGlnbjpgcmlnaHRgfSxjZWxsOih7cm93OnR9KT0+e2lmKHQub3JpZ2luYWwuc3RvcmVEb3duKXJldHVybmA/YDtsZXQgcz1yKHQub3JpZ2luYWwpLGM9YT9lKFose3ZhbHVlOnN9KTppKHMpO2lmKCFvKXJldHVybiBjO2xldCBsPUVlKHQub3JpZ2luYWwpLmZpbmQoZT0+ZS5pZD09PW8pO2lmKCFsKXJldHVybiBjO2xldCB1PWE/YCR7cShsLnVzZWQpfSAvICR7cShsLmxpbWl0KX1gOmAke2kobC51c2VkKX0gLyAke2kobC5saW1pdCl9YDtyZXR1cm4gZShgc3BhbmAse2NsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEuNWB9LFtjLGUoaXQse3JhdGlvOmwucmF0aW8sbGFiZWw6T2Vbb10/P24sdmFsdWVUZXh0OnV9KV0pfX19ZnVuY3Rpb24gcHQoKXtyZXR1cm57aWQ6YHJlakRheWAsaGVhZGVyOmByZWplY3RlZC9kYXlgLGFjY2Vzc29yRm46ZT0+ZS5yZWplY3Rpb25zUGVyRGF5LG1ldGE6e2FsaWduOmByaWdodGB9LGNlbGw6KHtyb3c6dH0pPT57aWYodC5vcmlnaW5hbC5zdG9yZURvd24pcmV0dXJuYD9gO2xldCBuPXQub3JpZ2luYWwucmVqZWN0aW9uc1BlckRheTtyZXR1cm4gZShaLHt2YWx1ZTpuLGNsYXNzOm4+MD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwfSl9fX1mdW5jdGlvbiBtdCh0KXtyZXR1cm57aWQ6YGNvc3RNb250aFByb2pgLGhlYWRlcjpgY29zdC9tb250aCAocHJvai4pYCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PlBlKGUsdCkubWljcm9zPz8wLGNlbGw6KHtyb3c6bn0pPT57aWYobi5vcmlnaW5hbC5zdG9yZURvd24pcmV0dXJuYD9gO2xldCByPVBlKG4ub3JpZ2luYWwsdCk7cmV0dXJuIHIubWljcm9zPT09bnVsbD9lKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEZlKTplKGBzcGFuYCx7Y2xhc3M6ci53aWxsRXhjZWVkP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDAsdGl0bGU6ci53aWxsRXhjZWVkP0llOnZvaWQgMH0sSihyLm1pY3JvcykpfX19ZnVuY3Rpb24gaHQodCl7cmV0dXJue2lkOmBzb3VyY2VgLGhlYWRlcjpgU291cmNlYCxhY2Nlc3NvckZuOmU9PnQoZSk/P2BgLGNlbGw6KHtyb3c6bn0pPT5lKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHQobi5vcmlnaW5hbCk/P2DigJRgKX19ZnVuY3Rpb24gZ3QoZSl7cmV0dXJue2lkOmBsYXN0U2VlbmAsaGVhZGVyOmBMYXN0IHNlZW5gLGFjY2Vzc29yRm46ZT0+ZS5sYXN0U2Vlbj8/MCxjZWxsOih7cm93OnR9KT0+ZnQodC5vcmlnaW5hbC5sYXN0U2VlbixlKX19ZnVuY3Rpb24gX3QodCxuLHIsaT1uZXcgRGF0ZSxhKXtsZXQgbz1be2lkOmBpZGAsaGVhZGVyOnQsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6dH0pPT5lKFZlLHtjbGFzczpgZm9udC1tZWRpdW1gLGxhYmVsOnQub3JpZ2luYWwuaWQsa2luZDpgdXNlcmAsaWQ6dC5vcmlnaW5hbC5pZH0pfSx7aWQ6YHNlY29uZGFyeWAsaGVhZGVyOm4sYWNjZXNzb3JGbjpyLHNvcnRpbmdGbjpgYWxwaGFudW1lcmljYCxjZWxsOih7cm93OnR9KT0+ZShgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxyKHQub3JpZ2luYWwpKX1dO3JldHVybiBhJiZvLnB1c2goaHQoYSkpLG8ucHVzaCh7aWQ6YGxpbWl0c2AsaGVhZGVyOmBMaW1pdHNgLGFjY2Vzc29yRm46ZT0+RyhlLmxpbWl0cyksY2VsbDooe3Jvdzp0fSk9PmUoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sRyh0Lm9yaWdpbmFsLmxpbWl0cykpfSwkKGByZXFNaW5gLGByZXEvbWluYCxlPT5lLnJlcXVlc3RzUGVyTWludXRlLFN0cmluZywhMCxgcmVxTWluYCksJChgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5yZXF1ZXN0c1BlckRheSxTdHJpbmcsITAsYHJlcURheWApLHB0KCksJChgdG9rSW5EYXlgLGB0b2tJbi9kYXlgLGU9PmUudG9rZW5zSW5QZXJEYXksU3RyaW5nLCEwLGB0b2tEYXlgKSwkKGB0b2tPdXREYXlgLGB0b2tPdXQvZGF5YCxlPT5lLnRva2Vuc091dFBlckRheSxTdHJpbmcsITAsYHRva0RheWApLCQoYHRva0luTW9udGhgLGB0b2tJbi9tb250aGAsZT0+ZS50b2tlbnNJblBlck1vbnRoLFN0cmluZywhMCxgdG9rTW9udGhgKSwkKGB0b2tPdXRNb250aGAsYHRva091dC9tb250aGAsZT0+ZS50b2tlbnNPdXRQZXJNb250aCxTdHJpbmcsITAsYHRva01vbnRoYCksJChgY29zdERheWAsYGNvc3QvZGF5YCxlPT5lLmNvc3RQZXJEYXlNaWNyb1VzZCxKLCExLGBjb3N0RGF5YCksJChgY29zdE1vbnRoYCxgY29zdC9tb250aGAsZT0+ZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxKLCExLGBjb3N0TW9udGhgKSxtdChpKSxndChpKSksb312YXIgdnQ9QSh7X19uYW1lOmBVc2FnZVRhYmxlYCxwcm9wczp7aWRMYWJlbDp7fSxlbnRyaWVzOnt9LHNlY29uZGFyeUNvbHVtbkxhYmVsOnt9LHNlY29uZGFyeVZhbHVlOnt0eXBlOkZ1bmN0aW9ufSxlbXB0eU1lc3NhZ2U6e30sbm93Ont9LHNvcnRpbmc6e30sc291cmNlVmFsdWU6e3R5cGU6RnVuY3Rpb259fSxlbWl0czpbYHVwZGF0ZTpzb3J0aW5nYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPXQsaT1TKCgpPT5fdChuLmlkTGFiZWwsbi5zZWNvbmRhcnlDb2x1bW5MYWJlbCxuLnNlY29uZGFyeVZhbHVlLG4ubm93LG4uc291cmNlVmFsdWUpKTtyZXR1cm4odCxuKT0+KGIoKSxnKFNlLHtjb2x1bW5zOmkudmFsdWUsZGF0YTplLmVudHJpZXMsImVtcHR5LW1lc3NhZ2UiOmUuZW1wdHlNZXNzYWdlLCJyb3ctY2xhc3MiOmU9PmUuc3RvcmVEb3duP2BiZy1kZXN0cnVjdGl2ZS8xMGA6dm9pZCAwLHNvcnRpbmc6ZS5zb3J0aW5nLCJvblVwZGF0ZTpzb3J0aW5nIjpuWzBdfHw9ZT0+cihgdXBkYXRlOnNvcnRpbmdgLGUpfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgLGByb3ctY2xhc3NgLGBzb3J0aW5nYF0pKX19KSx5dD17dXNlcnM6YEdyb3VwYCxncm91cHM6YE1lbWJlcnNgfTtmdW5jdGlvbiBidChlKXtyZXR1cm4gbWUoZSkudG9GaXhlZCg2KX1mdW5jdGlvbiB4dChlLHQsbixyPW5ldyBEYXRlKXtsZXQgaT1bYE5hbWVgLHl0W3RdLGBMaW1pdHNgLGByZXEvbWluYCxgcmVxL2RheWAsYHJlamVjdGVkL2RheWAsYHRva0luL2RheWAsYHRva091dC9kYXlgLGB0b2tJbi9tb250aGAsYHRva091dC9tb250aGAsYGNvc3QvZGF5IChVU0QpYCxgY29zdC9tb250aCAoVVNEKWAsYGNvc3QvbW9udGggKHByb2ouLCBVU0QpYCxgbGFzdCBzZWVuICh1bml4IHNlY29uZHMpYF0sYT1lLm1hcChlPT57bGV0IHQ9ZS5zdG9yZURvd24saT10P251bGw6UGUoZSxyKS5taWNyb3M7cmV0dXJuW2UuaWQsbihlKSxHKGUubGltaXRzKSx0P2A/YDplLnJlcXVlc3RzUGVyTWludXRlLHQ/YD9gOmUucmVxdWVzdHNQZXJEYXksdD9gP2A6ZS5yZWplY3Rpb25zUGVyRGF5LHQ/YD9gOmUudG9rZW5zSW5QZXJEYXksdD9gP2A6ZS50b2tlbnNPdXRQZXJEYXksdD9gP2A6ZS50b2tlbnNJblBlck1vbnRoLHQ/YD9gOmUudG9rZW5zT3V0UGVyTW9udGgsdD9gP2A6YnQoZS5jb3N0UGVyRGF5TWljcm9Vc2QpLHQ/YD9gOmJ0KGUuY29zdFBlck1vbnRoTWljcm9Vc2QpLHQ/YD9gOmk9PT1udWxsP0ZlOmJ0KGkpLGUubGFzdFNlZW4/PzBdfSk7cmV0dXJuIEFlKGksYSl9ZnVuY3Rpb24gU3QoZSx0KXtyZXR1cm4gZS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIEN0KGUsdCl7cmV0dXJuIGUuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX1mdW5jdGlvbiB3dChlLHQpe3JldHVybiB0LmZpbHRlcih0PT4odC5ncm91cHM/P1t0Lmdyb3VwTmFtZV0pLmluY2x1ZGVzKGUuaWQpKX1mdW5jdGlvbiBUdChlLHQsbil7cmV0dXJuIHd0KGUsdCkuZmlsdGVyKGU9PlN0KGUsbikpfWZ1bmN0aW9uIEV0KGUsdCxuKXtyZXR1cm4gQ3QoZSxuKXx8VHQoZSx0LG4pLmxlbmd0aD4wfXZhciBEdD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxPdD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0sa3Q9e2tleTowLGNsYXNzOmBtYi0zIGZsZXggZmxleC13cmFwIGdhcC14LTQgZ2FwLXktMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEF0PXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxqdD17Y2xhc3M6YHNocmluay0wIHB5LTIuNSBmb250LW1lZGl1bWB9LE10PXtjbGFzczpgc3Itb25seWB9LE50PXtjbGFzczpgZmxleCBmbGV4LTEgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC00IGdhcC15LTEgcHItMiB0ZXh0LWxlZnRgfSxQdD17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LEZ0PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sSXQ9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxMdD17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0sUnQ9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0senQ9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxCdD17a2V5OjAsY2xhc3M6YGZsZXggZmxleC13cmFwIGdhcC0xLjVgfSxWdD17a2V5OjEsY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEh0PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LFV0PXtrZXk6MSxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sV3Q9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sR3Q9e2tleToxLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxLdD17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0scXQ9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMmB9LEp0PWBHbG9iIHBhdHRlcm4g4oCUIG1hdGNoZXMgbGlrZSBhIHNoZWxsIHdpbGRjYXJkICgqLCA/LCBbLi4uXSlgLFl0PUEoe19fbmFtZTpgQ29uc3VtZXJEaXJlY3RvcnlgLHNldHVwKGUpe2xldCB0PXRlKCksaT1mZSgpLGE9bmUoKSxsPVMoKCk9PnQudXNhZ2UpLG09UygoKT0+eWUoe2xvYWRpbmc6IXQubGFzdFVwZGF0ZWQsaGFzRGF0YTpsLnZhbHVlIT09bnVsbCxlcnJvcjp0LmVycm9yfSkpO3UoKCk9PntpLmVuc3VyZUNvbnN1bWVycygpfSk7bGV0e25vdzpfLHN0YXJ0Onksc3RvcDpBfT1rZSgpO3UoeSkscmUoQSk7bGV0IHVlPVMoKCk9PntsZXQgZT17fTtmb3IobGV0IG4gb2YgdC5vdmVydmlldz8uZ3JvdXBzPz9bXSllW24ubmFtZV09bi5tZW1iZXJDb3VudDtyZXR1cm4gZX0pO2Z1bmN0aW9uIEYoZSl7cmV0dXJuKGUuZ3JvdXBzPz8oZS5ncm91cE5hbWU9PT12b2lkIDA/W106W2UuZ3JvdXBOYW1lXSkpLmpvaW4oYCwgYCl9ZnVuY3Rpb24gSShlKXtsZXQgdD11ZS52YWx1ZVtlLmlkXTtyZXR1cm4gdD09PXZvaWQgMD9gYDpTdHJpbmcodCl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gaS5kYXRhPy51c2Vycy5maW5kKHQ9PnQubmFtZT09PWUuaWQpPy5zb3VyY2V9bGV0IHBlPVMoe2dldDooKT0+YS5wYXJhbXMucT8/YGAsc2V0OmU9PmEuZ29UbyhgY29uc3VtZXJzYCx7Li4uYS5wYXJhbXMscTplfSl9KSx7cXVlcnk6eixub3JtYWxpemVkOkIsaGFzUXVlcnk6Vn09QmUocGUpLEg9UygoKT0+e2xldCBlPWwudmFsdWU/Lmdyb3Vwcz8/W107aWYoIVYudmFsdWUpcmV0dXJuIGU7bGV0IHQ9bC52YWx1ZT8udXNlcnM/P1tdO3JldHVybiBlLmZpbHRlcihlPT5FdChlLHQsQi52YWx1ZSkpfSksVT1TKCgpPT5WLnZhbHVlP0gudmFsdWUuZmlsdGVyKGU9PiFDdChlLEIudmFsdWUpKS5tYXAoZT0+ZS5pZCk6W10pO2Z1bmN0aW9uIFcoZSl7bGV0IHQ9bC52YWx1ZT8udXNlcnM/P1tdO3JldHVybiFWLnZhbHVlfHxDdChlLEIudmFsdWUpP3d0KGUsdCk6VHQoZSx0LEIudmFsdWUpfWxldCBtZT1TKCgpPT5sLnZhbHVlPy5ncm91cHMubGVuZ3RoP1YudmFsdWU/YG5vIGdyb3VwcyBtYXRjaCAiJHt6LnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCksaGU9UygoKT0+KGwudmFsdWU/Lmdyb3Vwcy5sZW5ndGg/PzApPT09MCYmIVYudmFsdWUpLHE9UygoKT0+e2xldCBlPWwudmFsdWU/LnVzZXJzPz9bXTtpZighVi52YWx1ZSlyZXR1cm4gZTtsZXQgdD1sLnZhbHVlPy5ncm91cHM/P1tdLG49bmV3IFNldCh0LmZpbHRlcihlPT5DdChlLEIudmFsdWUpKS5tYXAoZT0+ZS5pZCkpO3JldHVybiBlLmZpbHRlcihlPT5TdChlLEIudmFsdWUpfHwoZS5ncm91cHM/P1tlLmdyb3VwTmFtZV0pLnNvbWUoZT0+ZSE9PXZvaWQgMCYmbi5oYXMoZSkpKX0pLGdlPVMoKCk9PmwudmFsdWU/LnVzZXJzLmxlbmd0aD9WLnZhbHVlP2BubyB1c2VycyBtYXRjaCAiJHt6LnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCksdmU9UygoKT0+X3QoYE5hbWVgLGBNZW1iZXJzYCxJLF8udmFsdWUpKSxYPWgoW10pLFNlPXdlKHtnZXQgZGF0YSgpe3JldHVybiBILnZhbHVlfSxnZXQgY29sdW1ucygpe3JldHVybiB2ZS52YWx1ZX0sZ2V0Q29yZVJvd01vZGVsOnhlKCksZ2V0U29ydGVkUm93TW9kZWw6Q2UoKSxvblNvcnRpbmdDaGFuZ2U6ZT0+S2UoZSxYKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gWC52YWx1ZX19fSksVGU9UygoKT0+U2UuZ2V0Um93TW9kZWwoKS5yb3dzKSxEZT1uZXcgU2V0KFtgaWRgLGBzZWNvbmRhcnlgLGByZXFEYXlgLGBjb3N0RGF5YF0pLE9lPVMoKCk9PlNlLmdldEhlYWRlckdyb3VwcygpWzBdLmhlYWRlcnMuZmlsdGVyKGU9PkRlLmhhcyhlLmNvbHVtbi5pZCkpKSxBZT1pZSh7bWFudWFsbHlFeHBhbmRlZDpuZXcgU2V0LG1hbnVhbGx5Q29sbGFwc2VkOm5ldyBTZXR9KSxNZT1TKCgpPT5QKEFlLFYudmFsdWUsVS52YWx1ZSkpO2Z1bmN0aW9uIExlKGUpe3NlKEFlLGUsTWUudmFsdWUuaGFzKGUpKX1sZXQgVmU9Uyh7Z2V0OigpPT5BcnJheS5mcm9tKE1lLnZhbHVlKSxzZXQ6ZT0+e2xldCB0PW5ldyBTZXQoZSk7Zm9yKGxldCBlIG9mIE1lLnZhbHVlKXQuaGFzKGUpfHxMZShlKTtmb3IobGV0IGUgb2YgdClNZS52YWx1ZS5oYXMoZSl8fExlKGUpfX0pO3MoeixlPT57ZS50cmltKCk9PT1gYCYmbGUoQWUpfSk7ZnVuY3Rpb24gSGUoZSl7cmV0dXJuL1sqP1tdLy50ZXN0KGUpfWZ1bmN0aW9uIFVlKGUsdCl7bGV0IG49UGUoZSx0KTtyZXR1cm57dGV4dDpuLm1pY3Jvcz09PW51bGw/RmU6SihuLm1pY3Jvcyksd2lsbEV4Y2VlZDpuLndpbGxFeGNlZWR9fWxldCBXZT1be2xhYmVsOmB0b2tJbi9kYXlgLHJlYWQ6ZT0+ZS50b2tlbnNJblBlckRheX0se2xhYmVsOmB0b2tPdXQvZGF5YCxyZWFkOmU9PmUudG9rZW5zT3V0UGVyRGF5fSx7bGFiZWw6YHRva0luL21vbnRoYCxyZWFkOmU9PmUudG9rZW5zSW5QZXJNb250aH0se2xhYmVsOmB0b2tPdXQvbW9udGhgLHJlYWQ6ZT0+ZS50b2tlbnNPdXRQZXJNb250aH1dLEdlPVMoKCk9Pl90KGBOYW1lYCxgR3JvdXBgLEYsXy52YWx1ZSxSKSkscWU9aChbXSksSmU9d2Uoe2dldCBkYXRhKCl7cmV0dXJuIHEudmFsdWV9LGdldCBjb2x1bW5zKCl7cmV0dXJuIEdlLnZhbHVlfSxnZXRDb3JlUm93TW9kZWw6eGUoKSxnZXRTb3J0ZWRSb3dNb2RlbDpDZSgpLG9uU29ydGluZ0NoYW5nZTplPT5LZShlLHFlKSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gcWUudmFsdWV9fX0pO2Z1bmN0aW9uIFllKCl7cmV0dXJuIHh0KEplLmdldFJvd01vZGVsKCkucm93cy5tYXAoZT0+ZS5vcmlnaW5hbCksYHVzZXJzYCxGLF8udmFsdWUpfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIHh0KFRlLnZhbHVlLm1hcChlPT5lLm9yaWdpbmFsKSxgZ3JvdXBzYCxJLF8udmFsdWUpfXJldHVybihlLHMpPT4oYigpLHcoYGRpdmAsRHQsW3AoemUse21vZGVsVmFsdWU6RSh6KSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6c1swXXx8PWU9PmVlKHopP3oudmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgdXNlcnMgb3IgZ3JvdXBzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLGwudmFsdWU/KGIoKSxnKEUobikse2tleTowfSx7ZGVmYXVsdDpvKCgpPT5bcChFKGQpLG51bGwse2RlZmF1bHQ6bygoKT0+W3AoRShEKSxudWxsLHtkZWZhdWx0Om8oKCk9PlsuLi5zWzRdfHw9W3YoYFRvdGFsYCwtMSldXSksXzoxfSkscChFKEwpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLnNbNV18fD1bdihgVXNhZ2Ugc3VtbWVkIGFjcm9zcyBldmVyeSB1c2VyIGFuZCBncm91cCBjb21iaW5lZC5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHAoRShyKSx7Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQgdGV4dC1zbSBzbTpncmlkLWNvbHMtNWB9LHtkZWZhdWx0Om8oKCk9PltwKFEse2xhYmVsOmBSZXF1ZXN0cy9kYXlgfSx7ZGVmYXVsdDpvKCgpPT5bcChaLHt2YWx1ZTpsLnZhbHVlLnRvdGFsLnJlcXVlc3RzUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pLF86MX0pLHAoUSx7bGFiZWw6YFJlamVjdGVkL2RheWAsdG9uZTpsLnZhbHVlLnRvdGFsLnJlamVjdGlvbnNQZXJEYXk+MD9gZGVzdHJ1Y3RpdmVgOmBkZWZhdWx0YH0se2RlZmF1bHQ6bygoKT0+W3AoWix7dmFsdWU6bC52YWx1ZS50b3RhbC5yZWplY3Rpb25zUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKV0pLF86MX0sOCxbYHRvbmVgXSkscChRLHtsYWJlbDpgVG9rZW5zIGluL2RheWB9LHtkZWZhdWx0Om8oKCk9PltwKFose3ZhbHVlOmwudmFsdWUudG90YWwudG9rZW5zSW5QZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSksXzoxfSkscChRLHtsYWJlbDpgVG9rZW5zIG91dC9kYXlgfSx7ZGVmYXVsdDpvKCgpPT5bcChaLHt2YWx1ZTpsLnZhbHVlLnRvdGFsLnRva2Vuc091dFBlckRheX0sbnVsbCw4LFtgdmFsdWVgXSldKSxfOjF9KSxwKFEse2xhYmVsOmBDb3N0L2RheWB9LHtkZWZhdWx0Om8oKCk9Plt2KE8oRShKKShsLnZhbHVlLnRvdGFsLmNvc3RQZXJEYXlNaWNyb1VzZCkpLDEpXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKTp4KGBgLCEwKSxsLnZhbHVlPyhiKCksZyhOZSx7a2V5OjEsIm10ZC1taWNyb3MiOmwudmFsdWUudG90YWwuY29zdFBlck1vbnRoTWljcm9Vc2QsbGltaXRzOmwudmFsdWUudG90YWwubGltaXRzLG5vdzpFKF8pfSxudWxsLDgsW2BtdGQtbWljcm9zYCxgbGltaXRzYCxgbm93YF0pKTp4KGBgLCEwKSxwKEUobiksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKGQpLG51bGwse2RlZmF1bHQ6bygoKT0+W0MoYGRpdmAsT3QsW0MoYGRpdmAsbnVsbCxbcChFKEQpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLnNbNl18fD1bdihgR3JvdXBzYCwtMSldXSksXzoxfSkscChFKEwpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLnNbN118fD1bdihgRXhwYW5kIGEgZ3JvdXAgdG8gc2VlIGl0cyBtZW1iZXIgdXNlcnMnIG93biB1c2FnZS5gLC0xKV1dKSxfOjF9KV0pLHAoamUse2ZpbGVuYW1lOmBjb25zdW1lcnMtZ3JvdXBzLmNzdmAsYnVpbGQ6WGV9KV0pXSksXzoxfSkscChFKHIpLG51bGwse2RlZmF1bHQ6bygoKT0+W20udmFsdWU9PT1gc2tlbGV0b25gPyhiKCksZyhfZSx7a2V5OjAscm93czozfSkpOm0udmFsdWU9PT1gZXJyb3JgPyhiKCksZyhkZSx7a2V5OjEsbWVzc2FnZTpFKHQpLmVycm9yLCJvbi1yZXRyeSI6RSh0KS5yZWZyZXNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOihiKCksdyhmLHtrZXk6Mn0sW1RlLnZhbHVlLmxlbmd0aD8oYigpLHcoYGRpdmAsa3QsWyhiKCEwKSx3KGYsbnVsbCxUKE9lLnZhbHVlLGU9PihiKCksZyhiZSx7a2V5OmUuaWQsaGVhZGVyOmV9LG51bGwsOCxbYGhlYWRlcmBdKSkpLDEyOCkpXSkpOngoYGAsITApLFRlLnZhbHVlLmxlbmd0aD8oYigpLGcoRShjZSkse2tleToxLG1vZGVsVmFsdWU6VmUudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnNbMV18fD1lPT5WZS52YWx1ZT1lLHR5cGU6YG11bHRpcGxlYCxjbGFzczpgcm91bmRlZC1tZCBib3JkZXIgcHgtM2B9LHtkZWZhdWx0Om8oKCk9PlsoYighMCksdyhmLG51bGwsVChUZS52YWx1ZSxlPT4oYigpLGcoRShqKSx7a2V5OmUub3JpZ2luYWwuaWQsdmFsdWU6ZS5vcmlnaW5hbC5pZH0se2RlZmF1bHQ6bygoKT0+W0MoYGRpdmAsQXQsW0MoYHNwYW5gLGp0LE8oZS5vcmlnaW5hbC5pZCksMSkscChFKE0pLHsiaGVhZGVyLWNsYXNzIjpgZmxleC0xYH0se2RlZmF1bHQ6bygoKT0+W0MoYHNwYW5gLE10LGBHcm91cCBgK08oZS5vcmlnaW5hbC5pZCkrYCBkZXRhaWxzYCwxKSxDKGBzcGFuYCxOdCxbQyhgc3BhbmAsUHQsTyhJKGUub3JpZ2luYWwpfHxgMGApK2AgbWVtYmVyc2AsMSksQyhgc3BhbmAsRnQsW2Uub3JpZ2luYWwuc3RvcmVEb3duPyhiKCksdyhmLHtrZXk6MH0sW3YoYD9gKV0sNjQpKTooYigpLGcoWix7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZXF1ZXN0c1BlckRheX0sbnVsbCw4LFtgdmFsdWVgXSkpLHNbOF18fD12KGAgcmVxL2RheSBgLC0xKV0pLEMoYHNwYW5gLEl0LE8oZS5vcmlnaW5hbC5zdG9yZURvd24/YD9gOkUoSikoZS5vcmlnaW5hbC5jb3N0UGVyRGF5TWljcm9Vc2QpKStgL2RheSBgLDEpXSldKSxfOjJ9LDEwMjQpXSkscChFKG9lKSxudWxsLHtkZWZhdWx0Om8oKCk9PltDKGBkbGAsTHQsW3AoTix7bGFiZWw6YFByb3ZpZGVyc2AsImxhYmVsLXRpdGxlIjpKdH0se2RlZmF1bHQ6bygoKT0+W2Uub3JpZ2luYWwucHJvdmlkZXJzPy5sZW5ndGg/KGIoKSx3KGBkaXZgLFJ0LFsoYighMCksdyhmLG51bGwsVChlLm9yaWdpbmFsLnByb3ZpZGVycyxlPT4oYigpLGcoRShZKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpvKCgpPT5bdihPKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooYigpLHcoYHNwYW5gLHp0LGBBbGwgcHJvdmlkZXJzYCkpXSksXzoyfSwxMDI0KSxwKE4se2xhYmVsOmBNb2RlbHNgLCJsYWJlbC10aXRsZSI6SnR9LHtkZWZhdWx0Om8oKCk9PltlLm9yaWdpbmFsLm1vZGVscz8ubGVuZ3RoPyhiKCksdyhgZGl2YCxCdCxbKGIoITApLHcoZixudWxsLFQoZS5vcmlnaW5hbC5tb2RlbHMsZT0+KGIoKSx3KGYse2tleTplfSxbSGUoZSk/KGIoKSxnKEUoWSkse2tleToxLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBtYXgtdy1mdWxsIHRydW5jYXRlIGZvbnQtbW9ubyBmb250LW5vcm1hbGAsdGl0bGU6ZX0se2RlZmF1bHQ6bygoKT0+W3YoTyhlKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTooYigpLGcoYWUse2tleTowLGlkOmV9LG51bGwsOCxbYGlkYF0pKV0sNjQpKSksMTI4KSldKSk6KGIoKSx3KGBzcGFuYCxWdCxgQWxsIG1vZGVsc2ApKV0pLF86Mn0sMTAyNCkscChOLHtsYWJlbDpgTUNQIHNlcnZlcnNgLCJsYWJlbC10aXRsZSI6SnR9LHtkZWZhdWx0Om8oKCk9PltlLm9yaWdpbmFsLm1jcFNlcnZlcnM/Lmxlbmd0aD8oYigpLHcoYGRpdmAsSHQsWyhiKCEwKSx3KGYsbnVsbCxUKGUub3JpZ2luYWwubWNwU2VydmVycyxlPT4oYigpLGcoRShZKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpvKCgpPT5bdihPKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooYigpLHcoYHNwYW5gLFV0LGBBbGwgTUNQIHNlcnZlcnNgKSldKSxfOjJ9LDEwMjQpLHAoTix7bGFiZWw6YEFnZW50c2AsImxhYmVsLXRpdGxlIjpKdH0se2RlZmF1bHQ6bygoKT0+W2Uub3JpZ2luYWwuYWdlbnRzPy5sZW5ndGg/KGIoKSx3KGBkaXZgLFd0LFsoYighMCksdyhmLG51bGwsVChlLm9yaWdpbmFsLmFnZW50cyxlPT4oYigpLGcoRShZKSx7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YG1heC13LWZ1bGwgdHJ1bmNhdGUgZm9udC1tb25vIGZvbnQtbm9ybWFsYCx0aXRsZTplfSx7ZGVmYXVsdDpvKCgpPT5bdihPKGUpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpKSwxMjgpKV0pKTooYigpLHcoYHNwYW5gLEd0LGBBbGwgYWdlbnRzYCkpXSksXzoyfSwxMDI0KV0pLEMoYGRsYCxLdCxbcChOLHtsYWJlbDpgTGltaXRzYH0se2RlZmF1bHQ6bygoKT0+W3YoTyhFKEcpKGUub3JpZ2luYWwubGltaXRzKSksMSldKSxfOjJ9LDEwMjQpLHAoTix7bGFiZWw6YHJlcS9taW5gLG51bWVyaWM6YGB9LHtkZWZhdWx0Om8oKCk9PltlLm9yaWdpbmFsLnN0b3JlRG93bj8oYigpLHcoZix7a2V5OjB9LFt2KGA/YCldLDY0KSk6KGIoKSxnKFose2tleToxLHZhbHVlOmUub3JpZ2luYWwucmVxdWVzdHNQZXJNaW51dGV9LG51bGwsOCxbYHZhbHVlYF0pKV0pLF86Mn0sMTAyNCkscChOLHtsYWJlbDpgcmVqZWN0ZWQvZGF5YCxudW1lcmljOmBgLGNsYXNzOmsoIWUub3JpZ2luYWwuc3RvcmVEb3duJiZlLm9yaWdpbmFsLnJlamVjdGlvbnNQZXJEYXk+MD9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwKX0se2RlZmF1bHQ6bygoKT0+W2Uub3JpZ2luYWwuc3RvcmVEb3duPyhiKCksdyhmLHtrZXk6MH0sW3YoYD9gKV0sNjQpKTooYigpLGcoWix7a2V5OjEsdmFsdWU6ZS5vcmlnaW5hbC5yZWplY3Rpb25zUGVyRGF5fSxudWxsLDgsW2B2YWx1ZWBdKSldKSxfOjJ9LDEwMzIsW2BjbGFzc2BdKSwoYigpLHcoZixudWxsLFQoV2UsdD0+cChOLHtrZXk6dC5sYWJlbCxsYWJlbDp0LmxhYmVsLG51bWVyaWM6YGB9LHtkZWZhdWx0Om8oKCk9PltlLm9yaWdpbmFsLnN0b3JlRG93bj8oYigpLHcoZix7a2V5OjB9LFt2KGA/YCldLDY0KSk6KGIoKSxnKFose2tleToxLHZhbHVlOnQucmVhZChlLm9yaWdpbmFsKX0sbnVsbCw4LFtgdmFsdWVgXSkpXSksXzoyfSwxMDMyLFtgbGFiZWxgXSkpLDY0KSkscChOLHtsYWJlbDpgY29zdC9tb250aGAsbnVtZXJpYzpgYH0se2RlZmF1bHQ6bygoKT0+W3YoTyhlLm9yaWdpbmFsLnN0b3JlRG93bj9gP2A6RShKKShlLm9yaWdpbmFsLmNvc3RQZXJNb250aE1pY3JvVXNkKSksMSldKSxfOjJ9LDEwMjQpLHAoTix7bGFiZWw6YGNvc3QvbW9udGggKHByb2ouKWAsbnVtZXJpYzpgYCxjbGFzczprKCFlLm9yaWdpbmFsLnN0b3JlRG93biYmVWUoZS5vcmlnaW5hbCxFKF8pKS53aWxsRXhjZWVkP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDApLHRpdGxlOiFlLm9yaWdpbmFsLnN0b3JlRG93biYmVWUoZS5vcmlnaW5hbCxFKF8pKS53aWxsRXhjZWVkP0UoSWUpOnZvaWQgMH0se2RlZmF1bHQ6bygoKT0+W3YoTyhlLm9yaWdpbmFsLnN0b3JlRG93bj9gP2A6VWUoZS5vcmlnaW5hbCxFKF8pKS50ZXh0KSwxKV0pLF86Mn0sMTAzMixbYGNsYXNzYCxgdGl0bGVgXSldKSxFKEVlKShlLm9yaWdpbmFsKS5sZW5ndGg/KGIoKSxnKG90LHtrZXk6MCxjbGFzczpgbWItM2AscmF0aW9zOkUoRWUpKGUub3JpZ2luYWwpfSxudWxsLDgsW2ByYXRpb3NgXSkpOngoYGAsITApLHNbOV18fD1DKGBwYCx7Y2xhc3M6YG1iLTEuNSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNZW1iZXJzYCwtMSkscCh2dCx7ImlkLWxhYmVsIjpgTmFtZWAsInNlY29uZGFyeS1jb2x1bW4tbGFiZWwiOmBHcm91cGAsZW50cmllczpXKGUub3JpZ2luYWwpLCJzZWNvbmRhcnktdmFsdWUiOkYsbm93OkUoXyksInNvdXJjZS12YWx1ZSI6Un0sbnVsbCw4LFtgZW50cmllc2AsYG5vd2BdKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKSk6aGUudmFsdWU/KGIoKSxnKEsse2tleToyLHRpdGxlOmBObyBncm91cHMgY29uZmlndXJlZC5gLGRlc2NyaXB0aW9uOmBHcmFudCBhIGdyb3VwIGFjY2VzcyBmcm9tIHRoZSBDb25maWcgcGFnZSdzIGNoYW5nZSBoZWxwZXIuYH0se2RlZmF1bHQ6bygoKT0+W3AoRShjKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsb25DbGljazpzWzJdfHw9ZT0+RShhKS5nb1RvKGBjb25maWdgLHtoZWxwZXI6YGdyYW50YH0pfSx7ZGVmYXVsdDpvKCgpPT5bLi4uc1sxMF18fD1bdihgT3BlbiBjaGFuZ2UgaGVscGVyYCwtMSldXSksXzoxfSldKSxfOjF9KSk6KGIoKSxnKEsse2tleTozLHRpdGxlOm1lLnZhbHVlfSxudWxsLDgsW2B0aXRsZWBdKSldLDY0KSldKSxfOjF9KV0pLF86MX0pLHAoRShuKSxudWxsLHtkZWZhdWx0Om8oKCk9PltwKEUoZCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bQyhgZGl2YCxxdCxbQyhgZGl2YCxudWxsLFtwKEUoRCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bLi4uc1sxMV18fD1bdihgVXNlcnNgLC0xKV1dKSxfOjF9KSxFKGkpLmRhdGE/LnVzZXJzRmlsZT8oYigpLGcoRShMKSx7a2V5OjB9LHtkZWZhdWx0Om8oKCk9Plt2KGBGaWxlLWJhY2tlZCB1c2VycyBsb2FkIGZyb20gYCtPKEUoaSkuZGF0YS51c2Vyc0ZpbGUpK2AuYCwxKV0pLF86MX0pKTp4KGBgLCEwKV0pLHAoamUse2ZpbGVuYW1lOmBjb25zdW1lcnMtdXNlcnMuY3N2YCxidWlsZDpZZX0pXSldKSxfOjF9KSxwKEUociksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChSZSx7c3RhdGU6bS52YWx1ZSxlcnJvcjpFKHQpLmVycm9yLCJvbi1yZXRyeSI6RSh0KS5yZWZyZXNoLHNrZWxldG9uOmB0YWJsZWAscm93czo1LGNvbHM6NX0se2RlZmF1bHQ6bygoKT0+W3AodnQseyJpZC1sYWJlbCI6YE5hbWVgLCJzZWNvbmRhcnktY29sdW1uLWxhYmVsIjpgR3JvdXBgLGVudHJpZXM6cS52YWx1ZSwic2Vjb25kYXJ5LXZhbHVlIjpGLCJlbXB0eS1tZXNzYWdlIjpnZS52YWx1ZSxub3c6RShfKSwic291cmNlLXZhbHVlIjpSLHNvcnRpbmc6cWUudmFsdWUsIm9uVXBkYXRlOnNvcnRpbmciOnNbM118fD1lPT5xZS52YWx1ZT1lfSxudWxsLDgsW2BlbnRyaWVzYCxgZW1wdHktbWVzc2FnZWAsYG5vd2AsYHNvcnRpbmdgXSldKSxfOjF9LDgsW2BzdGF0ZWAsYGVycm9yYCxgb24tcmV0cnlgXSldKSxfOjF9KV0pLF86MX0pXSkpfX0pLFh0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LFp0PXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxRdD17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMmB9LCR0PXtjbGFzczpgdGV4dC1zbWB9LGVuPXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LXNtYH0sdG49e2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxubj17Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHJuPXtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYW49e2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sb249e2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sc249QSh7X19uYW1lOmBVc2VyRGV0YWlsYCxwcm9wczp7dXNlcklkOnt9fSxlbWl0czpbYGNsb3NlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IGE9ZSxsPXQsbT10ZSgpLGg9ZmUoKSxlZT1HZSgpLHk9UigpLHtub3c6bmUsc3RhcnQ6aWUsc3RvcDprfT1rZSgpO3UoaWUpLHJlKGspO2xldCBBPVMoKCk9Pm0udXNhZ2U/LnVzZXJzLmZpbmQoZT0+ZS5pZD09PWEudXNlcklkKSksaj1TKCgpPT5oLmRhdGE/LnVzZXJzLmZpbmQoZT0+ZS5uYW1lPT09YS51c2VySWQpKSxNPVMoKCk9Pm0ub3ZlcnZpZXc/LmZlYXR1cmVzLnVzZXJNb2RlbFN0YXRzPz8hMSk7ZnVuY3Rpb24gTigpe3JldHVybiBoLmZldGNoVXNlckRldGFpbChhLnVzZXJJZCx5LndpbmRvdyx5LnNwYW4sTS52YWx1ZSl9dSgoKT0+e04oKSxlZS5yZWZyZXNoKCl9KSxzKFsoKT0+YS51c2VySWQsKCk9PnkucmFuZ2UsTV0sTik7bGV0IFA9UygoKT0+aC5kZXRhaWxbYS51c2VySWRdKSxvZT1TKCgpPT4oUC52YWx1ZT8ucmVxU2VyaWVzPy5idWNrZXRzPz9bXSkubWFwKGU9PmhlKGUsUC52YWx1ZT8ucmVxU2VyaWVzPy53aW5kb3c/P3kud2luZG93KSkpLHNlPVMoKCk9Plt7bGFiZWw6YFJlcXVlc3RzYCxkYXRhOlAudmFsdWU/LnJlcVNlcmllcz8uc2VyaWVzWzBdPy5wb2ludHM/P1tdLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH1dKSxjZT1TKCgpPT4oUC52YWx1ZT8uY29zdFNlcmllcz8uYnVja2V0cz8/W10pLm1hcChlPT5oZShlLFAudmFsdWU/LmNvc3RTZXJpZXM/LndpbmRvdz8/eS53aW5kb3cpKSksbGU9UygoKT0+W3tsYWJlbDpgQ29zdGAsZGF0YTooUC52YWx1ZT8uY29zdFNlcmllcz8uc2VyaWVzWzBdPy5wb2ludHM/P1tdKS5tYXAoZT0+ZSksY29sb3I6YC0tY2hhcnQtY29zdGB9XSksdWU9UygoKT0+eWUoe2xvYWRpbmc6UC52YWx1ZT8ubG9hZGluZz8/ITEsaGFzRGF0YTpQLnZhbHVlPy5yZXFTZXJpZXMhPW51bGwsZXJyb3I6UC52YWx1ZT8ucmVxRXJyb3I/P2BgfSkpLEY9UygoKT0+eWUoe2xvYWRpbmc6UC52YWx1ZT8ubG9hZGluZz8/ITEsaGFzRGF0YTpQLnZhbHVlPy5jb3N0U2VyaWVzIT1udWxsLGVycm9yOlAudmFsdWU/LmNvc3RFcnJvcj8/YGB9KSksST1TKCgpPT4hTS52YWx1ZXx8UC52YWx1ZT8ubW9kZWxUb3RhbHNVbmF2YWlsYWJsZT09PSEwKSxtZT1TKCgpPT5bLi4uUC52YWx1ZT8ubW9kZWxUb3RhbHM/LnJvd3M/P1tdXS5zb3J0KChlLHQpPT4odC52YWx1ZXMuY29zdD8/dC52YWx1ZXMucmVxPz8wKS0oZS52YWx1ZXMuY29zdD8/ZS52YWx1ZXMucmVxPz8wKSkpLHE9UygoKT0+eWUoe2xvYWRpbmc6UC52YWx1ZT8ubG9hZGluZz8/ITEsaGFzRGF0YTpQLnZhbHVlPy5tb2RlbFRvdGFscyE9bnVsbCxlcnJvcjpQLnZhbHVlPy5tb2RlbEVycm9yPz9gYH0pKSxfZT1TKCgpPT5lZS5ldmVudHMuZmlsdGVyKGU9PmUudXNlcj09PWEudXNlcklkKS5zbGljZSgwLDEwKSksYmU9UygoKT0+QS52YWx1ZT9FZShBLnZhbHVlKTpbXSkseGU9UygoKT0+e2xldCBlPUEudmFsdWU/LmxpbWl0cz8uY29zdFBlck1vbnRoVVNEO3JldHVybiFBLnZhbHVlfHwhZT9udWxsOk1lKEEudmFsdWUuY29zdFBlck1vbnRoTWljcm9Vc2QsVyhlKSxuZS52YWx1ZSl9KTtyZXR1cm4odCxhKT0+e2xldCBzPV8oYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBiKCksdyhgZGl2YCxYdCxbQyhgZGl2YCxadCxbcChFKGMpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBzbWAsb25DbGljazphWzBdfHw9ZT0+bChgY2xvc2VgKX0se2RlZmF1bHQ6bygoKT0+W3Aocyx7aWNvbjpFKGkpLGNsYXNzOmBzaXplLTMuNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksYVsxXXx8PXYoYCBCYWNrIHRvIGRpcmVjdG9yeSBgLC0xKV0pLF86MX0pXSkscChFKG4pLG51bGwse2RlZmF1bHQ6bygoKT0+W3AoRShkKSxudWxsLHtkZWZhdWx0Om8oKCk9PltDKGBkaXZgLFF0LFtwKEUoRCkse2NsYXNzOmBtaW4tdy0wIGJyZWFrLWFsbCBmb250LW1vbm9gfSx7ZGVmYXVsdDpvKCgpPT5bdihPKGUudXNlcklkKSwxKV0pLF86MX0pLGoudmFsdWU/LmFkbWluPyhiKCksZyhFKFkpLHtrZXk6MCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0Om8oKCk9PlsuLi5hWzJdfHw9W3YoYGFkbWluYCwtMSldXSksXzoxfSkpOngoYGAsITApLGoudmFsdWU/LnNvdXJjZT8oYigpLGcoRShZKSx7a2V5OjEsdmFyaWFudDpgc2Vjb25kYXJ5YH0se2RlZmF1bHQ6bygoKT0+W3YoTyhqLnZhbHVlLnNvdXJjZSksMSldKSxfOjF9KSk6eChgYCwhMCldKSxBLnZhbHVlPy5ncm91cHM/Lmxlbmd0aHx8QS52YWx1ZT8uZ3JvdXBOYW1lPyhiKCksZyhFKEwpLHtrZXk6MH0se2RlZmF1bHQ6bygoKT0+W3YoYCBNZW1iZXIgb2YgYCtPKChBLnZhbHVlPy5ncm91cHM/P1tBLnZhbHVlPy5ncm91cE5hbWVdKS5maWx0ZXIoQm9vbGVhbikuam9pbihgLCBgKSksMSldKSxfOjF9KSk6eChgYCwhMCldKSxfOjF9KSxBLnZhbHVlPyhiKCksZyhFKHIpLHtrZXk6MSxjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy00YH0se2RlZmF1bHQ6bygoKT0+W3AoUSx7bGFiZWw6YFJlcXVlc3RzL2RheWB9LHtkZWZhdWx0Om8oKCk9PltwKFose3ZhbHVlOkEudmFsdWUucmVxdWVzdHNQZXJEYXl9LG51bGwsOCxbYHZhbHVlYF0pXSksXzoxfSkscChRLHtsYWJlbDpgQ29zdC9kYXlgfSx7ZGVmYXVsdDpvKCgpPT5bdihPKEUoSikoQS52YWx1ZS5jb3N0UGVyRGF5TWljcm9Vc2QpKSwxKV0pLF86MX0pLHAoUSx7bGFiZWw6YENvc3QvbW9udGhgfSx7ZGVmYXVsdDpvKCgpPT5bdihPKEUoSikoQS52YWx1ZS5jb3N0UGVyTW9udGhNaWNyb1VzZCkpLDEpXSksXzoxfSksQyhgZGl2YCxudWxsLFthWzRdfHw9QyhgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGltaXRzYCwtMSksQyhgcGAsJHQsTyhFKEcpKEEudmFsdWUubGltaXRzKSksMSldKV0pLF86MX0pKTooYigpLGcoRShyKSx7a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6bygoKT0+Wy4uLmFbM118fD1bdihgIE5vIHVzYWdlIHNjb3BlIGZvciB0aGlzIHVzZXIgeWV0IOKAlCBpdCBhcHBlYXJzIGFmdGVyIHRoZWlyIGZpcnN0IHJlcXVlc3QuIGAsLTEpXV0pLF86MX0pKV0pLF86MX0pLEEudmFsdWUmJmJlLnZhbHVlLmxlbmd0aD8oYigpLGcoRShuKSx7a2V5OjB9LHtkZWZhdWx0Om8oKCk9PltwKEUoZCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKEQpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLmFbNV18fD1bdihgSGVhZHJvb21gLC0xKV1dKSxfOjF9KSx4ZS52YWx1ZT8oYigpLGcoRShMKSx7a2V5OjB9LHtkZWZhdWx0Om8oKCk9Plt2KGBBdCB0aGUgY3VycmVudCBwYWNlLCBjb3N0L21vbnRoIHJ1bnMgb3V0IGFyb3VuZCBgK08oRSh2ZSkoeGUudmFsdWUpKStgLmAsMSldKSxfOjF9KSk6eChgYCwhMCldKSxfOjF9KSxwKEUociksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChvdCx7cmF0aW9zOmJlLnZhbHVlfSxudWxsLDgsW2ByYXRpb3NgXSldKSxfOjF9KV0pLF86MX0pKTp4KGBgLCEwKSxwKEhlLHt0aXRsZTpgUmVxdWVzdHMgb3ZlciB0aW1lYCxzdGF0ZTp1ZS52YWx1ZSxlcnJvcjpQLnZhbHVlPy5yZXFFcnJvcj8/YGAsIm9uLXJldHJ5IjpOLGxhYmVsczpvZS52YWx1ZSxkYXRhc2V0czpzZS52YWx1ZSwiYXJpYS1sYWJlbCI6YFJlcXVlc3RzIG92ZXIgdGltZSBmb3IgJHtlLnVzZXJJZH1gfSxudWxsLDgsW2BzdGF0ZWAsYGVycm9yYCxgbGFiZWxzYCxgZGF0YXNldHNgLGBhcmlhLWxhYmVsYF0pLHAoSGUse3RpdGxlOmBDb3N0IG92ZXIgdGltZWAsc3RhdGU6Ri52YWx1ZSxlcnJvcjpQLnZhbHVlPy5jb3N0RXJyb3I/P2BgLCJvbi1yZXRyeSI6TixsYWJlbHM6Y2UudmFsdWUsZGF0YXNldHM6bGUudmFsdWUsInZhbHVlLWZvcm1hdHRlciI6RShKKSwiYXJpYS1sYWJlbCI6YENvc3Qgb3ZlciB0aW1lIGZvciAke2UudXNlcklkfWB9LG51bGwsOCxbYHN0YXRlYCxgZXJyb3JgLGBsYWJlbHNgLGBkYXRhc2V0c2AsYHZhbHVlLWZvcm1hdHRlcmAsYGFyaWEtbGFiZWxgXSkscChFKG4pLG51bGwse2RlZmF1bHQ6bygoKT0+W3AoRShkKSxudWxsLHtkZWZhdWx0Om8oKCk9PltwKEUoRCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bLi4uYVs2XXx8PVt2KGBNb2RlbHMgdXNlZGAsLTEpXV0pLF86MX0pXSksXzoxfSkscChFKHIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LHtkZWZhdWx0Om8oKCk9PltwKFVlLHt3aW5kb3c6RSh5KS53aW5kb3csc3BhbjpFKHkpLnNwYW59LG51bGwsOCxbYHdpbmRvd2AsYHNwYW5gXSksSS52YWx1ZT8oYigpLGcoV2Use2tleTowLHRpdGxlOmBQZXItdXNlci1tb2RlbCBzdGF0aXN0aWNzIGFyZSBvZmZgLCJjb25maWcta2V5IjpgYWRtaW4uc3RhdHMudXNlck1vZGVsYCxwdXJwb3NlOmB0byBzZWUgYSBwZXItbW9kZWwgYnJlYWtkb3duIGZvciB0aGlzIHVzZXIuYH0pKTpxLnZhbHVlPT09YHNrZWxldG9uYD8oYigpLGcoSCx7a2V5OjEscm93czozLGNvbHM6M30pKTpxLnZhbHVlPT09YGVycm9yYD8oYigpLGcoZGUse2tleToyLG1lc3NhZ2U6UC52YWx1ZT8ubW9kZWxFcnJvcj8/YGAsIm9uLXJldHJ5IjpOfSxudWxsLDgsW2BtZXNzYWdlYF0pKTptZS52YWx1ZS5sZW5ndGg/KGIoKSxnKEUoVikse2tleTo0fSx7ZGVmYXVsdDpvKCgpPT5bcChFKHBlKSxudWxsLHtkZWZhdWx0Om8oKCk9PltwKEUoVSksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKFgpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLmFbN118fD1bdihgTW9kZWxgLC0xKV1dKSxfOjF9KSxwKEUoWCkse2NsYXNzOmB0ZXh0LXJpZ2h0YH0se2RlZmF1bHQ6bygoKT0+Wy4uLmFbOF18fD1bdihgUmVxdWVzdHNgLC0xKV1dKSxfOjF9KSxwKEUoWCkse2NsYXNzOmB0ZXh0LXJpZ2h0YH0se2RlZmF1bHQ6bygoKT0+Wy4uLmFbOV18fD1bdihgQ29zdGAsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9KSxwKEUoeiksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bKGIoITApLHcoZixudWxsLFQobWUudmFsdWUsZT0+KGIoKSxnKEUoVSkse2tleTplLmlkfSx7ZGVmYXVsdDpvKCgpPT5bcChFKEIpLG51bGwse2RlZmF1bHQ6bygoKT0+W3AoYWUse2lkOmUuaWR9LG51bGwsOCxbYGlkYF0pXSksXzoyfSwxMDI0KSxwKEUoQikse2NsYXNzOmB0ZXh0LXJpZ2h0IHRhYnVsYXItbnVtc2B9LHtkZWZhdWx0Om8oKCk9PltwKFose3ZhbHVlOmUudmFsdWVzLnJlcT8/MH0sbnVsbCw4LFtgdmFsdWVgXSldKSxfOjJ9LDEwMjQpLHAoRShCKSx7Y2xhc3M6YHRleHQtcmlnaHQgdGFidWxhci1udW1zYH0se2RlZmF1bHQ6bygoKT0+W3YoTyhFKEopKGUudmFsdWVzLmNvc3Q/PzApKSwxKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMjQpKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKTooYigpLGcoSyx7a2V5OjMsdGl0bGU6YE5vIHRyYWZmaWMgaW4gdGhpcyByYW5nZS5gfSx7ZGVmYXVsdDpvKCgpPT5bcChMZSldKSxfOjF9KSldKSxfOjF9KV0pLF86MX0pLHAoRShuKSxudWxsLHtkZWZhdWx0Om8oKCk9PltwKEUoZCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKEQpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLmFbMTBdfHw9W3YoYFJlY2VudCBlcnJvcnNgLC0xKV1dKSxfOjF9KV0pLF86MX0pLHAoRShyKSxudWxsLHtkZWZhdWx0Om8oKCk9PltfZS52YWx1ZS5sZW5ndGg/KGIoKSx3KGB1bGAsZW4sWyhiKCEwKSx3KGYsbnVsbCxUKF9lLnZhbHVlLChlLHQpPT4oYigpLHcoYGxpYCx7a2V5OnQsY2xhc3M6YGJvcmRlci1iIHBiLTIgbGFzdDpib3JkZXItMCBsYXN0OnBiLTBgfSxbQyhgcGAsdG4sW3AoRShZKSx7dmFyaWFudDpgc2Vjb25kYXJ5YH0se2RlZmF1bHQ6bygoKT0+W3YoTyhlLmtpbmQpLDEpXSksXzoyfSwxMDI0KSxDKGBzcGFuYCxubixPKEUoZ2UpKGUudGltZSkpLDEpXSksQyhgcGAscm4sTyhlLm1lc3NhZ2UpLDEpXSkpKSwxMjgpKV0pKTooYigpLGcoSyx7a2V5OjEsdGl0bGU6YE5vIHJlY2VudCBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgZXZlbnQgd2luZG93LmB9KSldKSxfOjF9KV0pLF86MX0pLGoudmFsdWU/LnByb3ZpZGVycz8ubGVuZ3RofHxqLnZhbHVlPy5tb2RlbHM/Lmxlbmd0aD8oYigpLGcoRShuKSx7a2V5OjF9LHtkZWZhdWx0Om8oKCk9PltwKEUoZCksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKEQpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLmFbMTFdfHw9W3YoYFBlcnNvbmFsIGdyYW50YCwtMSldXSksXzoxfSkscChFKEwpLG51bGwse2RlZmF1bHQ6bygoKT0+Wy4uLmFbMTJdfHw9W3YoYEFjY2VzcyB0aGlzIHVzZXIgaGFzIGJleW9uZCB0aGVpciBncm91cCdzIG93bi5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHAoRShyKSx7Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgc206Z3JpZC1jb2xzLTJgfSx7ZGVmYXVsdDpvKCgpPT5bQyhgZGl2YCxudWxsLFthWzEzXXx8PUMoYHBgLHtjbGFzczpgbWItMS41IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFByb3ZpZGVyc2AsLTEpLEMoYGRpdmAsYW4sWyhiKCEwKSx3KGYsbnVsbCxUKGoudmFsdWU/LnByb3ZpZGVycz8/W10sZT0+KGIoKSxnKEUoWSkse2tleTplLGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBtYXgtdy1mdWxsIHRydW5jYXRlIGZvbnQtbW9ubyBmb250LW5vcm1hbGAsdGl0bGU6ZX0se2RlZmF1bHQ6bygoKT0+W3YoTyhlKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKSksMTI4KSldKV0pLEMoYGRpdmAsbnVsbCxbYVsxNF18fD1DKGBwYCx7Y2xhc3M6YG1iLTEuNSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBNb2RlbHNgLC0xKSxDKGBkaXZgLG9uLFsoYighMCksdyhmLG51bGwsVChqLnZhbHVlPy5tb2RlbHM/P1tdLGU9PihiKCksZyhhZSx7a2V5OmUsaWQ6ZX0sbnVsbCw4LFtgaWRgXSkpKSwxMjgpKV0pXSldKSxfOjF9KV0pLF86MX0pKTp4KGBgLCEwKV0pfX19KSxjbj17a2V5OjEsY2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxsbj1BKHtfX25hbWU6YENvbnN1bWVyc1BhZ2VgLHNldHVwKGUpe2xldCB0PW5lKCksbj1TKCgpPT50LnBhcmFtcy51c2VyKSxyPVMoKCk9PnQucGFyYW1zLnZpZXc9PT1gbWF0cml4YD9gbWF0cml4YDpgZGlyZWN0b3J5YCksaT1TKCgpPT5aZSh0LnBhcmFtcy5tYXRyaXgpKTtmdW5jdGlvbiBhKGUpe2lmKGUhPT1gZGlyZWN0b3J5YCYmZSE9PWBtYXRyaXhgKXJldHVybjtsZXR7dXNlcjpuLC4uLnJ9PXQucGFyYW1zO3QuZ29UbyhgY29uc3VtZXJzYCx7Li4ucix2aWV3OmV9KX1mdW5jdGlvbiBzKGUpe2xldHt1c2VyOm4sbWF0cml4OnIsLi4uaX09dC5wYXJhbXM7aWYoZT09PWBtb2RlbHNgKXt0LmdvVG8oYGNvbnN1bWVyc2Asey4uLmksdmlldzpgbWF0cml4YH0pO3JldHVybn10LmdvVG8oYGNvbnN1bWVyc2Asey4uLmksdmlldzpgbWF0cml4YCxtYXRyaXg6ZX0pfWZ1bmN0aW9uIGMoKXtsZXR7dXNlcjplLC4uLm59PXQucGFyYW1zO3QuZ29UbyhgY29uc3VtZXJzYCxuKX1yZXR1cm4oZSx0KT0+bi52YWx1ZT8oYigpLGcoc24se2tleTowLCJ1c2VyLWlkIjpuLnZhbHVlLG9uQ2xvc2U6Y30sbnVsbCw4LFtgdXNlci1pZGBdKSk6KGIoKSx3KGBkaXZgLGNuLFtwKEUoRikseyJtb2RlbC12YWx1ZSI6ci52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YX0se2RlZmF1bHQ6bygoKT0+W3AoRSh1ZSksbnVsbCx7ZGVmYXVsdDpvKCgpPT5bcChFKEkpLHt2YWx1ZTpgZGlyZWN0b3J5YH0se2RlZmF1bHQ6bygoKT0+Wy4uLnRbMF18fD1bdihgRGlyZWN0b3J5YCwtMSldXSksXzoxfSkscChFKEkpLHt2YWx1ZTpgbWF0cml4YH0se2RlZmF1bHQ6bygoKT0+Wy4uLnRbMV18fD1bdihgQWNjZXNzIG1hdHJpeGAsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKSxyLnZhbHVlPT09YGRpcmVjdG9yeWA/KGIoKSxnKFl0LHtrZXk6MH0pKTooYigpLGcobnQse2tleToxLGtpbmQ6aS52YWx1ZSwib25VcGRhdGU6a2luZCI6c30sbnVsbCw4LFtga2luZGBdKSldKSl9fSk7ZXhwb3J0e2xuIGFzIGRlZmF1bHR9Ow==", ), }, - "DataTable-CQxRVDSY.js": { + "EntityLink-BR6plaWV.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsRnIgYXMgdCxIbiBhcyBuLEp0IGFzIHIsT24gYXMgaSxRciBhcyBhLFNpIGFzIG8sViBhcyBzLFcgYXMgYyxfbiBhcyBsLGFuIGFzIHUsY24gYXMgZCxjciBhcyBmLGR0IGFzIHAsZnQgYXMgbSxnaSBhcyBoLGhuIGFzIGcsaW4gYXMgXyxqciBhcyBlZSxsaSBhcyB0ZSxsciBhcyB2LG1uIGFzIG5lLG5yIGFzIHksb2kgYXMgcmUsb24gYXMgYixwdCBhcyBpZSxzbiBhcyB4LHQgYXMgYWUsdXIgYXMgb2UseWkgYXMgU31mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO3ZhciBzZT17ImRhdGEtc2xvdCI6YHRhYmxlLWNvbnRhaW5lcmAsY2xhc3M6YHJlbGF0aXZlIHctZnVsbCBvdmVyZmxvdy14LWF1dG9gfSxjZT1sKHtfX25hbWU6YFRhYmxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih5KCksZChgZGl2YCxzZSxbdShgdGFibGVgLHsiZGF0YS1zbG90IjpgdGFibGVgLGNsYXNzOlMoaChjKShgdy1mdWxsIGNhcHRpb24tYm90dG9tIHRleHQtc21gLHQuY2xhc3MpKX0sW3YoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSl9fSksbGU9bCh7X19uYW1lOmBUYWJsZUJvZHlgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHkoKSxkKGB0Ym9keWAseyJkYXRhLXNsb3QiOmB0YWJsZS1ib2R5YCxjbGFzczpTKGgoYykoYFsmX3RyOmxhc3QtY2hpbGRdOmJvcmRlci0wYCx0LmNsYXNzKSl9LFt2KGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxDPWwoe19fbmFtZTpgVGFibGVDZWxsYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih5KCksZChgdGRgLHsiZGF0YS1zbG90IjpgdGFibGUtY2VsbGAsY2xhc3M6UyhoKGMpKGBwLTIgYWxpZ24tbWlkZGxlIHdoaXRlc3BhY2Utbm93cmFwIFsmOmhhcyhbcm9sZT1jaGVja2JveF0pXTpwci0wYCx0LmNsYXNzKSl9LFt2KGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSx3PWwoe19fbmFtZTpgVGFibGVSb3dgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHkoKSxkKGB0cmAseyJkYXRhLXNsb3QiOmB0YWJsZS1yb3dgLGNsYXNzOlMoaChjKShgaG92ZXI6YmctbXV0ZWQvNTAgZGF0YS1bc3RhdGU9c2VsZWN0ZWRdOmJnLW11dGVkIGJvcmRlci1iIHRyYW5zaXRpb24tY29sb3JzIGhhcy1hcmlhLWV4cGFuZGVkOmJnLW11dGVkLzUwYCx0LmNsYXNzKSl9LFt2KGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSx1ZT17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEwYH0sZGU9bCh7X19uYW1lOmBUYWJsZUVtcHR5YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sY29sc3Bhbjp7ZGVmYXVsdDoxfX0sc2V0dXAoZSl7bGV0IHI9ZSxpPXMocixgY2xhc3NgKTtyZXR1cm4oZSxhKT0+KHkoKSxiKHcsbnVsbCx7ZGVmYXVsdDp0KCgpPT5bZyhDLG4oe2NsYXNzOmgoYykoYHAtNCB3aGl0ZXNwYWNlLW5vd3JhcCBhbGlnbi1taWRkbGUgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmRgLHIuY2xhc3MpfSxoKGkpKSx7ZGVmYXVsdDp0KCgpPT5bdShgZGl2YCx1ZSxbdihlLiRzbG90cyxgZGVmYXVsdGApXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9KSl9fSksVD1sKHtfX25hbWU6YFRhYmxlSGVhZGAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oeSgpLGQoYHRoYCx7ImRhdGEtc2xvdCI6YHRhYmxlLWhlYWRgLGNsYXNzOlMoaChjKShgdGV4dC1mb3JlZ3JvdW5kIGgtMTAgcHgtMiB0ZXh0LWxlZnQgYWxpZ24tbWlkZGxlIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIFsmOmhhcyhbcm9sZT1jaGVja2JveF0pXTpwci0wYCx0LmNsYXNzKSl9LFt2KGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxFPWwoe19fbmFtZTpgVGFibGVIZWFkZXJgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHkoKSxkKGB0aGVhZGAseyJkYXRhLXNsb3QiOmB0YWJsZS1oZWFkZXJgLGNsYXNzOlMoaChjKShgWyZfdHJdOmJvcmRlci1iYCx0LmNsYXNzKSl9LFt2KGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxmZT1sKHtfX25hbWU6YFNrZWxldG9uVGFibGVgLHByb3BzOntyb3dzOntkZWZhdWx0OjV9LGNvbHM6e2RlZmF1bHQ6NH19LHNldHVwKGUpe3JldHVybihuLGkpPT4oeSgpLGIoaChjZSksbnVsbCx7ZGVmYXVsdDp0KCgpPT5bZyhoKEUpLG51bGwse2RlZmF1bHQ6dCgoKT0+W2coaCh3KSxudWxsLHtkZWZhdWx0OnQoKCk9PlsoeSghMCksZChyLG51bGwsZihlLmNvbHMsZT0+KHkoKSxiKGgoVCkse2tleTplfSx7ZGVmYXVsdDp0KCgpPT5bZyhoKGFlKSx7Y2xhc3M6YGgtNCB3LTE2YH0pXSksXzoxfSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSksZyhoKGxlKSxudWxsLHtkZWZhdWx0OnQoKCk9PlsoeSghMCksZChyLG51bGwsZihlLnJvd3Msbj0+KHkoKSxiKGgodykse2tleTpufSx7ZGVmYXVsdDp0KCgpPT5bKHkoITApLGQocixudWxsLGYoZS5jb2xzLGU9Pih5KCksYihoKEMpLHtrZXk6ZX0se2RlZmF1bHQ6dCgoKT0+W2coaChhZSkse2NsYXNzOmBoLTQgdy1mdWxsIG1heC13LTMyYH0pXSksXzoxfSkpKSwxMjgpKV0pLF86MX0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KTtmdW5jdGlvbiBEKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIG49Pnt0LnNldFN0YXRlKHQ9Pih7Li4udCxbZV06RChuLHRbZV0pfSkpfX1mdW5jdGlvbiBrKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+dHlwZW9mIGU9PWBudW1iZXJgKX1mdW5jdGlvbiBtZShlLHQpe2xldCBuPVtdLHI9ZT0+e2UuZm9yRWFjaChlPT57bi5wdXNoKGUpO2xldCBpPXQoZSk7aSE9bnVsbCYmaS5sZW5ndGgmJnIoaSl9KX07cmV0dXJuIHIoZSksbn1mdW5jdGlvbiBBKGUsdCxuKXtsZXQgcj1bXSxpO3JldHVybiBhPT57bGV0IG87bi5rZXkmJm4uZGVidWcmJihvPURhdGUubm93KCkpO2xldCBzPWUoYSk7aWYoIShzLmxlbmd0aCE9PXIubGVuZ3RofHxzLnNvbWUoKGUsdCk9PnJbdF0hPT1lKSkpcmV0dXJuIGk7cj1zO2xldCBjO2lmKG4ua2V5JiZuLmRlYnVnJiYoYz1EYXRlLm5vdygpKSxpPXQoLi4ucyksbj09bnVsbHx8bi5vbkNoYW5nZT09bnVsbHx8bi5vbkNoYW5nZShpKSxuLmtleSYmbi5kZWJ1ZyYmbiE9bnVsbCYmbi5kZWJ1ZygpKXtsZXQgZT1NYXRoLnJvdW5kKChEYXRlLm5vdygpLW8pKjEwMCkvMTAwLHQ9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jKSoxMDApLzEwMCxyPXQvMTYsaT0oZSx0KT0+e2ZvcihlPVN0cmluZyhlKTtlLmxlbmd0aDx0OyllPWAgYCtlO3JldHVybiBlfTtjb25zb2xlLmluZm8oYCVj4o+xICR7aSh0LDUpfSAvJHtpKGUsNSl9IG1zYCxgCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjb2xvcjogaHNsKCR7TWF0aC5tYXgoMCxNYXRoLm1pbigxMjAtMTIwKnIsMTIwKSl9ZGVnIDEwMCUgMzElKTtgLG4/LmtleSl9cmV0dXJuIGl9fWZ1bmN0aW9uIGooZSx0LG4scil7cmV0dXJue2RlYnVnOigpPT5lPy5kZWJ1Z0FsbD8/ZVt0XSxrZXk6ITEsb25DaGFuZ2U6cn19ZnVuY3Rpb24gaGUoZSx0LG4scil7bGV0IGk9e2lkOmAke3QuaWR9XyR7bi5pZH1gLHJvdzp0LGNvbHVtbjpuLGdldFZhbHVlOigpPT50LmdldFZhbHVlKHIpLHJlbmRlclZhbHVlOigpPT5pLmdldFZhbHVlKCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLGdldENvbnRleHQ6QSgoKT0+W2Usbix0LGldLChlLHQsbixyKT0+KHt0YWJsZTplLGNvbHVtbjp0LHJvdzpuLGNlbGw6cixnZXRWYWx1ZTpyLmdldFZhbHVlLHJlbmRlclZhbHVlOnIucmVuZGVyVmFsdWV9KSxqKGUub3B0aW9ucyxgZGVidWdDZWxsc2AsYGNlbGwuZ2V0Q29udGV4dGApKX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2gocj0+e3IuY3JlYXRlQ2VsbD09bnVsbHx8ci5jcmVhdGVDZWxsKGksbix0LGUpfSx7fSksaX1mdW5jdGlvbiBnZShlLHQsbixyKXtsZXQgaT17Li4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLC4uLnR9LGE9aS5hY2Nlc3NvcktleSxvPWkuaWQ/PyhhP3R5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGw9PWBmdW5jdGlvbmA/YS5yZXBsYWNlQWxsKGAuYCxgX2ApOmEucmVwbGFjZSgvXC4vZyxgX2ApOnZvaWQgMCk/Pyh0eXBlb2YgaS5oZWFkZXI9PWBzdHJpbmdgP2kuaGVhZGVyOnZvaWQgMCkscztpZihpLmFjY2Vzc29yRm4/cz1pLmFjY2Vzc29yRm46YSYmKHM9YS5pbmNsdWRlcyhgLmApP2U9PntsZXQgdD1lO2ZvcihsZXQgZSBvZiBhLnNwbGl0KGAuYCkpdD10Py5bZV07cmV0dXJuIHR9OmU9PmVbaS5hY2Nlc3NvcktleV0pLCFvKXRocm93IEVycm9yKCk7bGV0IGM9e2lkOmAke1N0cmluZyhvKX1gLGFjY2Vzc29yRm46cyxwYXJlbnQ6cixkZXB0aDpuLGNvbHVtbkRlZjppLGNvbHVtbnM6W10sZ2V0RmxhdENvbHVtbnM6QSgoKT0+WyEwXSwoKT0+W2MsLi4uYy5jb2x1bW5zPy5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSldLGooZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0RmxhdENvbHVtbnNgKSksZ2V0TGVhZkNvbHVtbnM6QSgoKT0+W2UuX2dldE9yZGVyQ29sdW1uc0ZuKCldLGU9Pnt2YXIgdDtyZXR1cm4odD1jLmNvbHVtbnMpIT1udWxsJiZ0Lmxlbmd0aD9lKGMuY29sdW1ucy5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpOltjXX0saihlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGNvbHVtbi5nZXRMZWFmQ29sdW1uc2ApKX07Zm9yKGxldCB0IG9mIGUuX2ZlYXR1cmVzKXQuY3JlYXRlQ29sdW1uPT1udWxsfHx0LmNyZWF0ZUNvbHVtbihjLGUpO3JldHVybiBjfXZhciBNPWBkZWJ1Z0hlYWRlcnNgO2Z1bmN0aW9uIF9lKGUsdCxuKXtsZXQgcj17aWQ6bi5pZD8/dC5pZCxjb2x1bW46dCxpbmRleDpuLmluZGV4LGlzUGxhY2Vob2xkZXI6ISFuLmlzUGxhY2Vob2xkZXIscGxhY2Vob2xkZXJJZDpuLnBsYWNlaG9sZGVySWQsZGVwdGg6bi5kZXB0aCxzdWJIZWFkZXJzOltdLGNvbFNwYW46MCxyb3dTcGFuOjAsaGVhZGVyR3JvdXA6bnVsbCxnZXRMZWFmSGVhZGVyczooKT0+e2xldCBlPVtdLHQ9bj0+e24uc3ViSGVhZGVycyYmbi5zdWJIZWFkZXJzLmxlbmd0aCYmbi5zdWJIZWFkZXJzLm1hcCh0KSxlLnB1c2gobil9O3JldHVybiB0KHIpLGV9LGdldENvbnRleHQ6KCk9Pih7dGFibGU6ZSxoZWFkZXI6cixjb2x1bW46dH0pfTtyZXR1cm4gZS5fZmVhdHVyZXMuZm9yRWFjaCh0PT57dC5jcmVhdGVIZWFkZXI9PW51bGx8fHQuY3JlYXRlSGVhZGVyKHIsZSl9KSxyfXZhciB2ZT17Y3JlYXRlVGFibGU6ZT0+e2UuZ2V0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLCh0LG4scixpKT0+e2xldCBhPXI/Lm1hcChlPT5uLmZpbmQodD0+dC5pZD09PWUpKS5maWx0ZXIoQm9vbGVhbik/P1tdLG89aT8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10scz1uLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZS5pZCkpJiYhKGkhPW51bGwmJmkuaW5jbHVkZXMoZS5pZCkpKTtyZXR1cm4gTih0LFsuLi5hLC4uLnMsLi4ub10sZSl9LGooZS5vcHRpb25zLE0sYGdldEhlYWRlckdyb3Vwc2ApKSxlLmdldENlbnRlckhlYWRlckdyb3Vwcz1BKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PihuPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpLE4odCxuLGUsYGNlbnRlcmApKSxqKGUub3B0aW9ucyxNLGBnZXRDZW50ZXJIZWFkZXJHcm91cHNgKSksZS5nZXRMZWZ0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLCh0LG4scik9Pk4odCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGBsZWZ0YCksaihlLm9wdGlvbnMsTSxgZ2V0TGVmdEhlYWRlckdyb3Vwc2ApKSxlLmdldFJpZ2h0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIpPT5OKHQscj8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10sZSxgcmlnaHRgKSxqKGUub3B0aW9ucyxNLGBnZXRSaWdodEhlYWRlckdyb3Vwc2ApKSxlLmdldEZvb3Rlckdyb3Vwcz1BKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSxqKGUub3B0aW9ucyxNLGBnZXRGb290ZXJHcm91cHNgKSksZS5nZXRMZWZ0Rm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldExlZnRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSxqKGUub3B0aW9ucyxNLGBnZXRMZWZ0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0Q2VudGVyRm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldENlbnRlckhlYWRlckdyb3VwcygpXSxlPT5bLi4uZV0ucmV2ZXJzZSgpLGooZS5vcHRpb25zLE0sYGdldENlbnRlckZvb3Rlckdyb3Vwc2ApKSxlLmdldFJpZ2h0Rm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksaihlLm9wdGlvbnMsTSxgZ2V0UmlnaHRGb290ZXJHcm91cHNgKSksZS5nZXRGbGF0SGVhZGVycz1BKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksaihlLm9wdGlvbnMsTSxgZ2V0RmxhdEhlYWRlcnNgKSksZS5nZXRMZWZ0RmxhdEhlYWRlcnM9QSgoKT0+W2UuZ2V0TGVmdEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSxqKGUub3B0aW9ucyxNLGBnZXRMZWZ0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJGbGF0SGVhZGVycz1BKCgpPT5bZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksaihlLm9wdGlvbnMsTSxgZ2V0Q2VudGVyRmxhdEhlYWRlcnNgKSksZS5nZXRSaWdodEZsYXRIZWFkZXJzPUEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLGooZS5vcHRpb25zLE0sYGdldFJpZ2h0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRDZW50ZXJGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSxqKGUub3B0aW9ucyxNLGBnZXRDZW50ZXJMZWFmSGVhZGVyc2ApKSxlLmdldExlZnRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRMZWZ0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksaihlLm9wdGlvbnMsTSxgZ2V0TGVmdExlYWZIZWFkZXJzYCkpLGUuZ2V0UmlnaHRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRSaWdodEZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLGooZS5vcHRpb25zLE0sYGdldFJpZ2h0TGVhZkhlYWRlcnNgKSksZS5nZXRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCksZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKSxlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLChlLHQsbik9PlsuLi5lWzBdPy5oZWFkZXJzPz9bXSwuLi50WzBdPy5oZWFkZXJzPz9bXSwuLi5uWzBdPy5oZWFkZXJzPz9bXV0ubWFwKGU9PmUuZ2V0TGVhZkhlYWRlcnMoKSkuZmxhdCgpLGooZS5vcHRpb25zLE0sYGdldExlYWZIZWFkZXJzYCkpfX07ZnVuY3Rpb24gTihlLHQsbixyKXtsZXQgaT0wLGE9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD0xKSxpPU1hdGgubWF4KGksdCksZS5maWx0ZXIoZT0+ZS5nZXRJc1Zpc2libGUoKSkuZm9yRWFjaChlPT57dmFyIG47KG49ZS5jb2x1bW5zKSE9bnVsbCYmbi5sZW5ndGgmJmEoZS5jb2x1bW5zLHQrMSl9LDApfTthKGUpO2xldCBvPVtdLHM9KGUsdCk9PntsZXQgaT17ZGVwdGg6dCxpZDpbcixgJHt0fWBdLmZpbHRlcihCb29sZWFuKS5qb2luKGBfYCksaGVhZGVyczpbXX0sYT1bXTtlLmZvckVhY2goZT0+e2xldCBvPVsuLi5hXS5yZXZlcnNlKClbMF0scz1lLmNvbHVtbi5kZXB0aD09PWkuZGVwdGgsYyxsPSExO2lmKHMmJmUuY29sdW1uLnBhcmVudD9jPWUuY29sdW1uLnBhcmVudDooYz1lLmNvbHVtbixsPSEwKSxvJiZvPy5jb2x1bW49PT1jKW8uc3ViSGVhZGVycy5wdXNoKGUpO2Vsc2V7bGV0IGk9X2UobixjLHtpZDpbcix0LGMuaWQsZT8uaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKGBfYCksaXNQbGFjZWhvbGRlcjpsLHBsYWNlaG9sZGVySWQ6bD9gJHthLmZpbHRlcihlPT5lLmNvbHVtbj09PWMpLmxlbmd0aH1gOnZvaWQgMCxkZXB0aDp0LGluZGV4OmEubGVuZ3RofSk7aS5zdWJIZWFkZXJzLnB1c2goZSksYS5wdXNoKGkpfWkuaGVhZGVycy5wdXNoKGUpLGUuaGVhZGVyR3JvdXA9aX0pLG8ucHVzaChpKSx0PjAmJnMoYSx0LTEpfTtzKHQubWFwKChlLHQpPT5fZShuLGUse2RlcHRoOmksaW5kZXg6dH0pKSxpLTEpLG8ucmV2ZXJzZSgpO2xldCBjPWU9PmUuZmlsdGVyKGU9PmUuY29sdW1uLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+e2xldCB0PTAsbj0wLHI9WzBdO2Uuc3ViSGVhZGVycyYmZS5zdWJIZWFkZXJzLmxlbmd0aD8ocj1bXSxjKGUuc3ViSGVhZGVycykuZm9yRWFjaChlPT57bGV0e2NvbFNwYW46bixyb3dTcGFuOml9PWU7dCs9bixyLnB1c2goaSl9KSk6dD0xO2xldCBpPU1hdGgubWluKC4uLnIpO3JldHVybiBuKz1pLGUuY29sU3Bhbj10LGUucm93U3Bhbj1uLHtjb2xTcGFuOnQscm93U3BhbjpufX0pO3JldHVybiBjKG9bMF0/LmhlYWRlcnM/P1tdKSxvfXZhciB5ZT0oZSx0LG4scixpLGEsbyk9PntsZXQgcz17aWQ6dCxpbmRleDpyLG9yaWdpbmFsOm4sZGVwdGg6aSxwYXJlbnRJZDpvLF92YWx1ZXNDYWNoZTp7fSxfdW5pcXVlVmFsdWVzQ2FjaGU6e30sZ2V0VmFsdWU6dD0+e2lmKHMuX3ZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBzLl92YWx1ZXNDYWNoZVt0XTtsZXQgbj1lLmdldENvbHVtbih0KTtpZihuIT1udWxsJiZuLmFjY2Vzc29yRm4pcmV0dXJuIHMuX3ZhbHVlc0NhY2hlW3RdPW4uYWNjZXNzb3JGbihzLm9yaWdpbmFsLHIpLHMuX3ZhbHVlc0NhY2hlW3RdfSxnZXRVbmlxdWVWYWx1ZXM6dD0+e2lmKHMuX3VuaXF1ZVZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XTtsZXQgbj1lLmdldENvbHVtbih0KTtpZihuIT1udWxsJiZuLmFjY2Vzc29yRm4pcmV0dXJuIG4uY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcz8ocy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF09bi5jb2x1bW5EZWYuZ2V0VW5pcXVlVmFsdWVzKHMub3JpZ2luYWwscikscy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF0pOihzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XT1bcy5nZXRWYWx1ZSh0KV0scy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF0pfSxyZW5kZXJWYWx1ZTp0PT5zLmdldFZhbHVlKHQpPz9lLm9wdGlvbnMucmVuZGVyRmFsbGJhY2tWYWx1ZSxzdWJSb3dzOmE/P1tdLGdldExlYWZSb3dzOigpPT5tZShzLnN1YlJvd3MsZT0+ZS5zdWJSb3dzKSxnZXRQYXJlbnRSb3c6KCk9PnMucGFyZW50SWQ/ZS5nZXRSb3cocy5wYXJlbnRJZCwhMCk6dm9pZCAwLGdldFBhcmVudFJvd3M6KCk9PntsZXQgZT1bXSx0PXM7Zm9yKDs7KXtsZXQgbj10LmdldFBhcmVudFJvdygpO2lmKCFuKWJyZWFrO2UucHVzaChuKSx0PW59cmV0dXJuIGUucmV2ZXJzZSgpfSxnZXRBbGxDZWxsczpBKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpXSx0PT50Lm1hcCh0PT5oZShlLHMsdCx0LmlkKSksaihlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEFsbENlbGxzYCkpLF9nZXRBbGxDZWxsc0J5Q29sdW1uSWQ6QSgoKT0+W3MuZ2V0QWxsQ2VsbHMoKV0sZT0+ZS5yZWR1Y2UoKGUsdCk9PihlW3QuY29sdW1uLmlkXT10LGUpLHt9KSxqKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0QWxsQ2VsbHNCeUNvbHVtbklkYCkpfTtmb3IobGV0IHQ9MDt0PGUuX2ZlYXR1cmVzLmxlbmd0aDt0Kyspe2xldCBuPWUuX2ZlYXR1cmVzW3RdO249PW51bGx8fG4uY3JlYXRlUm93PT1udWxsfHxuLmNyZWF0ZVJvdyhzLGUpfXJldHVybiBzfSxiZT17Y3JlYXRlQ29sdW1uOihlLHQpPT57ZS5fZ2V0RmFjZXRlZFJvd01vZGVsPXQub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwmJnQub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwodCxlLmlkKSxlLmdldEZhY2V0ZWRSb3dNb2RlbD0oKT0+ZS5fZ2V0RmFjZXRlZFJvd01vZGVsP2UuX2dldEZhY2V0ZWRSb3dNb2RlbCgpOnQuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpLGUuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXM9dC5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMmJnQub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzKHQsZS5pZCksZS5nZXRGYWNldGVkVW5pcXVlVmFsdWVzPSgpPT5lLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzP2UuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKTpuZXcgTWFwLGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXM9dC5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMmJnQub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzKHQsZS5pZCksZS5nZXRGYWNldGVkTWluTWF4VmFsdWVzPSgpPT57aWYoZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcylyZXR1cm4gZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcygpfX19LHhlPShlLHQsbik9Pnt2YXIgcixpO2xldCBhPW49PW51bGx8fChyPW4udG9TdHJpbmcoKSk9PW51bGw/dm9pZCAwOnIudG9Mb3dlckNhc2UoKTtyZXR1cm4hISgoaT1lLmdldFZhbHVlKHQpKSE9bnVsbCYmKGk9aS50b1N0cmluZygpKSE9bnVsbCYmKGk9aS50b0xvd2VyQ2FzZSgpKSE9bnVsbCYmaS5pbmNsdWRlcyhhKSl9O3hlLmF1dG9SZW1vdmU9ZT0+SShlKTt2YXIgU2U9KGUsdCxuKT0+e3ZhciByO3JldHVybiEhKChyPWUuZ2V0VmFsdWUodCkpIT1udWxsJiYocj1yLnRvU3RyaW5nKCkpIT1udWxsJiZyLmluY2x1ZGVzKG4pKX07U2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciBDZT0oZSx0LG4pPT57dmFyIHI7cmV0dXJuKChyPWUuZ2V0VmFsdWUodCkpPT1udWxsfHwocj1yLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpPT09bj8udG9Mb3dlckNhc2UoKX07Q2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciB3ZT0oZSx0LG4pPT5lLmdldFZhbHVlKHQpPy5pbmNsdWRlcyhuKTt3ZS5hdXRvUmVtb3ZlPWU9PkkoZSk7dmFyIFRlPShlLHQsbik9PiFuLnNvbWUobj0+e3ZhciByO3JldHVybiEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJnIuaW5jbHVkZXMobikpfSk7VGUuYXV0b1JlbW92ZT1lPT5JKGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgRWU9KGUsdCxuKT0+bi5zb21lKG49PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pKTtFZS5hdXRvUmVtb3ZlPWU9PkkoZSl8fCEoZSE9bnVsbCYmZS5sZW5ndGgpO3ZhciBEZT0oZSx0LG4pPT5lLmdldFZhbHVlKHQpPT09bjtEZS5hdXRvUmVtb3ZlPWU9PkkoZSk7dmFyIE9lPShlLHQsbik9PmUuZ2V0VmFsdWUodCk9PW47T2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciBQPShlLHQsbik9PntsZXRbcixpXT1uLGE9ZS5nZXRWYWx1ZSh0KTtyZXR1cm4gYT49ciYmYTw9aX07UC5yZXNvbHZlRmlsdGVyVmFsdWU9ZT0+e2xldFt0LG5dPWUscj10eXBlb2YgdD09YG51bWJlcmA/dDpwYXJzZUZsb2F0KHQpLGk9dHlwZW9mIG49PWBudW1iZXJgP246cGFyc2VGbG9hdChuKSxhPXQ9PT1udWxsfHxOdW1iZXIuaXNOYU4ocik/LTEvMDpyLG89bj09PW51bGx8fE51bWJlci5pc05hTihpKT8xLzA6aTtpZihhPm8pe2xldCBlPWE7YT1vLG89ZX1yZXR1cm5bYSxvXX0sUC5hdXRvUmVtb3ZlPWU9PkkoZSl8fEkoZVswXSkmJkkoZVsxXSk7dmFyIEY9e2luY2x1ZGVzU3RyaW5nOnhlLGluY2x1ZGVzU3RyaW5nU2Vuc2l0aXZlOlNlLGVxdWFsc1N0cmluZzpDZSxhcnJJbmNsdWRlczp3ZSxhcnJJbmNsdWRlc0FsbDpUZSxhcnJJbmNsdWRlc1NvbWU6RWUsZXF1YWxzOkRlLHdlYWtFcXVhbHM6T2UsaW5OdW1iZXJSYW5nZTpQfTtmdW5jdGlvbiBJKGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB9dmFyIGtlPXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe2ZpbHRlckZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbkZpbHRlcnM6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5GaWx0ZXJzQ2hhbmdlOk8oYGNvbHVtbkZpbHRlcnNgLGUpLGZpbHRlckZyb21MZWFmUm93czohMSxtYXhMZWFmUm93RmlsdGVyRGVwdGg6MTAwfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRBdXRvRmlsdGVyRm49KCk9PntsZXQgbj10LmdldENvcmVSb3dNb2RlbCgpLmZsYXRSb3dzWzBdPy5nZXRWYWx1ZShlLmlkKTtyZXR1cm4gdHlwZW9mIG49PWBzdHJpbmdgP0YuaW5jbHVkZXNTdHJpbmc6dHlwZW9mIG49PWBudW1iZXJgP0YuaW5OdW1iZXJSYW5nZTp0eXBlb2Ygbj09YGJvb2xlYW5gfHx0eXBlb2Ygbj09YG9iamVjdGAmJm4/Ri5lcXVhbHM6QXJyYXkuaXNBcnJheShuKT9GLmFyckluY2x1ZGVzOkYud2Vha0VxdWFsc30sZS5nZXRGaWx0ZXJGbj0oKT0+ayhlLmNvbHVtbkRlZi5maWx0ZXJGbik/ZS5jb2x1bW5EZWYuZmlsdGVyRm46ZS5jb2x1bW5EZWYuZmlsdGVyRm49PT1gYXV0b2A/ZS5nZXRBdXRvRmlsdGVyRm4oKTp0Lm9wdGlvbnMuZmlsdGVyRm5zPy5bZS5jb2x1bW5EZWYuZmlsdGVyRm5dPz9GW2UuY29sdW1uRGVmLmZpbHRlckZuXSxlLmdldENhbkZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUNvbHVtbkZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtbkZpbHRlcnM/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJiEhZS5hY2Nlc3NvckZuLGUuZ2V0SXNGaWx0ZXJlZD0oKT0+ZS5nZXRGaWx0ZXJJbmRleCgpPi0xLGUuZ2V0RmlsdGVyVmFsdWU9KCk9Pnt2YXIgbjtyZXR1cm4obj10LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycyk9PW51bGx8fChuPW4uZmluZCh0PT50LmlkPT09ZS5pZCkpPT1udWxsP3ZvaWQgMDpuLnZhbHVlfSxlLmdldEZpbHRlckluZGV4PSgpPT50LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5zZXRGaWx0ZXJWYWx1ZT1uPT57dC5zZXRDb2x1bW5GaWx0ZXJzKHQ9PntsZXQgcj1lLmdldEZpbHRlckZuKCksaT10Py5maW5kKHQ9PnQuaWQ9PT1lLmlkKSxhPUQobixpP2kudmFsdWU6dm9pZCAwKTtpZihBZShyLGEsZSkpcmV0dXJuIHQ/LmZpbHRlcih0PT50LmlkIT09ZS5pZCk/P1tdO2xldCBvPXtpZDplLmlkLHZhbHVlOmF9O3JldHVybiBpP3Q/Lm1hcCh0PT50LmlkPT09ZS5pZD9vOnQpPz9bXTp0IT1udWxsJiZ0Lmxlbmd0aD9bLi4udCxvXTpbb119KX19LGNyZWF0ZVJvdzooZSx0KT0+e2UuY29sdW1uRmlsdGVycz17fSxlLmNvbHVtbkZpbHRlcnNNZXRhPXt9fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5GaWx0ZXJzPXQ9PntsZXQgbj1lLmdldEFsbExlYWZDb2x1bW5zKCk7ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShlPT5EKHQsZSk/LmZpbHRlcihlPT57bGV0IHQ9bi5maW5kKHQ9PnQuaWQ9PT1lLmlkKTtyZXR1cm4hKHQmJkFlKHQuZ2V0RmlsdGVyRm4oKSxlLnZhbHVlLHQpKX0pKX0sZS5yZXNldENvbHVtbkZpbHRlcnM9dD0+e2Uuc2V0Q29sdW1uRmlsdGVycyh0P1tdOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5GaWx0ZXJzPz9bXSl9LGUuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldEZpbHRlcmVkUm93TW9kZWw9KCk9PighZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEZpbHRlcmVkUm93TW9kZWwmJihlLl9nZXRGaWx0ZXJlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsRmlsdGVyaW5nfHwhZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbD9lLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKTplLl9nZXRGaWx0ZXJlZFJvd01vZGVsKCkpfX07ZnVuY3Rpb24gQWUoZSx0LG4pe3JldHVybihlJiZlLmF1dG9SZW1vdmU/ZS5hdXRvUmVtb3ZlKHQsbik6ITEpfHx0PT09dm9pZCAwfHx0eXBlb2YgdD09YHN0cmluZ2AmJiF0fXZhciBMPXtzdW06KGUsdCxuKT0+bi5yZWR1Y2UoKHQsbik9PntsZXQgcj1uLmdldFZhbHVlKGUpO3JldHVybiB0Kyh0eXBlb2Ygcj09YG51bWJlcmA/cjowKX0sMCksbWluOihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LG1heDooZSx0LG4pPT57bGV0IHI7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocjxufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bil9KSxyfSxleHRlbnQ6KGUsdCxuKT0+e2xldCByLGk7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocj09PXZvaWQgMD9uPj1uJiYocj1pPW4pOihyPm4mJihyPW4pLGk8biYmKGk9bikpKX0pLFtyLGldfSxtZWFuOihlLHQpPT57bGV0IG49MCxyPTA7aWYodC5mb3JFYWNoKHQ9PntsZXQgaT10LmdldFZhbHVlKGUpO2khPW51bGwmJihpPStpKT49aSYmKCsrbixyKz1pKX0pLG4pcmV0dXJuIHIvbn0sbWVkaWFuOihlLHQpPT57aWYoIXQubGVuZ3RoKXJldHVybjtsZXQgbj10Lm1hcCh0PT50LmdldFZhbHVlKGUpKTtpZighcGUobikpcmV0dXJuO2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gblswXTtsZXQgcj1NYXRoLmZsb29yKG4ubGVuZ3RoLzIpLGk9bi5zb3J0KChlLHQpPT5lLXQpO3JldHVybiBuLmxlbmd0aCUyPT0wPyhpW3ItMV0raVtyXSkvMjppW3JdfSx1bmlxdWU6KGUsdCk9PkFycmF5LmZyb20obmV3IFNldCh0Lm1hcCh0PT50LmdldFZhbHVlKGUpKSkudmFsdWVzKCkpLHVuaXF1ZUNvdW50OihlLHQpPT5uZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS5zaXplLGNvdW50OihlLHQpPT50Lmxlbmd0aH0samU9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Pih7YWdncmVnYXRlZENlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLmdldFZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSxhZ2dyZWdhdGlvbkZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2dyb3VwaW5nOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uR3JvdXBpbmdDaGFuZ2U6TyhgZ3JvdXBpbmdgLGUpLGdyb3VwZWRDb2x1bW5Nb2RlOmByZW9yZGVyYH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlR3JvdXBpbmc9KCk9Pnt0LnNldEdyb3VwaW5nKHQ9PnQhPW51bGwmJnQuaW5jbHVkZXMoZS5pZCk/dC5maWx0ZXIodD0+dCE9PWUuaWQpOlsuLi50Pz9bXSxlLmlkXSl9LGUuZ2V0Q2FuR3JvdXA9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nPz8hMCkmJighIWUuYWNjZXNzb3JGbnx8ISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKSxlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmNsdWRlcyhlLmlkKSxlLmdldEdyb3VwZWRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmRleE9mKGUuaWQpLGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5Hcm91cCgpO3JldHVybigpPT57dCYmZS50b2dnbGVHcm91cGluZygpfX0sZS5nZXRBdXRvQWdncmVnYXRpb25Gbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO2lmKHR5cGVvZiBuPT1gbnVtYmVyYClyZXR1cm4gTC5zdW07aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09YFtvYmplY3QgRGF0ZV1gKXJldHVybiBMLmV4dGVudH0sZS5nZXRBZ2dyZWdhdGlvbkZuPSgpPT57aWYoIWUpdGhyb3cgRXJyb3IoKTtyZXR1cm4gayhlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuKT9lLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuOmUuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm49PT1gYXV0b2A/ZS5nZXRBdXRvQWdncmVnYXRpb25GbigpOnQub3B0aW9ucy5hZ2dyZWdhdGlvbkZucz8uW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dPz9MW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0R3JvdXBpbmc9dD0+ZS5vcHRpb25zLm9uR3JvdXBpbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlKHQpLGUucmVzZXRHcm91cGluZz10PT57ZS5zZXRHcm91cGluZyh0P1tdOmUuaW5pdGlhbFN0YXRlPy5ncm91cGluZz8/W10pfSxlLmdldFByZUdyb3VwZWRSb3dNb2RlbD0oKT0+ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCksZS5nZXRHcm91cGVkUm93TW9kZWw9KCk9PighZS5fZ2V0R3JvdXBlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0R3JvdXBlZFJvd01vZGVsJiYoZS5fZ2V0R3JvdXBlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRHcm91cGVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxHcm91cGluZ3x8IWUuX2dldEdyb3VwZWRSb3dNb2RlbD9lLmdldFByZUdyb3VwZWRSb3dNb2RlbCgpOmUuX2dldEdyb3VwZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS5nZXRJc0dyb3VwZWQ9KCk9PiEhZS5ncm91cGluZ0NvbHVtbklkLGUuZ2V0R3JvdXBpbmdWYWx1ZT1uPT57aWYoZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm4gZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZVtuXTtsZXQgcj10LmdldENvbHVtbihuKTtyZXR1cm4gciE9bnVsbCYmci5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZT8oZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZVtuXT1yLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKGUub3JpZ2luYWwpLGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl0pOmUuZ2V0VmFsdWUobil9LGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGU9e319LGNyZWF0ZUNlbGw6KGUsdCxuLHIpPT57ZS5nZXRJc0dyb3VwZWQ9KCk9PnQuZ2V0SXNHcm91cGVkKCkmJnQuaWQ9PT1uLmdyb3VwaW5nQ29sdW1uSWQsZS5nZXRJc1BsYWNlaG9sZGVyPSgpPT4hZS5nZXRJc0dyb3VwZWQoKSYmdC5nZXRJc0dyb3VwZWQoKSxlLmdldElzQWdncmVnYXRlZD0oKT0+e3ZhciB0O3JldHVybiFlLmdldElzR3JvdXBlZCgpJiYhZS5nZXRJc1BsYWNlaG9sZGVyKCkmJiEhKCh0PW4uc3ViUm93cykhPW51bGwmJnQubGVuZ3RoKX19fTtmdW5jdGlvbiBNZShlLHQsbil7aWYoISh0IT1udWxsJiZ0Lmxlbmd0aCl8fCFuKXJldHVybiBlO2xldCByPWUuZmlsdGVyKGU9PiF0LmluY2x1ZGVzKGUuaWQpKTtyZXR1cm4gbj09PWByZW1vdmVgP3I6Wy4uLnQubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSwuLi5yXX12YXIgTmU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbk9yZGVyOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uT3JkZXJDaGFuZ2U6TyhgY29sdW1uT3JkZXJgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRJbmRleD1BKGU9PltVKHQsZSldLHQ9PnQuZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSxqKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0SW5kZXhgKSksZS5nZXRJc0ZpcnN0Q29sdW1uPW49PlUodCxuKVswXT8uaWQ9PT1lLmlkLGUuZ2V0SXNMYXN0Q29sdW1uPW49PntsZXQgcj1VKHQsbik7cmV0dXJuIHJbci5sZW5ndGgtMV0/LmlkPT09ZS5pZH19LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtbk9yZGVyPXQ9PmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5PcmRlckNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uT3JkZXI9dD0+e2Uuc2V0Q29sdW1uT3JkZXIodD9bXTplLmluaXRpYWxTdGF0ZS5jb2x1bW5PcmRlcj8/W10pfSxlLl9nZXRPcmRlckNvbHVtbnNGbj1BKCgpPT5bZS5nZXRTdGF0ZSgpLmNvbHVtbk9yZGVyLGUuZ2V0U3RhdGUoKS5ncm91cGluZyxlLm9wdGlvbnMuZ3JvdXBlZENvbHVtbk1vZGVdLChlLHQsbik9PnI9PntsZXQgaT1bXTtpZighKGUhPW51bGwmJmUubGVuZ3RoKSlpPXI7ZWxzZXtsZXQgdD1bLi4uZV0sbj1bLi4ucl07Zm9yKDtuLmxlbmd0aCYmdC5sZW5ndGg7KXtsZXQgZT10LnNoaWZ0KCkscj1uLmZpbmRJbmRleCh0PT50LmlkPT09ZSk7cj4tMSYmaS5wdXNoKG4uc3BsaWNlKHIsMSlbMF0pfWk9Wy4uLmksLi4ubl19cmV0dXJuIE1lKGksdCxuKX0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBfZ2V0T3JkZXJDb2x1bW5zRm5gKSl9fSxSPSgpPT4oe2xlZnQ6W10scmlnaHQ6W119KSxQZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uUGlubmluZzpSKCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5QaW5uaW5nQ2hhbmdlOk8oYGNvbHVtblBpbm5pbmdgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5waW49bj0+e2xldCByPWUuZ2V0TGVhZkNvbHVtbnMoKS5tYXAoZT0+ZS5pZCkuZmlsdGVyKEJvb2xlYW4pO3Quc2V0Q29sdW1uUGlubmluZyhlPT5uPT09YHJpZ2h0YD97bGVmdDooZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSxyaWdodDpbLi4uKGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdfTpuPT09YGxlZnRgP3tsZWZ0OlsuLi4oZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSwuLi5yXSxyaWdodDooZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSl9OntsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX0pfSxlLmdldENhblBpbj0oKT0+ZS5nZXRMZWFmQ29sdW1ucygpLnNvbWUoZT0+KGUuY29sdW1uRGVmLmVuYWJsZVBpbm5pbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVDb2x1bW5QaW5uaW5nPz90Lm9wdGlvbnMuZW5hYmxlUGlubmluZz8/ITApKSxlLmdldElzUGlubmVkPSgpPT57bGV0IG49ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKSx7bGVmdDpyLHJpZ2h0Oml9PXQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YGxlZnRgOm8/YHJpZ2h0YDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e3ZhciBuO2xldCByPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gcj8oKG49dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcpPT1udWxsfHwobj1uW3JdKT09bnVsbD92b2lkIDA6bi5pbmRleE9mKGUuaWQpKT8/LTE6MH19LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0Q2VudGVyVmlzaWJsZUNlbGxzPUEoKCk9PltlLl9nZXRBbGxWaXNpYmxlQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0LG4pPT57bGV0IHI9Wy4uLnQ/P1tdLC4uLm4/P1tdXTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaW5jbHVkZXMoZS5jb2x1bW4uaWQpKX0saih0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclZpc2libGVDZWxsc2ApKSxlLmdldExlZnRWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YGxlZnRgfSkpLGoodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRMZWZ0VmlzaWJsZUNlbGxzYCkpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuY29sdW1uLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOmByaWdodGB9KSksaih0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFJpZ2h0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5QaW5uaW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2UodCksZS5yZXNldENvbHVtblBpbm5pbmc9dD0+ZS5zZXRDb2x1bW5QaW5uaW5nKHQ/UigpOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5QaW5uaW5nPz9SKCkpLGUuZ2V0SXNTb21lQ29sdW1uc1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi5sZWZ0Py5sZW5ndGh8fG4ucmlnaHQ/Lmxlbmd0aCl9LGUuZ2V0TGVmdExlYWZDb2x1bW5zPUEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSxqKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0TGVmdExlYWZDb2x1bW5zYCkpLGUuZ2V0UmlnaHRMZWFmQ29sdW1ucz1BKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLGooZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRSaWdodExlYWZDb2x1bW5zYCkpLGUuZ2V0Q2VudGVyTGVhZkNvbHVtbnM9QSgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0LG4pPT57bGV0IHI9Wy4uLnQ/P1tdLC4uLm4/P1tdXTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaW5jbHVkZXMoZS5pZCkpfSxqKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0Q2VudGVyTGVhZkNvbHVtbnNgKSl9fTtmdW5jdGlvbiBGZShlKXtyZXR1cm4gZXx8KHR5cGVvZiBkb2N1bWVudDxgdWA/ZG9jdW1lbnQ6bnVsbCl9dmFyIHo9e3NpemU6MTUwLG1pblNpemU6MjAsbWF4U2l6ZToyKio1My0xfSxCPSgpPT4oe3N0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxpc1Jlc2l6aW5nQ29sdW1uOiExLGNvbHVtblNpemluZ1N0YXJ0OltdfSksSWU9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9PnosZ2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uU2l6aW5nOnt9LGNvbHVtblNpemluZ0luZm86QigpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe2NvbHVtblJlc2l6ZU1vZGU6YG9uRW5kYCxjb2x1bW5SZXNpemVEaXJlY3Rpb246YGx0cmAsb25Db2x1bW5TaXppbmdDaGFuZ2U6TyhgY29sdW1uU2l6aW5nYCxlKSxvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6TyhgY29sdW1uU2l6aW5nSW5mb2AsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgbj10LmdldFN0YXRlKCkuY29sdW1uU2l6aW5nW2UuaWRdO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLmNvbHVtbkRlZi5taW5TaXplPz96Lm1pblNpemUsbj8/ZS5jb2x1bW5EZWYuc2l6ZT8/ei5zaXplKSxlLmNvbHVtbkRlZi5tYXhTaXplPz96Lm1heFNpemUpfSxlLmdldFN0YXJ0PUEoZT0+W2UsVSh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKDAsZS5nZXRJbmRleCh0KSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLGoodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRTdGFydGApKSxlLmdldEFmdGVyPUEoZT0+W2UsVSh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKGUuZ2V0SW5kZXgodCkrMSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLGoodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBZnRlcmApKSxlLnJlc2V0U2l6ZT0oKT0+e3Quc2V0Q29sdW1uU2l6aW5nKHQ9PntsZXR7W2UuaWRdOm4sLi4ucn09dDtyZXR1cm4gcn0pfSxlLmdldENhblJlc2l6ZT0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uUmVzaXppbmc/PyEwKSxlLmdldElzUmVzaXppbmc9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdJbmZvLmlzUmVzaXppbmdDb2x1bW49PT1lLmlkfSxjcmVhdGVIZWFkZXI6KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgdD0wLG49ZT0+e2Uuc3ViSGVhZGVycy5sZW5ndGg/ZS5zdWJIZWFkZXJzLmZvckVhY2gobik6dCs9ZS5jb2x1bW4uZ2V0U2l6ZSgpPz8wfTtyZXR1cm4gbihlKSx0fSxlLmdldFN0YXJ0PSgpPT57aWYoZS5pbmRleD4wKXtsZXQgdD1lLmhlYWRlckdyb3VwLmhlYWRlcnNbZS5pbmRleC0xXTtyZXR1cm4gdC5nZXRTdGFydCgpK3QuZ2V0U2l6ZSgpfXJldHVybiAwfSxlLmdldFJlc2l6ZUhhbmRsZXI9bj0+e2xldCByPXQuZ2V0Q29sdW1uKGUuY29sdW1uLmlkKSxpPXI/LmdldENhblJlc2l6ZSgpO3JldHVybiBhPT57aWYoIXJ8fCFpfHwoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSxIKGEpJiZhLnRvdWNoZXMmJmEudG91Y2hlcy5sZW5ndGg+MSkpcmV0dXJuO2xldCBvPWUuZ2V0U2l6ZSgpLHM9ZT9lLmdldExlYWZIZWFkZXJzKCkubWFwKGU9PltlLmNvbHVtbi5pZCxlLmNvbHVtbi5nZXRTaXplKCldKTpbW3IuaWQsci5nZXRTaXplKCldXSxjPUgoYSk/TWF0aC5yb3VuZChhLnRvdWNoZXNbMF0uY2xpZW50WCk6YS5jbGllbnRYLGw9e30sdT0oZSxuKT0+e3R5cGVvZiBuPT1gbnVtYmVyYCYmKHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT57bGV0IHI9dC5vcHRpb25zLmNvbHVtblJlc2l6ZURpcmVjdGlvbj09PWBydGxgPy0xOjEsaT0obi0oZT8uc3RhcnRPZmZzZXQ/PzApKSpyLGE9TWF0aC5tYXgoaS8oZT8uc3RhcnRTaXplPz8wKSwtLjk5OTk5OSk7cmV0dXJuIGUuY29sdW1uU2l6aW5nU3RhcnQuZm9yRWFjaChlPT57bGV0W3Qsbl09ZTtsW3RdPU1hdGgucm91bmQoTWF0aC5tYXgobituKmEsMCkqMTAwKS8xMDB9KSx7Li4uZSxkZWx0YU9mZnNldDppLGRlbHRhUGVyY2VudGFnZTphfX0pLCh0Lm9wdGlvbnMuY29sdW1uUmVzaXplTW9kZT09PWBvbkNoYW5nZWB8fGU9PT1gZW5kYCkmJnQuc2V0Q29sdW1uU2l6aW5nKGU9Pih7Li4uZSwuLi5sfSkpKX0sZD1lPT51KGBtb3ZlYCxlKSxmPWU9Pnt1KGBlbmRgLGUpLHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT4oey4uLmUsaXNSZXNpemluZ0NvbHVtbjohMSxzdGFydE9mZnNldDpudWxsLHN0YXJ0U2l6ZTpudWxsLGRlbHRhT2Zmc2V0Om51bGwsZGVsdGFQZXJjZW50YWdlOm51bGwsY29sdW1uU2l6aW5nU3RhcnQ6W119KSl9LHA9RmUobiksbT17bW92ZUhhbmRsZXI6ZT0+ZChlLmNsaWVudFgpLHVwSGFuZGxlcjplPT57cD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbW91c2Vtb3ZlYCxtLm1vdmVIYW5kbGVyKSxwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlciksZihlLmNsaWVudFgpfX0saD17bW92ZUhhbmRsZXI6ZT0+KGUuY2FuY2VsYWJsZSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSxkKGUudG91Y2hlc1swXS5jbGllbnRYKSwhMSksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGB0b3VjaG1vdmVgLGgubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlciksZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGYoZS50b3VjaGVzWzBdPy5jbGllbnRYKX19LGc9TGUoKT97cGFzc2l2ZTohMX06ITE7SChhKT8ocD8uYWRkRXZlbnRMaXN0ZW5lcihgdG91Y2htb3ZlYCxoLm1vdmVIYW5kbGVyLGcpLHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlcixnKSk6KHA/LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlbW92ZWAsbS5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlcixnKSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxzdGFydE9mZnNldDpjLHN0YXJ0U2l6ZTpvLGRlbHRhT2Zmc2V0OjAsZGVsdGFQZXJjZW50YWdlOjAsY29sdW1uU2l6aW5nU3RhcnQ6cyxpc1Jlc2l6aW5nQ29sdW1uOnIuaWR9KSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uU2l6aW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlKHQpLGUuc2V0Q29sdW1uU2l6aW5nSW5mbz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5TaXppbmc9dD0+e2Uuc2V0Q29sdW1uU2l6aW5nKHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nPz97fSl9LGUucmVzZXRIZWFkZXJTaXplSW5mbz10PT57ZS5zZXRDb2x1bW5TaXppbmdJbmZvKHQ/QigpOmUuaW5pdGlhbFN0YXRlLmNvbHVtblNpemluZ0luZm8/P0IoKSl9LGUuZ2V0VG90YWxTaXplPSgpPT5lLmdldEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldExlZnRUb3RhbFNpemU9KCk9PmUuZ2V0TGVmdEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldENlbnRlclRvdGFsU2l6ZT0oKT0+ZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKVswXT8uaGVhZGVycy5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCk/PzAsZS5nZXRSaWdodFRvdGFsU2l6ZT0oKT0+ZS5nZXRSaWdodEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MH19LFY9bnVsbDtmdW5jdGlvbiBMZSgpe2lmKHR5cGVvZiBWPT1gYm9vbGVhbmApcmV0dXJuIFY7bGV0IGU9ITE7dHJ5e2xldCB0PXtnZXQgcGFzc2l2ZSgpe3JldHVybiBlPSEwLCExfX0sbj0oKT0+e307d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG4sdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG4pfWNhdGNoe2U9ITF9cmV0dXJuIFY9ZSxWfWZ1bmN0aW9uIEgoZSl7cmV0dXJuIGUudHlwZT09PWB0b3VjaHN0YXJ0YH12YXIgUmU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblZpc2liaWxpdHk6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlOk8oYGNvbHVtblZpc2liaWxpdHlgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS50b2dnbGVWaXNpYmlsaXR5PW49PntlLmdldENhbkhpZGUoKSYmdC5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ9Pih7Li4udCxbZS5pZF06bj8/IWUuZ2V0SXNWaXNpYmxlKCl9KSl9LGUuZ2V0SXNWaXNpYmxlPSgpPT57bGV0IG49ZS5jb2x1bW5zO3JldHVybihuLmxlbmd0aD9uLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGUoKSk6dC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHk/LltlLmlkXSk/PyEwfSxlLmdldENhbkhpZGU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVIaWRpbmc/PyEwKSxlLmdldFRvZ2dsZVZpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVWaXNpYmlsaXR5PT1udWxsfHxlLnRvZ2dsZVZpc2liaWxpdHkodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLl9nZXRBbGxWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuZ2V0QWxsQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLGoodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBfZ2V0QWxsVmlzaWJsZUNlbGxzYCkpLGUuZ2V0VmlzaWJsZUNlbGxzPUEoKCk9PltlLmdldExlZnRWaXNpYmxlQ2VsbHMoKSxlLmdldENlbnRlclZpc2libGVDZWxscygpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHMoKV0sKGUsdCxuKT0+Wy4uLmUsLi4udCwuLi5uXSxqKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9KHQsbik9PkEoKCk9PltuKCksbigpLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+ZS5pZCkuam9pbihgX2ApXSxlPT5lLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZT09bnVsbD92b2lkIDA6ZS5nZXRJc1Zpc2libGUoKSksaihlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsdCkpO2UuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zPXQoYGdldFZpc2libGVGbGF0Q29sdW1uc2AsKCk9PmUuZ2V0QWxsRmxhdENvbHVtbnMoKSksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpKSxlLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0TGVmdExlYWZDb2x1bW5zKCkpLGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldFJpZ2h0TGVhZkNvbHVtbnMoKSksZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSxlLnNldENvbHVtblZpc2liaWxpdHk9dD0+ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uVmlzaWJpbGl0eT10PT57ZS5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eT8/e30pfSxlLnRvZ2dsZUFsbENvbHVtbnNWaXNpYmxlPXQ9Pnt0Pz89IWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLGUuc2V0Q29sdW1uVmlzaWJpbGl0eShlLmdldEFsbExlYWZDb2x1bW5zKCkucmVkdWNlKChlLG4pPT4oey4uLmUsW24uaWRdOnR8fCEobi5nZXRDYW5IaWRlIT1udWxsJiZuLmdldENhbkhpZGUoKSl9KSx7fSkpfSxlLmdldElzQWxsQ29sdW1uc1Zpc2libGU9KCk9PiFlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZShlPT4hKGUuZ2V0SXNWaXNpYmxlIT1udWxsJiZlLmdldElzVmlzaWJsZSgpKSksZS5nZXRJc1NvbWVDb2x1bW5zVmlzaWJsZT0oKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLGUuZ2V0VG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSh0LnRhcmdldD8uY2hlY2tlZCl9fX07ZnVuY3Rpb24gVShlLHQpe3JldHVybiB0P3Q9PT1gY2VudGVyYD9lLmdldENlbnRlclZpc2libGVMZWFmQ29sdW1ucygpOnQ9PT1gbGVmdGA/ZS5nZXRMZWZ0VmlzaWJsZUxlYWZDb2x1bW5zKCk6ZS5nZXRSaWdodFZpc2libGVMZWFmQ29sdW1ucygpOmUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCl9dmFyIHplPXtjcmVhdGVUYWJsZTplPT57ZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwoZSxgX19nbG9iYWxfX2ApLGUuZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsPSgpPT5lLm9wdGlvbnMubWFudWFsRmlsdGVyaW5nfHwhZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsP2UuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpOmUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbCgpLGUuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM9ZS5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMmJmUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM9KCk9PmUuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM/ZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcygpOm5ldyBNYXAsZS5fZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcz1lLm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyYmZS5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMoZSxgX19nbG9iYWxfX2ApLGUuZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcz0oKT0+e2lmKGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXMpcmV0dXJuIGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXMoKX19fSxCZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Z2xvYmFsRmlsdGVyOnZvaWQgMCwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkdsb2JhbEZpbHRlckNoYW5nZTpPKGBnbG9iYWxGaWx0ZXJgLGUpLGdsb2JhbEZpbHRlckZuOmBhdXRvYCxnZXRDb2x1bW5DYW5HbG9iYWxGaWx0ZXI6dD0+e3ZhciBuO2xldCByPShuPWUuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0pPT1udWxsfHwobj1uLl9nZXRBbGxDZWxsc0J5Q29sdW1uSWQoKVt0LmlkXSk9PW51bGw/dm9pZCAwOm4uZ2V0VmFsdWUoKTtyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgfHx0eXBlb2Ygcj09YG51bWJlcmB9fSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRDYW5HbG9iYWxGaWx0ZXI9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJigodC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcj09bnVsbD92b2lkIDA6dC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcihlKSk/PyEwKSYmISFlLmFjY2Vzc29yRm59LGNyZWF0ZVRhYmxlOmU9PntlLmdldEdsb2JhbEF1dG9GaWx0ZXJGbj0oKT0+Ri5pbmNsdWRlc1N0cmluZyxlLmdldEdsb2JhbEZpbHRlckZuPSgpPT57bGV0e2dsb2JhbEZpbHRlckZuOnR9PWUub3B0aW9ucztyZXR1cm4gayh0KT90OnQ9PT1gYXV0b2A/ZS5nZXRHbG9iYWxBdXRvRmlsdGVyRm4oKTplLm9wdGlvbnMuZmlsdGVyRm5zPy5bdF0/P0ZbdF19LGUuc2V0R2xvYmFsRmlsdGVyPXQ9PntlLm9wdGlvbnMub25HbG9iYWxGaWx0ZXJDaGFuZ2U9PW51bGx8fGUub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZSh0KX0sZS5yZXNldEdsb2JhbEZpbHRlcj10PT57ZS5zZXRHbG9iYWxGaWx0ZXIodD92b2lkIDA6ZS5pbml0aWFsU3RhdGUuZ2xvYmFsRmlsdGVyKX19fSxWZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7ZXhwYW5kZWQ6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25FeHBhbmRlZENoYW5nZTpPKGBleHBhbmRlZGAsZSkscGFnaW5hdGVFeHBhbmRlZFJvd3M6ITB9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRFeHBhbmRlZD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldEV4cGFuZGVkPz8hZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZyl7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRFeHBhbmRlZCgpLG49ITF9KX19LGUuc2V0RXhwYW5kZWQ9dD0+ZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKHQpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkPXQ9Pnt0Pz8hZS5nZXRJc0FsbFJvd3NFeHBhbmRlZCgpP2Uuc2V0RXhwYW5kZWQoITApOmUuc2V0RXhwYW5kZWQoe30pfSxlLnJlc2V0RXhwYW5kZWQ9dD0+e2Uuc2V0RXhwYW5kZWQodD97fTplLmluaXRpYWxTdGF0ZT8uZXhwYW5kZWQ/P3t9KX0sZS5nZXRDYW5Tb21lUm93c0V4cGFuZD0oKT0+ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PmUuZ2V0Q2FuRXhwYW5kKCkpLGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlcj0oKT0+dD0+e3QucGVyc2lzdD09bnVsbHx8dC5wZXJzaXN0KCksZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKX0sZS5nZXRJc1NvbWVSb3dzRXhwYW5kZWQ9KCk9PntsZXQgdD1lLmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuIHQ9PT0hMHx8T2JqZWN0LnZhbHVlcyh0KS5zb21lKEJvb2xlYW4pfSxlLmdldElzQWxsUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0eXBlb2YgdD09YGJvb2xlYW5gP3Q9PT0hMDohKCFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fGUuZ2V0Um93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PiFlLmdldElzRXhwYW5kZWQoKSkpfSxlLmdldEV4cGFuZGVkRGVwdGg9KCk9PntsZXQgdD0wO3JldHVybihlLmdldFN0YXRlKCkuZXhwYW5kZWQ9PT0hMD9PYmplY3Qua2V5cyhlLmdldFJvd01vZGVsKCkucm93c0J5SWQpOk9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5leHBhbmRlZCkpLmZvckVhY2goZT0+e2xldCBuPWUuc3BsaXQoYC5gKTt0PU1hdGgubWF4KHQsbi5sZW5ndGgpfSksdH0sZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsPSgpPT5lLmdldFNvcnRlZFJvd01vZGVsKCksZS5nZXRFeHBhbmRlZFJvd01vZGVsPSgpPT4oIWUuX2dldEV4cGFuZGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsJiYoZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZ3x8IWUuX2dldEV4cGFuZGVkUm93TW9kZWw/ZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCk6ZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVFeHBhbmRlZD1uPT57dC5zZXRFeHBhbmRlZChyPT57bGV0IGk9cj09PSEwfHwhIShyIT1udWxsJiZyW2UuaWRdKSxhPXt9O2lmKHI9PT0hMD9PYmplY3Qua2V5cyh0LmdldFJvd01vZGVsKCkucm93c0J5SWQpLmZvckVhY2goZT0+e2FbZV09ITB9KTphPXIsbj8/PSFpLCFpJiZuKXJldHVybnsuLi5hLFtlLmlkXTohMH07aWYoaSYmIW4pe2xldHtbZS5pZF06dCwuLi5ufT1hO3JldHVybiBufXJldHVybiByfSl9LGUuZ2V0SXNFeHBhbmRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4hISgodC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKT8/KG49PT0hMHx8bj8uW2UuaWRdKSl9LGUuZ2V0Q2FuRXhwYW5kPSgpPT57dmFyIG47cmV0dXJuKHQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQoZSkpPz8oKHQub3B0aW9ucy5lbmFibGVFeHBhbmRpbmc/PyEwKSYmISEoKG49ZS5zdWJSb3dzKSE9bnVsbCYmbi5sZW5ndGgpKX0sZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZD0oKT0+e2xldCBuPSEwLHI9ZTtmb3IoO24mJnIucGFyZW50SWQ7KXI9dC5nZXRSb3coci5wYXJlbnRJZCwhMCksbj1yLmdldElzRXhwYW5kZWQoKTtyZXR1cm4gbn0sZS5nZXRUb2dnbGVFeHBhbmRlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhbkV4cGFuZCgpO3JldHVybigpPT57dCYmZS50b2dnbGVFeHBhbmRlZCgpfX19fSxXPTAsRz0xMCxLPSgpPT4oe3BhZ2VJbmRleDpXLHBhZ2VTaXplOkd9KSxIZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Li4uZSxwYWdpbmF0aW9uOnsuLi5LKCksLi4uZT8ucGFnaW5hdGlvbn19KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUGFnaW5hdGlvbkNoYW5nZTpPKGBwYWdpbmF0aW9uYCxlKX0pLGNyZWF0ZVRhYmxlOmU9PntsZXQgdD0hMSxuPSExO2UuX2F1dG9SZXNldFBhZ2VJbmRleD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldFBhZ2VJbmRleD8/IWUub3B0aW9ucy5tYW51YWxQYWdpbmF0aW9uKXtpZihuKXJldHVybjtuPSEwLGUuX3F1ZXVlKCgpPT57ZS5yZXNldFBhZ2VJbmRleCgpLG49ITF9KX19LGUuc2V0UGFnaW5hdGlvbj10PT5lLm9wdGlvbnMub25QYWdpbmF0aW9uQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25QYWdpbmF0aW9uQ2hhbmdlKGU9PkQodCxlKSksZS5yZXNldFBhZ2luYXRpb249dD0+e2Uuc2V0UGFnaW5hdGlvbih0P0soKTplLmluaXRpYWxTdGF0ZS5wYWdpbmF0aW9uPz9LKCkpfSxlLnNldFBhZ2VJbmRleD10PT57ZS5zZXRQYWdpbmF0aW9uKG49PntsZXQgcj1EKHQsbi5wYWdlSW5kZXgpLGk9ZS5vcHRpb25zLnBhZ2VDb3VudD09PXZvaWQgMHx8ZS5vcHRpb25zLnBhZ2VDb3VudD09PS0xPzIqKjUzLTE6ZS5vcHRpb25zLnBhZ2VDb3VudC0xO3JldHVybiByPU1hdGgubWF4KDAsTWF0aC5taW4ocixpKSksey4uLm4scGFnZUluZGV4OnJ9fSl9LGUucmVzZXRQYWdlSW5kZXg9dD0+e3ZhciBuO2Uuc2V0UGFnZUluZGV4KHQ/VzooKG49ZS5pbml0aWFsU3RhdGUpPT1udWxsfHwobj1uLnBhZ2luYXRpb24pPT1udWxsP3ZvaWQgMDpuLnBhZ2VJbmRleCk/P1cpfSxlLnJlc2V0UGFnZVNpemU9dD0+e3ZhciBuO2Uuc2V0UGFnZVNpemUodD9HOigobj1lLmluaXRpYWxTdGF0ZSk9PW51bGx8fChuPW4ucGFnaW5hdGlvbik9PW51bGw/dm9pZCAwOm4ucGFnZVNpemUpPz9HKX0sZS5zZXRQYWdlU2l6ZT10PT57ZS5zZXRQYWdpbmF0aW9uKGU9PntsZXQgbj1NYXRoLm1heCgxLEQodCxlLnBhZ2VTaXplKSkscj1lLnBhZ2VTaXplKmUucGFnZUluZGV4LGk9TWF0aC5mbG9vcihyL24pO3JldHVybnsuLi5lLHBhZ2VJbmRleDppLHBhZ2VTaXplOm59fSl9LGUuc2V0UGFnZUNvdW50PXQ9PmUuc2V0UGFnaW5hdGlvbihuPT57bGV0IHI9RCh0LGUub3B0aW9ucy5wYWdlQ291bnQ/Py0xKTtyZXR1cm4gdHlwZW9mIHI9PWBudW1iZXJgJiYocj1NYXRoLm1heCgtMSxyKSksey4uLm4scGFnZUNvdW50OnJ9fSksZS5nZXRQYWdlT3B0aW9ucz1BKCgpPT5bZS5nZXRQYWdlQ291bnQoKV0sZT0+e2xldCB0PVtdO3JldHVybiBlJiZlPjAmJih0PVsuLi5BcnJheShlKV0uZmlsbChudWxsKS5tYXAoKGUsdCk9PnQpKSx0fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFBhZ2VPcHRpb25zYCkpLGUuZ2V0Q2FuUHJldmlvdXNQYWdlPSgpPT5lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXg+MCxlLmdldENhbk5leHRQYWdlPSgpPT57bGV0e3BhZ2VJbmRleDp0fT1lLmdldFN0YXRlKCkucGFnaW5hdGlvbixuPWUuZ2V0UGFnZUNvdW50KCk7cmV0dXJuIG49PT0tMXx8biE9PTAmJnQ8bi0xfSxlLnByZXZpb3VzUGFnZT0oKT0+ZS5zZXRQYWdlSW5kZXgoZT0+ZS0xKSxlLm5leHRQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lKzEpLGUuZmlyc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleCgwKSxlLmxhc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlLmdldFBhZ2VDb3VudCgpLTEpLGUuZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsPSgpPT5lLmdldEV4cGFuZGVkUm93TW9kZWwoKSxlLmdldFBhZ2luYXRpb25Sb3dNb2RlbD0oKT0+KCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwmJmUub3B0aW9ucy5nZXRQYWdpbmF0aW9uUm93TW9kZWwmJihlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw9ZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFBhZ2luYXRpb258fCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTplLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwoKSksZS5nZXRQYWdlQ291bnQ9KCk9PmUub3B0aW9ucy5wYWdlQ291bnQ/P01hdGguY2VpbChlLmdldFJvd0NvdW50KCkvZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb24ucGFnZVNpemUpLGUuZ2V0Um93Q291bnQ9KCk9PmUub3B0aW9ucy5yb3dDb3VudD8/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5yb3dzLmxlbmd0aH19LHE9KCk9Pih7dG9wOltdLGJvdHRvbTpbXX0pLFVlPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtyb3dQaW5uaW5nOnEoKSwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvblJvd1Bpbm5pbmdDaGFuZ2U6Tyhgcm93UGlubmluZ2AsZSl9KSxjcmVhdGVSb3c6KGUsdCk9PntlLnBpbj0obixyLGkpPT57bGV0IGE9cj9lLmdldExlYWZSb3dzKCkubWFwKGU9PntsZXR7aWQ6dH09ZTtyZXR1cm4gdH0pOltdLG89aT9lLmdldFBhcmVudFJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10scz1uZXcgU2V0KFsuLi5vLGUuaWQsLi4uYV0pO3Quc2V0Um93UGlubmluZyhlPT5uPT09YGJvdHRvbWA/e3RvcDooZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSxib3R0b206Wy4uLihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLC4uLkFycmF5LmZyb20ocyldfTpuPT09YHRvcGA/e3RvcDpbLi4uKGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV0sYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfTp7dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTooZT8uYm90dG9tPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKX0pfSxlLmdldENhblBpbj0oKT0+e2xldHtlbmFibGVSb3dQaW5uaW5nOm4sZW5hYmxlUGlubmluZzpyfT10Lm9wdGlvbnM7cmV0dXJuIHR5cGVvZiBuPT1gZnVuY3Rpb25gP24oZSk6bj8/cj8/ITB9LGUuZ2V0SXNQaW5uZWQ9KCk9PntsZXQgbj1bZS5pZF0se3RvcDpyLGJvdHRvbTppfT10LmdldFN0YXRlKCkucm93UGlubmluZyxhPW4uc29tZShlPT5yPy5pbmNsdWRlcyhlKSksbz1uLnNvbWUoZT0+aT8uaW5jbHVkZXMoZSkpO3JldHVybiBhP2B0b3BgOm8/YGJvdHRvbWA6ITF9LGUuZ2V0UGlubmVkSW5kZXg9KCk9PntsZXQgbj1lLmdldElzUGlubmVkKCk7cmV0dXJuIG4/KChuPT09YHRvcGA/dC5nZXRUb3BSb3dzKCk6dC5nZXRCb3R0b21Sb3dzKCkpPy5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSkpPy5pbmRleE9mKGUuaWQpPz8tMTotMX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldFJvd1Bpbm5pbmc9dD0+ZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUm93UGlubmluZ0NoYW5nZSh0KSxlLnJlc2V0Um93UGlubmluZz10PT5lLnNldFJvd1Bpbm5pbmcodD9xKCk6ZS5pbml0aWFsU3RhdGU/LnJvd1Bpbm5pbmc/P3EoKSksZS5nZXRJc1NvbWVSb3dzUGlubmVkPXQ9PntsZXQgbj1lLmdldFN0YXRlKCkucm93UGlubmluZztyZXR1cm4gdD8hIW5bdF0/Lmxlbmd0aDohIShuLnRvcD8ubGVuZ3RofHxuLmJvdHRvbT8ubGVuZ3RoKX0sZS5fZ2V0UGlubmVkUm93cz0odCxuLHIpPT4oZS5vcHRpb25zLmtlZXBQaW5uZWRSb3dzPz8hMD8obj8/W10pLm1hcCh0PT57bGV0IG49ZS5nZXRSb3codCwhMCk7cmV0dXJuIG4uZ2V0SXNBbGxQYXJlbnRzRXhwYW5kZWQoKT9uOm51bGx9KToobj8/W10pLm1hcChlPT50LmZpbmQodD0+dC5pZD09PWUpKSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246cn0pKSxlLmdldFRvcFJvd3M9QSgoKT0+W2UuZ2V0Um93TW9kZWwoKS5yb3dzLGUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLnRvcF0sKHQsbik9PmUuX2dldFBpbm5lZFJvd3ModCxuLGB0b3BgKSxqKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VG9wUm93c2ApKSxlLmdldEJvdHRvbVJvd3M9QSgoKT0+W2UuZ2V0Um93TW9kZWwoKS5yb3dzLGUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLmJvdHRvbV0sKHQsbik9PmUuX2dldFBpbm5lZFJvd3ModCxuLGBib3R0b21gKSxqKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0Qm90dG9tUm93c2ApKSxlLmdldENlbnRlclJvd3M9QSgoKT0+W2UuZ2V0Um93TW9kZWwoKS5yb3dzLGUuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLnRvcCxlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLChlLHQsbik9PntsZXQgcj1uZXcgU2V0KFsuLi50Pz9bXSwuLi5uPz9bXV0pO3JldHVybiBlLmZpbHRlcihlPT4hci5oYXMoZS5pZCkpfSxqKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0Q2VudGVyUm93c2ApKX19LFdlPXtnZXRJbml0aWFsU3RhdGU6ZT0+KHtyb3dTZWxlY3Rpb246e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Sb3dTZWxlY3Rpb25DaGFuZ2U6Tyhgcm93U2VsZWN0aW9uYCxlKSxlbmFibGVSb3dTZWxlY3Rpb246ITAsZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb246ITAsZW5hYmxlU3ViUm93U2VsZWN0aW9uOiEwfSksY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93U2VsZWN0aW9uPXQ9PmUub3B0aW9ucy5vblJvd1NlbGVjdGlvbkNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uUm93U2VsZWN0aW9uQ2hhbmdlKHQpLGUucmVzZXRSb3dTZWxlY3Rpb249dD0+ZS5zZXRSb3dTZWxlY3Rpb24odD97fTplLmluaXRpYWxTdGF0ZS5yb3dTZWxlY3Rpb24/P3t9KSxlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZD10PT57ZS5zZXRSb3dTZWxlY3Rpb24obj0+e3Q9dD09PXZvaWQgMD8hZS5nZXRJc0FsbFJvd3NTZWxlY3RlZCgpOnQ7bGV0IHI9ey4uLm59LGk9ZS5nZXRQcmVHcm91cGVkUm93TW9kZWwoKS5mbGF0Um93cztyZXR1cm4gdD9pLmZvckVhY2goZT0+e2UuZ2V0Q2FuU2VsZWN0KCkmJihyW2UuaWRdPSEwKX0pOmkuZm9yRWFjaChlPT57ZGVsZXRlIHJbZS5pZF19KSxyfSl9LGUudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZD10PT5lLnNldFJvd1NlbGVjdGlvbihuPT57bGV0IHI9dD09PXZvaWQgMD8hZS5nZXRJc0FsbFBhZ2VSb3dzU2VsZWN0ZWQoKTp0LGk9ey4uLm59O3JldHVybiBlLmdldFJvd01vZGVsKCkucm93cy5mb3JFYWNoKHQ9PntKKGksdC5pZCxyLCEwLGUpfSksaX0pLGUuZ2V0UHJlU2VsZWN0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldFNlbGVjdGVkUm93TW9kZWw9QSgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRDb3JlUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9HZShlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWw9QSgoKT0+W2UuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24sZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/R2UoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRGaWx0ZXJlZFNlbGVjdGVkUm93TW9kZWxgKSksZS5nZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbD1BKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldFNvcnRlZFJvd01vZGVsKCldLCh0LG4pPT5PYmplY3Qua2V5cyh0KS5sZW5ndGg/R2UoZSxuKTp7cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRHcm91cGVkU2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldElzQWxsUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Mse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hISh0Lmxlbmd0aCYmT2JqZWN0LmtleXMobikubGVuZ3RoKTtyZXR1cm4gciYmdC5zb21lKGU9PmUuZ2V0Q2FuU2VsZWN0KCkmJiFuW2UuaWRdKSYmKHI9ITEpLHJ9LGUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkPSgpPT57bGV0IHQ9ZS5nZXRQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5maWx0ZXIoZT0+ZS5nZXRDYW5TZWxlY3QoKSkse3Jvd1NlbGVjdGlvbjpufT1lLmdldFN0YXRlKCkscj0hIXQubGVuZ3RoO3JldHVybiByJiZ0LnNvbWUoZT0+IW5bZS5pZF0pJiYocj0hMSkscn0sZS5nZXRJc1NvbWVSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1PYmplY3Qua2V5cyhlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uPz97fSkubGVuZ3RoO3JldHVybiB0PjAmJnQ8ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3MubGVuZ3RofSxlLmdldElzU29tZVBhZ2VSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzO3JldHVybiFlLmdldElzQWxsUGFnZVJvd3NTZWxlY3RlZCgpJiZ0LmZpbHRlcihlPT5lLmdldENhblNlbGVjdCgpKS5zb21lKGU9PmUuZ2V0SXNTZWxlY3RlZCgpfHxlLmdldElzU29tZVNlbGVjdGVkKCkpfSxlLmdldFRvZ2dsZUFsbFJvd3NTZWxlY3RlZEhhbmRsZXI9KCk9PnQ9PntlLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX0sZS5nZXRUb2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkSGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsUGFnZVJvd3NTZWxlY3RlZCh0LnRhcmdldC5jaGVja2VkKX19LGNyZWF0ZVJvdzooZSx0KT0+e2UudG9nZ2xlU2VsZWN0ZWQ9KG4scik9PntsZXQgaT1lLmdldElzU2VsZWN0ZWQoKTt0LnNldFJvd1NlbGVjdGlvbihhPT57aWYobj1uPT09dm9pZCAwPyFpOm4sZS5nZXRDYW5TZWxlY3QoKSYmaT09PW4pcmV0dXJuIGE7bGV0IG89ey4uLmF9O3JldHVybiBKKG8sZS5pZCxuLHI/LnNlbGVjdENoaWxkcmVuPz8hMCx0KSxvfSl9LGUuZ2V0SXNTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiBLZShlLG4pfSxlLmdldElzU29tZVNlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIHFlKGUsbik9PT1gc29tZWB9LGUuZ2V0SXNBbGxTdWJSb3dzU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gcWUoZSxuKT09PWBhbGxgfSxlLmdldENhblNlbGVjdD0oKT0+dHlwZW9mIHQub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbihlKTp0Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uPz8hMCxlLmdldENhblNlbGVjdFN1YlJvd3M9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbj8/ITAsZS5nZXRDYW5NdWx0aVNlbGVjdD0oKT0+dHlwZW9mIHQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uPz8hMCxlLmdldFRvZ2dsZVNlbGVjdGVkSGFuZGxlcj0oKT0+e2xldCB0PWUuZ2V0Q2FuU2VsZWN0KCk7cmV0dXJuIG49Pnt0JiZlLnRvZ2dsZVNlbGVjdGVkKG4udGFyZ2V0Py5jaGVja2VkKX19fX0sSj0oZSx0LG4scixpKT0+e3ZhciBhO2xldCBvPWkuZ2V0Um93KHQsITApO24/KG8uZ2V0Q2FuTXVsdGlTZWxlY3QoKXx8T2JqZWN0LmtleXMoZSkuZm9yRWFjaCh0PT5kZWxldGUgZVt0XSksby5nZXRDYW5TZWxlY3QoKSYmKGVbdF09ITApKTpkZWxldGUgZVt0XSxyJiYoYT1vLnN1YlJvd3MpIT1udWxsJiZhLmxlbmd0aCYmby5nZXRDYW5TZWxlY3RTdWJSb3dzKCkmJm8uc3ViUm93cy5mb3JFYWNoKHQ9PkooZSx0LmlkLG4scixpKSl9O2Z1bmN0aW9uIEdlKGUsdCl7bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixyPVtdLGk9e30sYT1mdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcChlPT57dmFyIHQ7bGV0IG89S2UoZSxuKTtpZihvJiYoci5wdXNoKGUpLGlbZS5pZF09ZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlPXsuLi5lLHN1YlJvd3M6YShlLnN1YlJvd3MpfSksbylyZXR1cm4gZX0pLmZpbHRlcihCb29sZWFuKX07cmV0dXJue3Jvd3M6YSh0LnJvd3MpLGZsYXRSb3dzOnIscm93c0J5SWQ6aX19ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gdFtlLmlkXT8/ITF9ZnVuY3Rpb24gcWUoZSx0LG4pe3ZhciByO2lmKCEoKHI9ZS5zdWJSb3dzKSE9bnVsbCYmci5sZW5ndGgpKXJldHVybiExO2xldCBpPSEwLGE9ITE7cmV0dXJuIGUuc3ViUm93cy5mb3JFYWNoKGU9PntpZighKGEmJiFpKSYmKGUuZ2V0Q2FuU2VsZWN0KCkmJihLZShlLHQpP2E9ITA6aT0hMSksZS5zdWJSb3dzJiZlLnN1YlJvd3MubGVuZ3RoKSl7bGV0IG49cWUoZSx0KTtuPT09YGFsbGA/YT0hMDoobj09PWBzb21lYCYmKGE9ITApLGk9ITEpfX0pLGk/YGFsbGA6YT9gc29tZWA6ITF9dmFyIEplPS8oWzAtOV0rKS9nbSxZZT0oZSx0LG4pPT5udChZKGUuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCksWSh0LmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpKSxYZT0oZSx0LG4pPT5udChZKGUuZ2V0VmFsdWUobikpLFkodC5nZXRWYWx1ZShuKSkpLFplPShlLHQsbik9PnR0KFkoZS5nZXRWYWx1ZShuKSkudG9Mb3dlckNhc2UoKSxZKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLFFlPShlLHQsbik9PnR0KFkoZS5nZXRWYWx1ZShuKSksWSh0LmdldFZhbHVlKG4pKSksJGU9KGUsdCxuKT0+e2xldCByPWUuZ2V0VmFsdWUobiksaT10LmdldFZhbHVlKG4pO3JldHVybiByPmk/MTpyPGk/LTE6MH0sZXQ9KGUsdCxuKT0+dHQoZS5nZXRWYWx1ZShuKSx0LmdldFZhbHVlKG4pKTtmdW5jdGlvbiB0dChlLHQpe3JldHVybiBlPT09dD8wOmU+dD8xOi0xfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD9pc05hTihlKXx8ZT09PTEvMHx8ZT09PS0xLzA/YGA6U3RyaW5nKGUpOnR5cGVvZiBlPT1gc3RyaW5nYD9lOmBgfWZ1bmN0aW9uIG50KGUsdCl7bGV0IG49ZS5zcGxpdChKZSkuZmlsdGVyKEJvb2xlYW4pLHI9dC5zcGxpdChKZSkuZmlsdGVyKEJvb2xlYW4pO2Zvcig7bi5sZW5ndGgmJnIubGVuZ3RoOyl7bGV0IGU9bi5zaGlmdCgpLHQ9ci5zaGlmdCgpLGk9cGFyc2VJbnQoZSwxMCksYT1wYXJzZUludCh0LDEwKSxvPVtpLGFdLnNvcnQoKTtpZihpc05hTihvWzBdKSl7aWYoZT50KXJldHVybiAxO2lmKHQ+ZSlyZXR1cm4tMTtjb250aW51ZX1pZihpc05hTihvWzFdKSlyZXR1cm4gaXNOYU4oaSk/LTE6MTtpZihpPmEpcmV0dXJuIDE7aWYoYT5pKXJldHVybi0xfXJldHVybiBuLmxlbmd0aC1yLmxlbmd0aH12YXIgWD17YWxwaGFudW1lcmljOlllLGFscGhhbnVtZXJpY0Nhc2VTZW5zaXRpdmU6WGUsdGV4dDpaZSx0ZXh0Q2FzZVNlbnNpdGl2ZTpRZSxkYXRldGltZTokZSxiYXNpYzpldH0scnQ9W3ZlLFJlLE5lLFBlLGJlLGtlLHplLEJlLHtnZXRJbml0aWFsU3RhdGU6ZT0+KHtzb3J0aW5nOltdLC4uLmV9KSxnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe3NvcnRpbmdGbjpgYXV0b2Asc29ydFVuZGVmaW5lZDoxfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvblNvcnRpbmdDaGFuZ2U6Tyhgc29ydGluZ2AsZSksaXNNdWx0aVNvcnRFdmVudDplPT5lLnNoaWZ0S2V5fSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRBdXRvU29ydGluZ0ZuPSgpPT57bGV0IG49dC5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3Muc2xpY2UoMTApLHI9ITE7Zm9yKGxldCB0IG9mIG4pe2xldCBuPXQ/LmdldFZhbHVlKGUuaWQpO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PWBbb2JqZWN0IERhdGVdYClyZXR1cm4gWC5kYXRldGltZTtpZih0eXBlb2Ygbj09YHN0cmluZ2AmJihyPSEwLG4uc3BsaXQoSmUpLmxlbmd0aD4xKSlyZXR1cm4gWC5hbHBoYW51bWVyaWN9cmV0dXJuIHI/WC50ZXh0OlguYmFzaWN9LGUuZ2V0QXV0b1NvcnREaXI9KCk9PnR5cGVvZiB0LmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93c1swXT8uZ2V0VmFsdWUoZS5pZCk9PWBzdHJpbmdgP2Bhc2NgOmBkZXNjYCxlLmdldFNvcnRpbmdGbj0oKT0+e2lmKCFlKXRocm93IEVycm9yKCk7cmV0dXJuIGsoZS5jb2x1bW5EZWYuc29ydGluZ0ZuKT9lLmNvbHVtbkRlZi5zb3J0aW5nRm46ZS5jb2x1bW5EZWYuc29ydGluZ0ZuPT09YGF1dG9gP2UuZ2V0QXV0b1NvcnRpbmdGbigpOnQub3B0aW9ucy5zb3J0aW5nRm5zPy5bZS5jb2x1bW5EZWYuc29ydGluZ0ZuXT8/WFtlLmNvbHVtbkRlZi5zb3J0aW5nRm5dfSxlLnRvZ2dsZVNvcnRpbmc9KG4scik9PntsZXQgaT1lLmdldE5leHRTb3J0aW5nT3JkZXIoKSxhPW4hPW51bGw7dC5zZXRTb3J0aW5nKG89PntsZXQgcz1vPy5maW5kKHQ9PnQuaWQ9PT1lLmlkKSxjPW8/LmZpbmRJbmRleCh0PT50LmlkPT09ZS5pZCksbD1bXSx1LGQ9YT9uOmk9PT1gZGVzY2A7cmV0dXJuIHU9byE9bnVsbCYmby5sZW5ndGgmJmUuZ2V0Q2FuTXVsdGlTb3J0KCkmJnI/cz9gdG9nZ2xlYDpgYWRkYDpvIT1udWxsJiZvLmxlbmd0aCYmYyE9PW8ubGVuZ3RoLTE/YHJlcGxhY2VgOnM/YHRvZ2dsZWA6YHJlcGxhY2VgLHU9PT1gdG9nZ2xlYCYmKGF8fGl8fCh1PWByZW1vdmVgKSksdT09PWBhZGRgPyhsPVsuLi5vLHtpZDplLmlkLGRlc2M6ZH1dLGwuc3BsaWNlKDAsbC5sZW5ndGgtKHQub3B0aW9ucy5tYXhNdWx0aVNvcnRDb2xDb3VudD8/MioqNTMtMSkpKTpsPXU9PT1gdG9nZ2xlYD9vLm1hcCh0PT50LmlkPT09ZS5pZD97Li4udCxkZXNjOmR9OnQpOnU9PT1gcmVtb3ZlYD9vLmZpbHRlcih0PT50LmlkIT09ZS5pZCk6W3tpZDplLmlkLGRlc2M6ZH1dLGx9KX0sZS5nZXRGaXJzdFNvcnREaXI9KCk9PmUuY29sdW1uRGVmLnNvcnREZXNjRmlyc3Q/P3Qub3B0aW9ucy5zb3J0RGVzY0ZpcnN0Pz9lLmdldEF1dG9Tb3J0RGlyKCk9PT1gZGVzY2A/YGRlc2NgOmBhc2NgLGUuZ2V0TmV4dFNvcnRpbmdPcmRlcj1uPT57bGV0IHI9ZS5nZXRGaXJzdFNvcnREaXIoKSxpPWUuZ2V0SXNTb3J0ZWQoKTtyZXR1cm4gaT9pIT09ciYmKHQub3B0aW9ucy5lbmFibGVTb3J0aW5nUmVtb3ZhbD8/ITApJiYoIW58fCh0Lm9wdGlvbnMuZW5hYmxlTXVsdGlSZW1vdmU/PyEwKSk/ITE6aT09PWBkZXNjYD9gYXNjYDpgZGVzY2A6cn0sZS5nZXRDYW5Tb3J0PSgpPT4oZS5jb2x1bW5EZWYuZW5hYmxlU29ydGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZVNvcnRpbmc/PyEwKSYmISFlLmFjY2Vzc29yRm4sZS5nZXRDYW5NdWx0aVNvcnQ9KCk9PmUuY29sdW1uRGVmLmVuYWJsZU11bHRpU29ydD8/dC5vcHRpb25zLmVuYWJsZU11bHRpU29ydD8/ISFlLmFjY2Vzc29yRm4sZS5nZXRJc1NvcnRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5zb3J0aW5nPy5maW5kKHQ9PnQuaWQ9PT1lLmlkKTtyZXR1cm4gbj9uLmRlc2M/YGRlc2NgOmBhc2NgOiExfSxlLmdldFNvcnRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLnNvcnRpbmc/LmZpbmRJbmRleCh0PT50LmlkPT09ZS5pZCk/Py0xLGUuY2xlYXJTb3J0aW5nPSgpPT57dC5zZXRTb3J0aW5nKHQ9PnQhPW51bGwmJnQubGVuZ3RoP3QuZmlsdGVyKHQ9PnQuaWQhPT1lLmlkKTpbXSl9LGUuZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXI9KCk9PntsZXQgbj1lLmdldENhblNvcnQoKTtyZXR1cm4gcj0+e24mJihyLnBlcnNpc3Q9PW51bGx8fHIucGVyc2lzdCgpLGUudG9nZ2xlU29ydGluZz09bnVsbHx8ZS50b2dnbGVTb3J0aW5nKHZvaWQgMCxlLmdldENhbk11bHRpU29ydCgpP3Qub3B0aW9ucy5pc011bHRpU29ydEV2ZW50PT1udWxsP3ZvaWQgMDp0Lm9wdGlvbnMuaXNNdWx0aVNvcnRFdmVudChyKTohMSkpfX19LGNyZWF0ZVRhYmxlOmU9PntlLnNldFNvcnRpbmc9dD0+ZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uU29ydGluZ0NoYW5nZSh0KSxlLnJlc2V0U29ydGluZz10PT57ZS5zZXRTb3J0aW5nKHQ/W106ZS5pbml0aWFsU3RhdGU/LnNvcnRpbmc/P1tdKX0sZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbD0oKT0+ZS5nZXRHcm91cGVkUm93TW9kZWwoKSxlLmdldFNvcnRlZFJvd01vZGVsPSgpPT4oIWUuX2dldFNvcnRlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0U29ydGVkUm93TW9kZWwmJihlLl9nZXRTb3J0ZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0U29ydGVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxTb3J0aW5nfHwhZS5fZ2V0U29ydGVkUm93TW9kZWw/ZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpOmUuX2dldFNvcnRlZFJvd01vZGVsKCkpfX0samUsVmUsSGUsVWUsV2UsSWVdO2Z1bmN0aW9uIGl0KGUpe2xldCB0PVsuLi5ydCwuLi5lLl9mZWF0dXJlcz8/W11dLG49e19mZWF0dXJlczp0fSxyPW4uX2ZlYXR1cmVzLnJlZHVjZSgoZSx0KT0+T2JqZWN0LmFzc2lnbihlLHQuZ2V0RGVmYXVsdE9wdGlvbnM9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdE9wdGlvbnMobikpLHt9KSxpPWU9Pm4ub3B0aW9ucy5tZXJnZU9wdGlvbnM/bi5vcHRpb25zLm1lcmdlT3B0aW9ucyhyLGUpOnsuLi5yLC4uLmV9LGE9ey4uLmUuaW5pdGlhbFN0YXRlPz97fX07bi5fZmVhdHVyZXMuZm9yRWFjaChlPT57YT0oZS5nZXRJbml0aWFsU3RhdGU9PW51bGw/dm9pZCAwOmUuZ2V0SW5pdGlhbFN0YXRlKGEpKT8/YX0pO2xldCBvPVtdLHM9ITEsYz17X2ZlYXR1cmVzOnQsb3B0aW9uczp7Li4uciwuLi5lfSxpbml0aWFsU3RhdGU6YSxfcXVldWU6ZT0+e28ucHVzaChlKSxzfHwocz0hMCxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57Zm9yKDtvLmxlbmd0aDspby5zaGlmdCgpKCk7cz0hMX0pLmNhdGNoKGU9PnNldFRpbWVvdXQoKCk9Pnt0aHJvdyBlfSkpKX0scmVzZXQ6KCk9PntuLnNldFN0YXRlKG4uaW5pdGlhbFN0YXRlKX0sc2V0T3B0aW9uczplPT57bGV0IHQ9RChlLG4ub3B0aW9ucyk7bi5vcHRpb25zPWkodCl9LGdldFN0YXRlOigpPT5uLm9wdGlvbnMuc3RhdGUsc2V0U3RhdGU6ZT0+e24ub3B0aW9ucy5vblN0YXRlQ2hhbmdlPT1udWxsfHxuLm9wdGlvbnMub25TdGF0ZUNoYW5nZShlKX0sX2dldFJvd0lkOihlLHQscik9PihuLm9wdGlvbnMuZ2V0Um93SWQ9PW51bGw/dm9pZCAwOm4ub3B0aW9ucy5nZXRSb3dJZChlLHQscikpPz9gJHtyP1tyLmlkLHRdLmpvaW4oYC5gKTp0fWAsZ2V0Q29yZVJvd01vZGVsOigpPT4obi5fZ2V0Q29yZVJvd01vZGVsfHw9bi5vcHRpb25zLmdldENvcmVSb3dNb2RlbChuKSxuLl9nZXRDb3JlUm93TW9kZWwoKSksZ2V0Um93TW9kZWw6KCk9Pm4uZ2V0UGFnaW5hdGlvblJvd01vZGVsKCksZ2V0Um93OihlLHQpPT57bGV0IHI9KHQ/bi5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTpuLmdldFJvd01vZGVsKCkpLnJvd3NCeUlkW2VdO2lmKCFyJiYocj1uLmdldENvcmVSb3dNb2RlbCgpLnJvd3NCeUlkW2VdLCFyKSl0aHJvdyBFcnJvcigpO3JldHVybiByfSxfZ2V0RGVmYXVsdENvbHVtbkRlZjpBKCgpPT5bbi5vcHRpb25zLmRlZmF1bHRDb2x1bW5dLGU9PihlPz89e30se2hlYWRlcjplPT57bGV0IHQ9ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZjtyZXR1cm4gdC5hY2Nlc3NvcktleT90LmFjY2Vzc29yS2V5OnQuYWNjZXNzb3JGbj90LmlkOm51bGx9LGNlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLnJlbmRlclZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSwuLi5uLl9mZWF0dXJlcy5yZWR1Y2UoKGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0LmdldERlZmF1bHRDb2x1bW5EZWY9PW51bGw/dm9pZCAwOnQuZ2V0RGVmYXVsdENvbHVtbkRlZigpKSx7fSksLi4uZX0pLGooZSxgZGVidWdDb2x1bW5zYCxgX2dldERlZmF1bHRDb2x1bW5EZWZgKSksX2dldENvbHVtbkRlZnM6KCk9Pm4ub3B0aW9ucy5jb2x1bW5zLGdldEFsbENvbHVtbnM6QSgoKT0+W24uX2dldENvbHVtbkRlZnMoKV0sZT0+e2xldCB0PWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9MCksZS5tYXAoZT0+e2xldCBhPWdlKG4sZSxpLHIpLG89ZTtyZXR1cm4gYS5jb2x1bW5zPW8uY29sdW1ucz90KG8uY29sdW1ucyxhLGkrMSk6W10sYX0pfTtyZXR1cm4gdChlKX0saihlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxDb2x1bW5zYCkpLGdldEFsbEZsYXRDb2x1bW5zOkEoKCk9PltuLmdldEFsbENvbHVtbnMoKV0sZT0+ZS5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSksaihlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc2ApKSxfZ2V0QWxsRmxhdENvbHVtbnNCeUlkOkEoKCk9PltuLmdldEFsbEZsYXRDb2x1bW5zKCldLGU9PmUucmVkdWNlKChlLHQpPT4oZVt0LmlkXT10LGUpLHt9KSxqKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbEZsYXRDb2x1bW5zQnlJZGApKSxnZXRBbGxMZWFmQ29sdW1uczpBKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCksbi5fZ2V0T3JkZXJDb2x1bW5zRm4oKV0sKGUsdCk9PnQoZS5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpLGooZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsTGVhZkNvbHVtbnNgKSksZ2V0Q29sdW1uOmU9Pm4uX2dldEFsbEZsYXRDb2x1bW5zQnlJZCgpW2VdfTtPYmplY3QuYXNzaWduKG4sYyk7Zm9yKGxldCBlPTA7ZTxuLl9mZWF0dXJlcy5sZW5ndGg7ZSsrKXtsZXQgdD1uLl9mZWF0dXJlc1tlXTt0PT1udWxsfHx0LmNyZWF0ZVRhYmxlPT1udWxsfHx0LmNyZWF0ZVRhYmxlKG4pfXJldHVybiBufWZ1bmN0aW9uIGF0KCl7cmV0dXJuIGU9PkEoKCk9PltlLm9wdGlvbnMuZGF0YV0sdD0+e2xldCBuPXtyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxyPWZ1bmN0aW9uKHQsaSxhKXtpPT09dm9pZCAwJiYoaT0wKTtsZXQgbz1bXTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7bGV0IGw9eWUoZSxlLl9nZXRSb3dJZCh0W2NdLGMsYSksdFtjXSxjLGksdm9pZCAwLGE/LmlkKTtpZihuLmZsYXRSb3dzLnB1c2gobCksbi5yb3dzQnlJZFtsLmlkXT1sLG8ucHVzaChsKSxlLm9wdGlvbnMuZ2V0U3ViUm93cyl7dmFyIHM7bC5vcmlnaW5hbFN1YlJvd3M9ZS5vcHRpb25zLmdldFN1YlJvd3ModFtjXSxjKSwocz1sLm9yaWdpbmFsU3ViUm93cykhPW51bGwmJnMubGVuZ3RoJiYobC5zdWJSb3dzPXIobC5vcmlnaW5hbFN1YlJvd3MsaSsxLGwpKX19cmV0dXJuIG99O3JldHVybiBuLnJvd3M9cih0KSxufSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBvdCgpe3JldHVybiBlPT5BKCgpPT5bZS5nZXRTdGF0ZSgpLnNvcnRpbmcsZS5nZXRQcmVTb3J0ZWRSb3dNb2RlbCgpXSwodCxuKT0+e2lmKCFuLnJvd3MubGVuZ3RofHwhKHQhPW51bGwmJnQubGVuZ3RoKSlyZXR1cm4gbjtsZXQgcj1lLmdldFN0YXRlKCkuc29ydGluZyxpPVtdLGE9ci5maWx0ZXIodD0+ZS5nZXRDb2x1bW4odC5pZCk/LmdldENhblNvcnQoKSksbz17fTthLmZvckVhY2godD0+e2xldCBuPWUuZ2V0Q29sdW1uKHQuaWQpO24mJihvW3QuaWRdPXtzb3J0VW5kZWZpbmVkOm4uY29sdW1uRGVmLnNvcnRVbmRlZmluZWQsaW52ZXJ0U29ydGluZzpuLmNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nLHNvcnRpbmdGbjpuLmdldFNvcnRpbmdGbigpfSl9KTtsZXQgcz1lPT57bGV0IHQ9ZS5tYXAoZT0+KHsuLi5lfSkpO3JldHVybiB0LnNvcnQoKGUsdCk9Pntmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rPTEpe2xldCByPWFbbl0saT1vW3IuaWRdLHM9aS5zb3J0VW5kZWZpbmVkLGM9cj8uZGVzYz8/ITEsbD0wO2lmKHMpe2xldCBuPWUuZ2V0VmFsdWUoci5pZCksaT10LmdldFZhbHVlKHIuaWQpLGE9bj09PXZvaWQgMCxvPWk9PT12b2lkIDA7aWYoYXx8byl7aWYocz09PWBmaXJzdGApcmV0dXJuIGE/LTE6MTtpZihzPT09YGxhc3RgKXJldHVybiBhPzE6LTE7bD1hJiZvPzA6YT9zOi1zfX1pZihsPT09MCYmKGw9aS5zb3J0aW5nRm4oZSx0LHIuaWQpKSxsIT09MClyZXR1cm4gYyYmKGwqPS0xKSxpLmludmVydFNvcnRpbmcmJihsKj0tMSksbH1yZXR1cm4gZS5pbmRleC10LmluZGV4fSksdC5mb3JFYWNoKGU9Pnt2YXIgdDtpLnB1c2goZSksKHQ9ZS5zdWJSb3dzKSE9bnVsbCYmdC5sZW5ndGgmJihlLnN1YlJvd3M9cyhlLnN1YlJvd3MpKX0pLHR9O3JldHVybntyb3dzOnMobi5yb3dzKSxmbGF0Um93czppLHJvd3NCeUlkOm4ucm93c0J5SWR9fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFNvcnRlZFJvd01vZGVsYCwoKT0+ZS5fYXV0b1Jlc2V0UGFnZUluZGV4KCkpKX1mdW5jdGlvbiBaKCl7cmV0dXJuITB9dmFyIHN0PVN5bWJvbChgbWVyZ2UtcHJveHlgKSxjdD17Z2V0KGUsdCxuKXtyZXR1cm4gdD09PXN0P246ZS5nZXQodCl9LGhhcyhlLHQpe3JldHVybiBlLmhhcyh0KX0sc2V0OlosZGVsZXRlUHJvcGVydHk6WixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtyZXR1cm57Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIGUuZ2V0KHQpfSxzZXQ6WixkZWxldGVQcm9wZXJ0eTpafX0sb3duS2V5cyhlKXtyZXR1cm4gZS5rZXlzKCl9fTtmdW5jdGlvbiBsdChlKXtyZXR1cm5gdmFsdWVgaW4gZT9lLnZhbHVlOmV9ZnVuY3Rpb24gUSgpe3ZhciBlPVsuLi5hcmd1bWVudHNdO3JldHVybiBuZXcgUHJveHkoe2dldCh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IHI9bHQoZVtuXSlbdF07aWYociE9PXZvaWQgMClyZXR1cm4gcn19LGhhcyh0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZih0IGluIGx0KGVbbl0pKXJldHVybiEwO3JldHVybiExfSxrZXlzKCl7bGV0IHQ9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5wdXNoKC4uLk9iamVjdC5rZXlzKGx0KGVbbl0pKSk7cmV0dXJuWy4uLkFycmF5LmZyb20obmV3IFNldCh0KSldfX0sY3QpfXZhciAkPWwoe3Byb3BzOltgcmVuZGVyYCxgcHJvcHNgXSxzZXR1cDplPT4oKT0+dHlwZW9mIGUucmVuZGVyPT1gZnVuY3Rpb25gfHx0eXBlb2YgZS5yZW5kZXI9PWBvYmplY3RgP2koZS5yZW5kZXIsZS5wcm9wcyk6ZS5yZW5kZXJ9KTtmdW5jdGlvbiB1dChlKXtyZXR1cm4gUShlLHtkYXRhOmgoZS5kYXRhKX0pfWZ1bmN0aW9uIGR0KHQpe2xldCBuPWEodC5kYXRhKSxyPWl0KFEoe3N0YXRlOnt9LG9uU3RhdGVDaGFuZ2U6KCk9Pnt9LHJlbmRlckZhbGxiYWNrVmFsdWU6bnVsbCxtZXJnZU9wdGlvbnMoZSx0KXtyZXR1cm4gbj97Li4uZSwuLi50fTpRKGUsdCl9fSxuP3V0KHQpOnQpKTtpZihuKXtsZXQgbj10ZSh0LmRhdGEpO2UobiwoKT0+e3Iuc2V0U3RhdGUoZT0+KHsuLi5lLGRhdGE6bi52YWx1ZX0pKX0se2ltbWVkaWF0ZTohMH0pfWxldCBpPXJlKHIuaW5pdGlhbFN0YXRlKTtyZXR1cm4gZWUoKCk9PntyLnNldE9wdGlvbnMoZT0+e2xldCByPW5ldyBQcm94eSh7fSx7Z2V0OihlLHQpPT5pLnZhbHVlW3RdfSk7cmV0dXJuIFEoZSxuP3V0KHQpOnQse3N0YXRlOlEocix0LnN0YXRlPz97fSksb25TdGF0ZUNoYW5nZTplPT57ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uP2kudmFsdWU9ZShpLnZhbHVlKTppLnZhbHVlPWUsdC5vblN0YXRlQ2hhbmdlPT1udWxsfHx0Lm9uU3RhdGVDaGFuZ2UoZSl9fSl9KX0pLHJ9dmFyIGZ0PVtgYXJpYS1sYWJlbGBdLHB0PWwoe19fbmFtZTpgU29ydEhlYWRlckJ1dHRvbmAscHJvcHM6e2hlYWRlcjp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPV8oKCk9PnQuaGVhZGVyLmNvbHVtbi5nZXRJc1NvcnRlZCgpKSxyPV8oKCk9Pm4udmFsdWU9PT1gYXNjYD9pZTpuLnZhbHVlPT09YGRlc2NgP206cCksaT1fKCgpPT57bGV0IGU9dC5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9lOnQuaGVhZGVyLmNvbHVtbi5pZH0pLGE9XygoKT0+e2xldCBlPW4udmFsdWU9PT1gYXNjYD9gYXNjZW5kaW5nYDpuLnZhbHVlPT09YGRlc2NgP2BkZXNjZW5kaW5nYDpgbm9uZWA7cmV0dXJuYFNvcnQgYnkgJHtpLnZhbHVlfSwgY3VycmVudGx5ICR7ZX1gfSk7ZnVuY3Rpb24gbygpe3QuaGVhZGVyLmNvbHVtbi50b2dnbGVTb3J0aW5nKG4udmFsdWU9PT1gYXNjYCl9cmV0dXJuKHQsaSk9PntsZXQgcz1vZShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIHkoKSxkKGBidXR0b25gLHt0eXBlOmBidXR0b25gLCJhcmlhLWxhYmVsIjphLnZhbHVlLGNsYXNzOmBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBweC0xLjUgcHktMC41IGhvdmVyOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmluZ2Asb25DbGljazpvfSxbZS5oZWFkZXIuaXNQbGFjZWhvbGRlcj94KGBgLCEwKTooeSgpLGIoaCgkKSx7a2V5OjAscmVuZGVyOmUuaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyLHByb3BzOmUuaGVhZGVyLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpLGcocyx7aWNvbjpyLnZhbHVlLGNsYXNzOlMoW2BzaXplLTMgc2hyaW5rLTBgLG4udmFsdWU/YHRleHQtZm9yZWdyb3VuZGA6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZC82MGBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pXSw4LGZ0KX19fSksbXQ9bCh7X19uYW1lOmBEYXRhVGFibGVgLHByb3BzOntjb2x1bW5zOnt9LGRhdGE6e30scm93Q2xhc3M6e3R5cGU6RnVuY3Rpb259LGVtcHR5TWVzc2FnZTp7fSxzb3J0aW5nOnt9fSxlbWl0czpbYHVwZGF0ZTpzb3J0aW5nYF0sc2V0dXAoZSx7ZW1pdDpufSl7bGV0IGk9ZSxhPW4scz1yZShbXSksYz1kdCh7Z2V0IGRhdGEoKXtyZXR1cm4gaS5kYXRhfSxnZXQgY29sdW1ucygpe3JldHVybiBpLmNvbHVtbnN9LGdldENvcmVSb3dNb2RlbDphdCgpLGdldFNvcnRlZFJvd01vZGVsOm90KCksb25Tb3J0aW5nQ2hhbmdlOmU9PntsZXQgdD1pLnNvcnRpbmc/P3MudmFsdWUsbj10eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQpOmU7aS5zb3J0aW5nPT09dm9pZCAwP3MudmFsdWU9bjphKGB1cGRhdGU6c29ydGluZ2Asbil9LHN0YXRlOntnZXQgc29ydGluZygpe3JldHVybiBpLnNvcnRpbmc/P3MudmFsdWV9fX0pO2Z1bmN0aW9uIGwoZSl7aWYoZT09PWBhc2NgKXJldHVybmBhc2NlbmRpbmdgO2lmKGU9PT1gZGVzY2ApcmV0dXJuYGRlc2NlbmRpbmdgfXJldHVybihuLGkpPT4oeSgpLGIoaChjZSksbnVsbCx7ZGVmYXVsdDp0KCgpPT5bZyhoKEUpLG51bGwse2RlZmF1bHQ6dCgoKT0+Wyh5KCEwKSxkKHIsbnVsbCxmKGgoYykuZ2V0SGVhZGVyR3JvdXBzKCksZT0+KHkoKSxiKGgodykse2tleTplLmlkfSx7ZGVmYXVsdDp0KCgpPT5bKHkoITApLGQocixudWxsLGYoZS5oZWFkZXJzLGU9Pih5KCksYihoKFQpLHtrZXk6ZS5pZCxjbGFzczpTKGUuY29sdW1uLmNvbHVtbkRlZi5tZXRhPy5hbGlnbj09PWByaWdodGA/YHRleHQtcmlnaHRgOnZvaWQgMCksImFyaWEtc29ydCI6ZS5jb2x1bW4uZ2V0Q2FuU29ydCgpP2woZS5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSk/P2Bub25lYDp2b2lkIDB9LHtkZWZhdWx0OnQoKCk9PltlLmNvbHVtbi5nZXRDYW5Tb3J0KCk/KHkoKSxiKHB0LHtrZXk6MCxoZWFkZXI6ZSxjbGFzczpgLW14LTEuNWB9LG51bGwsOCxbYGhlYWRlcmBdKSk6ZS5pc1BsYWNlaG9sZGVyP3goYGAsITApOih5KCksYihoKCQpLHtrZXk6MSxyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpXSksXzoyfSwxMDMyLFtgY2xhc3NgLGBhcmlhLXNvcnRgXSkpKSwxMjgpKV0pLF86Mn0sMTAyNCkpKSwxMjgpKV0pLF86MX0pLGcoaChsZSksbnVsbCx7ZGVmYXVsdDp0KCgpPT5baChjKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoPT09MD8oeSgpLGIoaChkZSkse2tleTowLGNvbHNwYW46ZS5jb2x1bW5zLmxlbmd0aCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6dCgoKT0+W25lKG8oZS5lbXB0eU1lc3NhZ2U/P2Bub25lYCksMSldKSxfOjF9LDgsW2Bjb2xzcGFuYF0pKTp4KGBgLCEwKSwoeSghMCksZChyLG51bGwsZihoKGMpLmdldFJvd01vZGVsKCkucm93cyxuPT4oeSgpLGIoaCh3KSx7a2V5Om4uaWQsY2xhc3M6UyhlLnJvd0NsYXNzPy4obi5vcmlnaW5hbCkpfSx7ZGVmYXVsdDp0KCgpPT5bKHkoITApLGQocixudWxsLGYobi5nZXRWaXNpYmxlQ2VsbHMoKSxlPT4oeSgpLGIoaChDKSx7a2V5OmUuaWQsY2xhc3M6UyhlLmNvbHVtbi5jb2x1bW5EZWYubWV0YT8uYWxpZ249PT1gcmlnaHRgP2B0ZXh0LXJpZ2h0IHRhYnVsYXItbnVtc2A6dm9pZCAwKX0se2RlZmF1bHQ6dCgoKT0+W2coaCgkKSx7cmVuZGVyOmUuY29sdW1uLmNvbHVtbkRlZi5jZWxsLHByb3BzOmUuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjJ9LDEwMzIsW2BjbGFzc2BdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9KSl9fSk7ZXhwb3J0e290IGFzIGEsVCBhcyBjLGxlIGFzIGQsY2UgYXMgZixhdCBhcyBpLHcgYXMgbCxwdCBhcyBuLGZlIGFzIG8sZHQgYXMgcixFIGFzIHMsbXQgYXMgdCxDIGFzIHV9Ow==", + "aW1wb3J0e1ogYXMgZSxfbiBhcyB0LGZyIGFzIG4saXIgYXMgcixuIGFzIGksc24gYXMgYSx1biBhcyBvLHZpIGFzIHMsd2kgYXMgYyx4aSBhcyBsLHluIGFzIHV9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjt2YXIgZD1bYGFyaWEtbGFiZWxgLGB0aXRsZWBdLGY9dSh7X19uYW1lOmBFbnRpdHlMaW5rYCxwcm9wczp7bGFiZWw6e30sa2luZDp7fSxpZDp7fSxsYWJlbENsYXNzOnt9fSxzZXR1cCh1KXtsZXQgZj11LHA9aSgpLG09e3VzZXI6e3BhZ2U6YGNvbnN1bWVyc2AscGFyYW1LZXk6YHVzZXJgLG5vdW46YENvbnN1bWVyc2B9LG1vZGVsOntwYWdlOmBtb2RlbHNgLHBhcmFtS2V5OmBtb2RlbGAsbm91bjpgTW9kZWxzYH19O2Z1bmN0aW9uIGgoZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgdD1tW2Yua2luZF07cC5nb1RvKHQucGFnZSx7W3QucGFyYW1LZXldOmYuaWR9KX1yZXR1cm4oaSxmKT0+e2xldCBwPW4oYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiByKCksbyhgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHt1LmxhYmVsfSBpbiAke21bdS5raW5kXS5ub3VufWAsdGl0bGU6YFZpZXcgJHt1LmxhYmVsfSBpbiAke21bdS5raW5kXS5ub3VufWAsY2xhc3M6YGlubGluZS1mbGV4IG1pbi13LTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gdGV4dC1pbmhlcml0IGhvdmVyOnRleHQtcHJpbWFyeSBob3Zlcjp1bmRlcmxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgLG9uQ2xpY2s6aH0sW2EoYHNwYW5gLHtjbGFzczpsKFtgbWluLXctMGAsdS5sYWJlbENsYXNzXSl9LGModS5sYWJlbCksMyksdChwLHtpY29uOnMoZSksY2xhc3M6YHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldLDgsZCl9fX0pO2V4cG9ydHtmIGFzIHR9Ow==", ), }, - "EntityLink-Dg93KGVT.js": { + "ErrorState-DDJOKJlz.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e1NpIGFzIGUsWSBhcyB0LF9uIGFzIG4sYW4gYXMgcixjbiBhcyBpLGdpIGFzIGEsaG4gYXMgbyxuIGFzIHMsbnIgYXMgYyx1ciBhcyBsLHlpIGFzIHV9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgZD1bYGFyaWEtbGFiZWxgLGB0aXRsZWBdLGY9bih7X19uYW1lOmBFbnRpdHlMaW5rYCxwcm9wczp7bGFiZWw6e30sa2luZDp7fSxpZDp7fSxsYWJlbENsYXNzOnt9fSxzZXR1cChuKXtsZXQgZj1uLHA9cygpLG09e3VzZXI6e3BhZ2U6YGNvbnN1bWVyc2AscGFyYW1LZXk6YHVzZXJgLG5vdW46YENvbnN1bWVyc2B9LG1vZGVsOntwYWdlOmBtb2RlbHNgLHBhcmFtS2V5OmBtb2RlbGAsbm91bjpgTW9kZWxzYH19O2Z1bmN0aW9uIGgoZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgdD1tW2Yua2luZF07cC5nb1RvKHQucGFnZSx7W3QucGFyYW1LZXldOmYuaWR9KX1yZXR1cm4ocyxmKT0+e2xldCBwPWwoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBjKCksaShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHtuLmxhYmVsfSBpbiAke21bbi5raW5kXS5ub3VufWAsdGl0bGU6YFZpZXcgJHtuLmxhYmVsfSBpbiAke21bbi5raW5kXS5ub3VufWAsY2xhc3M6YGlubGluZS1mbGV4IG1pbi13LTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gdGV4dC1pbmhlcml0IGhvdmVyOnRleHQtcHJpbWFyeSBob3Zlcjp1bmRlcmxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgLG9uQ2xpY2s6aH0sW3IoYHNwYW5gLHtjbGFzczp1KFtgbWluLXctMGAsbi5sYWJlbENsYXNzXSl9LGUobi5sYWJlbCksMyksbyhwLHtpY29uOmEodCksY2xhc3M6YHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldLDgsZCl9fX0pO2V4cG9ydHtmIGFzIHR9Ow==", + "aW1wb3J0e0xyIGFzIGUsTyBhcyB0LFggYXMgbixfbiBhcyByLGNpIGFzIGksY24gYXMgYSxmciBhcyBvLGduIGFzIHMsZ3QgYXMgYyxpciBhcyBsLGxuIGFzIHUsc24gYXMgZCx1biBhcyBmLHZpIGFzIHAsd2kgYXMgbSx4aSBhcyBoLHluIGFzIGd9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjt2YXIgXz17cm9sZTpgYWxlcnRgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBweC00IHB5LTggdGV4dC1jZW50ZXJgfSx2PXtjbGFzczpgbWF4LXctZnVsbCBicmVhay13b3JkcyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZGVzdHJ1Y3RpdmVgfSx5PWcoe19fbmFtZTpgRXJyb3JTdGF0ZWAscHJvcHM6e21lc3NhZ2U6e30sb25SZXRyeTp7dHlwZTpGdW5jdGlvbn19LHNldHVwKGcpe2xldCB5PWcsYj1pKCExKTthc3luYyBmdW5jdGlvbiB4KCl7aWYoISgheS5vblJldHJ5fHxiLnZhbHVlKSl7Yi52YWx1ZT0hMDt0cnl7YXdhaXQgeS5vblJldHJ5KCl9ZmluYWxseXtiLnZhbHVlPSExfX19cmV0dXJuKGkseSk9PntsZXQgUz1vKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gbCgpLGYoYGRpdmAsXyxbcihTLHtpY29uOnAoYyksY2xhc3M6YHNpemUtNiB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxkKGBwYCx2LG0oZy5tZXNzYWdlKSwxKSxnLm9uUmV0cnk/KGwoKSxhKHAodCkse2tleTowLHR5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLGNsYXNzOmBtdC0xYCxkaXNhYmxlZDpiLnZhbHVlLG9uQ2xpY2s6eH0se2RlZmF1bHQ6ZSgoKT0+W3IoUyx7aWNvbjpwKG4pLGNsYXNzOmgoW2BzaXplLTMuNWAsYi52YWx1ZT9gYW5pbWF0ZS1zcGluIG1vdGlvbi1yZWR1Y2U6YW5pbWF0ZS1ub25lYDp2b2lkIDBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLHMoYCBgK20oYi52YWx1ZT9gUmV0cnlpbmfigKZgOmBSZXRyeWApLDEpXSksXzoxfSw4LFtgZGlzYWJsZWRgXSkpOnUoYGAsITApXSl9fX0pO2V4cG9ydHt5IGFzIHR9Ow==", ), }, - "ErrorState-ym6eSlj2.js": { + "HomePage-BtNn00HV.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0UgYXMgZSxGciBhcyB0LEogYXMgbixTaSBhcyByLF9uIGFzIGksYW4gYXMgYSxjbiBhcyBvLGdpIGFzIHMsaG4gYXMgYyxtbiBhcyBsLG10IGFzIHUsbnIgYXMgZCxvaSBhcyBmLG9uIGFzIHAsc24gYXMgbSx1ciBhcyBoLHlpIGFzIGd9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgXz17cm9sZTpgYWxlcnRgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMiBweC00IHB5LTggdGV4dC1jZW50ZXJgfSx2PXtjbGFzczpgbWF4LXctZnVsbCBicmVhay13b3JkcyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZGVzdHJ1Y3RpdmVgfSx5PWkoe19fbmFtZTpgRXJyb3JTdGF0ZWAscHJvcHM6e21lc3NhZ2U6e30sb25SZXRyeTp7dHlwZTpGdW5jdGlvbn19LHNldHVwKGkpe2xldCB5PWksYj1mKCExKTthc3luYyBmdW5jdGlvbiB4KCl7aWYoISgheS5vblJldHJ5fHxiLnZhbHVlKSl7Yi52YWx1ZT0hMDt0cnl7YXdhaXQgeS5vblJldHJ5KCl9ZmluYWxseXtiLnZhbHVlPSExfX19cmV0dXJuKGYseSk9PntsZXQgUz1oKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gZCgpLG8oYGRpdmAsXyxbYyhTLHtpY29uOnModSksY2xhc3M6YHNpemUtNiB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxhKGBwYCx2LHIoaS5tZXNzYWdlKSwxKSxpLm9uUmV0cnk/KGQoKSxwKHMoZSkse2tleTowLHR5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLGNsYXNzOmBtdC0xYCxkaXNhYmxlZDpiLnZhbHVlLG9uQ2xpY2s6eH0se2RlZmF1bHQ6dCgoKT0+W2MoUyx7aWNvbjpzKG4pLGNsYXNzOmcoW2BzaXplLTMuNWAsYi52YWx1ZT9gYW5pbWF0ZS1zcGluIG1vdGlvbi1yZWR1Y2U6YW5pbWF0ZS1ub25lYDp2b2lkIDBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLGwoYCBgK3IoYi52YWx1ZT9gUmV0cnlpbmfigKZgOmBSZXRyeWApLDEpXSksXzoxfSw4LFtgZGlzYWJsZWRgXSkpOm0oYGAsITApXSl9fX0pO2V4cG9ydHt5IGFzIHR9Ow==", + "aW1wb3J0e0MgYXMgZSxEIGFzIHQsRSBhcyBuLExyIGFzIHIsTXIgYXMgaSxRbiBhcyBhLFMgYXMgbyxUIGFzIHMsWHQgYXMgYyxfbiBhcyBsLGIgYXMgZWUsY2kgYXMgdSxjbiBhcyBkLGRyIGFzIHRlLGcgYXMgbmUsZ24gYXMgZixpciBhcyBwLGxuIGFzIG0sbXIgYXMgaCxuIGFzIHJlLG5yIGFzIGllLG9pIGFzIGFlLG9uIGFzIGcsc24gYXMgXyx0IGFzIHYsdW4gYXMgeSx1ciBhcyBiLHYgYXMgb2UsdmkgYXMgeCx3IGFzIHNlLHdpIGFzIFMseGkgYXMgQyx5IGFzIGNlLHluIGFzIHd9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7biBhcyBsZSxyIGFzIHVlLHQgYXMgZGV9ZnJvbSIuL3RhYnMtQ3VoNkZRMGouanMiO2ltcG9ydHt0IGFzIGZlfWZyb20iLi9pbmRleC04OENUUk5IUC5qcyI7aW1wb3J0e3QgYXMgcGV9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHthIGFzIG1lLGcgYXMgaGUsayBhcyBULG0gYXMgZ2UsbiBhcyBFLHMgYXMgRCx0IGFzIF9lLHggYXMgT31mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHtpIGFzIHZlLG4gYXMgeWUsbyBhcyBiZSxzIGFzIHhlLHQgYXMgU2V9ZnJvbSIuL1RyeUxvbmdlclJhbmdlQnV0dG9uLUJoMTl5aXY4LmpzIjtpbXBvcnR7dCBhcyBDZX1mcm9tIi4vTG9hZFN0YXRlVmlldy1CRWJzZXg3WS5qcyI7aW1wb3J0e3QgYXMga31mcm9tIi4vRW50aXR5TGluay1CUjZwbGFXVi5qcyI7aW1wb3J0e3QgYXMgd2V9ZnJvbSIuL2V2ZW50cy1SOXlRbEJjMC5qcyI7aW1wb3J0e2EgYXMgVGUsciBhcyBFZX1mcm9tIi4vZXZlbnRzLWZpbHRlci1DaWV1MVVCUi5qcyI7aW1wb3J0e2EgYXMgRGUsYyBhcyBPZSxpIGFzIGtlLG4gYXMgQWUsbyBhcyBqZSxyIGFzIE1lLHQgYXMgTmV9ZnJvbSIuL2twaS1QMDhVdnJLaS5qcyI7dmFyIEE9e2NsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFBlPXtrZXk6MCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxqPXcoe19fbmFtZTpgS3BpVGlsZWAscHJvcHM6e2xhYmVsOnt9LHZhbHVlOnt9LGRlbHRhOnt9LHRpZXI6e2RlZmF1bHQ6YG9rYH0sdG86e319LHNldHVwKGUpe2xldCBpPWUsYT1yZSgpLG89ZygoKT0+e3N3aXRjaChpLnRpZXIpe2Nhc2Vgd2FybmA6cmV0dXJuYHRleHQtc3RhdHVzLXdhcm5gO2Nhc2VgY3JpdGljYWxgOnJldHVybmB0ZXh0LWRlc3RydWN0aXZlYDtkZWZhdWx0OnJldHVybmB0ZXh0LWZvcmVncm91bmRgfX0pO2Z1bmN0aW9uIHMoKXtpLnRvJiZhLmdvVG8oaS50by5wYWdlLGkudG8ucGFyYW1zPz97fSl9cmV0dXJuKGksYSk9PihwKCksZChoKGUudG8/YGJ1dHRvbmA6YGRpdmApLHt0eXBlOmUudG8/YGJ1dHRvbmA6dm9pZCAwLGNsYXNzOkMoW2BibG9jayB3LWZ1bGwgcm91bmRlZC14bCB0ZXh0LWxlZnRgLGUudG8/YGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOm9wYWNpdHktOTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgOnZvaWQgMF0pLG9uQ2xpY2s6c30se2RlZmF1bHQ6cigoKT0+W2woeCh0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKHgobikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHB4LTQgcHktM2B9LHtkZWZhdWx0OnIoKCk9PltfKGBzcGFuYCxBLFMoZS5sYWJlbCksMSksXyhgc3BhbmAse2NsYXNzOkMoW2B0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRhYnVsYXItbnVtc2Asby52YWx1ZV0pfSxTKGUudmFsdWUpLDMpLGUuZGVsdGE/KHAoKSx5KGBzcGFuYCxQZSxTKGUuZGVsdGEpLDEpKTptKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKSxfOjF9LDgsW2B0eXBlYCxgY2xhc3NgXSkpfX0pLEZlPXcoe19fbmFtZTpgU2tlbGV0b25LcGlUaWxlYCxzZXR1cChlKXtyZXR1cm4oZSxpKT0+KHAoKSxkKHgodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbCh4KG4pLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMSBweC00IHB5LTNgfSx7ZGVmYXVsdDpyKCgpPT5bbCh4KHYpLHtjbGFzczpgaC0zIHctMjBgfSksbCh4KHYpLHtjbGFzczpgaC03IHctMTZgfSksbCh4KHYpLHtjbGFzczpgaC0zIHctMjhgfSldKSxfOjF9KV0pLF86MX0pKX19KSxNPXtrZXk6NCxjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMS41YH0sTj17Y2xhc3M6YGZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxJZT17Y2xhc3M6YHctNCBzaHJpbmstMCB0ZXh0LXJpZ2h0IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sUD17Y2xhc3M6YHNocmluay0wIGZvbnQtbWVkaXVtIHRhYnVsYXItbnVtc2B9LEY9dyh7X19uYW1lOmBUb3BMaXN0YCxwcm9wczp7dGl0bGU6e30saXRlbXM6e30sZW1wdHlUZXh0Ont9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxsb2FkZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxlcnJvcjp7ZGVmYXVsdDpgYH0sb25SZXRyeTp7fSxub3RpY2U6e30sbm90aWNlRGVzY3JpcHRpb246e319LHNldHVwKGUpe2xldCBpPWUsYT1nKCgpPT5PKHtsb2FkaW5nOmkubG9hZGluZyxoYXNEYXRhOmkubG9hZGVkLGVycm9yOmkuZXJyb3I/P2BgfSkpO3JldHVybihpLG8pPT4ocCgpLGQoeCh0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKHgocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbCh4KHNlKSxudWxsLHtkZWZhdWx0OnIoKCk9PltmKFMoZS50aXRsZSksMSldKSxfOjF9KSx0ZShpLiRzbG90cyxgY29udHJvbHNgKV0pLF86M30pLGwoeChuKSxudWxsLHtkZWZhdWx0OnIoKCk9PltlLm5vdGljZT8ocCgpLGQoVCx7a2V5OjAsdGl0bGU6ZS5ub3RpY2UsZGVzY3JpcHRpb246ZS5ub3RpY2VEZXNjcmlwdGlvbn0sbnVsbCw4LFtgdGl0bGVgLGBkZXNjcmlwdGlvbmBdKSk6YS52YWx1ZT09PWBza2VsZXRvbmA/KHAoKSxkKEUse2tleToxLHJvd3M6NX0pKTphLnZhbHVlPT09YGVycm9yYD8ocCgpLGQocGUse2tleToyLG1lc3NhZ2U6ZS5lcnJvcj8/YGAsIm9uLXJldHJ5IjplLm9uUmV0cnl9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6ZS5pdGVtcy5sZW5ndGg9PT0wPyhwKCksZChULHtrZXk6Myx0aXRsZTplLmVtcHR5VGV4dH0se2RlZmF1bHQ6cigoKT0+W3RlKGkuJHNsb3RzLGBlbXB0eS1hY3Rpb25gKV0pLF86M30sOCxbYHRpdGxlYF0pKToocCgpLHkoYG9sYCxNLFsocCghMCkseShjLG51bGwsYihlLml0ZW1zLChlLHQpPT4ocCgpLHkoYGxpYCx7a2V5OmUuaWQsY2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyB0ZXh0LXNtYH0sW18oYHNwYW5gLE4sW18oYHNwYW5gLEllLFModCsxKSwxKSxsKGsse2xhYmVsOmUubGFiZWwsa2luZDplLmtpbmQsaWQ6ZS5pZCxjbGFzczpgbWluLXctMGAsImxhYmVsLWNsYXNzIjpgdHJ1bmNhdGVgfSxudWxsLDgsW2BsYWJlbGAsYGtpbmRgLGBpZGBdKV0pLF8oYHNwYW5gLFAsUyhlLnZhbHVlKSwxKV0pKSksMTI4KSldKSldKSxfOjN9KV0pLF86M30pKX19KSxJPVtgY29zdGAsYHJlcWAsYHRva2Vuc2BdLEw9YGNvc3RgLFI9e2Nvc3Q6YENvc3RgLHJlcTpgUmVxdWVzdHNgLHRva2VuczpgVG9rZW5zYH0sTGU9NjRlMyxSZT17Y29zdDpbYGNvc3RgXSxyZXE6W2ByZXFgXSx0b2tlbnM6W2B0b2tpbmAsYHRva291dGBdfTtmdW5jdGlvbiB6ZShlKXtyZXR1cm4gSS5pbmNsdWRlcyhlPz9gYCk/ZTpMfXZhciB6PTFlMztmdW5jdGlvbiBCZShlLHQsbixyPXope2xldCBpPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIGkuc2V0KGBraW5kYCxgdXNlcmApLGkuc2V0KGB3aW5kb3dgLGUpLGkuc2V0KGBzcGFuYCxTdHJpbmcodCkpLGkuc2V0KGBvZmZzZXRgLGAwYCksaS5zZXQoYG1ldHJpY3NgLFJlW25dLmpvaW4oYCxgKSksaS5zZXQoYGxpbWl0YCxTdHJpbmcocikpLGAvYWRtaW4vYXBpL3VzYWdlL3RvdGFscz8ke2kudG9TdHJpbmcoKX1gfWZ1bmN0aW9uIFZlKGUsdCxuKXtyZXR1cm4gZSp0Km4+TGV9ZnVuY3Rpb24gSGUoZSx0LG4pe3JldHVybiBlIT09bnVsbCYmVmUoZSx0LG4pfWZ1bmN0aW9uIFVlKGUsdCl7c3dpdGNoKHQpe2Nhc2VgY29zdGA6cmV0dXJuIGUudmFsdWVzLmNvc3Q/PzA7Y2FzZWByZXFgOnJldHVybiBlLnZhbHVlcy5yZXE/PzA7Y2FzZWB0b2tlbnNgOnJldHVybihlLnZhbHVlcy50b2tpbj8/MCkrKGUudmFsdWVzLnRva291dD8/MCl9fWZ1bmN0aW9uIFdlKGUsdCxuPTUpe3JldHVybiBlLm1hcChlPT4oe2lkOmUuaWQsdmFsdWU6VWUoZSx0KX0pKS5maWx0ZXIoZT0+ZS52YWx1ZT4wKS5zb3J0KChlLHQpPT50LnZhbHVlPT09ZS52YWx1ZT9lLmlkLmxvY2FsZUNvbXBhcmUodC5pZCk6dC52YWx1ZS1lLnZhbHVlKS5zbGljZSgwLG4pfXZhciBHZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxLZT17ImFyaWEtbGFiZWwiOmBLZXkgbWV0cmljc2AsY2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMgc206Z3JpZC1jb2xzLTMgbGc6Z3JpZC1jb2xzLTRgfSxxZT17a2V5OjEsY2xhc3M6YGNvbC1zcGFuLWZ1bGxgfSxKZT17ImFyaWEtbGFiZWwiOmBUb3Agc3BlbmRlcnMgYW5kIG1vZGVsc2AsY2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgbGc6Z3JpZC1jb2xzLTJgfSxZZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTJgfSxYZT17Y2xhc3M6YGZsZXggbWluLXctMCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxaZT17Y2xhc3M6YG1pbi13LTAgdHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sUWU9e2NsYXNzOmBzaHJpbmstMCB0YWJ1bGFyLW51bXMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sJGU9NSxldD02ZTQsdHQ9dyh7X19uYW1lOmBIb21lUGFnZWAsc2V0dXAodGUpe2xldCBtPWUoKSxoPW5lKCksdj13ZSgpLEM9ZmUoKSx3PXJlKCksVD1nKCgpPT5oLnVzYWdlPy50b3RhbC5jb3N0UGVyRGF5TWljcm9Vc2Q/PzApLEU9ZygoKT0+aC51c2FnZT8udG90YWwuY29zdFBlck1vbnRoTWljcm9Vc2Q/PzApLGs9ZygoKT0+amUoaC5vdmVydmlldz8uZ3JvdXBzPz9bXSkpLEE9ZygoKT0+QWUoTmUoRS52YWx1ZSxrLnZhbHVlKSkpLFBlPWcoKCk9PntsZXQgZT1gJHtEKFQudmFsdWUpfSB0b2RheWA7cmV0dXJuIGsudmFsdWU+MD9gJHtlfSDCtyBidWRnZXQgJHtEKGsudmFsdWUpfS9tb2A6YCR7ZX0gwrcgbm8gYnVkZ2V0IHNldGB9KSxNPWcoKCk9PnhlKEUudmFsdWUsYmUobmV3IERhdGUpKSksTj1nKCgpPT52ZShNLnZhbHVlLGsudmFsdWU+MD9oZShrLnZhbHVlKTp2b2lkIDApKSxJZT1nKCgpPT5NLnZhbHVlPT09bnVsbD95ZTpEKE0udmFsdWUpKSxQPWcoKCk9Pk4udmFsdWUud2lsbEV4Y2VlZD9gY3JpdGljYWxgOmBva2ApLEw9ZygoKT0+e2lmKE0udmFsdWUhPT1udWxsKXJldHVybiBrLnZhbHVlPD0wP2BubyBidWRnZXQgc2V0YDpOLnZhbHVlLndpbGxFeGNlZWQ/YHByb2plY3RlZCB0byBleGNlZWQgYnVkZ2V0YDpgcHJvamVjdGVkIHdpdGhpbiBidWRnZXRgfSksTGU9ZygoKT0+aC51c2FnZT8udG90YWwucmVxdWVzdHNQZXJNaW51dGU/PzApLHo9ZygoKT0+a2UoaC5vdmVydmlldz8ucHJvdmlkZXJzPz9bXSkpLFZlPWcoKCk9Pk1lKHoudmFsdWUucmF0ZSkpLFVlPWcoKCk9Pk9lKHoudmFsdWUucmF0ZSxgbm8gdHJhZmZpY2ApKSx0dD1nKCgpPT5gJHt6LnZhbHVlLmZhaWx1cmVzfS8ke3oudmFsdWUuYXR0ZW1wdHN9IGF0dGVtcHRzIGluIHRoZSBsYXN0IG1pbnV0ZWApLG50PWcoKCk9PkRlKGgub3ZlcnZpZXc/LnByb3ZpZGVycz8/W10pKSxydD1nKCgpPT5oLm92ZXJ2aWV3Py53YXJuaW5ncy5sZW5ndGg/PzApLGl0PWcoKCk9Pmgub3ZlcnZpZXc/LnByaWNpbmcudW5wcmljZWQ/PzApLGF0PWcoKCk9Pk8oe2xvYWRpbmc6ITAsaGFzRGF0YTpoLm92ZXJ2aWV3IT09bnVsbCYmaC51c2FnZSE9PW51bGwsZXJyb3I6aC5lcnJvcn0pKSxCPWcoKCk9PnplKHcucGFyYW1zLnRvcCkpO2Z1bmN0aW9uIG90KGUpe2lmKHR5cGVvZiBlIT1gc3RyaW5nYHx8IUkuaW5jbHVkZXMoZSkpcmV0dXJuO2xldCB0PWU7aWYodD09PWBjb3N0YCl7bGV0e3RvcDplLC4uLnR9PXcucGFyYW1zO3cuZ29UbyhgaG9tZWAsdCk7cmV0dXJufXcuZ29UbyhgaG9tZWAsey4uLncucGFyYW1zLHRvcDp0fSl9bGV0IHN0PWcoKCk9PmgudXNhZ2U/LnVzZXJzLmxlbmd0aD8/bnVsbCksVj11KFtdKSxIPXUoW10pLFU9dSghMSksVz11KGBgKSxHPXUoITEpLEs9dShgYCkscT11KCExKSxKPXUoITEpLFk9YWUobmV3IE1hcCksY3Q9ZygoKT0+WS5oYXMoQi52YWx1ZSkpLFg9MCxaPTA7ZnVuY3Rpb24gbHQoZSx0KXtyZXR1cm4gZT09PWBjb3N0YD9EKHQpOm1lKHQpfWxldCB1dD1nKCgpPT5XZShWLnZhbHVlLEIudmFsdWUpLm1hcChlPT4oe2lkOmUuaWQsbGFiZWw6ZS5pZCx2YWx1ZTpsdChCLnZhbHVlLGUudmFsdWUpLGtpbmQ6YHVzZXJgfSkpKSxkdD1nKCgpPT5gVG9wIDUgdXNlcnMgYnkgJHtSW0IudmFsdWVdLnRvTG93ZXJDYXNlKCl9YCk7YXN5bmMgZnVuY3Rpb24gUSgpe2lmKCFtLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Qi52YWx1ZSx0PVJlW2VdLmxlbmd0aDtpZihIZShzdC52YWx1ZSx0LEMuc3BhbikpeysrWCxVLnZhbHVlPSExLEoudmFsdWU9ITAsVy52YWx1ZT1gYDtyZXR1cm59bGV0IG49KytYO1UudmFsdWU9ITA7dHJ5e2xldCB0PWF3YWl0IGVlKEJlKEMud2luZG93LEMuc3BhbixlKSk7aWYobiE9PVgpcmV0dXJuO1kuc2V0KGUsdC5yb3dzKSxWLnZhbHVlPXQucm93cyxXLnZhbHVlPWBgLEoudmFsdWU9ITF9Y2F0Y2goZSl7aWYobiE9PVgpcmV0dXJuO2UgaW5zdGFuY2VvZiBjZSYmZS5zdGF0dXM9PT00MDAmJi9yYW5nZSB0b28gbGFyZ2UvaS50ZXN0KGUubWVzc2FnZSk/KEoudmFsdWU9ITAsVy52YWx1ZT1gYCk6Vy52YWx1ZT1vKGUpfWZpbmFsbHl7bj09PVgmJihVLnZhbHVlPSExKX19YXN5bmMgZnVuY3Rpb24gZnQoKXtpZighbS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldCBlPSsrWjtHLnZhbHVlPSEwO3RyeXtsZXQgdD1hd2FpdCBlZShgL2FkbWluL2FwaS91c2FnZS9tb2RlbHM/bWV0cmljPWNvc3Qmd2luZG93PSR7Qy53aW5kb3d9JnNwYW49JHtDLnNwYW59JmxpbWl0PSR7JGV9YCk7aWYoZSE9PVopcmV0dXJuO0gudmFsdWU9dC5tb2RlbHMubWFwKGU9Pih7aWQ6ZS5pZCxsYWJlbDplLmlkLHZhbHVlOkQoZS52YWx1ZSksa2luZDpgbW9kZWxgfSkpLEsudmFsdWU9YGAscS52YWx1ZT0hMH1jYXRjaCh0KXtpZihlIT09WilyZXR1cm47Sy52YWx1ZT1vKHQpfWZpbmFsbHl7ZT09PVomJihHLnZhbHVlPSExKX19YXN5bmMgZnVuY3Rpb24gcHQoKXthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1EoKSxmdCgpXSl9bGV0ICQ7aShCLGU9PntsZXQgdD1ZLmdldChlKTtWLnZhbHVlPXQ/P1tdLFcudmFsdWU9YGAsSi52YWx1ZT0hMSxRKCl9KSxpKCgpPT5DLnJhbmdlLCgpPT57WS5jbGVhcigpLFYudmFsdWU9W10sSC52YWx1ZT1bXSxxLnZhbHVlPSExLFcudmFsdWU9YGAsSy52YWx1ZT1gYCxKLnZhbHVlPSExLHB0KCl9KTtsZXQgbXQ9ZygoKT0+di5ldmVudHMuc2xpY2UoMCw4KSksaHQ9ZygoKT0+Tyh7bG9hZGluZzp2LnJlZnJlc2hpbmcsaGFzRGF0YTp2Lmxhc3RVcGRhdGVkIT09bnVsbCxlcnJvcjp2LmVycm9yfSkpLGd0PWcoKCk9Pm10LnZhbHVlLmxlbmd0aD09PTApO3JldHVybiBhKCgpPT57di5zdGFydFBvbGxpbmcoKSwkPW9lKHtpbnRlcnZhbE1zOmV0LHRpY2s6KCk9PnZvaWQgcHQoKX0pLCQuc3RhcnQoKX0pLGllKCgpPT57di5zdG9wUG9sbGluZygpLCQ/LnN0b3AoKX0pLChlLGkpPT4ocCgpLHkoYGRpdmAsR2UsW18oYHNlY3Rpb25gLEtlLFthdC52YWx1ZT09PWBza2VsZXRvbmA/KHAoKSx5KGMse2tleTowfSxiKDcsZT0+bChGZSx7a2V5OmV9KSksNjQpKTphdC52YWx1ZT09PWBlcnJvcmA/KHAoKSx5KGBkaXZgLHFlLFtsKHBlLHttZXNzYWdlOngoaCkuZXJyb3IsIm9uLXJldHJ5Ijp4KGgpLnJlZnJlc2h9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKV0pKToocCgpLHkoYyx7a2V5OjJ9LFtsKGose2xhYmVsOmBTcGVuZCAoTVREKWAsdmFsdWU6eChEKShFLnZhbHVlKSxkZWx0YTpQZS52YWx1ZSx0aWVyOkEudmFsdWUsdG86e3BhZ2U6YHNwZW5kYH19LG51bGwsOCxbYHZhbHVlYCxgZGVsdGFgLGB0aWVyYF0pLGwoaix7bGFiZWw6YFByb2plY3RlZCBtb250aC1lbmRgLHZhbHVlOkllLnZhbHVlLGRlbHRhOkwudmFsdWUsdGllcjpQLnZhbHVlLHRvOntwYWdlOmBzcGVuZGB9fSxudWxsLDgsW2B2YWx1ZWAsYGRlbHRhYCxgdGllcmBdKSxsKGose2xhYmVsOmBSZXF1ZXN0cy9taW5gLHZhbHVlOngobWUpKExlLnZhbHVlKX0sbnVsbCw4LFtgdmFsdWVgXSksbChqLHtsYWJlbDpgRXJyb3IgcmF0ZSAobGFzdCBtaW51dGUpYCx2YWx1ZTpVZS52YWx1ZSxkZWx0YTp0dC52YWx1ZSx0aWVyOlZlLnZhbHVlLHRvOntwYWdlOmByZWxpYWJpbGl0eWB9fSxudWxsLDgsW2B2YWx1ZWAsYGRlbHRhYCxgdGllcmBdKSxsKGose2xhYmVsOmBPcGVuIGJyZWFrZXJzIChwZXIgcmVwbGljYSlgLHZhbHVlOlN0cmluZyhudC52YWx1ZSksdGllcjpudC52YWx1ZT4wP2B3YXJuYDpgb2tgLHRvOntwYWdlOmBtb2RlbHNgfX0sbnVsbCw4LFtgdmFsdWVgLGB0aWVyYF0pLGwoaix7bGFiZWw6YENvbmZpZyB3YXJuaW5nc2AsdmFsdWU6U3RyaW5nKHJ0LnZhbHVlKSx0aWVyOnJ0LnZhbHVlPjA/YHdhcm5gOmBva2AsdG86e3BhZ2U6YGNvbmZpZ2B9fSxudWxsLDgsW2B2YWx1ZWAsYHRpZXJgXSksbChqLHtsYWJlbDpgVW5wcmljZWQgbW9kZWxzYCx2YWx1ZTpTdHJpbmcoaXQudmFsdWUpLHRpZXI6aXQudmFsdWU+MD9gd2FybmA6YG9rYCx0bzp7cGFnZTpgc3BlbmRgfX0sbnVsbCw4LFtgdmFsdWVgLGB0aWVyYF0pXSw2NCkpXSksXyhgc2VjdGlvbmAsSmUsW2woRix7dGl0bGU6ZHQudmFsdWUsaXRlbXM6dXQudmFsdWUsImVtcHR5LXRleHQiOmBObyB0cmFmZmljIGluIHRoaXMgcmFuZ2UuYCxsb2FkaW5nOlUudmFsdWUsbG9hZGVkOmN0LnZhbHVlLGVycm9yOlcudmFsdWUsIm9uLXJldHJ5IjpRLG5vdGljZTpKLnZhbHVlP2BUb28gbWFueSBjb25maWd1cmVkIHVzZXJzIGZvciB0aGlzIHJhbmdlLmA6dm9pZCAwLCJub3RpY2UtZGVzY3JpcHRpb24iOmBQaWNrIGEgc2hvcnRlciByYW5nZSBhYm92ZSDigJQgYSBmbGVldCB0aGlzIHNpemUgbmVlZHMgYSBuYXJyb3dlciB3aW5kb3cgdG8gcmFuayB1c2Vycy5gfSx7Y29udHJvbHM6cigoKT0+W2woeCh1ZSkseyJtb2RlbC12YWx1ZSI6Qi52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6b3R9LHtkZWZhdWx0OnIoKCk9PltsKHgobGUpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhwKCEwKSx5KGMsbnVsbCxiKHgoSSksZT0+KHAoKSxkKHgoZGUpLHtrZXk6ZSx2YWx1ZTplfSx7ZGVmYXVsdDpyKCgpPT5bZihTKHgoUilbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSwiZW1wdHktYWN0aW9uIjpyKCgpPT5bbChTZSldKSxfOjF9LDgsW2B0aXRsZWAsYGl0ZW1zYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYCxgbm90aWNlYF0pLGwoRix7dGl0bGU6YFRvcCA1IG1vZGVscyBieSBjb3N0YCxpdGVtczpILnZhbHVlLCJlbXB0eS10ZXh0IjpgTm8gdHJhZmZpYyBpbiB0aGlzIHJhbmdlLmAsbG9hZGluZzpHLnZhbHVlLGxvYWRlZDpxLnZhbHVlLGVycm9yOksudmFsdWUsIm9uLXJldHJ5IjpmdH0seyJlbXB0eS1hY3Rpb24iOnIoKCk9PltsKFNlKV0pLF86MX0sOCxbYGl0ZW1zYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYF0pXSksbCh4KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2woeChzKSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKHgoc2UpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMF18fD1bZihgTGF0ZXN0IGV2ZW50c2AsLTEpXV0pLF86MX0pXSksXzoxfSksbCh4KG4pLG51bGwse2RlZmF1bHQ6cigoKT0+W2woQ2Use3N0YXRlOmh0LnZhbHVlLGVycm9yOngodikuZXJyb3IsIm9uLXJldHJ5Ijp4KHYpLnJlZnJlc2gsc2tlbGV0b246YGxpc3RgLHJvd3M6NCxlbXB0eTpndC52YWx1ZSwiZW1wdHktdGl0bGUiOmBObyBldmVudHMgcmVjb3JkZWQgeWV0LmB9LHtkZWZhdWx0OnIoKCk9PltfKGBvbGAsWWUsWyhwKCEwKSx5KGMsbnVsbCxiKG10LnZhbHVlLChlLHQpPT4ocCgpLHkoYGxpYCx7a2V5OmAke2UudGltZX0tJHtlLnJlcGxpY2F9LSR7dH1gLGNsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtMyB0ZXh0LXNtYH0sW18oYHNwYW5gLFhlLFtsKHgoX2UpLHt2YXJpYW50OngoRWUpKGUua2luZCksY2xhc3M6YHNocmluay0wIGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6cigoKT0+W2YoUyh4KFRlKShlLmtpbmQpKSwxKV0pLF86Mn0sMTAzMixbYHZhcmlhbnRgXSksXyhgc3BhbmAsWmUsUyhlLm1lc3NhZ2UpLDEpXSksXyhgc3BhbmAsUWUsUyh4KGdlKShlLnRpbWUpKSwxKV0pKSksMTI4KSldKV0pLF86MX0sOCxbYHN0YXRlYCxgZXJyb3JgLGBvbi1yZXRyeWAsYGVtcHR5YF0pXSksXzoxfSldKSxfOjF9KV0pKX19KTtleHBvcnR7dHQgYXMgZGVmYXVsdH07", ), }, - "HomePage-xxao-DzQ.js": { + "LoadStateView-BEbsex7Y.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEZyIGFzIG4sSnQgYXMgcixTIGFzIGksU2kgYXMgYSxUIGFzIG8sWG4gYXMgcyxfbiBhcyBjLGFuIGFzIGwsYiBhcyBlZSxjbiBhcyB1LGNyIGFzIGQsZXIgYXMgdGUsZnIgYXMgZixnIGFzIG5lLGdpIGFzIHAsaG4gYXMgbSxpaSBhcyByZSxpbiBhcyBoLGxyIGFzIGcsbW4gYXMgXyxuIGFzIGllLG5yIGFzIHYsb2kgYXMgeSxvbiBhcyBiLHNuIGFzIHgsdCBhcyBTLHYgYXMgYWUsdyBhcyBDLHggYXMgb2UseSBhcyBzZSx5aSBhcyB3fWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e24gYXMgY2UsciBhcyBsZSx0IGFzIHVlfWZyb20iLi90YWJzLVlsaG5IcEstLmpzIjtpbXBvcnR7dCBhcyBkZX1mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO2ltcG9ydHt0IGFzIFR9ZnJvbSIuL0Vycm9yU3RhdGUteW02ZVNsajIuanMiO2ltcG9ydHtfIGFzIEUsZiBhcyBmZSxpIGFzIHBlLG8gYXMgRCx0IGFzIG1lLHYgYXMgT31mcm9tIi4vYmFkZ2UtRFVpQlREeUEuanMiO2ltcG9ydHtpIGFzIGhlLG4gYXMgZ2UsciBhcyBfZSx0IGFzIHZlfWZyb20iLi9UcnlMb25nZXJSYW5nZUJ1dHRvbi1DamtVbmFPei5qcyI7aW1wb3J0e3QgYXMgeWV9ZnJvbSIuL1NrZWxldG9uTGlzdC1DbXF6M2hmYS5qcyI7aW1wb3J0e3QgYXMga31mcm9tIi4vRW50aXR5TGluay1EZzkzS0dWVC5qcyI7aW1wb3J0e3QgYXMgYmV9ZnJvbSIuL2V2ZW50cy1QVXhoRWVnYS5qcyI7aW1wb3J0e24gYXMgeGUsciBhcyBTZX1mcm9tIi4vZXZlbnRzLWZpbHRlci1YRm5qSWFSNy5qcyI7aW1wb3J0e2EgYXMgQ2UsaSBhcyB3ZSxuIGFzIFRlLG8gYXMgRWUsciBhcyBEZSx0IGFzIE9lfWZyb20iLi9rcGktY2htM0JpdUYuanMiO3ZhciBBPXtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxqPXtrZXk6MCxjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxNPWMoe19fbmFtZTpgS3BpVGlsZWAscHJvcHM6e2xhYmVsOnt9LHZhbHVlOnt9LGRlbHRhOnt9LHRpZXI6e2RlZmF1bHQ6YG9rYH0sdG86e319LHNldHVwKGUpe2xldCB0PWUscj1pZSgpLGk9aCgoKT0+e3N3aXRjaCh0LnRpZXIpe2Nhc2Vgd2FybmA6cmV0dXJuYHRleHQtc3RhdHVzLXdhcm5gO2Nhc2VgY3JpdGljYWxgOnJldHVybmB0ZXh0LWRlc3RydWN0aXZlYDtkZWZhdWx0OnJldHVybmB0ZXh0LWZvcmVncm91bmRgfX0pO2Z1bmN0aW9uIHMoKXt0LnRvJiZyLmdvVG8odC50by5wYWdlLHQudG8ucGFyYW1zPz97fSl9cmV0dXJuKHQscik9Pih2KCksYihmKGUudG8/YGJ1dHRvbmA6YGRpdmApLHt0eXBlOmUudG8/YGJ1dHRvbmA6dm9pZCAwLGNsYXNzOncoW2BibG9jayB3LWZ1bGwgcm91bmRlZC14bCB0ZXh0LWxlZnRgLGUudG8/YGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOm9wYWNpdHktOTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgOnZvaWQgMF0pLG9uQ2xpY2s6c30se2RlZmF1bHQ6bigoKT0+W20ocChvKSxudWxsLHtkZWZhdWx0Om4oKCk9PlttKHAoQykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHB4LTQgcHktM2B9LHtkZWZhdWx0Om4oKCk9PltsKGBzcGFuYCxBLGEoZS5sYWJlbCksMSksbChgc3BhbmAse2NsYXNzOncoW2B0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRhYnVsYXItbnVtc2AsaS52YWx1ZV0pfSxhKGUudmFsdWUpLDMpLGUuZGVsdGE/KHYoKSx1KGBzcGFuYCxqLGEoZS5kZWx0YSksMSkpOngoYGAsITApXSksXzoxfSldKSxfOjF9KV0pLF86MX0sOCxbYHR5cGVgLGBjbGFzc2BdKSl9fSksa2U9Yyh7X19uYW1lOmBTa2VsZXRvbktwaVRpbGVgLHNldHVwKGUpe3JldHVybihlLHQpPT4odigpLGIocChvKSxudWxsLHtkZWZhdWx0Om4oKCk9PlttKHAoQykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHB4LTQgcHktM2B9LHtkZWZhdWx0Om4oKCk9PlttKHAoUykse2NsYXNzOmBoLTMgdy0yMGB9KSxtKHAoUykse2NsYXNzOmBoLTcgdy0xNmB9KSxtKHAoUykse2NsYXNzOmBoLTMgdy0yOGB9KV0pLF86MX0pXSksXzoxfSkpfX0pLE49e2tleTo0LGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjVgfSxQPXtjbGFzczpgZmxleCBtaW4tdy0wIGl0ZW1zLWNlbnRlciBnYXAtMmB9LEY9e2NsYXNzOmB3LTQgc2hyaW5rLTAgdGV4dC1yaWdodCB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEFlPXtjbGFzczpgc2hyaW5rLTAgZm9udC1tZWRpdW0gdGFidWxhci1udW1zYH0sST1jKHtfX25hbWU6YFRvcExpc3RgLHByb3BzOnt0aXRsZTp7fSxpdGVtczp7fSxlbXB0eVRleHQ6e30sbG9hZGluZzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGxvYWRlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGVycm9yOntkZWZhdWx0OmBgfSxvblJldHJ5Ont9LG5vdGljZTp7fSxub3RpY2VEZXNjcmlwdGlvbjp7fX0sc2V0dXAoZSl7bGV0IHM9ZSxjPWgoKCk9PkUoe2xvYWRpbmc6cy5sb2FkaW5nLGhhc0RhdGE6cy5sb2FkZWQsZXJyb3I6cy5lcnJvcj8/YGB9KSk7cmV0dXJuKHMsZWUpPT4odigpLGIocChvKSxudWxsLHtkZWZhdWx0Om4oKCk9PlttKHAodCksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bbShwKGkpLG51bGwse2RlZmF1bHQ6bigoKT0+W18oYShlLnRpdGxlKSwxKV0pLF86MX0pLGcocy4kc2xvdHMsYGNvbnRyb2xzYCldKSxfOjN9KSxtKHAoQyksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bZS5ub3RpY2U/KHYoKSxiKE8se2tleTowLHRpdGxlOmUubm90aWNlLGRlc2NyaXB0aW9uOmUubm90aWNlRGVzY3JpcHRpb259LG51bGwsOCxbYHRpdGxlYCxgZGVzY3JpcHRpb25gXSkpOmMudmFsdWU9PT1gc2tlbGV0b25gPyh2KCksYih5ZSx7a2V5OjEscm93czo1fSkpOmMudmFsdWU9PT1gZXJyb3JgPyh2KCksYihULHtrZXk6MixtZXNzYWdlOmUuZXJyb3I/P2BgLCJvbi1yZXRyeSI6ZS5vblJldHJ5fSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOmUuaXRlbXMubGVuZ3RoPT09MD8odigpLGIoTyx7a2V5OjMsdGl0bGU6ZS5lbXB0eVRleHR9LHtkZWZhdWx0Om4oKCk9PltnKHMuJHNsb3RzLGBlbXB0eS1hY3Rpb25gKV0pLF86M30sOCxbYHRpdGxlYF0pKToodigpLHUoYG9sYCxOLFsodighMCksdShyLG51bGwsZChlLml0ZW1zLChlLHQpPT4odigpLHUoYGxpYCx7a2V5OmUuaWQsY2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyB0ZXh0LXNtYH0sW2woYHNwYW5gLFAsW2woYHNwYW5gLEYsYSh0KzEpLDEpLG0oayx7bGFiZWw6ZS5sYWJlbCxraW5kOmUua2luZCxpZDplLmlkLGNsYXNzOmBtaW4tdy0wYCwibGFiZWwtY2xhc3MiOmB0cnVuY2F0ZWB9LG51bGwsOCxbYGxhYmVsYCxga2luZGAsYGlkYF0pXSksbChgc3BhbmAsQWUsYShlLnZhbHVlKSwxKV0pKSksMTI4KSldKSldKSxfOjN9KV0pLF86M30pKX19KSxMPVtgY29zdGAsYHJlcWAsYHRva2Vuc2BdLGplPWBjb3N0YCxNZT17Y29zdDpgQ29zdGAscmVxOmBSZXF1ZXN0c2AsdG9rZW5zOmBUb2tlbnNgfSxOZT02NGUzLFBlPXtjb3N0OltgY29zdGBdLHJlcTpbYHJlcWBdLHRva2VuczpbYHRva2luYCxgdG9rb3V0YF19O2Z1bmN0aW9uIEZlKGUpe3JldHVybiBMLmluY2x1ZGVzKGU/P2BgKT9lOmplfXZhciBJZT0xZTM7ZnVuY3Rpb24gTGUoZSx0LG4scj1JZSl7bGV0IGk9bmV3IFVSTFNlYXJjaFBhcmFtcztyZXR1cm4gaS5zZXQoYGtpbmRgLGB1c2VyYCksaS5zZXQoYHdpbmRvd2AsZSksaS5zZXQoYHNwYW5gLFN0cmluZyh0KSksaS5zZXQoYG9mZnNldGAsYDBgKSxpLnNldChgbWV0cmljc2AsUGVbbl0uam9pbihgLGApKSxpLnNldChgbGltaXRgLFN0cmluZyhyKSksYC9hZG1pbi9hcGkvdXNhZ2UvdG90YWxzPyR7aS50b1N0cmluZygpfWB9ZnVuY3Rpb24gUihlLHQsbil7cmV0dXJuIGUqdCpuPk5lfWZ1bmN0aW9uIFJlKGUsdCxuKXtyZXR1cm4gZSE9PW51bGwmJlIoZSx0LG4pfWZ1bmN0aW9uIHplKGUsdCl7c3dpdGNoKHQpe2Nhc2VgY29zdGA6cmV0dXJuIGUudmFsdWVzLmNvc3Q/PzA7Y2FzZWByZXFgOnJldHVybiBlLnZhbHVlcy5yZXE/PzA7Y2FzZWB0b2tlbnNgOnJldHVybihlLnZhbHVlcy50b2tpbj8/MCkrKGUudmFsdWVzLnRva291dD8/MCl9fWZ1bmN0aW9uIEJlKGUsdCxuPTUpe3JldHVybiBlLm1hcChlPT4oe2lkOmUuaWQsdmFsdWU6emUoZSx0KX0pKS5maWx0ZXIoZT0+ZS52YWx1ZT4wKS5zb3J0KChlLHQpPT50LnZhbHVlPT09ZS52YWx1ZT9lLmlkLmxvY2FsZUNvbXBhcmUodC5pZCk6dC52YWx1ZS1lLnZhbHVlKS5zbGljZSgwLG4pfXZhciBWZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxIZT17ImFyaWEtbGFiZWwiOmBLZXkgbWV0cmljc2AsY2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTMgc206Z3JpZC1jb2xzLTMgbGc6Z3JpZC1jb2xzLTRgfSxVZT17a2V5OjEsY2xhc3M6YGNvbC1zcGFuLWZ1bGxgfSxXZT17ImFyaWEtbGFiZWwiOmBUb3Agc3BlbmRlcnMgYW5kIG1vZGVsc2AsY2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTMgbGc6Z3JpZC1jb2xzLTJgfSxHZT17a2V5OjIsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sS2U9e2tleTozLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0yYH0scWU9e2NsYXNzOmBmbGV4IG1pbi13LTAgaXRlbXMtY2VudGVyIGdhcC0yYH0sSmU9e2NsYXNzOmBtaW4tdy0wIHRydW5jYXRlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFllPXtjbGFzczpgc2hyaW5rLTAgdGFidWxhci1udW1zIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFhlPTUsWmU9NmU0LFFlPWMoe19fbmFtZTpgSG9tZVBhZ2VgLHNldHVwKGMpe2xldCBmPW9lKCksZz1uZSgpLHg9YmUoKSxTPWRlKCksdz1pZSgpLE89aCgoKT0+Zy51c2FnZT8udG90YWwuY29zdFBlckRheU1pY3JvVXNkPz8wKSxrPWgoKCk9PmcudXNhZ2U/LnRvdGFsLmNvc3RQZXJNb250aE1pY3JvVXNkPz8wKSxBPWgoKCk9PkVlKGcub3ZlcnZpZXc/Lmdyb3Vwcz8/W10pKSxqPWgoKCk9PlRlKE9lKGsudmFsdWUsQS52YWx1ZSkpKSxOPWgoKCk9PntsZXQgZT1gJHtEKE8udmFsdWUpfSB0b2RheWA7cmV0dXJuIEEudmFsdWU+MD9gJHtlfSDCtyBidWRnZXQgJHtEKEEudmFsdWUpfS9tb2A6YCR7ZX0gwrcgbm8gYnVkZ2V0IHNldGB9KSxQPWgoKCk9PmhlKGsudmFsdWUsX2UobmV3IERhdGUpKSksRj1oKCgpPT5nZShQLnZhbHVlLEEudmFsdWU+MD9BLnZhbHVlLzFlNjp2b2lkIDApKSxBZT1oKCgpPT5QLnZhbHVlPT09bnVsbD9gbm90IGVub3VnaCBkYXRhIHlldGA6RChQLnZhbHVlKSksamU9aCgoKT0+Ri52YWx1ZS53aWxsRXhjZWVkP2Bjcml0aWNhbGA6YG9rYCksTmU9aCgoKT0+e2lmKFAudmFsdWUhPT1udWxsKXJldHVybiBBLnZhbHVlPD0wP2BubyBidWRnZXQgc2V0YDpGLnZhbHVlLndpbGxFeGNlZWQ/YHByb2plY3RlZCB0byBleGNlZWQgYnVkZ2V0YDpgcHJvamVjdGVkIHdpdGhpbiBidWRnZXRgfSksSWU9aCgoKT0+Zy51c2FnZT8udG90YWwucmVxdWVzdHNQZXJNaW51dGU/PzApLFI9aCgoKT0+d2UoZy5vdmVydmlldz8ucHJvdmlkZXJzPz9bXSkpLHplPWgoKCk9PkRlKFIudmFsdWUucmF0ZSkpLFFlPWgoKCk9PntsZXQgZT1SLnZhbHVlLnJhdGU7cmV0dXJuIGU9PT1udWxsP2BubyB0cmFmZmljYDplPD0wP2AwJWA6YCR7TWF0aC5jZWlsKGUqMTAwKX0lYH0pLCRlPWgoKCk9PmAke1IudmFsdWUuZmFpbHVyZXN9LyR7Ui52YWx1ZS5hdHRlbXB0c30gYXR0ZW1wdHMgaW4gdGhlIGxhc3QgbWludXRlYCksZXQ9aCgoKT0+Q2UoZy5vdmVydmlldz8ucHJvdmlkZXJzPz9bXSkpLHR0PWgoKCk9Pmcub3ZlcnZpZXc/Lndhcm5pbmdzLmxlbmd0aD8/MCksbnQ9aCgoKT0+Zy5vdmVydmlldz8ucHJpY2luZy51bnByaWNlZD8/MCkscnQ9aCgoKT0+RSh7bG9hZGluZzohMCxoYXNEYXRhOmcub3ZlcnZpZXchPT1udWxsJiZnLnVzYWdlIT09bnVsbCxlcnJvcjpnLmVycm9yfSkpLHo9aCgoKT0+RmUody5wYXJhbXMudG9wKSk7ZnVuY3Rpb24gaXQoZSl7aWYodHlwZW9mIGUhPWBzdHJpbmdgfHwhTC5pbmNsdWRlcyhlKSlyZXR1cm47bGV0IHQ9ZTtpZih0PT09YGNvc3RgKXtsZXR7dG9wOmUsLi4udH09dy5wYXJhbXM7dy5nb1RvKGBob21lYCx0KTtyZXR1cm59dy5nb1RvKGBob21lYCx7Li4udy5wYXJhbXMsdG9wOnR9KX1sZXQgYXQ9aCgoKT0+Zy51c2FnZT8udXNlcnMubGVuZ3RoPz9udWxsKSxCPXkoW10pLFY9eShbXSksSD15KCExKSxVPXkoYGApLFc9eSghMSksRz15KGBgKSxLPXkoITEpLHE9eSghMSksSj1yZShuZXcgTWFwKSxvdD1oKCgpPT5KLmhhcyh6LnZhbHVlKSksWT0wLFg9MDtmdW5jdGlvbiBzdChlLHQpe3JldHVybiBlPT09YGNvc3RgP0QodCk6cGUodCl9bGV0IGN0PWgoKCk9PkJlKEIudmFsdWUsei52YWx1ZSkubWFwKGU9Pih7aWQ6ZS5pZCxsYWJlbDplLmlkLHZhbHVlOnN0KHoudmFsdWUsZS52YWx1ZSksa2luZDpgdXNlcmB9KSkpLGx0PWgoKCk9PmBUb3AgNSB1c2VycyBieSAke01lW3oudmFsdWVdLnRvTG93ZXJDYXNlKCl9YCk7YXN5bmMgZnVuY3Rpb24gWigpe2lmKCFmLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9ei52YWx1ZSx0PVBlW2VdLmxlbmd0aDtpZihSZShhdC52YWx1ZSx0LFMuc3BhbikpeysrWSxILnZhbHVlPSExLHEudmFsdWU9ITAsVS52YWx1ZT1gYDtyZXR1cm59bGV0IG49KytZO0gudmFsdWU9ITA7dHJ5e2xldCB0PWF3YWl0IGVlKExlKFMud2luZG93LFMuc3BhbixlKSk7aWYobiE9PVkpcmV0dXJuO0ouc2V0KGUsdC5yb3dzKSxCLnZhbHVlPXQucm93cyxVLnZhbHVlPWBgLHEudmFsdWU9ITF9Y2F0Y2goZSl7aWYobiE9PVkpcmV0dXJuO2UgaW5zdGFuY2VvZiBzZSYmZS5zdGF0dXM9PT00MDAmJi9yYW5nZSB0b28gbGFyZ2UvaS50ZXN0KGUubWVzc2FnZSk/KHEudmFsdWU9ITAsVS52YWx1ZT1gYCk6VS52YWx1ZT1lIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlN0cmluZyhlKX1maW5hbGx5e249PT1ZJiYoSC52YWx1ZT0hMSl9fWFzeW5jIGZ1bmN0aW9uIHV0KCl7aWYoIWYuaXNBdXRoZW50aWNhdGVkKXJldHVybjtsZXQgZT0rK1g7Vy52YWx1ZT0hMDt0cnl7bGV0IHQ9YXdhaXQgZWUoYC9hZG1pbi9hcGkvdXNhZ2UvbW9kZWxzP21ldHJpYz1jb3N0JndpbmRvdz0ke1Mud2luZG93fSZzcGFuPSR7Uy5zcGFufSZsaW1pdD0ke1hlfWApO2lmKGUhPT1YKXJldHVybjtWLnZhbHVlPXQubW9kZWxzLm1hcChlPT4oe2lkOmUuaWQsbGFiZWw6ZS5pZCx2YWx1ZTpEKGUudmFsdWUpLGtpbmQ6YG1vZGVsYH0pKSxHLnZhbHVlPWBgLEsudmFsdWU9ITB9Y2F0Y2godCl7aWYoZSE9PVgpcmV0dXJuO0cudmFsdWU9dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9ZmluYWxseXtlPT09WCYmKFcudmFsdWU9ITEpfX1hc3luYyBmdW5jdGlvbiBkdCgpe2F3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbWigpLHV0KCldKX1sZXQgUTtlKHosZT0+e2xldCB0PUouZ2V0KGUpO0IudmFsdWU9dD8/W10sVS52YWx1ZT1gYCxxLnZhbHVlPSExLFooKX0pLGUoKCk9PlMucmFuZ2UsKCk9PntKLmNsZWFyKCksQi52YWx1ZT1bXSxWLnZhbHVlPVtdLEsudmFsdWU9ITEsVS52YWx1ZT1gYCxHLnZhbHVlPWBgLHEudmFsdWU9ITEsZHQoKX0pO2Z1bmN0aW9uIGZ0KGUpe3JldHVybiB4ZVtlXT8/ZX1sZXQgcHQ9aCgoKT0+eC5ldmVudHMuc2xpY2UoMCw4KSksJD1oKCgpPT5FKHtsb2FkaW5nOngucmVmcmVzaGluZyxoYXNEYXRhOngubGFzdFVwZGF0ZWQhPT1udWxsLGVycm9yOnguZXJyb3J9KSksbXQ9aCgoKT0+cHQudmFsdWUubGVuZ3RoPT09MCk7cmV0dXJuIHMoKCk9Pnt4LnN0YXJ0UG9sbGluZygpLFE9YWUoe2ludGVydmFsTXM6WmUsdGljazooKT0+dm9pZCBkdCgpfSksUS5zdGFydCgpfSksdGUoKCk9Pnt4LnN0b3BQb2xsaW5nKCksUT8uc3RvcCgpfSksKGUscyk9Pih2KCksdShgZGl2YCxWZSxbbChgc2VjdGlvbmAsSGUsW3J0LnZhbHVlPT09YHNrZWxldG9uYD8odigpLHUocix7a2V5OjB9LGQoNyxlPT5tKGtlLHtrZXk6ZX0pKSw2NCkpOnJ0LnZhbHVlPT09YGVycm9yYD8odigpLHUoYGRpdmAsVWUsW20oVCx7bWVzc2FnZTpwKGcpLmVycm9yLCJvbi1yZXRyeSI6cChnKS5yZWZyZXNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSldKSk6KHYoKSx1KHIse2tleToyfSxbbShNLHtsYWJlbDpgU3BlbmQgKE1URClgLHZhbHVlOnAoRCkoay52YWx1ZSksZGVsdGE6Ti52YWx1ZSx0aWVyOmoudmFsdWUsdG86e3BhZ2U6YHNwZW5kYH19LG51bGwsOCxbYHZhbHVlYCxgZGVsdGFgLGB0aWVyYF0pLG0oTSx7bGFiZWw6YFByb2plY3RlZCBtb250aC1lbmRgLHZhbHVlOkFlLnZhbHVlLGRlbHRhOk5lLnZhbHVlLHRpZXI6amUudmFsdWUsdG86e3BhZ2U6YHNwZW5kYH19LG51bGwsOCxbYHZhbHVlYCxgZGVsdGFgLGB0aWVyYF0pLG0oTSx7bGFiZWw6YFJlcXVlc3RzL21pbmAsdmFsdWU6cChwZSkoSWUudmFsdWUpfSxudWxsLDgsW2B2YWx1ZWBdKSxtKE0se2xhYmVsOmBFcnJvciByYXRlIChsYXN0IG1pbnV0ZSlgLHZhbHVlOlFlLnZhbHVlLGRlbHRhOiRlLnZhbHVlLHRpZXI6emUudmFsdWUsdG86e3BhZ2U6YHJlbGlhYmlsaXR5YH19LG51bGwsOCxbYHZhbHVlYCxgZGVsdGFgLGB0aWVyYF0pLG0oTSx7bGFiZWw6YE9wZW4gYnJlYWtlcnMgKHBlciByZXBsaWNhKWAsdmFsdWU6U3RyaW5nKGV0LnZhbHVlKSx0aWVyOmV0LnZhbHVlPjA/YHdhcm5gOmBva2AsdG86e3BhZ2U6YG1vZGVsc2B9fSxudWxsLDgsW2B2YWx1ZWAsYHRpZXJgXSksbShNLHtsYWJlbDpgQ29uZmlnIHdhcm5pbmdzYCx2YWx1ZTpTdHJpbmcodHQudmFsdWUpLHRpZXI6dHQudmFsdWU+MD9gd2FybmA6YG9rYCx0bzp7cGFnZTpgY29uZmlnYH19LG51bGwsOCxbYHZhbHVlYCxgdGllcmBdKSxtKE0se2xhYmVsOmBVbnByaWNlZCBtb2RlbHNgLHZhbHVlOlN0cmluZyhudC52YWx1ZSksdGllcjpudC52YWx1ZT4wP2B3YXJuYDpgb2tgLHRvOntwYWdlOmBzcGVuZGB9fSxudWxsLDgsW2B2YWx1ZWAsYHRpZXJgXSldLDY0KSldKSxsKGBzZWN0aW9uYCxXZSxbbShJLHt0aXRsZTpsdC52YWx1ZSxpdGVtczpjdC52YWx1ZSwiZW1wdHktdGV4dCI6YE5vIHRyYWZmaWMgaW4gdGhpcyByYW5nZS5gLGxvYWRpbmc6SC52YWx1ZSxsb2FkZWQ6b3QudmFsdWUsZXJyb3I6VS52YWx1ZSwib24tcmV0cnkiOlosbm90aWNlOnEudmFsdWU/YFRvbyBtYW55IGNvbmZpZ3VyZWQgdXNlcnMgZm9yIHRoaXMgcmFuZ2UuYDp2b2lkIDAsIm5vdGljZS1kZXNjcmlwdGlvbiI6YFBpY2sgYSBzaG9ydGVyIHJhbmdlIGFib3ZlIOKAlCBhIGZsZWV0IHRoaXMgc2l6ZSBuZWVkcyBhIG5hcnJvd2VyIHdpbmRvdyB0byByYW5rIHVzZXJzLmB9LHtjb250cm9sczpuKCgpPT5bbShwKGxlKSx7Im1vZGVsLXZhbHVlIjp6LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjppdH0se2RlZmF1bHQ6bigoKT0+W20ocChjZSksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bKHYoITApLHUocixudWxsLGQocChMKSxlPT4odigpLGIocCh1ZSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0Om4oKCk9PltfKGEocChNZSlbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSwiZW1wdHktYWN0aW9uIjpuKCgpPT5bbSh2ZSldKSxfOjF9LDgsW2B0aXRsZWAsYGl0ZW1zYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYCxgbm90aWNlYF0pLG0oSSx7dGl0bGU6YFRvcCA1IG1vZGVscyBieSBjb3N0YCxpdGVtczpWLnZhbHVlLCJlbXB0eS10ZXh0IjpgTm8gdHJhZmZpYyBpbiB0aGlzIHJhbmdlLmAsbG9hZGluZzpXLnZhbHVlLGxvYWRlZDpLLnZhbHVlLGVycm9yOkcudmFsdWUsIm9uLXJldHJ5Ijp1dH0seyJlbXB0eS1hY3Rpb24iOm4oKCk9PlttKHZlKV0pLF86MX0sOCxbYGl0ZW1zYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYF0pXSksbShwKG8pLG51bGwse2RlZmF1bHQ6bigoKT0+W20ocCh0KSxudWxsLHtkZWZhdWx0Om4oKCk9PlttKHAoaSksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bLi4uc1swXXx8PVtfKGBMYXRlc3QgZXZlbnRzYCwtMSldXSksXzoxfSldKSxfOjF9KSxtKHAoQyksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bJC52YWx1ZT09PWBza2VsZXRvbmA/KHYoKSxiKHllLHtrZXk6MCxyb3dzOjR9KSk6JC52YWx1ZT09PWBlcnJvcmA/KHYoKSxiKFQse2tleToxLG1lc3NhZ2U6cCh4KS5lcnJvciwib24tcmV0cnkiOnAoeCkucmVmcmVzaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTptdC52YWx1ZT8odigpLHUoYHBgLEdlLGBObyBldmVudHMgcmVjb3JkZWQgeWV0LmApKToodigpLHUoYG9sYCxLZSxbKHYoITApLHUocixudWxsLGQocHQudmFsdWUsKGUsdCk9Pih2KCksdShgbGlgLHtrZXk6YCR7ZS50aW1lfS0ke2UucmVwbGljYX0tJHt0fWAsY2xhc3M6YGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC0zIHRleHQtc21gfSxbbChgc3BhbmAscWUsW20ocChtZSkse3ZhcmlhbnQ6cChTZSkoZS5raW5kKSxjbGFzczpgc2hyaW5rLTAgZm9udC1ub3JtYWxgfSx7ZGVmYXVsdDpuKCgpPT5bXyhhKGZ0KGUua2luZCkpLDEpXSksXzoyfSwxMDMyLFtgdmFyaWFudGBdKSxsKGBzcGFuYCxKZSxhKGUubWVzc2FnZSksMSldKSxsKGBzcGFuYCxZZSxhKHAoZmUpKGUudGltZSkpLDEpXSkpKSwxMjgpKV0pKV0pLF86MX0pXSksXzoxfSldKSl9fSk7ZXhwb3J0e1FlIGFzIGRlZmF1bHR9Ow==", + "aW1wb3J0e19uIGFzIGUsY24gYXMgdCxkciBhcyBuLGlyIGFzIHIseW4gYXMgaX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHt0IGFzIGF9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHtTIGFzIG8sayBhcyBzLG4gYXMgY31mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHt0IGFzIGx9ZnJvbSIuL1NrZWxldG9uQ2hhcnQtMVlfNXM5ZjAuanMiO3ZhciB1PWkoe19fbmFtZTpgTG9hZFN0YXRlVmlld2AscHJvcHM6e3N0YXRlOnt9LGVycm9yOntkZWZhdWx0OmBgfSxvblJldHJ5Ont0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6dm9pZCAwfSxza2VsZXRvbjp7fSxyb3dzOntkZWZhdWx0OjV9LGNvbHM6e2RlZmF1bHQ6NH0sZW1wdHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxlbXB0eUljb246e2RlZmF1bHQ6dm9pZCAwfSxlbXB0eVRpdGxlOntkZWZhdWx0OmBOb3RoaW5nIHRvIHNob3cuYH0sZW1wdHlEZXNjcmlwdGlvbjp7ZGVmYXVsdDp2b2lkIDB9fSxzZXR1cChpKXtyZXR1cm4odSxkKT0+aS5zdGF0ZT09PWBza2VsZXRvbmAmJmkuc2tlbGV0b249PT1gdGFibGVgPyhyKCksdChvLHtrZXk6MCxyb3dzOmkucm93cyxjb2xzOmkuY29sc30sbnVsbCw4LFtgcm93c2AsYGNvbHNgXSkpOmkuc3RhdGU9PT1gc2tlbGV0b25gJiZpLnNrZWxldG9uPT09YGxpc3RgPyhyKCksdChjLHtrZXk6MSxyb3dzOmkucm93c30sbnVsbCw4LFtgcm93c2BdKSk6aS5zdGF0ZT09PWBza2VsZXRvbmA/KHIoKSx0KGwse2tleToyfSkpOmkuc3RhdGU9PT1gZXJyb3JgPyhyKCksdChhLHtrZXk6MyxtZXNzYWdlOmkuZXJyb3IsIm9uLXJldHJ5IjppLm9uUmV0cnl9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6aS5lbXB0eT9uKHUuJHNsb3RzLGBlbXB0eWAse30sKCk9PltlKHMse2ljb246aS5lbXB0eUljb24sdGl0bGU6aS5lbXB0eVRpdGxlLGRlc2NyaXB0aW9uOmkuZW1wdHlEZXNjcmlwdGlvbn0sbnVsbCw4LFtgaWNvbmAsYHRpdGxlYCxgZGVzY3JpcHRpb25gXSldLHZvaWQgMCw0KTpuKHUuJHNsb3RzLGBkZWZhdWx0YCx7fSx2b2lkIDAsdm9pZCAwLDUpfX0pO2V4cG9ydHt1IGFzIHR9Ow==", ), }, - "ModelsPage-CcA1RHK6.js": { + "ModelsPage-DO-19RNX.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEUgYXMgbixGciBhcyByLEp0IGFzIGksT24gYXMgYSxRciBhcyBvLFMgYXMgcyxTaSBhcyBjLFQgYXMgbCxYbiBhcyB1LF9uIGFzIGQsX3QgYXMgZixhbiBhcyBwLGIgYXMgbSxjbiBhcyBoLGNyIGFzIGVlLGV0IGFzIGcsZyBhcyB0ZSxnaSBhcyBfLGhuIGFzIHYsaWkgYXMgbmUsaW4gYXMgeSxtbiBhcyBiLG10IGFzIHJlLG4gYXMgeCxuciBhcyBTLG9uIGFzIEMscnQgYXMgdyxzbiBhcyBULHVyIGFzIGllLHcgYXMgRSx5IGFzIGFlLHlpIGFzIER9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjtpbXBvcnR7YSBhcyBvZSxjIGFzIE8saSBhcyBzZSxuIGFzIGNlLG8gYXMgbGUsciBhcyB1ZSxzIGFzIGRlLHQgYXMgZmV9ZnJvbSIuL3NlYXJjaC1leHBhbmQtQ0hkNEZXWlouanMiO2ltcG9ydHtjIGFzIGssZyBhcyBwZSxoIGFzIG1lLG0gYXMgaGUsdCBhcyBBfWZyb20iLi9pbmRleC1keXdTOE9wVC5qcyI7aW1wb3J0e3QgYXMgZ2V9ZnJvbSIuL0Vycm9yU3RhdGUteW02ZVNsajIuanMiO2ltcG9ydHtfIGFzIF9lLGEgYXMgdmUsZCBhcyBqLGcgYXMgTSxoIGFzIHllLGwgYXMgTixtIGFzIGJlLG4gYXMgeGUsbyBhcyBQLHAgYXMgU2UsdCBhcyBGLHYgYXMgSX1mcm9tIi4vYmFkZ2UtRFVpQlREeUEuanMiO2ltcG9ydHtvIGFzIEwsdCBhcyBDZX1mcm9tIi4vRGF0YVRhYmxlLUNReFJWRFNZLmpzIjtpbXBvcnR7dCBhcyBSfWZyb20iLi9Db21wYWN0TnVtYmVyLXByOGNKNGN2LmpzIjtpbXBvcnR7biBhcyB3ZSx0IGFzIFRlfWZyb20iLi91c2VTZWFyY2hRdWVyeS1iUVpQNFRzWi5qcyI7aW1wb3J0e3QgYXMgRWV9ZnJvbSIuL1NrZWxldG9uTGlzdC1DbXF6M2hmYS5qcyI7aW1wb3J0e3QgYXMgRGV9ZnJvbSIuL0VudGl0eUxpbmstRGc5M0tHVlQuanMiO2ltcG9ydHthIGFzIE9lLGMgYXMga2UsaSBhcyBBZSxuIGFzIHosbyBhcyBCLHIgYXMgamUscyBhcyBWLHQgYXMgSH1mcm9tIi4vcHJvdmlkZXItcmF0ZS1EVTdPZ1NlQi5qcyI7aW1wb3J0e3QgYXMgVX1mcm9tIi4vY2F0YWxvZy1sVTQxaXJJcS5qcyI7aW1wb3J0e3QgYXMgV31mcm9tIi4vcmVsaWFiaWxpdHktQ0ZJa1J4VlYuanMiO2Z1bmN0aW9uIE1lKGUsdCl7bGV0IG49dC50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj9lLmZpbHRlcihlPT5lLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobil8fGUuYWxpYXNlcy5zb21lKGU9PmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuKSkpOmV9ZnVuY3Rpb24gRyhlLHQsbil7bGV0IHI9bmV3IE1hcCh0Lm1vZGVscy5tYXAoZT0+W2UuaWQsZV0pKSxpPW5ldyBNYXAoKG4ucm93cz8/W10pLm1hcChlPT5bZS5pZCxlXSkpLGE9W107Zm9yKGxldCB0IG9mIGUucHJvdmlkZXJzKWZvcihsZXQgZSBvZiB0Lm1vZGVscyl7bGV0IG49ci5nZXQoZS5pZCksbz1pLmdldChlLmlkKTthLnB1c2goe2lkOmUuaWQsbW9kZWw6ZS5tb2RlbCxwcm92aWRlck5hbWU6dC5uYW1lLGNvbnRleHRUb2tlbnM6ZS5jb250ZXh0VG9rZW5zLGlucHV0UGVyTVRva1VzZDplLmlucHV0UGVyTVRva1VzZCxvdXRwdXRQZXJNVG9rVXNkOmUub3V0cHV0UGVyTVRva1VzZCxwcmljZVNvdXJjZTplLnByaWNlU291cmNlLGRpc3BsYXlGcmVlOmUuZGlzcGxheUZyZWUsYWxpYXNlczplLmFsaWFzZXM/P1tdLHJlcXVlc3RzOm4/LnJlcXVlc3RzPz8wLHRva2Vuc0luOm4/LnRva2Vuc0luPz8wLHRva2Vuc091dDpuPy50b2tlbnNPdXQ/PzAsY29zdE1pY3JvVXNkOm4/LmNvc3RNaWNyb1VzZD8/MCxwNTBNczpvPy5wNTBNcyxwOTVNczpvPy5wOTVNcyxhdHRlbXB0czpvPy5hdHRlbXB0cz8/MCxmYWlsdXJlczpvPy5mYWlsdXJlcz8/MH0pfXJldHVybiBhfXZhciBOZT17b3ZlcnJpZGU6YG92ZXJyaWRlYCxidWlsdGluOmBidWlsdGluYCxsaXRlbGxtOmBsaXRlbGxtYH07ZnVuY3Rpb24gUGUoZSl7aWYoZS5wcmljZVNvdXJjZT09PWB1bnByaWNlZGApcmV0dXJuIGEoRix7YXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmBObyBwcmljaW5nIHJ1bGUgbWF0Y2hlZCDigJQgYmlsbGVkIGFzICQwLmB9LCgpPT5gdW5wcmljZWRgKTtpZihlLnByaWNlU291cmNlPT09YGZyZWVgKXJldHVybiBhKEYse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6YENvbmZpZ3VyZWQgZnJlZSAobW9kZWxNZXRhLmZyZWUpIOKAlCBwcmljZWQgYXQgJDAuYH0sKCk9PmBmcmVlYCk7bGV0IHQ9ZS5pbnB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJmUub3V0cHV0UGVyTVRva1VzZCE9PXZvaWQgMCxuPWUucHJpY2VTb3VyY2U7cmV0dXJuIGEoYHNwYW5gLHtjbGFzczpgaW5saW5lLWZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41YH0sW2EoYHNwYW5gLHt9LHQ/aihlLmlucHV0UGVyTVRva1VzZCxlLm91dHB1dFBlck1Ub2tVc2QpOmDigJRgKSxhKEYse2FzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+TmVbbl0pXSl9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gZS5wcmljZVNvdXJjZT09PWB1bnByaWNlZGA/LTE6ZS5pbnB1dFBlck1Ub2tVc2Q/PzB9ZnVuY3Rpb24gRmUoKXtyZXR1cm5be2lkOmBpZGAsaGVhZGVyOmBNb2RlbGAsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT5hKGBzcGFuYCx7Y2xhc3M6YGlubGluZS1mbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNWB9LFthKE8se2lkOmUub3JpZ2luYWwuaWQsY29udGV4dFRva2VuczplLm9yaWdpbmFsLmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwuaW5wdXRQZXJNVG9rVXNkLG91dHB1dFBlck1Ub2tVc2Q6ZS5vcmlnaW5hbC5vdXRwdXRQZXJNVG9rVXNkfSksYShEZSx7bGFiZWw6ZS5vcmlnaW5hbC5pZCxraW5kOmBtb2RlbGAsaWQ6ZS5vcmlnaW5hbC5pZH0pXSl9LHtpZDpgY29udGV4dGAsaGVhZGVyOmBDb250ZXh0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUuY29udGV4dFRva2Vucz8/MCxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxlLm9yaWdpbmFsLmNvbnRleHRUb2tlbnM9PT12b2lkIDA/YOKAlGA6dmUoZS5vcmlnaW5hbC5jb250ZXh0VG9rZW5zKSl9LHtpZDpgcHJpY2VgLGhlYWRlcjpgUHJpY2VgLGFjY2Vzc29yRm46ZT0+SyhlKSxjZWxsOih7cm93OmV9KT0+UGUoZS5vcmlnaW5hbCl9LHtpZDpgZnJlZWAsaGVhZGVyOmBGcmVlYCxhY2Nlc3NvckZuOmU9PishIWUuZGlzcGxheUZyZWUsY2VsbDooe3JvdzplfSk9PmUub3JpZ2luYWwuZGlzcGxheUZyZWU/YShGLHthczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmAnOmZyZWUnIHN1ZmZpeCBtb2RlbCDigJQgZGlzcGxheS1vbmx5LCBiaWxsaW5nIGZvbGxvd3MgdGhlIFByaWNlIGNvbHVtbidzIG93biBzb3VyY2VgfSwoKT0+YGZyZWVgKTphKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGDigJRgKX0se2lkOmBhbGlhc2VzYCxoZWFkZXI6YEFsaWFzZXNgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLmFsaWFzZXMuam9pbihgLCBgKSxjZWxsOih7cm93OmV9KT0+e2xldCB0PWUub3JpZ2luYWwuYWxpYXNlcztyZXR1cm4gdC5sZW5ndGg9PT0wP2EoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYOKAlGApOmEoYGRpdmAse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMWB9LHQubWFwKGU9PmEoRix7a2V5OmUsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSwoKT0+ZSkpKX19LHtpZDpgcmVxdWVzdHNgLGhlYWRlcjpgUmVxdWVzdHNgLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46ZT0+ZS5yZXF1ZXN0cyxjZWxsOih7cm93OmV9KT0+YShSLHt2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzfSl9LHtpZDpgdG9rZW5zSW5gLGhlYWRlcjpgVG9rZW5zIGluYCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUudG9rZW5zSW4sY2VsbDooe3JvdzplfSk9PmEoUix7dmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJbn0pfSx7aWQ6YHRva2Vuc091dGAsaGVhZGVyOmBUb2tlbnMgb3V0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUudG9rZW5zT3V0LGNlbGw6KHtyb3c6ZX0pPT5hKFIse3ZhbHVlOmUub3JpZ2luYWwudG9rZW5zT3V0fSl9LHtpZDpgY29zdGAsaGVhZGVyOmBDb3N0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUuY29zdE1pY3JvVXNkLGNlbGw6KHtyb3c6ZX0pPT57bGV0IHQ9ZS5vcmlnaW5hbDtyZXR1cm4odC5wcmljZVNvdXJjZT09PWBmcmVlYHx8dC5kaXNwbGF5RnJlZSkmJnQuY29zdE1pY3JvVXNkPT09MD9hKEYse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6YHByaWNlZCBhdCAkMCBwZXIgdG9rZW5gfSwoKT0+YGZyZWVgKTpQKHQuY29zdE1pY3JvVXNkKX19LHtpZDpgcDUwYCxoZWFkZXI6YHA1MGAsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5lLnA1ME1zPz8tMSxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxlLm9yaWdpbmFsLnA1ME1zPT09dm9pZCAwP2DigJRgOk4oZS5vcmlnaW5hbC5wNTBNcykpfSx7aWQ6YHA5NWAsaGVhZGVyOmBwOTVgLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46ZT0+ZS5wOTVNcz8/LTEsY2VsbDooe3JvdzplfSk9PmEoYHNwYW5gLHtjbGFzczpgdGFidWxhci1udW1zYH0sZS5vcmlnaW5hbC5wOTVNcz09PXZvaWQgMD9g4oCUYDpOKGUub3JpZ2luYWwucDk1TXMpKX0se2lkOmBlcnJvclJhdGVgLGhlYWRlcjpgRXJyb3IgcmF0ZWAsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5CKGUuYXR0ZW1wdHMsZS5mYWlsdXJlcyk/Py0xLGNlbGw6KHtyb3c6ZX0pPT5hKGBzcGFuYCx7Y2xhc3M6YHRhYnVsYXItbnVtc2B9LHooQihlLm9yaWdpbmFsLmF0dGVtcHRzLGUub3JpZ2luYWwuZmFpbHVyZXMpKSl9XX12YXIgcT1kKHtfX25hbWU6YE1vZGVsQ2F0YWxvZ1RhYmxlYCxwcm9wczp7cm93czp7fSxxdWVyeTp7fSxsYXRlbmN5RW5hYmxlZDp7dHlwZTpCb29sZWFufSxsb2FkaW5nOnt0eXBlOkJvb2xlYW59LGVycm9yOnt9LG9uUmV0cnk6e3R5cGU6RnVuY3Rpb259fSxlbWl0czpbYHVwZGF0ZTpxdWVyeWBdLHNldHVwKGUse2VtaXQ6aX0pe2xldCBhPWUsbz1pLGM9eCgpLHU9eSgoKT0+TWUoYS5yb3dzLGEucXVlcnkpKSxkPUZlKCksZj15KCgpPT5fZSh7bG9hZGluZzphLmxvYWRpbmcsaGFzRGF0YTphLnJvd3MubGVuZ3RoPjAsZXJyb3I6YS5lcnJvcj8/YGB9KSksbT15KCgpPT5hLnF1ZXJ5LnRyaW0oKT9gbm8gbW9kZWxzIG1hdGNoICIke2EucXVlcnl9ImA6YG5vbmVgKTtyZXR1cm4oaSxhKT0+KFMoKSxDKF8obCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bdihfKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3YoXyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzJdfHw9W2IoYE1vZGVsIGNhdGFsb2dgLC0xKV1dKSxfOjF9KSx2KF8oayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVszXXx8PVtiKGAgRXZlcnkgY29uZmlndXJlZCBtb2RlbDogcHJpY2Ugc291cmNlLCBwZXItbW9kZWwgdXNhZ2UgZm9yIHRoZSBjdXJyZW50IHJhbmdlLCBmbGVldCBwNTAvcDk1LCBhbmQgZXJyb3IgcmF0ZS4gYCwtMSldXSksXzoxfSksdih3ZSx7Im1vZGVsLXZhbHVlIjplLnF1ZXJ5LHBsYWNlaG9sZGVyOmBTZWFyY2ggbW9kZWxzIG9yIGFsaWFzZXMuLi5gLGNsYXNzOmBtdC0yIG1heC13LXNtYCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YVswXXx8PWU9Pm8oYHVwZGF0ZTpxdWVyeWAsZSl9LG51bGwsOCxbYG1vZGVsLXZhbHVlYF0pXSksXzoxfSksdihfKEUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LHtkZWZhdWx0OnIoKCk9PltlLmxhdGVuY3lFbmFibGVkP1QoYGAsITApOihTKCksQyhfKHBlKSx7a2V5OjAsdmFyaWFudDpgd2FybmB9LHtkZWZhdWx0OnIoKCk9Plt2KF8oaGUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbNF18fD1bYihgTGF0ZW5jeSBzdGF0aXN0aWNzIGFyZSBvZmZgLC0xKV1dKSxfOjF9KSx2KF8obWUpLHtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yYH0se2RlZmF1bHQ6cigoKT0+W2FbNl18fD1wKGBzcGFuYCxudWxsLFtiKGBFbmFibGUgYCkscChgY29kZWAsbnVsbCxgYWRtaW4uc3RhdHMubGF0ZW5jeWApLGIoYCBpbiB0aGUgbWlkZGxld2FyZSBjb25maWcgdG8gc2VlIGZsZWV0IHA1MC9wOTUuYCldLC0xKSx2KF8obikse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6YVsxXXx8PWU9Pl8oYykuZ29UbyhgY29uZmlnYCl9LHtkZWZhdWx0OnIoKCk9PlsuLi5hWzVdfHw9W2IoYE9wZW4gQ29uZmlnYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKSxmLnZhbHVlPT09YHNrZWxldG9uYD8oUygpLEMoTCx7a2V5OjEscm93czo1LGNvbHM6XyhkKS5sZW5ndGh9LG51bGwsOCxbYGNvbHNgXSkpOmYudmFsdWU9PT1gZXJyb3JgPyhTKCksQyhnZSx7a2V5OjIsbWVzc2FnZTplLmVycm9yPz9gYCwib24tcmV0cnkiOmUub25SZXRyeX0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTpmLnZhbHVlPT09YGVtcHR5YD8oUygpLEMoSSx7a2V5OjMsdGl0bGU6YE5vIG1vZGVscyBjb25maWd1cmVkLmB9KSk6KFMoKSxDKENlLHtrZXk6NCxjb2x1bW5zOl8oZCksZGF0YTp1LnZhbHVlLCJlbXB0eS1tZXNzYWdlIjptLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSkpXSksXzoxfSldKSxfOjF9KSl9fSksSWU9eyJhcmlhLWhpZGRlbiI6YHRydWVgfSxKPXtjbGFzczpgc3Itb25seWB9LExlPWQoe19fbmFtZTpgUHJvdmlkZXJSYXRlQmFkZ2VgLHByb3BzOnthdHRlbXB0c0RheTp7fSxmYWlsdXJlc0RheTp7fSxhdHRlbXB0c01pbnV0ZTp7fSxmYWlsdXJlc01pbnV0ZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXkoKCk9PmtlKHQuYXR0ZW1wdHNEYXksdC5mYWlsdXJlc0RheSkpLGk9eSgoKT0+VihuLnZhbHVlKSksYT15KCgpPT5pLnZhbHVlPT09YG5vLXRyYWZmaWNgP2BubyB0cmFmZmljYDpqZShuLnZhbHVlKSksbz15KCgpPT50LmF0dGVtcHRzTWludXRlPT09dm9pZCAwfHx0LmZhaWx1cmVzTWludXRlPT09dm9pZCAwP0godC5hdHRlbXB0c0RheSx0LmZhaWx1cmVzRGF5KTpPZSh0LmF0dGVtcHRzTWludXRlLHQuZmFpbHVyZXNNaW51dGUpKSxzPXkoKCk9PmkudmFsdWU9PT1gc2V2ZXJlYD9gZGVzdHJ1Y3RpdmVgOmkudmFsdWU9PT1gaGVhbHRoeWA/YHNlY29uZGFyeWA6YG91dGxpbmVgKSxsPXkoKCk9PmkudmFsdWU9PT1gZGVncmFkZWRgP2Bib3JkZXItc3RhdHVzLXdhcm4vNDAgdGV4dC1zdGF0dXMtd2FybmA6aS52YWx1ZT09PWBuby10cmFmZmljYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDpgYCk7cmV0dXJuKGUsdCk9PihTKCksQyhfKEYpLHthczpgc3BhbmAsdmFyaWFudDpzLnZhbHVlLGNsYXNzOkQoW2wudmFsdWUsYGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2BdKSx0aXRsZTpvLnZhbHVlfSx7ZGVmYXVsdDpyKCgpPT5bcChgc3BhbmAsSWUsYyhhLnZhbHVlKSwxKSxwKGBzcGFuYCxKLGMoby52YWx1ZSksMSldKSxfOjF9LDgsW2B2YXJpYW50YCxgY2xhc3NgLGB0aXRsZWBdKSl9fSksUmU9ZihgbW9kZWxzYCx7c3RhdGU6KCk9Pih7cm93czpbXSxwcm92aWRlclBlcmY6W10scGVyZldpbmRvdzp7d2luZG93OmBkYXlgLHNwYW46MH0sbGF0ZW5jeUVuYWJsZWQ6ITEsbG9hZGluZzohMSxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLHJlcUlkOjB9KSxhY3Rpb25zOnthc3luYyBmZXRjaCgpe2xldCBlPSsrdGhpcy5yZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCB0PVUoKSxuPUEoKTtpZihhd2FpdCB0LmVuc3VyZUxvYWRlZCgpLGUhPT10aGlzLnJlcUlkKXJldHVybjtpZighdC5kYXRhKXt0aGlzLmVycm9yPXQuZXJyb3J8fGBjYXRhbG9nIHVuYXZhaWxhYmxlYDtyZXR1cm59bGV0IHI9VyhuLndpbmRvdyxuLnNwYW4pLFtpLGEsb109YXdhaXQgUHJvbWlzZS5hbGwoW20oYC9hZG1pbi9hcGkvdXNhZ2UvbW9kZWxzP3dpbmRvdz0ke24ud2luZG93fSZzcGFuPSR7bi5zcGFufSZsaW1pdD0xMDAmZGV0YWlsPTEmbWV0cmljPXJlcWApLG0oYC9hZG1pbi9hcGkvcGVyZm9ybWFuY2U/a2luZD1tb2RlbCZ3aW5kb3c9JHtyLndpbmRvd30mc3Bhbj0ke3Iuc3Bhbn1gKSxtKGAvYWRtaW4vYXBpL3BlcmZvcm1hbmNlP2tpbmQ9cHJvdmlkZXImd2luZG93PSR7ci53aW5kb3d9JnNwYW49JHtyLnNwYW59YCldKTtpZihlIT09dGhpcy5yZXFJZClyZXR1cm47dGhpcy5yb3dzPUcodC5kYXRhLGksYSksdGhpcy5wcm92aWRlclBlcmY9by5yb3dzPz9bXSx0aGlzLnBlcmZXaW5kb3c9cix0aGlzLmxhdGVuY3lFbmFibGVkPWEubGF0ZW5jeUVuYWJsZWQsdGhpcy5sYXN0VXBkYXRlZD1uZXcgRGF0ZSx0aGlzLmVycm9yPWBgfWNhdGNoKHQpe2lmKGUhPT10aGlzLnJlcUlkfHx0IGluc3RhbmNlb2YgYWUmJih0LnN0YXR1cz09PTQwMXx8dC5zdGF0dXM9PT00MDMpKXJldHVybjt0aGlzLmVycm9yPXQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6U3RyaW5nKHQpfWZpbmFsbHl7ZT09PXRoaXMucmVxSWQmJih0aGlzLmxvYWRpbmc9ITEpfX19fSksemU9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC02YH0sQmU9e2NsYXNzOmBncmlkIGdhcC00IHNtOmdyaWQtY29scy0zYH0sVmU9e2NsYXNzOmBmb250LW1lZGl1bWB9LEhlPXtrZXk6MCxjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41IHRleHQtZGVzdHJ1Y3RpdmVgfSxVZT17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sV2U9e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxHZT17Y2xhc3M6YGZvbnQtbWVkaXVtYH0sS2U9e2tleTowLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxxZT17a2V5OjMsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxKZT17a2V5OjQsY2xhc3M6YHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxZZT17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sWGU9e2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmB9LFplPVtgYXJpYS1sYWJlbGAsYHRpdGxlYCxgb25DbGlja2BdLFFlPXtjbGFzczpgc3Itb25seWB9LCRlPXtjbGFzczpgZmxleCBmbGV4LTEgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC0zIGdhcC15LTEgcHItMiB0ZXh0LWxlZnRgfSxldD17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LHR0PXtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxudD17Y2xhc3M6YG1iLTMgZ3JpZCBncmlkLWNvbHMtMiBnYXAteC02IGdhcC15LTEuNSB0ZXh0LXNtIHNtOmdyaWQtY29scy0zYH0scnQ9e2NsYXNzOmBicmVhay1hbGxgfSxpdD17a2V5OjB9LGF0PXtrZXk6MX0sb3Q9e2NsYXNzOmB0ZXh0LWRlc3RydWN0aXZlYH0sc3Q9e2tleTowLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sY3Q9e2tleTowLHRpdGxlOmBjb250ZXh0IHdpbmRvd2AsY2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRhYnVsYXItbnVtc2B9LGx0PXtrZXk6MSxjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx1dD17a2V5OjAsY2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sWT1kKHtfX25hbWU6YFByb3ZpZGVySGVhbHRoUGFuZWxgLHNldHVwKHUpe2xldCBkPXRlKCksZj1SZSgpLG09eSgoKT0+ZC5vdmVydmlldyksYWU9eCgpO2Z1bmN0aW9uIEEoZSl7YWUuZ29UbyhgbW9kZWxzYCx7cTpgJHtlfS9gfSl9bGV0IGo9bmUoe21hbnVhbGx5RXhwYW5kZWQ6bmV3IFNldCxtYW51YWxseUNvbGxhcHNlZDpuZXcgU2V0fSkse3F1ZXJ5OlAsbm9ybWFsaXplZDpJLGhhc1F1ZXJ5Okx9PVRlKCk7ZnVuY3Rpb24gUihlLHQpe3JldHVybiBNKGUsdCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhJLnZhbHVlKX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZS5tb2RlbHMuc29tZSh0PT5SKGUubmFtZSx0KSl9ZnVuY3Rpb24ga2UoZSl7cmV0dXJuIGUuYWxpYXMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhJLnZhbHVlKXx8ZS50YXJnZXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhJLnZhbHVlKX1sZXQgej15KCgpPT5fZSh7bG9hZGluZzohMCxoYXNEYXRhOm0udmFsdWUhPT1udWxsLGVycm9yOmQuZXJyb3J9KSksQj15KCgpPT57bGV0IGU9bS52YWx1ZT8ucHJvdmlkZXJzPz9bXTtyZXR1cm4gTC52YWx1ZT9lLmZpbHRlcihPZSk6ZX0pLGplPXkoKCk9PntsZXQgZT1tLnZhbHVlPy5hbGlhc2VzPz9bXTtyZXR1cm4gTC52YWx1ZT9lLmZpbHRlcihrZSk6ZX0pLFY9eSgoKT0+Y2UoaixMLnZhbHVlLEIudmFsdWUubWFwKGU9PmUubmFtZSkpKTtmdW5jdGlvbiBIKGUpe3VlKGosZSxWLnZhbHVlLmhhcyhlKSl9bGV0IFU9eSh7Z2V0OigpPT5BcnJheS5mcm9tKFYudmFsdWUpLHNldDplPT57bGV0IHQ9bmV3IFNldChlKTtmb3IobGV0IGUgb2YgVi52YWx1ZSl0LmhhcyhlKXx8SChlKTtmb3IobGV0IGUgb2YgdClWLnZhbHVlLmhhcyhlKXx8SChlKX19KTtlKFAsZT0+e2UudHJpbSgpPT09YGAmJmZlKGopfSk7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gTC52YWx1ZT9lLm1vZGVscy5maWx0ZXIodD0+UihlLm5hbWUsdCkpOmUubW9kZWxzfWxldCBNZT17YXR0ZW1wdHNEYXk6MCxmYWlsdXJlc0RheTowfTtmdW5jdGlvbiBHKGUsdCl7cmV0dXJuIGUubW9kZWxSYXRlcz8uW3RdPz9NZX1mdW5jdGlvbiBOZShlLHQpe2xldCBuPUcoZSx0KTtyZXR1cm4gQWUobi5hdHRlbXB0c0RheSxuLmZhaWx1cmVzRGF5KX1sZXQgUGU9e307ZnVuY3Rpb24gSyhlLHQpe3JldHVybiBlLm1vZGVsTWV0YT8uW3RdPz9QZX1mdW5jdGlvbiBGZShlKXtzd2l0Y2goZSl7Y2FzZWBvcGVuYDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2VgaGFsZi1vcGVuYDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gcShlKXtsZXQgdD1TZShlLm9wZW5VbnRpbCk7cmV0dXJuIHQ/YCR7ZS5oZWFsdGhTdGF0ZX0gKCR7dH0pYDplLmhlYWx0aFN0YXRlfWZ1bmN0aW9uIEllKGUpe3JldHVybiBlPT09YG9wZW5gP2B0ZXh0LWRlc3RydWN0aXZlYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH1mdW5jdGlvbiBKKGUpe3JldHVybiBlLmxhdGVuY3k/LnN0cmVhbWluZ31mdW5jdGlvbiBZKGUpe3JldHVybiBlLmxhdGVuY3k/Lltgbm9uLXN0cmVhbWluZ2BdfWZ1bmN0aW9uIFgoZSl7cmV0dXJuIGUuY291bnQ9PT12b2lkIDA/YG5vIG9ic2VydmF0aW9ucyBjb3VudGVkYDpgJHtlLmNvdW50fSAke2UuY291bnQ9PT0xP2BvYnNlcnZhdGlvbmA6YG9ic2VydmF0aW9uc2B9IG9uIHRoaXMgcmVwbGljYWB9ZnVuY3Rpb24gWigpe2xldCBlPW0udmFsdWU/LnJlcGxpY2E7cmV0dXJuYFBlci1yZXBsaWNhICgke2U/YHJlcGxpY2EgJHtlfWA6YHRoaXMgcmVwbGljYWB9KSwgaW4tcHJvY2VzcyBvbmx5IOKAlCBub3QgYSBmbGVldC13aWRlIGF2ZXJhZ2UgYWNyb3NzIHRoaXMgZGVwbG95bWVudOKAmXMgcmVwbGljYXMuYH1mdW5jdGlvbiBkdChlKXtyZXR1cm5gQXZlcmFnZSB0aW1lIHRvIGZpcnN0IGJ5dGUsIHRoZSBsb2FkLXNlbnNpdGl2ZSByZWFkaW5nIGZvciBzdHJlYW1pbmcgdHJhZmZpYy4gJHtYKGUpfS4gJHtaKCl9YH1mdW5jdGlvbiBmdChlKXtyZXR1cm5gQXZlcmFnZSB0b3RhbCByZXNwb25zZSB0aW1lLCBpbmNsdWRpbmcgZ2VuZXJhdGlvbiDigJQgbm90IGEgbG9hZC1zZW5zaXRpdmUgc2lnbmFsIGxpa2Ugc3RyZWFtaW5nIHR0ZmIsIHNpbmNlIHRoaXMgcHJvdmlkZXIgYnVmZmVycyB0aGUgd2hvbGUgY29tcGxldGlvbiBiZWZvcmUgc2VuZGluZyBhbnl0aGluZy4gJHtYKGUpfS4gJHtaKCl9YH1mdW5jdGlvbiBRKGUpe3JldHVybiBlLnByb3ZlbmFuY2U/LmVzdGltYXRlZH1mdW5jdGlvbiBwdChlKXtyZXR1cm4gZS5wcm92ZW5hbmNlPy51bmJpbGxlZH1mdW5jdGlvbiBtdChlKXtsZXQgdD1lLnJlcXVlc3RzPT09MT9gYDpgc2A7cmV0dXJuYCR7ZS5yZXF1ZXN0c30gbm9uLXN0cmVhbWluZyByZXNwb25zZSR7dH0gY2FycmllZCBubyB1c2FnZSBmcm9tIHRoZSBwcm92aWRlciDigJQgcHJvbXB0IHRva2VucyB3ZXJlIGVzdGltYXRlZCBmcm9tIHJlcXVlc3QgYm9keSBzaXplIGluc3RlYWQgKCR7ZS50b2tlbnN9IHRva2VucyBiaWxsZWQgZnJvbSB0aGUgZXN0aW1hdGUpLCBjb21wbGV0aW9uIGJpbGxlZCBhcyB6ZXJvLiAke1ooKX1gfWZ1bmN0aW9uIGh0KGUpe2xldCB0PWUucmVxdWVzdHM9PT0xP2BgOmBzYDtyZXR1cm5gJHtlLnJlcXVlc3RzfSBzdHJlYW1pbmcgcmVzcG9uc2Uke3R9IGNhcnJpZWQgbm8gdXNhZ2UgZnJvbSB0aGUgcHJvdmlkZXIg4oCUIHRoZSByZXF1ZXN0IHdhcyBjb3VudGVkIGJ1dCB6ZXJvIHRva2VucyB3ZXJlIGJpbGxlZC4gSWYgdGhpcyBrZWVwcyBoYXBwZW5pbmcsIHRoaXMgcHJvdmlkZXIgbWF5IGJlIHNlcnZpbmcgY29tcGxldGlvbnMgZW50aXJlbHkgZnJlZSBhZ2FpbnN0IGV2ZXJ5IGJ1ZGdldC4gJHtaKCl9YH1mdW5jdGlvbiAkKGUpe3JldHVybiBmLnByb3ZpZGVyUGVyZi5maW5kKHQ9PnQuaWQ9PT1lKX1mdW5jdGlvbiBndChlKXtsZXR7d2luZG93OnQsc3BhbjpufT1mLnBlcmZXaW5kb3c7cmV0dXJuYEZsZWV0LXdpZGUgKGV2ZXJ5IHJlcGxpY2EgY29tYmluZWQpICR7ZT09PWBwNTBgP2BtZWRpYW5gOmA5NXRoIHBlcmNlbnRpbGVgfSByZXNwb25zZSB0aW1lLCBvdmVyIHRoZSBsYXN0ICR7bn0gJHt0fSR7bj09PTE/YGA6YHNgfS5gfWZ1bmN0aW9uIF90KGUpe2xldHt3aW5kb3c6dCxzcGFuOm59PWYucGVyZldpbmRvdztyZXR1cm5gJHtlPT09YHRpbWVvdXRzYD9gcmVxdWVzdHMgdGhhdCBleGNlZWRlZCB0aGUgZGVhZGxpbmVgOmByZXF1ZXN0cyBmYWlsZWQgYXdheSBmcm9tIHRoaXMgcHJvdmlkZXIgdG8gYW5vdGhlciBjYW5kaWRhdGVgfSwgZmxlZXQtd2lkZSwgb3ZlciB0aGUgbGFzdCAke259ICR7dH0ke249PT0xP2BgOmBzYH0uYH1sZXQgdnQ9W3tpZDpgYWxpYXNgLGhlYWRlcjpgQWxpYXNgLGFjY2Vzc29yRm46ZT0+ZS5hbGlhcyxjZWxsOih7cm93OmV9KT0+YShPLHtpZDplLm9yaWdpbmFsLmFsaWFzLGNvbnRleHRUb2tlbnM6ZS5vcmlnaW5hbC5tb2RlbE1ldGE/LmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOmUub3JpZ2luYWwubW9kZWxNZXRhPy5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm9yaWdpbmFsLm1vZGVsTWV0YT8ub3V0cHV0UGVyTVRva1VzZH0pfSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+ZS50YXJnZXQsY2VsbDooe3JvdzplfSk9PmEoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZS5vcmlnaW5hbC50YXJnZXQpfV0seXQ9eSgoKT0+bS52YWx1ZT8uYWxpYXNlcy5sZW5ndGg/TC52YWx1ZT9gbm8gYWxpYXNlcyBtYXRjaCAiJHtQLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCk7cmV0dXJuKGUsYSk9PntsZXQgdT1pZShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFMoKSxoKGBkaXZgLHplLFtwKGBkaXZgLEJlLFt2KF8obCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bdihfKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3YoXyhzKSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6cigoKT0+W3YodSx7aWNvbjptLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP18oZyk6Xyh3KSxjbGFzczpEKFttLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSxhWzNdfHw9YihgIFJlZGlzIGAsLTEpXSksXzoxfSldKSxfOjF9KSx2KF8oRSkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHRleHQtc21gfSx7ZGVmYXVsdDpyKCgpPT5bcChgcGAsVmUsYyhtLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2BDb25maWd1cmVkYDpgTm90IGNvbmZpZ3VyZWRgKSwxKSxtLnZhbHVlPy5yZWRpcy5sYXN0RXJyPyhTKCksaChgcGAsSGUsW3YodSx7aWNvbjpfKHJlKSxjbGFzczpgbXQtMC41IHNpemUtMy41IHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxwKGBzcGFuYCxudWxsLGMobS52YWx1ZS5yZWRpcy5sYXN0RXJyKStjKF8oeGUpKG0udmFsdWUucmVkaXMubGFzdEVyckF0KSksMSldKSk6VChgYCwhMCldKSxfOjF9KV0pLF86MX0pLHYoXyhsKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt2KF8odCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bdihfKHMpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpyKCgpPT5bdih1LHtpY29uOm0udmFsdWU/LmNhY2hlLmVuYWJsZWQ/XyhnKTpfKHcpLGNsYXNzOkQoW20udmFsdWU/LmNhY2hlLmVuYWJsZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLGFbNF18fD1iKGAgUmVzcG9uc2UgY2FjaGUgYCwtMSldKSxfOjF9KV0pLF86MX0pLHYoXyhFKSx7Y2xhc3M6YHRleHQtc21gfSx7ZGVmYXVsdDpyKCgpPT5bcChgcGAsVWUsYyhtLnZhbHVlPy5jYWNoZS5lbmFibGVkP2BFbmFibGVkYDpgRGlzYWJsZWRgKSwxKSxtLnZhbHVlPy5jYWNoZS5lbmFibGVkPyhTKCksaChgcGAsV2UsYHR0bCBgK2MobS52YWx1ZS5jYWNoZS50dGwpLDEpKTpUKGBgLCEwKV0pLF86MX0pXSksXzoxfSksdihfKGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W3YoXyh0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt2KF8ocykse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0OnIoKCk9Plt2KHUse2ljb246bS52YWx1ZT8ucmV0cnkuZW5hYmxlZD9fKGcpOl8odyksY2xhc3M6RChbbS52YWx1ZT8ucmV0cnkuZW5hYmxlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksYVs1XXx8PWIoYCBSZXRyeSBgLC0xKV0pLF86MX0pXSksXzoxfSksdihfKEUpLHtjbGFzczpgdGV4dC1zbWB9LHtkZWZhdWx0OnIoKCk9PltwKGBwYCxHZSxjKG0udmFsdWU/LnJldHJ5LmVuYWJsZWQ/YEVuYWJsZWRgOmBEaXNhYmxlZGApLDEpLG0udmFsdWU/LnJldHJ5LmVuYWJsZWQ/KFMoKSxoKGBwYCxLZSxgIGF0dGVtcHRzIGArYyhtLnZhbHVlLnJldHJ5LmF0dGVtcHRzKStgLCBiYWNrb2ZmIGArYyhtLnZhbHVlLnJldHJ5LmJhY2tvZmYpLDEpKTpUKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKSx2KF8obCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bdihfKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3YoXyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzZdfHw9W2IoYFByb3ZpZGVyc2AsLTEpXV0pLF86MX0pLHYoXyhrKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzddfHw9W2IoYCBFdmVyeSBjb25maWd1cmVkIHVwc3RyZWFtLCBpdHMgbGFzdCBkaXNjb3ZlcnkgcmVmcmVzaCwgYW5kIGZsZWV0LXdpZGUgcGVyZm9ybWFuY2UuIFNlYXJjaCBmaWx0ZXJzIHByb3ZpZGVycyBhbmQgYWxpYXNlcyBieSBtb2RlbCBpZC4gYCwtMSldXSksXzoxfSksdih3ZSx7bW9kZWxWYWx1ZTpfKFApLCJvblVwZGF0ZTptb2RlbFZhbHVlIjphWzBdfHw9ZT0+byhQKT9QLnZhbHVlPWU6bnVsbCxwbGFjZWhvbGRlcjpgU2VhcmNoIG1vZGVscyBvciBhbGlhc2VzLi4uYCxjbGFzczpgbXQtMiBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSldKSxfOjF9KSx2KF8oRSkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0zYH0se2RlZmF1bHQ6cigoKT0+W18oZikubGF0ZW5jeUVuYWJsZWQ/VChgYCwhMCk6KFMoKSxDKF8ocGUpLHtrZXk6MCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6cigoKT0+W3YoXyhoZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVs4XXx8PVtiKGBMYXRlbmN5IHN0YXRpc3RpY3MgYXJlIG9mZmAsLTEpXV0pLF86MX0pLHYoXyhtZSkse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSx7ZGVmYXVsdDpyKCgpPT5bYVsxMF18fD1wKGBzcGFuYCxudWxsLFtiKGBFbmFibGUgYCkscChgY29kZWAsbnVsbCxgYWRtaW4uc3RhdHMubGF0ZW5jeWApLGIoYCBpbiB0aGUgbWlkZGxld2FyZSBjb25maWcgdG8gc2VlIGZsZWV0IHA1MC9wOTUuYCldLC0xKSx2KF8obikse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6YVsxXXx8PWU9Pl8oYWUpLmdvVG8oYGNvbmZpZ2ApfSx7ZGVmYXVsdDpyKCgpPT5bLi4uYVs5XXx8PVtiKGBPcGVuIENvbmZpZ2AsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9KSksei52YWx1ZT09PWBza2VsZXRvbmA/KFMoKSxDKEVlLHtrZXk6MSxyb3dzOjN9KSk6ei52YWx1ZT09PWBlcnJvcmA/KFMoKSxDKGdlLHtrZXk6MixtZXNzYWdlOl8oZCkuZXJyb3IsIm9uLXJldHJ5IjpfKGQpLnJlZnJlc2h9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6bS52YWx1ZT8ucHJvdmlkZXJzLmxlbmd0aD9fKEwpJiZCLnZhbHVlLmxlbmd0aD09PTA/KFMoKSxoKGBwYCxKZSxgIG5vIHByb3ZpZGVycyBtYXRjaCAiYCtjKF8oUCkpK2AiIGAsMSkpOihTKCksaChpLHtrZXk6NX0sW3AoYHBgLFllLGMoWigpKStgIEZsZWV0IHA1MC9wOTUvdGltZW91dHMvZmFpbG92ZXJzIGJlbG93IGFyZSBmbGVldC13aWRlLCBub3QgcGVyLXJlcGxpY2EuYCwxKSx2KF8oZGUpLHttb2RlbFZhbHVlOlUudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmFbMl18fD1lPT5VLnZhbHVlPWUsdHlwZTpgbXVsdGlwbGVgLGNsYXNzOmByb3VuZGVkLW1kIGJvcmRlciBweC0zYH0se2RlZmF1bHQ6cigoKT0+WyhTKCEwKSxoKGksbnVsbCxlZShCLnZhbHVlLGU9PihTKCksQyhfKG9lKSx7a2V5OmUubmFtZSx2YWx1ZTplLm5hbWV9LHtkZWZhdWx0OnIoKCk9PltwKGBkaXZgLFhlLFtwKGBidXR0b25gLHt0eXBlOmBidXR0b25gLGNsYXNzOmBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkLXNtIHB5LTIuNSBmb250LW1lZGl1bSBob3Zlcjp0ZXh0LXByaW1hcnkgaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHtlLm5hbWV9J3MgbW9kZWxzIGluIHRoZSBNb2RlbHMgdGFibGVgLHRpdGxlOmBWaWV3ICR7ZS5uYW1lfSdzIG1vZGVscyBpbiB0aGUgTW9kZWxzIHRhYmxlYCxvbkNsaWNrOnQ9PkEoZS5uYW1lKX0sYyhlLm5hbWUpLDksWmUpLHYoXyhzZSkseyJoZWFkZXItY2xhc3MiOmBmbGV4LTFgfSx7ZGVmYXVsdDpyKCgpPT5bcChgc3BhbmAsUWUsYFByb3ZpZGVyIGArYyhlLm5hbWUpK2AgZGV0YWlsc2AsMSkscChgc3BhbmAsJGUsW3YoXyhGKSx7YXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbm9ybWFsYH0se2RlZmF1bHQ6cigoKT0+W2IoYyhlLnR5cGUpLDEpXSksXzoyfSwxMDI0KSxwKGBzcGFuYCxldCxjKGUubW9kZWxDb3VudCkrYCBtb2RlbHNgLDEpLHYoTGUseyJhdHRlbXB0cy1kYXkiOmUuYXR0ZW1wdHNEYXksImZhaWx1cmVzLWRheSI6ZS5mYWlsdXJlc0RheSwiYXR0ZW1wdHMtbWludXRlIjplLmF0dGVtcHRzTWludXRlLCJmYWlsdXJlcy1taW51dGUiOmUuZmFpbHVyZXNNaW51dGV9LG51bGwsOCxbYGF0dGVtcHRzLWRheWAsYGZhaWx1cmVzLWRheWAsYGF0dGVtcHRzLW1pbnV0ZWAsYGZhaWx1cmVzLW1pbnV0ZWBdKSxlLmhlYWx0aFN0YXRlPT09YGNsb3NlZGA/VChgYCwhMCk6KFMoKSxDKF8oRikse2tleTowLGFzOmBzcGFuYCx2YXJpYW50OkZlKGUuaGVhbHRoU3RhdGUpLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6ZS5oZWFsdGhTdGF0ZT09PWBvcGVuYD9gZGlzY292ZXJ5IGlzIGJhY2tpbmcgb2ZmIGFmdGVyIHJlcGVhdGVkIGZhaWx1cmVzYDpgYSBkaXNjb3ZlcnkgcHJvYmUgaXMgZGVjaWRpbmcgd2hldGhlciB0byByZWNvdmVyYH0se2RlZmF1bHQ6cigoKT0+W2IoYyhxKGUpKSwxKV0pLF86Mn0sMTAzMixbYHZhcmlhbnRgLGB0aXRsZWBdKSksSihlKT8uYXZnVHRmYk1zPT09dm9pZCAwP1QoYGAsITApOihTKCksQyhfKEYpLHtrZXk6MSxhczpgc3BhbmAsdmFyaWFudDpgb3V0bGluZWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6ZHQoSihlKSl9LHtkZWZhdWx0OnIoKCk9PltiKGAgc3RyZWFtaW5nIHR0ZmIgYCtjKF8oTikoSihlKS5hdmdUdGZiTXMpKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKSxZKGUpPy5hdmdEdXJhdGlvbk1zPT09dm9pZCAwP1QoYGAsITApOihTKCksQyhfKEYpLHtrZXk6Mixhczpgc3BhbmAsdmFyaWFudDpgb3V0bGluZWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6ZnQoWShlKSl9LHtkZWZhdWx0OnIoKCk9PltiKGAgbm9uLXN0cmVhbWluZyBhdmcgYCtjKF8oTikoWShlKS5hdmdEdXJhdGlvbk1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksJChlLm5hbWUpPy5wNTBNcz09PXZvaWQgMD9UKGBgLCEwKTooUygpLEMoXyhGKSx7a2V5OjMsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOmd0KGBwNTBgKX0se2RlZmF1bHQ6cigoKT0+W2IoYCBmbGVldCBwNTAgYCtjKF8oTikoJChlLm5hbWUpLnA1ME1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksJChlLm5hbWUpPy5wOTVNcz09PXZvaWQgMD9UKGBgLCEwKTooUygpLEMoXyhGKSx7a2V5OjQsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOmd0KGBwOTVgKX0se2RlZmF1bHQ6cigoKT0+W2IoYCBmbGVldCBwOTUgYCtjKF8oTikoJChlLm5hbWUpLnA5NU1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksKCQoZS5uYW1lKT8udGltZW91dHM/PzApPjA/KFMoKSxDKF8oRikse2tleTo1LGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOl90KGB0aW1lb3V0c2ApfSx7ZGVmYXVsdDpyKCgpPT5bYihjKCQoZS5uYW1lKS50aW1lb3V0cykrYCB0aW1lb3V0cyBgLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpOlQoYGAsITApLCgkKGUubmFtZSk/LmZhaWxvdmVycz8/MCk+MD8oUygpLEMoXyhGKSx7a2V5OjYsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6X3QoYGZhaWxvdmVyc2ApfSx7ZGVmYXVsdDpyKCgpPT5bYihjKCQoZS5uYW1lKS5mYWlsb3ZlcnMpK2AgZmFpbG92ZXJzIGAsMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSk6VChgYCwhMCksUShlKT8oUygpLEMoXyhGKSx7a2V5OjcsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2AsdGl0bGU6bXQoUShlKSl9LHtkZWZhdWx0OnIoKCk9PltiKGAgZXN0aW1hdGVkIGArYyhRKGUpLnJlcXVlc3RzKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTpUKGBgLCEwKSxwdChlKT8oUygpLEMoXyhGKSx7a2V5OjgsYXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTpodChwdChlKSl9LHtkZWZhdWx0OnIoKCk9PltiKGAgdW5iaWxsZWQgYCtjKHB0KGUpLnJlcXVlc3RzKSwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTpUKGBgLCEwKSxlLmxhc3RFcnI/KFMoKSxDKHUse2tleTo5LGljb246XyhyZSksY2xhc3M6YHNpemUtMy41IHNocmluay0wIHRleHQtZGVzdHJ1Y3RpdmVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pKTpUKGBgLCEwKSxwKGBzcGFuYCx0dCxjKF8oeWUpKGUuZGlzY292ZXJ5RW5hYmxlZCxlLmxhc3RSZWZyZXNoKSksMSldKV0pLF86Mn0sMTAyNCldKSx2KF8obGUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3AoYGRsYCxudCxbcChgZGl2YCxudWxsLFthWzExXXx8PXAoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEJhc2UgVVJMYCwtMSkscChgZGRgLHJ0LGMoZS5iYXNlVXJsKSwxKV0pLHAoYGRpdmAsbnVsbCxbYVsxMl18fD1wKGBkdGAse2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMYXN0IHJlZnJlc2hgLC0xKSxwKGBkZGAsbnVsbCxjKF8oYmUpKGUuZGlzY292ZXJ5RW5hYmxlZCxlLmxhc3RSZWZyZXNoKSksMSldKSxlLmhlYWx0aFN0YXRlPT09YGNsb3NlZGA/VChgYCwhMCk6KFMoKSxoKGBkaXZgLGl0LFthWzEzXXx8PXAoYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYERpc2NvdmVyeSBoZWFsdGhgLC0xKSxwKGBkZGAse2NsYXNzOkQoSWUoZS5oZWFsdGhTdGF0ZSkpfSxjKHEoZSkpLDMpXSkpLGUubGFzdEVycj8oUygpLGgoYGRpdmAsYXQsW2FbMTRdfHw9cChgZHRgLHtjbGFzczpgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGFzdCBlcnJvcmAsLTEpLHAoYGRkYCxvdCxjKGUubGFzdEVyciksMSldKSk6VChgYCwhMCldKSxXKGUpLmxlbmd0aD8oUygpLGgoYGRpdmAsc3QsWyhTKCEwKSxoKGksbnVsbCxlZShXKGUpLHQ9PihTKCksaChgc3BhbmAse2tleTp0LGNsYXNzOmBpbmxpbmUtZmxleCBtaW4tdy0wIG1heC13LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0xYH0sW3YoTyx7aWQ6XyhNKShlLm5hbWUsdCksImNvbnRleHQtdG9rZW5zIjpLKGUsdCkuY29udGV4dFRva2VucywiaW5wdXQtcGVyLW0tdG9rLXVzZCI6SyhlLHQpLmlucHV0UGVyTVRva1VzZCwib3V0cHV0LXBlci1tLXRvay11c2QiOksoZSx0KS5vdXRwdXRQZXJNVG9rVXNkfSxudWxsLDgsW2BpZGAsYGNvbnRleHQtdG9rZW5zYCxgaW5wdXQtcGVyLW0tdG9rLXVzZGAsYG91dHB1dC1wZXItbS10b2stdXNkYF0pLHYoRGUse2xhYmVsOl8oTSkoZS5uYW1lLHQpLGtpbmQ6YG1vZGVsYCxpZDpfKE0pKGUubmFtZSx0KSxjbGFzczpgbWluLXctMGAsImxhYmVsLWNsYXNzIjpgdHJ1bmNhdGVgfSxudWxsLDgsW2BsYWJlbGAsYGlkYF0pLEsoZSx0KS5jb250ZXh0VG9rZW5zPT09dm9pZCAwP1QoYGAsITApOihTKCksaChgc3BhbmAsY3QsYyhfKHZlKShLKGUsdCkuY29udGV4dFRva2VucykpLDEpKSxOZShlLHQpPyhTKCksQyhMZSx7a2V5OjEsImF0dGVtcHRzLWRheSI6RyhlLHQpLmF0dGVtcHRzRGF5LCJmYWlsdXJlcy1kYXkiOkcoZSx0KS5mYWlsdXJlc0RheX0sbnVsbCw4LFtgYXR0ZW1wdHMtZGF5YCxgZmFpbHVyZXMtZGF5YF0pKTpUKGBgLCEwKV0pKSksMTI4KSldKSk6KFMoKSxoKGBwYCxsdCxgbm8gbW9kZWxzIGtub3duIHlldGApKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKV0sNjQpKTooUygpLGgoYHBgLHFlLGBub25lYCkpXSksXzoxfSldKSxfOjF9KSx2KF8obCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bdihfKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3YoXyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzE1XXx8PVtiKGBNb2RlbCBhbGlhc2VzYCwtMSldXSksXzoxfSksdihfKGspLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMTZdfHw9W2IoYE9wZXJhdG9yLWRlZmluZWQgYWxpYXMg4oaSIHRhcmdldCBtb2RlbCBtYXBwaW5ncy5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHYoXyhFKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt2KENlLHtjb2x1bW5zOnZ0LGRhdGE6amUudmFsdWUsImVtcHR5LW1lc3NhZ2UiOnl0LnZhbHVlfSxudWxsLDgsW2BkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksbS52YWx1ZT8udmVyc2lvbj8oUygpLGgoYHBgLHV0LGBWZXJzaW9uOiBgK2MobS52YWx1ZS52ZXJzaW9uKSwxKSk6VChgYCwhMCldKX19fSksWD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxaPXtrZXk6MCxjbGFzczpgdGV4dC1zbSBicmVhay13b3JkcyB0ZXh0LWRlc3RydWN0aXZlYH0sZHQ9ZCh7X19uYW1lOmBNb2RlbHNQYWdlYCxzZXR1cCh0KXtsZXQgbj1BKCkscj1SZSgpLGk9eCgpLGE9eSh7Z2V0OigpPT5pLnBhcmFtcy5xPz9pLnBhcmFtcy5tb2RlbD8/YGAsc2V0OmU9PntsZXR7bW9kZWw6dCwuLi5ufT1pLnBhcmFtcztpLmdvVG8oYG1vZGVsc2Asey4uLm4scTplfSl9fSk7cmV0dXJuIHUoKCk9PnZvaWQgci5mZXRjaCgpKSxlKCgpPT5uLnJhbmdlLCgpPT52b2lkIHIuZmV0Y2goKSksKGUsdCk9PihTKCksaChgZGl2YCxYLFt2KFkpLF8ocikuZXJyb3ImJl8ocikucm93cy5sZW5ndGg+MD8oUygpLGgoYHBgLFosYyhfKHIpLmVycm9yKSwxKSk6VChgYCwhMCksdihxLHtyb3dzOl8ocikucm93cyxxdWVyeTphLnZhbHVlLCJsYXRlbmN5LWVuYWJsZWQiOl8ocikubGF0ZW5jeUVuYWJsZWQsbG9hZGluZzpfKHIpLmxvYWRpbmcsZXJyb3I6XyhyKS5lcnJvciwib24tcmV0cnkiOl8ocikuZmV0Y2gsIm9uVXBkYXRlOnF1ZXJ5Ijp0WzBdfHw9ZT0+YS52YWx1ZT1lfSxudWxsLDgsW2Byb3dzYCxgcXVlcnlgLGBsYXRlbmN5LWVuYWJsZWRgLGBsb2FkaW5nYCxgZXJyb3JgLGBvbi1yZXRyeWBdKV0pKX19KTtleHBvcnR7ZHQgYXMgZGVmYXVsdH07", + "aW1wb3J0e0FuIGFzIGUsRCBhcyB0LEUgYXMgbixMciBhcyByLE1yIGFzIGksUW4gYXMgYSxTIGFzIG8sVCBhcyBzLFh0IGFzIGMsX24gYXMgbCxhdCBhcyB1LGIgYXMgZCxjbiBhcyBmLGVpIGFzIGVlLGZyIGFzIHRlLGcgYXMgbmUsZ24gYXMgcCxndCBhcyByZSxpciBhcyBtLGxuIGFzIGgsbiBhcyBpZSxudCBhcyBnLG9pIGFzIGFlLG9uIGFzIF8sc24gYXMgdix1biBhcyB5LHVyIGFzIG9lLHZpIGFzIGIsdyBhcyB4LHdpIGFzIFMseCBhcyBDLHhpIGFzIHcseW4gYXMgVCx5dCBhcyBzZX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHthIGFzIGNlLGMgYXMgRSxpIGFzIGxlLGwgYXMgRCxuIGFzIHVlLG8gYXMgZGUsciBhcyBmZSxzIGFzIHBlLHQgYXMgbWV9ZnJvbSIuL3NlYXJjaC1leHBhbmQtQi13Uk9jbkwuanMiO2ltcG9ydHtsIGFzIE8sdCBhcyBrfWZyb20iLi9pbmRleC04OENUUk5IUC5qcyI7aW1wb3J0e3QgYXMgaGV9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHtTIGFzIEEsXyBhcyBnZSxmIGFzIGosaCBhcyBfZSxrIGFzIE0sbiBhcyB2ZSxvIGFzIHllLHIgYXMgYmUscyBhcyBOLHQgYXMgUCx1IGFzIEYsdiBhcyB4ZSx4IGFzIFNlLHkgYXMgSX1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHtpIGFzIENlLG4gYXMgTCxyIGFzIHdlfWZyb20iLi9jb2x1bW5zLUNvZWNuZjc0LmpzIjtpbXBvcnR7biBhcyBUZSx0IGFzIEVlfWZyb20iLi91c2VTZWFyY2hRdWVyeS1CU2tDOGJHZC5qcyI7aW1wb3J0e3QgYXMgRGV9ZnJvbSIuL0VudGl0eUxpbmstQlI2cGxhV1YuanMiO2ltcG9ydHt0IGFzIE9lfWZyb20iLi9TdGF0RGlzYWJsZWRBbGVydC1CSnRIUlh3RS5qcyI7aW1wb3J0e2MgYXMga2UsZCBhcyBSLGYgYXMgeixsIGFzIEFlLG0gYXMgQixwIGFzIFYscyBhcyBILHUgYXMgamV9ZnJvbSIuL2twaS1QMDhVdnJLaS5qcyI7aW1wb3J0e3QgYXMgVX1mcm9tIi4vY2F0YWxvZy1DOTVOVGFYdC5qcyI7aW1wb3J0e3QgYXMgTWV9ZnJvbSIuL3JlbGlhYmlsaXR5LUNZZEpxXzc0LmpzIjtmdW5jdGlvbiBXKGUsdCl7bGV0IG49dC50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj9lLmZpbHRlcihlPT5lLmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobil8fGUuYWxpYXNlcy5zb21lKGU9PmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuKSkpOmV9ZnVuY3Rpb24gTmUoZSx0LG4pe2xldCByPW5ldyBNYXAodC5tb2RlbHMubWFwKGU9PltlLmlkLGVdKSksaT1uZXcgTWFwKChuLnJvd3M/P1tdKS5tYXAoZT0+W2UuaWQsZV0pKSxhPVtdO2ZvcihsZXQgdCBvZiBlLnByb3ZpZGVycylmb3IobGV0IGUgb2YgdC5tb2RlbHMpe2xldCBuPXIuZ2V0KGUuaWQpLG89aS5nZXQoZS5pZCk7YS5wdXNoKHtpZDplLmlkLG1vZGVsOmUubW9kZWwscHJvdmlkZXJOYW1lOnQubmFtZSxjb250ZXh0VG9rZW5zOmUuY29udGV4dFRva2VucyxpbnB1dFBlck1Ub2tVc2Q6ZS5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm91dHB1dFBlck1Ub2tVc2QscHJpY2VTb3VyY2U6ZS5wcmljZVNvdXJjZSxkaXNwbGF5RnJlZTplLmRpc3BsYXlGcmVlLGFsaWFzZXM6ZS5hbGlhc2VzPz9bXSxyZXF1ZXN0czpuPy5yZXF1ZXN0cz8/MCx0b2tlbnNJbjpuPy50b2tlbnNJbj8/MCx0b2tlbnNPdXQ6bj8udG9rZW5zT3V0Pz8wLGNvc3RNaWNyb1VzZDpuPy5jb3N0TWljcm9Vc2Q/PzAscDUwTXM6bz8ucDUwTXMscDk1TXM6bz8ucDk1TXMsYXR0ZW1wdHM6bz8uYXR0ZW1wdHM/PzAsZmFpbHVyZXM6bz8uZmFpbHVyZXM/PzB9KX1yZXR1cm4gYX12YXIgUGU9e292ZXJyaWRlOmBvdmVycmlkZWAsYnVpbHRpbjpgYnVpbHRpbmAsbGl0ZWxsbTpgbGl0ZWxsbWB9O2Z1bmN0aW9uIEcodCl7aWYodC5wcmljZVNvdXJjZT09PWB1bnByaWNlZGApcmV0dXJuIGUoUCx7YXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmBObyBwcmljaW5nIHJ1bGUgbWF0Y2hlZCDigJQgYmlsbGVkIGFzICQwLmB9LCgpPT5gdW5wcmljZWRgKTtpZih0LnByaWNlU291cmNlPT09YGZyZWVgKXJldHVybiBlKFAse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6YENvbmZpZ3VyZWQgZnJlZSAobW9kZWxNZXRhLmZyZWUpIOKAlCBwcmljZWQgYXQgJDAuYH0sKCk9PmBmcmVlYCk7bGV0IG49dC5pbnB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJnQub3V0cHV0UGVyTVRva1VzZCE9PXZvaWQgMCxyPXQucHJpY2VTb3VyY2U7cmV0dXJuIGUoYHNwYW5gLHtjbGFzczpgaW5saW5lLWZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMS41YH0sW2UoYHNwYW5gLHt9LG4/aih0LmlucHV0UGVyTVRva1VzZCx0Lm91dHB1dFBlck1Ub2tVc2QpOmDigJRgKSxlKFAse2FzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+UGVbcl0pXSl9ZnVuY3Rpb24gRmUoZSl7cmV0dXJuIGUucHJpY2VTb3VyY2U9PT1gdW5wcmljZWRgPy0xOmUuaW5wdXRQZXJNVG9rVXNkPz8wfWZ1bmN0aW9uIEsoKXtyZXR1cm5be2lkOmBpZGAsaGVhZGVyOmBNb2RlbGAsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6dH0pPT5lKGBzcGFuYCx7Y2xhc3M6YGlubGluZS1mbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNWB9LFtlKEUse2lkOnQub3JpZ2luYWwuaWQsY29udGV4dFRva2Vuczp0Lm9yaWdpbmFsLmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOnQub3JpZ2luYWwuaW5wdXRQZXJNVG9rVXNkLG91dHB1dFBlck1Ub2tVc2Q6dC5vcmlnaW5hbC5vdXRwdXRQZXJNVG9rVXNkfSksZShEZSx7bGFiZWw6dC5vcmlnaW5hbC5pZCxraW5kOmBtb2RlbGAsaWQ6dC5vcmlnaW5hbC5pZH0pXSl9LEwoYGNvbnRleHRgLGBDb250ZXh0YCxlPT5lLmNvbnRleHRUb2tlbnMseWUpLHtpZDpgcHJpY2VgLGhlYWRlcjpgUHJpY2VgLGFjY2Vzc29yRm46ZT0+RmUoZSksY2VsbDooe3JvdzplfSk9PkcoZS5vcmlnaW5hbCl9LHtpZDpgZnJlZWAsaGVhZGVyOmBGcmVlYCxhY2Nlc3NvckZuOmU9PishIWUuZGlzcGxheUZyZWUsY2VsbDooe3Jvdzp0fSk9PnQub3JpZ2luYWwuZGlzcGxheUZyZWU/ZShQLHthczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmAnOmZyZWUnIHN1ZmZpeCBtb2RlbCDigJQgZGlzcGxheS1vbmx5LCBiaWxsaW5nIGZvbGxvd3MgdGhlIFByaWNlIGNvbHVtbidzIG93biBzb3VyY2VgfSwoKT0+YGZyZWVgKTplKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGDigJRgKX0se2lkOmBhbGlhc2VzYCxoZWFkZXI6YEFsaWFzZXNgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLmFsaWFzZXMuam9pbihgLCBgKSxjZWxsOih7cm93OnR9KT0+e2xldCBuPXQub3JpZ2luYWwuYWxpYXNlcztyZXR1cm4gbi5sZW5ndGg9PT0wP2UoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYOKAlGApOmUoYGRpdmAse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMWB9LG4ubWFwKHQ9PmUoUCx7a2V5OnQsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW1vbm8gZm9udC1ub3JtYWxgfSwoKT0+dCkpKX19LC4uLndlKCkuZmlsdGVyKGU9PmUuaWQhPT1gY29zdGApLHtpZDpgY29zdGAsaGVhZGVyOmBDb3N0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUuY29zdE1pY3JvVXNkLGNlbGw6KHtyb3c6dH0pPT57bGV0IG49dC5vcmlnaW5hbDtyZXR1cm4obi5wcmljZVNvdXJjZT09PWBmcmVlYHx8bi5kaXNwbGF5RnJlZSkmJm4uY29zdE1pY3JvVXNkPT09MD9lKFAse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6YHByaWNlZCBhdCAkMCBwZXIgdG9rZW5gfSwoKT0+YGZyZWVgKTpOKG4uY29zdE1pY3JvVXNkKX19LEwoYHA1MGAsYHA1MGAsZT0+ZS5wNTBNcyxGLHtzb3J0U2VudGluZWw6LTF9KSxMKGBwOTVgLGBwOTVgLGU9PmUucDk1TXMsRix7c29ydFNlbnRpbmVsOi0xfSkse2lkOmBlcnJvclJhdGVgLGhlYWRlcjpgRXJyb3IgcmF0ZWAsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT56KGUuYXR0ZW1wdHMsZS5mYWlsdXJlcyk/Py0xLGNlbGw6KHtyb3c6dH0pPT5lKGBzcGFuYCx7Y2xhc3M6YHRhYnVsYXItbnVtc2B9LGtlKHoodC5vcmlnaW5hbC5hdHRlbXB0cyx0Lm9yaWdpbmFsLmZhaWx1cmVzKSkpfV19dmFyIEllPVQoe19fbmFtZTpgTW9kZWxDYXRhbG9nVGFibGVgLHByb3BzOntyb3dzOnt9LHF1ZXJ5Ont9LGxhdGVuY3lFbmFibGVkOnt0eXBlOkJvb2xlYW59LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbn0sZXJyb3I6e30sb25SZXRyeTp7dHlwZTpGdW5jdGlvbn19LGVtaXRzOltgdXBkYXRlOnF1ZXJ5YF0sc2V0dXAoZSx7ZW1pdDppfSl7bGV0IGE9ZSxvPWksYz1fKCgpPT5XKGEucm93cyxhLnF1ZXJ5KSksdT1LKCksZD1fKCgpPT5TZSh7bG9hZGluZzphLmxvYWRpbmcsaGFzRGF0YTphLnJvd3MubGVuZ3RoPjAsZXJyb3I6YS5lcnJvcj8/YGB9KSksZWU9XygoKT0+YS5xdWVyeS50cmltKCk/YG5vIG1vZGVscyBtYXRjaCAiJHthLnF1ZXJ5fSJgOmBub25lYCk7cmV0dXJuKGksYSk9PihtKCksZihiKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2woYihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKGIoeCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxXXx8PVtwKGBNb2RlbCBjYXRhbG9nYCwtMSldXSksXzoxfSksbChiKE8pLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMl18fD1bcChgIEV2ZXJ5IGNvbmZpZ3VyZWQgbW9kZWw6IHByaWNlIHNvdXJjZSwgcGVyLW1vZGVsIHVzYWdlIGZvciB0aGUgY3VycmVudCByYW5nZSwgZmxlZXQgcDUwL3A5NSwgYW5kIGVycm9yIHJhdGUuIGAsLTEpXV0pLF86MX0pLGwoVGUseyJtb2RlbC12YWx1ZSI6ZS5xdWVyeSxwbGFjZWhvbGRlcjpgU2VhcmNoIG1vZGVscyBvciBhbGlhc2VzLi4uYCxjbGFzczpgbXQtMiBtYXgtdy1zbWAsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmFbMF18fD1lPT5vKGB1cGRhdGU6cXVlcnlgLGUpfSxudWxsLDgsW2Btb2RlbC12YWx1ZWBdKV0pLF86MX0pLGwoYihuKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgfSx7ZGVmYXVsdDpyKCgpPT5bZS5sYXRlbmN5RW5hYmxlZD9oKGBgLCEwKToobSgpLGYoT2Use2tleTowLHRpdGxlOmBMYXRlbmN5IHN0YXRpc3RpY3MgYXJlIG9mZmAsImNvbmZpZy1rZXkiOmBhZG1pbi5zdGF0cy5sYXRlbmN5YCxwdXJwb3NlOmB0byBzZWUgZmxlZXQgcDUwL3A5NS5gfSkpLGQudmFsdWU9PT1gc2tlbGV0b25gPyhtKCksZihBLHtrZXk6MSxyb3dzOjUsY29sczpiKHUpLmxlbmd0aH0sbnVsbCw4LFtgY29sc2BdKSk6ZC52YWx1ZT09PWBlcnJvcmA/KG0oKSxmKGhlLHtrZXk6MixtZXNzYWdlOmUuZXJyb3I/P2BgLCJvbi1yZXRyeSI6ZS5vblJldHJ5fSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOmQudmFsdWU9PT1gZW1wdHlgPyhtKCksZihNLHtrZXk6Myx0aXRsZTpgTm8gbW9kZWxzIGNvbmZpZ3VyZWQuYH0pKToobSgpLGYoQ2Use2tleTo0LGNvbHVtbnM6Yih1KSxkYXRhOmMudmFsdWUsImVtcHR5LW1lc3NhZ2UiOmVlLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSkpXSksXzoxfSldKSxfOjF9KSl9fSkscT17ImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LEo9e2NsYXNzOmBzci1vbmx5YH0sTGU9VCh7X19uYW1lOmBQcm92aWRlclJhdGVCYWRnZWAscHJvcHM6e2F0dGVtcHRzRGF5Ont9LGZhaWx1cmVzRGF5Ont9LGF0dGVtcHRzTWludXRlOnt9LGZhaWx1cmVzTWludXRlOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49XygoKT0+Qih0LmF0dGVtcHRzRGF5LHQuZmFpbHVyZXNEYXkpKSxpPV8oKCk9PlYobi52YWx1ZSkpLGE9XygoKT0+aS52YWx1ZT09PWBuby10cmFmZmljYD9gbm8gdHJhZmZpY2A6QWUobi52YWx1ZSkpLG89XygoKT0+dC5hdHRlbXB0c01pbnV0ZT09PXZvaWQgMHx8dC5mYWlsdXJlc01pbnV0ZT09PXZvaWQgMD9IKHQuYXR0ZW1wdHNEYXksdC5mYWlsdXJlc0RheSk6Uih0LmF0dGVtcHRzTWludXRlLHQuZmFpbHVyZXNNaW51dGUpKSxzPV8oKCk9PmkudmFsdWU9PT1gc2V2ZXJlYD9gZGVzdHJ1Y3RpdmVgOmkudmFsdWU9PT1gaGVhbHRoeWA/YHNlY29uZGFyeWA6YG91dGxpbmVgKSxjPV8oKCk9PmkudmFsdWU9PT1gZGVncmFkZWRgP2Bib3JkZXItc3RhdHVzLXdhcm4vNDAgdGV4dC1zdGF0dXMtd2FybmA6aS52YWx1ZT09PWBuby10cmFmZmljYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDpgYCk7cmV0dXJuKGUsdCk9PihtKCksZihiKFApLHthczpgc3BhbmAsdmFyaWFudDpzLnZhbHVlLGNsYXNzOncoW2MudmFsdWUsYGZvbnQtbm9ybWFsIHRhYnVsYXItbnVtc2BdKSx0aXRsZTpvLnZhbHVlfSx7ZGVmYXVsdDpyKCgpPT5bdihgc3BhbmAscSxTKGEudmFsdWUpLDEpLHYoYHNwYW5gLEosUyhvLnZhbHVlKSwxKV0pLF86MX0sOCxbYHZhcmlhbnRgLGBjbGFzc2AsYHRpdGxlYF0pKX19KSxSZT1zZShgbW9kZWxzYCx7c3RhdGU6KCk9Pih7cm93czpbXSxwcm92aWRlclBlcmY6W10scGVyZldpbmRvdzp7d2luZG93OmBkYXlgLHNwYW46MH0sbGF0ZW5jeUVuYWJsZWQ6ITEsbG9hZGluZzohMSxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLHJlcUlkOjB9KSxhY3Rpb25zOnthc3luYyBmZXRjaCgpe2xldCBlPSsrdGhpcy5yZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCB0PVUoKSxuPWsoKTtpZihhd2FpdCB0LmVuc3VyZUxvYWRlZCgpLGUhPT10aGlzLnJlcUlkKXJldHVybjtpZighdC5kYXRhKXt0aGlzLmVycm9yPXQuZXJyb3J8fGBjYXRhbG9nIHVuYXZhaWxhYmxlYDtyZXR1cm59bGV0IHI9TWUobi53aW5kb3csbi5zcGFuKSxbaSxhLG9dPWF3YWl0IFByb21pc2UuYWxsKFtkKGAvYWRtaW4vYXBpL3VzYWdlL21vZGVscz93aW5kb3c9JHtuLndpbmRvd30mc3Bhbj0ke24uc3Bhbn0mbGltaXQ9MTAwJmRldGFpbD0xJm1ldHJpYz1yZXFgKSxkKGAvYWRtaW4vYXBpL3BlcmZvcm1hbmNlP2tpbmQ9bW9kZWwmd2luZG93PSR7ci53aW5kb3d9JnNwYW49JHtyLnNwYW59YCksZChgL2FkbWluL2FwaS9wZXJmb3JtYW5jZT9raW5kPXByb3ZpZGVyJndpbmRvdz0ke3Iud2luZG93fSZzcGFuPSR7ci5zcGFufWApXSk7aWYoZSE9PXRoaXMucmVxSWQpcmV0dXJuO3RoaXMucm93cz1OZSh0LmRhdGEsaSxhKSx0aGlzLnByb3ZpZGVyUGVyZj1vLnJvd3M/P1tdLHRoaXMucGVyZldpbmRvdz1yLHRoaXMubGF0ZW5jeUVuYWJsZWQ9YS5sYXRlbmN5RW5hYmxlZCx0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYoZSE9PXRoaXMucmVxSWR8fEModCkpcmV0dXJuO3RoaXMuZXJyb3I9byh0KX1maW5hbGx5e2U9PT10aGlzLnJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19fX0pLHplPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LEJlPXtjbGFzczpgZ3JpZCBnYXAtNCBzbTpncmlkLWNvbHMtM2B9LFZlPXtjbGFzczpgZm9udC1tZWRpdW1gfSxIZT17a2V5OjAsY2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNSB0ZXh0LWRlc3RydWN0aXZlYH0sVWU9e2NsYXNzOmBmb250LW1lZGl1bWB9LFdlPXtrZXk6MCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sR2U9e2NsYXNzOmBmb250LW1lZGl1bWB9LEtlPXtrZXk6MCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0scWU9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEplPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxZZT1bYGFyaWEtbGFiZWxgLGB0aXRsZWAsYG9uQ2xpY2tgXSxYZT17Y2xhc3M6YHNyLW9ubHlgfSxaZT17Y2xhc3M6YGZsZXggZmxleC0xIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLXgtMyBnYXAteS0xIHByLTIgdGV4dC1sZWZ0YH0sUWU9e2NsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSwkZT17Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZXQ9e2NsYXNzOmBtYi0zIGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLXgtNiBnYXAteS0xLjUgdGV4dC1zbSBzbTpncmlkLWNvbHMtM2B9LHR0PXtrZXk6MCxjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LG50PXtrZXk6MCx0aXRsZTpgY29udGV4dCB3aW5kb3dgLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0YWJ1bGFyLW51bXNgfSxydD17a2V5OjEsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0saXQ9e2tleTowLGNsYXNzOmB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFk9VCh7X19uYW1lOmBQcm92aWRlckhlYWx0aFBhbmVsYCxzZXR1cChhKXtsZXQgbz1uZSgpLGQ9UmUoKSxDPV8oKCk9Pm8ub3ZlcnZpZXcpLFQ9aWUoKTtmdW5jdGlvbiBzZShlKXtULmdvVG8oYG1vZGVsc2Ase3E6YCR7ZX0vYH0pfWxldCBrPWFlKHttYW51YWxseUV4cGFuZGVkOm5ldyBTZXQsbWFudWFsbHlDb2xsYXBzZWQ6bmV3IFNldH0pLHtxdWVyeTpBLG5vcm1hbGl6ZWQ6aixoYXNRdWVyeTpOfT1FZSgpO2Z1bmN0aW9uIEwoZSx0KXtyZXR1cm4gSShlLHQpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoai52YWx1ZSl9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGUubW9kZWxzLnNvbWUodD0+TChlLm5hbWUsdCkpfWZ1bmN0aW9uIGtlKGUpe3JldHVybiBlLmFsaWFzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoai52YWx1ZSl8fGUudGFyZ2V0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoai52YWx1ZSl9bGV0IFI9XygoKT0+U2Uoe2xvYWRpbmc6ITAsaGFzRGF0YTpDLnZhbHVlIT09bnVsbCxlcnJvcjpvLmVycm9yfSkpLHo9XygoKT0+e2xldCBlPUMudmFsdWU/LnByb3ZpZGVycz8/W107cmV0dXJuIE4udmFsdWU/ZS5maWx0ZXIod2UpOmV9KSxBZT1fKCgpPT57bGV0IGU9Qy52YWx1ZT8uYWxpYXNlcz8/W107cmV0dXJuIE4udmFsdWU/ZS5maWx0ZXIoa2UpOmV9KSxCPV8oKCk9PnVlKGssTi52YWx1ZSx6LnZhbHVlLm1hcChlPT5lLm5hbWUpKSk7ZnVuY3Rpb24gVihlKXtmZShrLGUsQi52YWx1ZS5oYXMoZSkpfWxldCBIPV8oe2dldDooKT0+QXJyYXkuZnJvbShCLnZhbHVlKSxzZXQ6ZT0+e2xldCB0PW5ldyBTZXQoZSk7Zm9yKGxldCBlIG9mIEIudmFsdWUpdC5oYXMoZSl8fFYoZSk7Zm9yKGxldCBlIG9mIHQpQi52YWx1ZS5oYXMoZSl8fFYoZSl9fSk7aShBLGU9PntlLnRyaW0oKT09PWBgJiZtZShrKX0pO2Z1bmN0aW9uIFUoZSl7cmV0dXJuIE4udmFsdWU/ZS5tb2RlbHMuZmlsdGVyKHQ9PkwoZS5uYW1lLHQpKTplLm1vZGVsc31sZXQgTWU9e2F0dGVtcHRzRGF5OjAsZmFpbHVyZXNEYXk6MH07ZnVuY3Rpb24gVyhlLHQpe3JldHVybiBlLm1vZGVsUmF0ZXM/Llt0XT8/TWV9ZnVuY3Rpb24gTmUoZSx0KXtsZXQgbj1XKGUsdCk7cmV0dXJuIGplKG4uYXR0ZW1wdHNEYXksbi5mYWlsdXJlc0RheSl9bGV0IFBlPXt9O2Z1bmN0aW9uIEcoZSx0KXtyZXR1cm4gZS5tb2RlbE1ldGE/Llt0XT8/UGV9ZnVuY3Rpb24gRmUoZSl7c3dpdGNoKGUpe2Nhc2Vgb3BlbmA6cmV0dXJuYGRlc3RydWN0aXZlYDtjYXNlYGhhbGYtb3BlbmA6cmV0dXJuYHNlY29uZGFyeWA7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIEsoZSl7bGV0IHQ9X2UoZS5vcGVuVW50aWwpO3JldHVybiB0P2Ake2UuaGVhbHRoU3RhdGV9ICgke3R9KWA6ZS5oZWFsdGhTdGF0ZX1mdW5jdGlvbiBJZShlKXtyZXR1cm4gZT09PWBvcGVuYD9gdGV4dC1kZXN0cnVjdGl2ZWA6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9ZnVuY3Rpb24gcShlKXtyZXR1cm4gZS5sYXRlbmN5Py5zdHJlYW1pbmd9ZnVuY3Rpb24gSihlKXtyZXR1cm4gZS5sYXRlbmN5Py5bYG5vbi1zdHJlYW1pbmdgXX1mdW5jdGlvbiBZKGUpe3JldHVybiBlLmNvdW50PT09dm9pZCAwP2BubyBvYnNlcnZhdGlvbnMgY291bnRlZGA6YCR7ZS5jb3VudH0gJHtlLmNvdW50PT09MT9gb2JzZXJ2YXRpb25gOmBvYnNlcnZhdGlvbnNgfSBvbiB0aGlzIHJlcGxpY2FgfWZ1bmN0aW9uIFgoKXtsZXQgZT1DLnZhbHVlPy5yZXBsaWNhO3JldHVybmBQZXItcmVwbGljYSAoJHtlP2ByZXBsaWNhICR7ZX1gOmB0aGlzIHJlcGxpY2FgfSksIGluLXByb2Nlc3Mgb25seSDigJQgbm90IGEgZmxlZXQtd2lkZSBhdmVyYWdlIGFjcm9zcyB0aGlzIGRlcGxveW1lbnTigJlzIHJlcGxpY2FzLmB9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuYEF2ZXJhZ2UgdGltZSB0byBmaXJzdCBieXRlLCB0aGUgbG9hZC1zZW5zaXRpdmUgcmVhZGluZyBmb3Igc3RyZWFtaW5nIHRyYWZmaWMuICR7WShlKX0uICR7WCgpfWB9ZnVuY3Rpb24gb3QoZSl7cmV0dXJuYEF2ZXJhZ2UgdG90YWwgcmVzcG9uc2UgdGltZSwgaW5jbHVkaW5nIGdlbmVyYXRpb24g4oCUIG5vdCBhIGxvYWQtc2Vuc2l0aXZlIHNpZ25hbCBsaWtlIHN0cmVhbWluZyB0dGZiLCBzaW5jZSB0aGlzIHByb3ZpZGVyIGJ1ZmZlcnMgdGhlIHdob2xlIGNvbXBsZXRpb24gYmVmb3JlIHNlbmRpbmcgYW55dGhpbmcuICR7WShlKX0uICR7WCgpfWB9ZnVuY3Rpb24gWihlKXtyZXR1cm4gZS5wcm92ZW5hbmNlPy5lc3RpbWF0ZWR9ZnVuY3Rpb24gUShlKXtyZXR1cm4gZS5wcm92ZW5hbmNlPy51bmJpbGxlZH1mdW5jdGlvbiBzdChlKXtsZXQgdD1lLnJlcXVlc3RzPT09MT9gYDpgc2A7cmV0dXJuYCR7ZS5yZXF1ZXN0c30gbm9uLXN0cmVhbWluZyByZXNwb25zZSR7dH0gY2FycmllZCBubyB1c2FnZSBmcm9tIHRoZSBwcm92aWRlciDigJQgcHJvbXB0IHRva2VucyB3ZXJlIGVzdGltYXRlZCBmcm9tIHJlcXVlc3QgYm9keSBzaXplIGluc3RlYWQgKCR7ZS50b2tlbnN9IHRva2VucyBiaWxsZWQgZnJvbSB0aGUgZXN0aW1hdGUpLCBjb21wbGV0aW9uIGJpbGxlZCBhcyB6ZXJvLiAke1goKX1gfWZ1bmN0aW9uIGN0KGUpe2xldCB0PWUucmVxdWVzdHM9PT0xP2BgOmBzYDtyZXR1cm5gJHtlLnJlcXVlc3RzfSBzdHJlYW1pbmcgcmVzcG9uc2Uke3R9IGNhcnJpZWQgbm8gdXNhZ2UgZnJvbSB0aGUgcHJvdmlkZXIg4oCUIHRoZSByZXF1ZXN0IHdhcyBjb3VudGVkIGJ1dCB6ZXJvIHRva2VucyB3ZXJlIGJpbGxlZC4gSWYgdGhpcyBrZWVwcyBoYXBwZW5pbmcsIHRoaXMgcHJvdmlkZXIgbWF5IGJlIHNlcnZpbmcgY29tcGxldGlvbnMgZW50aXJlbHkgZnJlZSBhZ2FpbnN0IGV2ZXJ5IGJ1ZGdldC4gJHtYKCl9YH1mdW5jdGlvbiAkKGUpe3JldHVybiBkLnByb3ZpZGVyUGVyZi5maW5kKHQ9PnQuaWQ9PT1lKX1mdW5jdGlvbiBsdChlKXtsZXR7d2luZG93OnQsc3BhbjpufT1kLnBlcmZXaW5kb3c7cmV0dXJuYEZsZWV0LXdpZGUgKGV2ZXJ5IHJlcGxpY2EgY29tYmluZWQpICR7ZT09PWBwNTBgP2BtZWRpYW5gOmA5NXRoIHBlcmNlbnRpbGVgfSByZXNwb25zZSB0aW1lLCBvdmVyIHRoZSBsYXN0ICR7bn0gJHt0fSR7bj09PTE/YGA6YHNgfS5gfWZ1bmN0aW9uIHV0KGUpe2xldHt3aW5kb3c6dCxzcGFuOm59PWQucGVyZldpbmRvdztyZXR1cm5gJHtlPT09YHRpbWVvdXRzYD9gcmVxdWVzdHMgdGhhdCBleGNlZWRlZCB0aGUgZGVhZGxpbmVgOmByZXF1ZXN0cyBmYWlsZWQgYXdheSBmcm9tIHRoaXMgcHJvdmlkZXIgdG8gYW5vdGhlciBjYW5kaWRhdGVgfSwgZmxlZXQtd2lkZSwgb3ZlciB0aGUgbGFzdCAke259ICR7dH0ke249PT0xP2BgOmBzYH0uYH1sZXQgZHQ9W3tpZDpgYWxpYXNgLGhlYWRlcjpgQWxpYXNgLGFjY2Vzc29yRm46ZT0+ZS5hbGlhcyxjZWxsOih7cm93OnR9KT0+ZShFLHtpZDp0Lm9yaWdpbmFsLmFsaWFzLGNvbnRleHRUb2tlbnM6dC5vcmlnaW5hbC5tb2RlbE1ldGE/LmNvbnRleHRUb2tlbnMsaW5wdXRQZXJNVG9rVXNkOnQub3JpZ2luYWwubW9kZWxNZXRhPy5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDp0Lm9yaWdpbmFsLm1vZGVsTWV0YT8ub3V0cHV0UGVyTVRva1VzZH0pfSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+ZS50YXJnZXQsY2VsbDooe3Jvdzp0fSk9PmUoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sdC5vcmlnaW5hbC50YXJnZXQpfV0sZnQ9XygoKT0+Qy52YWx1ZT8uYWxpYXNlcy5sZW5ndGg/Ti52YWx1ZT9gbm8gYWxpYXNlcyBtYXRjaCAiJHtBLnZhbHVlfSJgOmBub25lYDpgbm9uZSBjb25maWd1cmVkYCk7cmV0dXJuKGUsaSk9PntsZXQgYT10ZShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIG0oKSx5KGBkaXZgLHplLFt2KGBkaXZgLEJlLFtsKGIodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbChiKHMpLG51bGwse2RlZmF1bHQ6cigoKT0+W2woYih4KSx7Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6cigoKT0+W2woYSx7aWNvbjpDLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2IoZyk6Yih1KSxjbGFzczp3KFtDLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2B0ZXh0LWNoYXJ0LXJlcXVlc3RzYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCxgc2l6ZS0zLjVgXSksImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gLGBjbGFzc2BdKSxpWzJdfHw9cChgIFJlZGlzIGAsLTEpXSksXzoxfSldKSxfOjF9KSxsKGIobikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xIHRleHQtc21gfSx7ZGVmYXVsdDpyKCgpPT5bdihgcGAsVmUsUyhDLnZhbHVlPy5yZWRpcy5jb25maWd1cmVkP2BDb25maWd1cmVkYDpgTm90IGNvbmZpZ3VyZWRgKSwxKSxDLnZhbHVlPy5yZWRpcy5sYXN0RXJyPyhtKCkseShgcGAsSGUsW2woYSx7aWNvbjpiKHJlKSxjbGFzczpgbXQtMC41IHNpemUtMy41IHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSx2KGBzcGFuYCxudWxsLFMoQy52YWx1ZS5yZWRpcy5sYXN0RXJyKStTKGIoYmUpKEMudmFsdWUucmVkaXMubGFzdEVyckF0KSksMSldKSk6aChgYCwhMCldKSxfOjF9KV0pLF86MX0pLGwoYih0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKGIocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbChiKHgpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx7ZGVmYXVsdDpyKCgpPT5bbChhLHtpY29uOkMudmFsdWU/LmNhY2hlLmVuYWJsZWQ/YihnKTpiKHUpLGNsYXNzOncoW0MudmFsdWU/LmNhY2hlLmVuYWJsZWQ/YHRleHQtY2hhcnQtcmVxdWVzdHNgOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgLGBzaXplLTMuNWBdKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLGlbM118fD1wKGAgUmVzcG9uc2UgY2FjaGUgYCwtMSldKSxfOjF9KV0pLF86MX0pLGwoYihuKSx7Y2xhc3M6YHRleHQtc21gfSx7ZGVmYXVsdDpyKCgpPT5bdihgcGAsVWUsUyhDLnZhbHVlPy5jYWNoZS5lbmFibGVkP2BFbmFibGVkYDpgRGlzYWJsZWRgKSwxKSxDLnZhbHVlPy5jYWNoZS5lbmFibGVkPyhtKCkseShgcGAsV2UsYHR0bCBgK1MoQy52YWx1ZS5jYWNoZS50dGwpLDEpKTpoKGBgLCEwKV0pLF86MX0pXSksXzoxfSksbChiKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2woYihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKGIoeCkse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0OnIoKCk9PltsKGEse2ljb246Qy52YWx1ZT8ucmV0cnkuZW5hYmxlZD9iKGcpOmIodSksY2xhc3M6dyhbQy52YWx1ZT8ucmV0cnkuZW5hYmxlZD9gdGV4dC1jaGFydC1yZXF1ZXN0c2A6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsYHNpemUtMy41YF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksaVs0XXx8PXAoYCBSZXRyeSBgLC0xKV0pLF86MX0pXSksXzoxfSksbChiKG4pLHtjbGFzczpgdGV4dC1zbWB9LHtkZWZhdWx0OnIoKCk9Plt2KGBwYCxHZSxTKEMudmFsdWU/LnJldHJ5LmVuYWJsZWQ/YEVuYWJsZWRgOmBEaXNhYmxlZGApLDEpLEMudmFsdWU/LnJldHJ5LmVuYWJsZWQ/KG0oKSx5KGBwYCxLZSxgIGF0dGVtcHRzIGArUyhDLnZhbHVlLnJldHJ5LmF0dGVtcHRzKStgLCBiYWNrb2ZmIGArUyhDLnZhbHVlLnJldHJ5LmJhY2tvZmYpLDEpKTpoKGBgLCEwKV0pLF86MX0pXSksXzoxfSldKSxsKGIodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbChiKHMpLG51bGwse2RlZmF1bHQ6cigoKT0+W2woYih4KSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzVdfHw9W3AoYFByb3ZpZGVyc2AsLTEpXV0pLF86MX0pLGwoYihPKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzZdfHw9W3AoYCBFdmVyeSBjb25maWd1cmVkIHVwc3RyZWFtLCBpdHMgbGFzdCBkaXNjb3ZlcnkgcmVmcmVzaCwgYW5kIGZsZWV0LXdpZGUgcGVyZm9ybWFuY2UuIFNlYXJjaCBmaWx0ZXJzIHByb3ZpZGVycyBhbmQgYWxpYXNlcyBieSBtb2RlbCBpZC4gYCwtMSldXSksXzoxfSksbChUZSx7bW9kZWxWYWx1ZTpiKEEpLCJvblVwZGF0ZTptb2RlbFZhbHVlIjppWzBdfHw9ZT0+ZWUoQSk/QS52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YFNlYXJjaCBtb2RlbHMgb3IgYWxpYXNlcy4uLmAsY2xhc3M6YG10LTIgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSksXzoxfSksbChiKG4pLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LHtkZWZhdWx0OnIoKCk9PltiKGQpLmxhdGVuY3lFbmFibGVkP2goYGAsITApOihtKCksZihPZSx7a2V5OjAsdGl0bGU6YExhdGVuY3kgc3RhdGlzdGljcyBhcmUgb2ZmYCwiY29uZmlnLWtleSI6YGFkbWluLnN0YXRzLmxhdGVuY3lgLHB1cnBvc2U6YHRvIHNlZSBmbGVldCBwNTAvcDk1LmB9KSksUi52YWx1ZT09PWBza2VsZXRvbmA/KG0oKSxmKHZlLHtrZXk6MSxyb3dzOjN9KSk6Ui52YWx1ZT09PWBlcnJvcmA/KG0oKSxmKGhlLHtrZXk6MixtZXNzYWdlOmIobykuZXJyb3IsIm9uLXJldHJ5IjpiKG8pLnJlZnJlc2h9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6Qy52YWx1ZT8ucHJvdmlkZXJzLmxlbmd0aD9iKE4pJiZ6LnZhbHVlLmxlbmd0aD09PTA/KG0oKSxmKE0se2tleTo0LHRpdGxlOmBObyBtYXRjaGVzLmAsZGVzY3JpcHRpb246YE5vIHByb3ZpZGVycyBtYXRjaCAiJHtiKEEpfSIuYH0sbnVsbCw4LFtgZGVzY3JpcHRpb25gXSkpOihtKCkseShjLHtrZXk6NX0sW3YoYHBgLHFlLFMoWCgpKStgIEZsZWV0IHA1MC9wOTUvdGltZW91dHMvZmFpbG92ZXJzIGJlbG93IGFyZSBmbGVldC13aWRlLCBub3QgcGVyLXJlcGxpY2EuYCwxKSxsKGIocGUpLHttb2RlbFZhbHVlOkgudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmlbMV18fD1lPT5ILnZhbHVlPWUsdHlwZTpgbXVsdGlwbGVgLGNsYXNzOmByb3VuZGVkLW1kIGJvcmRlciBweC0zYH0se2RlZmF1bHQ6cigoKT0+WyhtKCEwKSx5KGMsbnVsbCxvZSh6LnZhbHVlLGU9PihtKCksZihiKGNlKSx7a2V5OmUubmFtZSx2YWx1ZTplLm5hbWV9LHtkZWZhdWx0OnIoKCk9Plt2KGBkaXZgLEplLFt2KGBidXR0b25gLHt0eXBlOmBidXR0b25gLGNsYXNzOmBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciByb3VuZGVkLXNtIHB5LTIuNSBmb250LW1lZGl1bSBob3Zlcjp0ZXh0LXByaW1hcnkgaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwYCwiYXJpYS1sYWJlbCI6YFZpZXcgJHtlLm5hbWV9J3MgbW9kZWxzIGluIHRoZSBNb2RlbHMgdGFibGVgLHRpdGxlOmBWaWV3ICR7ZS5uYW1lfSdzIG1vZGVscyBpbiB0aGUgTW9kZWxzIHRhYmxlYCxvbkNsaWNrOnQ9PnNlKGUubmFtZSl9LFMoZS5uYW1lKSw5LFllKSxsKGIobGUpLHsiaGVhZGVyLWNsYXNzIjpgZmxleC0xYH0se2RlZmF1bHQ6cigoKT0+W3YoYHNwYW5gLFhlLGBQcm92aWRlciBgK1MoZS5uYW1lKStgIGRldGFpbHNgLDEpLHYoYHNwYW5gLFplLFtsKGIoUCkse2FzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbGB9LHtkZWZhdWx0OnIoKCk9PltwKFMoZS50eXBlKSwxKV0pLF86Mn0sMTAyNCksdihgc3BhbmAsUWUsUyhlLm1vZGVsQ291bnQpK2AgbW9kZWxzYCwxKSxsKExlLHsiYXR0ZW1wdHMtZGF5IjplLmF0dGVtcHRzRGF5LCJmYWlsdXJlcy1kYXkiOmUuZmFpbHVyZXNEYXksImF0dGVtcHRzLW1pbnV0ZSI6ZS5hdHRlbXB0c01pbnV0ZSwiZmFpbHVyZXMtbWludXRlIjplLmZhaWx1cmVzTWludXRlfSxudWxsLDgsW2BhdHRlbXB0cy1kYXlgLGBmYWlsdXJlcy1kYXlgLGBhdHRlbXB0cy1taW51dGVgLGBmYWlsdXJlcy1taW51dGVgXSksZS5oZWFsdGhTdGF0ZT09PWBjbG9zZWRgP2goYGAsITApOihtKCksZihiKFApLHtrZXk6MCxhczpgc3BhbmAsdmFyaWFudDpGZShlLmhlYWx0aFN0YXRlKSxjbGFzczpgZm9udC1ub3JtYWxgLHRpdGxlOmUuaGVhbHRoU3RhdGU9PT1gb3BlbmA/YGRpc2NvdmVyeSBpcyBiYWNraW5nIG9mZiBhZnRlciByZXBlYXRlZCBmYWlsdXJlc2A6YGEgZGlzY292ZXJ5IHByb2JlIGlzIGRlY2lkaW5nIHdoZXRoZXIgdG8gcmVjb3ZlcmB9LHtkZWZhdWx0OnIoKCk9PltwKFMoSyhlKSksMSldKSxfOjJ9LDEwMzIsW2B2YXJpYW50YCxgdGl0bGVgXSkpLHEoZSk/LmF2Z1R0ZmJNcz09PXZvaWQgMD9oKGBgLCEwKToobSgpLGYoYihQKSx7a2V5OjEsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOmF0KHEoZSkpfSx7ZGVmYXVsdDpyKCgpPT5bcChgIHN0cmVhbWluZyB0dGZiIGArUyhiKEYpKHEoZSkuYXZnVHRmYk1zKSksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSksSihlKT8uYXZnRHVyYXRpb25Ncz09PXZvaWQgMD9oKGBgLCEwKToobSgpLGYoYihQKSx7a2V5OjIsYXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOm90KEooZSkpfSx7ZGVmYXVsdDpyKCgpPT5bcChgIG5vbi1zdHJlYW1pbmcgYXZnIGArUyhiKEYpKEooZSkuYXZnRHVyYXRpb25NcykpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpLCQoZS5uYW1lKT8ucDUwTXM9PT12b2lkIDA/aChgYCwhMCk6KG0oKSxmKGIoUCkse2tleTozLGFzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTpsdChgcDUwYCl9LHtkZWZhdWx0OnIoKCk9PltwKGAgZmxlZXQgcDUwIGArUyhiKEYpKCQoZS5uYW1lKS5wNTBNcykpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpLCQoZS5uYW1lKT8ucDk1TXM9PT12b2lkIDA/aChgYCwhMCk6KG0oKSxmKGIoUCkse2tleTo0LGFzOmBzcGFuYCx2YXJpYW50OmBvdXRsaW5lYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTpsdChgcDk1YCl9LHtkZWZhdWx0OnIoKCk9PltwKGAgZmxlZXQgcDk1IGArUyhiKEYpKCQoZS5uYW1lKS5wOTVNcykpLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpLCgkKGUubmFtZSk/LnRpbWVvdXRzPz8wKT4wPyhtKCksZihiKFApLHtrZXk6NSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTp1dChgdGltZW91dHNgKX0se2RlZmF1bHQ6cigoKT0+W3AoUygkKGUubmFtZSkudGltZW91dHMpK2AgdGltZW91dHMgYCwxKV0pLF86Mn0sMTAzMixbYHRpdGxlYF0pKTpoKGBgLCEwKSwoJChlLm5hbWUpPy5mYWlsb3ZlcnM/PzApPjA/KG0oKSxmKGIoUCkse2tleTo2LGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOnV0KGBmYWlsb3ZlcnNgKX0se2RlZmF1bHQ6cigoKT0+W3AoUygkKGUubmFtZSkuZmFpbG92ZXJzKStgIGZhaWxvdmVycyBgLDEpXSksXzoyfSwxMDMyLFtgdGl0bGVgXSkpOmgoYGAsITApLFooZSk/KG0oKSxmKGIoUCkse2tleTo3LGFzOmBzcGFuYCx2YXJpYW50OmBzZWNvbmRhcnlgLGNsYXNzOmBmb250LW5vcm1hbCB0YWJ1bGFyLW51bXNgLHRpdGxlOnN0KFooZSkpfSx7ZGVmYXVsdDpyKCgpPT5bcChgIGVzdGltYXRlZCBgK1MoWihlKS5yZXF1ZXN0cyksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSk6aChgYCwhMCksUShlKT8obSgpLGYoYihQKSx7a2V5OjgsYXM6YHNwYW5gLHZhcmlhbnQ6YGRlc3RydWN0aXZlYCxjbGFzczpgZm9udC1ub3JtYWwgdGFidWxhci1udW1zYCx0aXRsZTpjdChRKGUpKX0se2RlZmF1bHQ6cigoKT0+W3AoYCB1bmJpbGxlZCBgK1MoUShlKS5yZXF1ZXN0cyksMSldKSxfOjJ9LDEwMzIsW2B0aXRsZWBdKSk6aChgYCwhMCksZS5sYXN0RXJyPyhtKCksZihhLHtrZXk6OSxpY29uOmIocmUpLGNsYXNzOmBzaXplLTMuNSBzaHJpbmstMCB0ZXh0LWRlc3RydWN0aXZlYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSk6aChgYCwhMCksdihgc3BhbmAsJGUsUyhiKHhlKShlLmRpc2NvdmVyeUVuYWJsZWQsZS5sYXN0UmVmcmVzaCkpLDEpXSldKSxfOjJ9LDEwMjQpXSksbChiKGRlKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt2KGBkbGAsZXQsW2woRCx7bGFiZWw6YEJhc2UgVVJMYCxjbGFzczpgYnJlYWstYWxsYH0se2RlZmF1bHQ6cigoKT0+W3AoUyhlLmJhc2VVcmwpLDEpXSksXzoyfSwxMDI0KSxsKEQse2xhYmVsOmBMYXN0IHJlZnJlc2hgfSx7ZGVmYXVsdDpyKCgpPT5bcChTKGIoZ2UpKGUuZGlzY292ZXJ5RW5hYmxlZCxlLmxhc3RSZWZyZXNoKSksMSldKSxfOjJ9LDEwMjQpLGUuaGVhbHRoU3RhdGU9PT1gY2xvc2VkYD9oKGBgLCEwKToobSgpLGYoRCx7a2V5OjAsbGFiZWw6YERpc2NvdmVyeSBoZWFsdGhgLGNsYXNzOncoSWUoZS5oZWFsdGhTdGF0ZSkpfSx7ZGVmYXVsdDpyKCgpPT5bcChTKEsoZSkpLDEpXSksXzoyfSwxMDMyLFtgY2xhc3NgXSkpLGUubGFzdEVycj8obSgpLGYoRCx7a2V5OjEsbGFiZWw6YExhc3QgZXJyb3JgLGNsYXNzOmB0ZXh0LWRlc3RydWN0aXZlYH0se2RlZmF1bHQ6cigoKT0+W3AoUyhlLmxhc3RFcnIpLDEpXSksXzoyfSwxMDI0KSk6aChgYCwhMCldKSxVKGUpLmxlbmd0aD8obSgpLHkoYGRpdmAsdHQsWyhtKCEwKSx5KGMsbnVsbCxvZShVKGUpLHQ9PihtKCkseShgc3BhbmAse2tleTp0LGNsYXNzOmBpbmxpbmUtZmxleCBtaW4tdy0wIG1heC13LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0xYH0sW2woRSx7aWQ6YihJKShlLm5hbWUsdCksImNvbnRleHQtdG9rZW5zIjpHKGUsdCkuY29udGV4dFRva2VucywiaW5wdXQtcGVyLW0tdG9rLXVzZCI6RyhlLHQpLmlucHV0UGVyTVRva1VzZCwib3V0cHV0LXBlci1tLXRvay11c2QiOkcoZSx0KS5vdXRwdXRQZXJNVG9rVXNkfSxudWxsLDgsW2BpZGAsYGNvbnRleHQtdG9rZW5zYCxgaW5wdXQtcGVyLW0tdG9rLXVzZGAsYG91dHB1dC1wZXItbS10b2stdXNkYF0pLGwoRGUse2xhYmVsOmIoSSkoZS5uYW1lLHQpLGtpbmQ6YG1vZGVsYCxpZDpiKEkpKGUubmFtZSx0KSxjbGFzczpgbWluLXctMGAsImxhYmVsLWNsYXNzIjpgdHJ1bmNhdGVgfSxudWxsLDgsW2BsYWJlbGAsYGlkYF0pLEcoZSx0KS5jb250ZXh0VG9rZW5zPT09dm9pZCAwP2goYGAsITApOihtKCkseShgc3BhbmAsbnQsUyhiKHllKShHKGUsdCkuY29udGV4dFRva2VucykpLDEpKSxOZShlLHQpPyhtKCksZihMZSx7a2V5OjEsImF0dGVtcHRzLWRheSI6VyhlLHQpLmF0dGVtcHRzRGF5LCJmYWlsdXJlcy1kYXkiOlcoZSx0KS5mYWlsdXJlc0RheX0sbnVsbCw4LFtgYXR0ZW1wdHMtZGF5YCxgZmFpbHVyZXMtZGF5YF0pKTpoKGBgLCEwKV0pKSksMTI4KSldKSk6KG0oKSx5KGBwYCxydCxgbm8gbW9kZWxzIGtub3duIHlldGApKV0pLF86Mn0sMTAyNCldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSw4LFtgbW9kZWxWYWx1ZWBdKV0sNjQpKToobSgpLGYoTSx7a2V5OjMsdGl0bGU6YE5vIHByb3ZpZGVycyBjb25maWd1cmVkLmB9KSldKSxfOjF9KV0pLF86MX0pLGwoYih0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKGIocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbChiKHgpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbN118fD1bcChgTW9kZWwgYWxpYXNlc2AsLTEpXV0pLF86MX0pLGwoYihPKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzhdfHw9W3AoYE9wZXJhdG9yLWRlZmluZWQgYWxpYXMg4oaSIHRhcmdldCBtb2RlbCBtYXBwaW5ncy5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLGwoYihuKSxudWxsLHtkZWZhdWx0OnIoKCk9PltsKENlLHtjb2x1bW5zOmR0LGRhdGE6QWUudmFsdWUsImVtcHR5LW1lc3NhZ2UiOmZ0LnZhbHVlfSxudWxsLDgsW2BkYXRhYCxgZW1wdHktbWVzc2FnZWBdKV0pLF86MX0pXSksXzoxfSksQy52YWx1ZT8udmVyc2lvbj8obSgpLHkoYHBgLGl0LGBWZXJzaW9uOiBgK1MoQy52YWx1ZS52ZXJzaW9uKSwxKSk6aChgYCwhMCldKX19fSksWD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxhdD17a2V5OjAsY2xhc3M6YHRleHQtc20gYnJlYWstd29yZHMgdGV4dC1kZXN0cnVjdGl2ZWB9LG90PVQoe19fbmFtZTpgTW9kZWxzUGFnZWAsc2V0dXAoZSl7bGV0IHQ9aygpLG49UmUoKSxyPWllKCksbz1fKHtnZXQ6KCk9PnIucGFyYW1zLnE/P3IucGFyYW1zLm1vZGVsPz9gYCxzZXQ6ZT0+e2xldHttb2RlbDp0LC4uLm59PXIucGFyYW1zO3IuZ29UbyhgbW9kZWxzYCx7Li4ubixxOmV9KX19KTtyZXR1cm4gYSgoKT0+dm9pZCBuLmZldGNoKCkpLGkoKCk9PnQucmFuZ2UsKCk9PnZvaWQgbi5mZXRjaCgpKSwoZSx0KT0+KG0oKSx5KGBkaXZgLFgsW2woWSksYihuKS5lcnJvciYmYihuKS5yb3dzLmxlbmd0aD4wPyhtKCkseShgcGAsYXQsUyhiKG4pLmVycm9yKSwxKSk6aChgYCwhMCksbChJZSx7cm93czpiKG4pLnJvd3MscXVlcnk6by52YWx1ZSwibGF0ZW5jeS1lbmFibGVkIjpiKG4pLmxhdGVuY3lFbmFibGVkLGxvYWRpbmc6YihuKS5sb2FkaW5nLGVycm9yOmIobikuZXJyb3IsIm9uLXJldHJ5IjpiKG4pLmZldGNoLCJvblVwZGF0ZTpxdWVyeSI6dFswXXx8PWU9Pm8udmFsdWU9ZX0sbnVsbCw4LFtgcm93c2AsYHF1ZXJ5YCxgbGF0ZW5jeS1lbmFibGVkYCxgbG9hZGluZ2AsYGVycm9yYCxgb24tcmV0cnlgXSldKSl9fSk7ZXhwb3J0e290IGFzIGRlZmF1bHR9Ow==", ), }, - "ReliabilityPage-6-bz5x6z.js": { + "ReliabilityPage-D-sOLtWZ.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEUgYXMgbixGciBhcyByLEp0IGFzIGksT24gYXMgYSxRciBhcyBvLFMgYXMgcyxTaSBhcyBjLFQgYXMgbCxYbiBhcyB1LF9uIGFzIGQsYW4gYXMgZixjbiBhcyBwLGNyIGFzIG0sZXIgYXMgaCxldCBhcyBnLGcgYXMgXyxnaSBhcyB2LGhuIGFzIHksaW4gYXMgYixtbiBhcyB4LG10IGFzIFMsbiBhcyBDLG5yIGFzIHcsb24gYXMgVCxzbiBhcyBFLHVyIGFzIEQsdnQgYXMgZWUsdyBhcyBPfWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e2EgYXMgdGUsYyBhcyBrLGcgYXMgQSxoIGFzIGosaSBhcyBNLG0gYXMgbmUsbiBhcyByZSxvIGFzIGllLHIgYXMgYWUsdCBhcyBOfWZyb20iLi9pbmRleC1keXdTOE9wVC5qcyI7aW1wb3J0e3QgYXMgUH1mcm9tIi4vRXJyb3JTdGF0ZS15bTZlU2xqMi5qcyI7aW1wb3J0e18gYXMgRixmIGFzIEksciBhcyBMLHQgYXMgUix2IGFzIG9lfWZyb20iLi9iYWRnZS1EVWlCVER5QS5qcyI7aW1wb3J0e28gYXMgeix0IGFzIHNlfWZyb20iLi9EYXRhVGFibGUtQ1F4UlZEU1kuanMiO2ltcG9ydHtuIGFzIGNlLHQgYXMgQn1mcm9tIi4vdXNlU2VhcmNoUXVlcnktYlFaUDRUc1ouanMiO2ltcG9ydHt0IGFzIFZ9ZnJvbSIuL1NrZWxldG9uTGlzdC1DbXF6M2hmYS5qcyI7aW1wb3J0e24gYXMgSCx0IGFzIFV9ZnJvbSIuL1RpbWVTZXJpZXNDaGFydC1CRmNUNndvQS5qcyI7aW1wb3J0e3QgYXMgV31mcm9tIi4vZXZlbnRzLVBVeGhFZWdhLmpzIjtpbXBvcnR7aSBhcyBHLG4gYXMgSyxyIGFzIGxlLHQgYXMgdWV9ZnJvbSIuL2V2ZW50cy1maWx0ZXItWEZuaklhUjcuanMiO2ltcG9ydHtuIGFzIGRlfWZyb20iLi9wcm92aWRlci1yYXRlLURVN09nU2VCLmpzIjtpbXBvcnR7biBhcyBmZSxyIGFzIHBlfWZyb20iLi9yZWxpYWJpbGl0eS1DRklrUnhWVi5qcyI7ZnVuY3Rpb24gcShlKXtyZXR1cm4gS1tlXT8/ZX1mdW5jdGlvbiBtZShlKXtyZXR1cm4gZS51c2VyP2B1c2VyOiR7ZS51c2VyfWA6ZS5ncm91cD9gZ3JvdXA6JHtlLmdyb3VwfWA6YOKAlGB9ZnVuY3Rpb24gSihlKXtsZXQgdD1bZS5tb2RlbCxlLnByb3ZpZGVyXS5maWx0ZXIoZT0+ISFlKTtyZXR1cm4gdC5sZW5ndGg/dC5qb2luKGAg4oaSIGApOmDigJRgfWZ1bmN0aW9uIGhlKCl7cmV0dXJuW3tpZDpgdGltZWAsaGVhZGVyOmBUaW1lYCxhY2Nlc3NvckZuOmU9PmUudGltZSxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sSShlLm9yaWdpbmFsLnRpbWUpKX0se2lkOmBraW5kYCxoZWFkZXI6YEtpbmRgLGFjY2Vzc29yRm46ZT0+ZS5raW5kLGNlbGw6KHtyb3c6ZX0pPT5hKFIse2FzOmBzcGFuYCx2YXJpYW50OmxlKGUub3JpZ2luYWwua2luZCksY2xhc3M6YGZvbnQtbm9ybWFsYH0sKCk9PnEoZS5vcmlnaW5hbC5raW5kKSl9LHtpZDpgcm91dGVgLGhlYWRlcjpgUm91dGVgLGFjY2Vzc29yRm46ZT0+ZS5yb3V0ZSxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LGUub3JpZ2luYWwucm91dGUpfSx7aWQ6YHNjb3BlYCxoZWFkZXI6YFVzZXIgLyBncm91cGAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmUudXNlcj8/ZS5ncm91cD8/YGAsY2VsbDooe3JvdzplfSk9PntsZXQgdD1tZShlLm9yaWdpbmFsKTtyZXR1cm4gYShgc3BhbmAse2NsYXNzOnQ9PT1g4oCUYD9gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYDp2b2lkIDB9LHQpfX0se2lkOmB0YXJnZXRgLGhlYWRlcjpgTW9kZWwgLyBwcm92aWRlcmAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmAke2UubW9kZWw/P2BgfSAke2UucHJvdmlkZXI/P2BgfWAsY2VsbDooe3JvdzplfSk9PntsZXQgdD1KKGUub3JpZ2luYWwpO3JldHVybiBhKGBzcGFuYCx7Y2xhc3M6dD09PWDigJRgP2B0ZXh0LW11dGVkLWZvcmVncm91bmRgOmBmb250LW1vbm8gdGV4dC14c2B9LHQpfX0se2lkOmByZXBsaWNhYCxoZWFkZXI6YFJlcGxpY2FgLGFjY2Vzc29yRm46ZT0+ZS5yZXBsaWNhLGNlbGw6KHtyb3c6ZX0pPT5hKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGUub3JpZ2luYWwucmVwbGljYSl9LHtpZDpgc3RhdHVzYCxoZWFkZXI6YFN0YXR1c2AsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5lLnN0YXR1cz8/MCxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxlLm9yaWdpbmFsLnN0YXR1cz09PXZvaWQgMD9g4oCUYDpTdHJpbmcoZS5vcmlnaW5hbC5zdGF0dXMpKX0se2lkOmBtZXNzYWdlYCxoZWFkZXI6YE1lc3NhZ2VgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLm1lc3NhZ2UsY2VsbDooe3JvdzplfSk9PmEoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sZS5vcmlnaW5hbC5tZXNzYWdlKX1dfXZhciBZPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LFg9e2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTNgfSxaPWBhbGxgLGdlPWQoe19fbmFtZTpgRXZlbnRzVmlld2Asc2V0dXAoZSl7bGV0IG49VygpLHtraW5kRmlsdGVyOmEsdXNlckZpbHRlcjpkfT1lZShuKSx7bm9ybWFsaXplZDpffT1CKGQpLEM9YigoKT0+YS52YWx1ZT09PWBgP1o6YS52YWx1ZSksTj1iKCgpPT5HKG4uZXZlbnRzLHtraW5kOmEudmFsdWUsdXNlcjpfLnZhbHVlfSkpO2Z1bmN0aW9uIEkoZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZuLnNldEtpbmRGaWx0ZXIoZT09PVo/YGA6ZSl9bGV0IEw9aGUoKSxSPWIoKCk9PkYoe2xvYWRpbmc6bi5yZWZyZXNoaW5nLGhhc0RhdGE6bi5sYXN0VXBkYXRlZCE9PW51bGwsZXJyb3I6bi5lcnJvcn0pKSxWPWIoKCk9Pm4uZXZlbnRzLmxlbmd0aD09PTApLEg9YigoKT0+YS52YWx1ZSE9PWBgfHxfLnZhbHVlP2BubyBldmVudHMgbWF0Y2ggdGhlIGN1cnJlbnQgZmlsdGVyYDpgbm9uZWApLFU9YigoKT0+bi5zb3VyY2U9PT1gcmVkaXNgP2BGbGVldC13aWRlLCBhY3Jvc3MgZXZlcnkgcmVwbGljYWA6YFRoaXMgcmVwbGljYSBvbmx5ICgke24ucmVwbGljYXx8YHVua25vd25gfSkg4oCUIFJlZGlzIGlzIHVucmVhY2hhYmxlIG9yIHVuY29uZmlndXJlZGApO3JldHVybiB1KCgpPT57bi5zdGFydFBvbGxpbmcoKX0pLGgoKCk9PntuLnN0b3BQb2xsaW5nKCl9KSwoZSxhKT0+e2xldCB1PUQoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiB3KCkscChgZGl2YCxZLFt2KG4pLmRlZ3JhZGVkPyh3KCksVCh2KEEpLHtrZXk6MCx2YXJpYW50OmBkZXN0cnVjdGl2ZWB9LHtkZWZhdWx0OnIoKCk9Plt5KHUse2ljb246dihTKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSx5KHYobmUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMV18fD1beChgRmxlZXQtd2lkZSBldmVudCBsb2cgdW5hdmFpbGFibGVgLC0xKV1dKSxfOjF9KSx5KHYoaiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsyXXx8PVt4KGAgUmVkaXMgaXMgY29uZmlndXJlZCBidXQgY291bGQgbm90IGJlIHJlYWQg4oCUIHNob3dpbmcgdGhpcyByZXBsaWNhJ3Mgb3duIGluLW1lbW9yeSBldmVudHMgb25seSwgd2hpY2ggbWF5IG1pc3MgZXZlbnRzIHJlY29yZGVkIGJ5IG90aGVyIHJlcGxpY2FzLiBgLC0xKV1dKSxfOjF9KV0pLF86MX0pKTpFKGBgLCEwKSx5KHYobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIgc206anVzdGlmeS1iZXR3ZWVuYH0se2RlZmF1bHQ6cigoKT0+W2YoYGRpdmAsbnVsbCxbeSh2KHMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbM118fD1beChgRXZlbnRzYCwtMSldXSksXzoxfSksUi52YWx1ZT09PWByZWFkeWA/KHcoKSxUKHYoaykse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5beChjKFUudmFsdWUpK2Ag4oCUIHJhdGUgbGltaXQsIGJ1ZGdldCwgYW5kIHVwc3RyZWFtIGV2ZW50cywgbmV3ZXN0IGZpcnN0IChjYXBhY2l0eSBgK2ModihuKS5jYXBhY2l0eSkrYCkuIGAsMSldKSxfOjF9KSk6RShgYCwhMCldKSxmKGBkaXZgLFgsW3koY2Use21vZGVsVmFsdWU6dihkKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6YVswXXx8PWU9Pm8oZCk/ZC52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBieSB1c2VyIG9yIGdyb3VwYCxjbGFzczpgdy01NmB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSkseSh2KGllKSx7Im1vZGVsLXZhbHVlIjpDLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpJfSx7ZGVmYXVsdDpyKCgpPT5beSh2KGFlKSx7Y2xhc3M6YHctNDRgLCJhcmlhLWxhYmVsIjpgRmlsdGVyIGJ5IGtpbmRgfSx7ZGVmYXVsdDpyKCgpPT5beSh2KHJlKSx7cGxhY2Vob2xkZXI6YEtpbmRgfSldKSxfOjF9KSx5KHYodGUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihNKSx7dmFsdWU6Wn0se2RlZmF1bHQ6cigoKT0+Wy4uLmFbNF18fD1beChgQWxsIGtpbmRzYCwtMSldXSksXzoxfSksKHcoITApLHAoaSxudWxsLG0odih1ZSksZT0+KHcoKSxUKHYoTSkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9Plt4KGModihLKVtlXSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSksXzoxfSkseSh2KE8pLG51bGwse2RlZmF1bHQ6cigoKT0+W1IudmFsdWU9PT1gc2tlbGV0b25gPyh3KCksVCh6LHtrZXk6MCxyb3dzOjUsY29sczp2KEwpLmxlbmd0aH0sbnVsbCw4LFtgY29sc2BdKSk6Ui52YWx1ZT09PWBlcnJvcmA/KHcoKSxUKFAse2tleToxLG1lc3NhZ2U6dihuKS5lcnJvciwib24tcmV0cnkiOnYobikucmVmcmVzaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTpWLnZhbHVlPyh3KCksVChvZSx7a2V5OjIsaWNvbjp2KGcpLHRpdGxlOmBObyBmYWlsdXJlcyByZWNvcmRlZC5gLGRlc2NyaXB0aW9uOmBSYXRlLWxpbWl0LCBidWRnZXQsIGFuZCB1cHN0cmVhbSBldmVudHMgd2lsbCBzaG93IHVwIGhlcmUgYXMgdGhleSBoYXBwZW4uYH0sbnVsbCw4LFtgaWNvbmBdKSk6KHcoKSxUKHNlLHtrZXk6Myxjb2x1bW5zOnYoTCksZGF0YTpOLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpILnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSkpXSksXzoxfSldKSxfOjF9KV0pfX19KSxfZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSx2ZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSx5ZT17a2V5OjIsY2xhc3M6YHRleHQtc20gYnJlYWstd29yZHMgdGV4dC1kZXN0cnVjdGl2ZWB9LGJlPXtrZXk6MyxjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSx4ZT17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sU2U9e2tleToyLGNsYXNzOmBncmlkIGdhcC02IGxnOmdyaWQtY29scy0yYH0sQ2U9e2NsYXNzOmBncmlkIGdhcC02IGxnOmdyaWQtY29scy0yYH0sUT1gYWxsYCx3ZT1kKHtfX25hbWU6YFJlbGlhYmlsaXR5UGFnZWAsc2V0dXAoYSl7bGV0IG89XygpLGQ9VygpLGg9TigpLGc9QygpLFM9cGUoKSxEPWIoKCk9PmcucGFyYW1zLnByb3ZpZGVyPz9gYCksZWU9YigoKT0+RC52YWx1ZXx8USk7ZnVuY3Rpb24gSShlKXt0eXBlb2YgZT09YHN0cmluZ2AmJmcuZ29UbyhgcmVsaWFiaWxpdHlgLHsuLi5nLnBhcmFtcyxwcm92aWRlcjplPT09UT9gYDplfSl9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZS5yZXBsYWNlKC9ecHJvdmlkZXI6LyxgYCl9ZnVuY3Rpb24geihlKXtyZXR1cm4gRC52YWx1ZT9lLmZpbHRlcihlPT5SKGUuc2NvcGUpPT09RC52YWx1ZSk6ZX1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZS5tYXAoZT0+ZT09PW51bGw/TmFOOmUpfWxldCBjZT1iKCgpPT56KFMuZXJyb3JSYXRlKS5tYXAoKGUsdCk9Pih7bGFiZWw6UihlLnNjb3BlKSxkYXRhOnNlKGUucG9pbnRzKSxjb2xvcjpmZSh0KX0pKSk7ZnVuY3Rpb24gQihlKXtyZXR1cm4geihlKS5tYXAoKGUsdCk9Pih7bGFiZWw6UihlLnNjb3BlKSxkYXRhOmUucG9pbnRzLGNvbG9yOmZlKHQpfSkpfWxldCBHPWIoKCk9PkIoUy50aW1lb3V0cykpLEs9YigoKT0+QihTLmZhaWxvdmVycykpLGxlPWIoKCk9Plt7bGFiZWw6YDQyOSByZWplY3Rpb25zYCxkYXRhOlMucmVqZWN0aW9ucyxjb2xvcjpgLS1kZXN0cnVjdGl2ZWB9XSksdWU9YigoKT0+W3tsYWJlbDpgNDAyIHVucHJpY2VkIHJlZnVzYWxzYCxkYXRhOlMudW5wcmljZWQsY29sb3I6YC0tc3RhdHVzLXdhcm5gfV0pLHE9YigoKT0+Uy5idWNrZXRzLm1hcChlPT5MKGUsUy53aW5kb3dVc2VkKSkpO2Z1bmN0aW9uIG1lKGUpe3JldHVybiBkZShOdW1iZXIuaXNOYU4oZSk/bnVsbDplKX1sZXQgSj1iKCgpPT4oby5vdmVydmlldz8ucHJvdmlkZXJzLmxlbmd0aD8/MCk+MCksaGU9YigoKT0+by5vdmVydmlldyE9PW51bGwmJm8ub3ZlcnZpZXcuZmVhdHVyZXMuZmFpbG92ZXI9PT0hMSksWT1iKCgpPT5GKHtsb2FkaW5nOiFvLmxhc3RVcGRhdGVkLGhhc0RhdGE6by5vdmVydmlldyE9PW51bGwsZXJyb3I6by5lcnJvcn0pKSxYPWIoKCk9PlkudmFsdWU9PT1gcmVhZHlgP0oudmFsdWU/YHJlYWR5YDpgZW1wdHlgOlkudmFsdWUpLFo9YigoKT0+by5vdmVydmlldz8uZmVhdHVyZXMubGF0ZW5jeVN0YXRzPz8hMSksd2U9YigoKT0+RC52YWx1ZSE9PWBgJiZaLnZhbHVlKSxUZT1iKCgpPT5TLnByb3ZpZGVyUGVyZkJ1Y2tldHMubWFwKGU9PkwoZSxTLnByb3ZpZGVyUGVyZldpbmRvd1VzZWQpKSksRWU9YigoKT0+W3tsYWJlbDpgcDUwYCxkYXRhOlMucHJvdmlkZXJQZXJmUG9pbnRzLm1hcChlPT5lLnA1ME1zPz9OYU4pLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH0se2xhYmVsOmBwOTVgLGRhdGE6Uy5wcm92aWRlclBlcmZQb2ludHMubWFwKGU9PmUucDk1TXM/P05hTiksY29sb3I6YC0tY2hhcnQtdG9rZW5zLWluYH1dKSxEZT1iKCgpPT5be2xhYmVsOmBmYWlsdXJlc2AsZGF0YTpTLnByb3ZpZGVyUGVyZlBvaW50cy5tYXAoZT0+ZS5mYWlsdXJlcyksY29sb3I6YC0tZGVzdHJ1Y3RpdmVgfV0pO2UoKCk9PltELnZhbHVlLGgucmFuZ2VdLChbZV0pPT52b2lkIFMuZmV0Y2hQcm92aWRlclBlcmYoZSkse2ltbWVkaWF0ZTohMH0pO2xldCBPZT1iKCgpPT5oLndpbmRvdz09PWBtb250aGApLCQ9YigoKT0+WS52YWx1ZT09PWByZWFkeWA/Rih7bG9hZGluZzpTLmxvYWRpbmcsaGFzRGF0YTpTLmJ1Y2tldHMubGVuZ3RoPjAsZXJyb3I6Uy5lcnJvcn0pOlkudmFsdWUpLGtlPWIoKCk9PkYoe2xvYWRpbmc6Uy5wcm92aWRlclBlcmZMb2FkaW5nLGhhc0RhdGE6Uy5wcm92aWRlclBlcmZQb2ludHMubGVuZ3RoPjAsZXJyb3I6Uy5wcm92aWRlclBlcmZFcnJvcn0pKTtyZXR1cm4gZSgoKT0+W2gucmFuZ2Usby5vdmVydmlldz8ucHJvdmlkZXJzLmxlbmd0aD8/MF0sKCk9PnZvaWQgUy5mZXRjaCgpKSxlKCgpPT5bZC5raW5kRmlsdGVyLGQudXNlckZpbHRlcl0sKFtlLHRdKT0+e2cuZ29UbyhgcmVsaWFiaWxpdHlgLHsuLi5nLnBhcmFtcyxraW5kOmUsdXNlcjp0fSl9KSxlKCgpPT5bZy5wYXJhbXMua2luZCxnLnBhcmFtcy51c2VyXSwoW2UsdF0pPT57ZC5zZXRLaW5kRmlsdGVyKGU/P2BgKSxkLnNldFVzZXJGaWx0ZXIodD8/YGApfSx7aW1tZWRpYXRlOiEwfSksdSgoKT0+dm9pZCBTLmZldGNoKCkpLChlLGEpPT4odygpLHAoYGRpdmAsX2UsW3kodihsKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlciBzbTpqdXN0aWZ5LWJldHdlZW5gfSx7ZGVmYXVsdDpyKCgpPT5bZihgZGl2YCxudWxsLFt5KHYocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxXXx8PVt4KGBSZWxpYWJpbGl0eWAsLTEpXV0pLF86MX0pLHkodihrKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzJdfHw9W3goYFByb3ZpZGVyIGVycm9yIHJhdGUsIGZhaWxvdmVycywgdGltZW91dHMsIHJhdGUtbGltaXQgcmVqZWN0aW9ucywgYW5kIDQwMiByZWZ1c2Fscy5gLC0xKV1dKSxfOjF9KV0pLGYoYGRpdmAsdmUsW2FbNF18fD1mKGBsYWJlbGAse2lkOmByZWxpYWJpbGl0eS1wcm92aWRlci1sYWJlbGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFByb3ZpZGVyYCwtMSkseSh2KGllKSx7Im1vZGVsLXZhbHVlIjplZS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6SX0se2RlZmF1bHQ6cigoKT0+W3kodihhZSkseyJhcmlhLWxhYmVsbGVkYnkiOmByZWxpYWJpbGl0eS1wcm92aWRlci1sYWJlbGAsY2xhc3M6YHctNDhgfSx7ZGVmYXVsdDpyKCgpPT5beSh2KHJlKSx7cGxhY2Vob2xkZXI6YEFsbCBwcm92aWRlcnNgfSldKSxfOjF9KSx5KHYodGUpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihNKSx7dmFsdWU6UX0se2RlZmF1bHQ6cigoKT0+Wy4uLmFbM118fD1beChgQWxsIHByb3ZpZGVyc2AsLTEpXV0pLF86MX0pLCh3KCEwKSxwKGksbnVsbCxtKHYobykub3ZlcnZpZXc/LnByb3ZpZGVycz8/W10sZT0+KHcoKSxUKHYoTSkse2tleTplLm5hbWUsdmFsdWU6ZS5uYW1lfSx7ZGVmYXVsdDpyKCgpPT5beChjKGUubmFtZSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSksXzoxfSkseSh2KE8pLG51bGwse2RlZmF1bHQ6cigoKT0+W1kudmFsdWU9PT1gc2tlbGV0b25gPyh3KCksVChWLHtrZXk6MCxyb3dzOjJ9KSk6WS52YWx1ZT09PWBlcnJvcmA/KHcoKSxUKFAse2tleToxLG1lc3NhZ2U6dihvKS5lcnJvciwib24tcmV0cnkiOnYobykucmVmcmVzaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTp2KFMpLmVycm9yPyh3KCkscChgcGAseWUsYyh2KFMpLmVycm9yKSwxKSk6Si52YWx1ZT9FKGBgLCEwKToodygpLHAoYHBgLGJlLGBObyBwcm92aWRlcnMgY29uZmlndXJlZC5gKSldKSxfOjF9KV0pLF86MX0pLE9lLnZhbHVlPyh3KCksVCh2KEEpLHtrZXk6MCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6cigoKT0+W3kodihqKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt4KGAgUmVsaWFiaWxpdHkgZGF0YSBoYXMgbm8gbW9udGhseSByZXRlbnRpb24g4oCUIGV2ZXJ5IGNoYXJ0IGJlbG93IHNob3dzIHRoZSBtb3N0IHJlY2VudCAzMCBkYXlzLCBub3QgdGhlIGZ1bGwgYCtjKHYoaCkucmFuZ2UpK2AgcmFuZ2Ugc2VsZWN0ZWQgYWJvdmUuIGAsMSldKSxfOjF9KV0pLF86MX0pKTpFKGBgLCEwKSxYLnZhbHVlPT09YHNrZWxldG9uYD8odygpLHAoaSx7a2V5OjF9LFt5KHYobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzVdfHw9W3goYEVycm9yIHJhdGUgYnkgcHJvdmlkZXJgLC0xKV1dKSxfOjF9KV0pLF86MX0pLHkodihPKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KEgpXSksXzoxfSldKSxfOjF9KSx5KHYobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzZdfHw9W3goYFNlbGVjdGVkIHByb3ZpZGVyIHBlcmZvcm1hbmNlYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoTyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beShIKV0pLF86MX0pXSksXzoxfSkseSh2KGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVs3XXx8PVt4KGBUaW1lb3V0cyBieSBwcm92aWRlcmAsLTEpXV0pLF86MX0pXSksXzoxfSkseSh2KE8pLG51bGwse2RlZmF1bHQ6cigoKT0+W3koSCldKSxfOjF9KV0pLF86MX0pLHkodihsKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbOF18fD1beChgRmFpbG92ZXJzIGJ5IHByb3ZpZGVyYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoTyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beShIKV0pLF86MX0pXSksXzoxfSldLDY0KSk6WC52YWx1ZT09PWBlbXB0eWA/KHcoKSxUKHYobCkse2tleToyfSx7ZGVmYXVsdDpyKCgpPT5beSh2KE8pLG51bGwse2RlZmF1bHQ6cigoKT0+W3kob2Use3RpdGxlOmBObyBwcm92aWRlcnMgY29uZmlndXJlZC5gLGRlc2NyaXB0aW9uOmBBZGQgYSBwcm92aWRlcnMgZW50cnkgdG8gdGhlIG1pZGRsZXdhcmUgY29uZmlnIHRvIHNlZSBwZXItcHJvdmlkZXIgcmVsaWFiaWxpdHkgY2hhcnRzIGhlcmUuYH0pXSksXzoxfSldKSxfOjF9KSk6WC52YWx1ZT09PWByZWFkeWA/KHcoKSxwKGkse2tleTozfSxbeSh2KGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVs5XXx8PVt4KGBFcnJvciByYXRlIGJ5IHByb3ZpZGVyYCwtMSldXSksXzoxfSkseSh2KGspLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMTBdfHw9W3goYEZhaWxlZCBhdHRlbXB0cyAvIHRvdGFsIGF0dGVtcHRzIHBlciBidWNrZXQuIEEgZ2FwIG1lYW5zIG5vIGF0dGVtcHRzIGluIHRoYXQgYnVja2V0LmAsLTEpXV0pLF86MX0pXSksXzoxfSkseSh2KE8pLG51bGwse2RlZmF1bHQ6cigoKT0+WyQudmFsdWU9PT1gc2tlbGV0b25gPyh3KCksVChILHtrZXk6MH0pKTokLnZhbHVlPT09YGVycm9yYD8odygpLFQoUCx7a2V5OjEsbWVzc2FnZTp2KFMpLmVycm9yLCJvbi1yZXRyeSI6dihTKS5mZXRjaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKToodygpLFQoVSx7a2V5OjIsbGFiZWxzOnEudmFsdWUsZGF0YXNldHM6Y2UudmFsdWUsInZhbHVlLWZvcm1hdHRlciI6bWUsYXJpYUxhYmVsOmBFcnJvciByYXRlIGJ5IHByb3ZpZGVyIG92ZXIgdGltZWB9LG51bGwsOCxbYGxhYmVsc2AsYGRhdGFzZXRzYF0pKV0pLF86MX0pXSksXzoxfSkseSh2KGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodih0KSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYocyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxMV18fD1beChgU2VsZWN0ZWQgcHJvdmlkZXIgcGVyZm9ybWFuY2VgLC0xKV1dKSxfOjF9KSx5KHYoayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxMl18fD1beChgTGF0ZW5jeSAocDUwL3A5NSkgYW5kIGZhaWx1cmVzIHBlciBidWNrZXQgZm9yIG9uZSBwcm92aWRlci5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHkodihPKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSx7ZGVmYXVsdDpyKCgpPT5bRC52YWx1ZT09PWBgPyh3KCkscChgcGAseGUsYCBTZWxlY3QgYSBwcm92aWRlciBhYm92ZSB0byBzZWUgaXRzIGxhdGVuY3kgYW5kIGZhaWx1cmUgYnJlYWtkb3duIHBlciBidWNrZXQuIGApKTpaLnZhbHVlP3dlLnZhbHVlPyh3KCkscChpLHtrZXk6Mn0sW2tlLnZhbHVlPT09YHNrZWxldG9uYD8odygpLFQoSCx7a2V5OjB9KSk6a2UudmFsdWU9PT1gZXJyb3JgPyh3KCksVChQLHtrZXk6MSxtZXNzYWdlOnYoUykucHJvdmlkZXJQZXJmRXJyb3IsIm9uLXJldHJ5IjooKT0+dihTKS5mZXRjaFByb3ZpZGVyUGVyZihELnZhbHVlKX0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKToodygpLHAoYGRpdmAsU2UsW2YoYGRpdmAsbnVsbCxbYVsxN118fD1mKGBwYCx7Y2xhc3M6YG1iLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGF0ZW5jeSAobXMpYCwtMSkseShVLHtsYWJlbHM6VGUudmFsdWUsZGF0YXNldHM6RWUudmFsdWUsYXJpYUxhYmVsOmBwNTAvcDk1IGxhdGVuY3kgZm9yICR7RC52YWx1ZX0gb3ZlciB0aW1lYH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgLGBhcmlhTGFiZWxgXSldKSxmKGBkaXZgLG51bGwsW2FbMThdfHw9ZihgcGAse2NsYXNzOmBtYi0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYEZhaWx1cmVzYCwtMSkseShVLHtsYWJlbHM6VGUudmFsdWUsZGF0YXNldHM6RGUudmFsdWUsYXJpYUxhYmVsOmBGYWlsdXJlcyBmb3IgJHtELnZhbHVlfSBvdmVyIHRpbWVgfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2AsYGFyaWFMYWJlbGBdKV0pXSkpXSw2NCkpOkUoYGAsITApOih3KCksVCh2KEEpLHtrZXk6MSx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6cigoKT0+W3kodihuZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxM118fD1beChgTGF0ZW5jeSBzdGF0aXN0aWNzIGFyZSBvZmZgLC0xKV1dKSxfOjF9KSx5KHYoaikse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSx7ZGVmYXVsdDpyKCgpPT5bZihgc3BhbmAsbnVsbCxbYVsxNF18fD14KGBFbmFibGUgYCwtMSksYVsxNV18fD1mKGBjb2RlYCx7Y2xhc3M6YGZvbnQtbW9ubyB0ZXh0LXhzYH0sYGFkbWluLnN0YXRzLmxhdGVuY3lgLC0xKSx4KGAgaW4gdGhlIG1pZGRsZXdhcmUgY29uZmlnIHRvIHNlZSBwZXItYnVja2V0IGxhdGVuY3kgZm9yIGArYyhELnZhbHVlKStgLmAsMSldKSx5KHYobikse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6YVswXXx8PWU9PnYoZykuZ29UbyhgY29uZmlnYCl9LHtkZWZhdWx0OnIoKCk9PlsuLi5hWzE2XXx8PVt4KGBPcGVuIENvbmZpZ2AsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9KSldKSxfOjF9KV0pLF86MX0pLHkodihsKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMTldfHw9W3goYFRpbWVvdXRzIGJ5IHByb3ZpZGVyYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoTyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bJC52YWx1ZT09PWBza2VsZXRvbmA/KHcoKSxUKEgse2tleTowfSkpOiQudmFsdWU9PT1gZXJyb3JgPyh3KCksVChQLHtrZXk6MSxtZXNzYWdlOnYoUykuZXJyb3IsIm9uLXJldHJ5Ijp2KFMpLmZldGNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOih3KCksVChVLHtrZXk6MixsYWJlbHM6cS52YWx1ZSxkYXRhc2V0czpHLnZhbHVlLGFyaWFMYWJlbDpgVGltZW91dHMgYnkgcHJvdmlkZXIgb3ZlciB0aW1lYH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgXSkpXSksXzoxfSldKSxfOjF9KSx5KHYobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzIwXXx8PVt4KGBGYWlsb3ZlcnMgYnkgcHJvdmlkZXJgLC0xKV1dKSxfOjF9KSxoZS52YWx1ZT8odygpLFQodihrKSx7a2V5OjB9LHtkZWZhdWx0OnIoKCk9PlsuLi5hWzIxXXx8PVt4KGBUaGlzIGRlcGxveW1lbnQgaGFzIG5vIGZhaWxvdmVyIGNoYWlucyBjb25maWd1cmVkLmAsLTEpXV0pLF86MX0pKTpFKGBgLCEwKV0pLF86MX0pLHkodihPKSxudWxsLHtkZWZhdWx0OnIoKCk9PlskLnZhbHVlPT09YHNrZWxldG9uYD8odygpLFQoSCx7a2V5OjB9KSk6JC52YWx1ZT09PWBlcnJvcmA/KHcoKSxUKFAse2tleToxLG1lc3NhZ2U6dihTKS5lcnJvciwib24tcmV0cnkiOnYoUykuZmV0Y2h9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6KHcoKSxUKFUse2tleToyLGxhYmVsczpxLnZhbHVlLGRhdGFzZXRzOksudmFsdWUsYXJpYUxhYmVsOmBGYWlsb3ZlcnMgYnkgcHJvdmlkZXIgb3ZlciB0aW1lYH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgXSkpXSksXzoxfSldKSxfOjF9KV0sNjQpKTpFKGBgLCEwKSxmKGBkaXZgLENlLFt5KHYobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W3kodihzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzIyXXx8PVt4KGBSYXRlLWxpbWl0IHJlamVjdGlvbnMgKDQyOSlgLC0xKV1dKSxfOjF9KSx5KHYoayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsyM118fD1beChgRmxlZXQtd2lkZSwgZXZlcnkgc2NvcGUgY29tYmluZWQuYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoTyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bJC52YWx1ZT09PWBza2VsZXRvbmA/KHcoKSxUKEgse2tleTowfSkpOiQudmFsdWU9PT1gZXJyb3JgPyh3KCksVChQLHtrZXk6MSxtZXNzYWdlOnYoUykuZXJyb3IsIm9uLXJldHJ5Ijp2KFMpLmZldGNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOih3KCksVChVLHtrZXk6MixsYWJlbHM6cS52YWx1ZSxkYXRhc2V0czpsZS52YWx1ZSxhcmlhTGFiZWw6YFJhdGUtbGltaXQgcmVqZWN0aW9ucyBvdmVyIHRpbWUsIGZsZWV0LXdpZGVgfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2BdKSldKSxfOjF9KV0pLF86MX0pLHkodihsKSxudWxsLHtkZWZhdWx0OnIoKCk9Plt5KHYodCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5beSh2KHMpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMjRdfHw9W3goYFVucHJpY2VkIHJlZnVzYWxzICg0MDIpYCwtMSldXSksXzoxfSkseSh2KGspLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMjVdfHw9W3goYEZsZWV0LXdpZGUgcmVxdWVzdHMgcmVmdXNlZCBmb3IgaGF2aW5nIG5vIHJlc29sdmFibGUgcHJpY2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSx5KHYoTyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bJC52YWx1ZT09PWBza2VsZXRvbmA/KHcoKSxUKEgse2tleTowfSkpOiQudmFsdWU9PT1gZXJyb3JgPyh3KCksVChQLHtrZXk6MSxtZXNzYWdlOnYoUykuZXJyb3IsIm9uLXJldHJ5Ijp2KFMpLmZldGNofSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOih3KCksVChVLHtrZXk6MixsYWJlbHM6cS52YWx1ZSxkYXRhc2V0czp1ZS52YWx1ZSxhcmlhTGFiZWw6YFVucHJpY2VkIHJlZnVzYWxzICg0MDIpIG92ZXIgdGltZSwgZmxlZXQtd2lkZWB9LG51bGwsOCxbYGxhYmVsc2AsYGRhdGFzZXRzYF0pKV0pLF86MX0pXSksXzoxfSldKSx5KGdlKV0pKX19KTtleHBvcnR7d2UgYXMgZGVmYXVsdH07", + "aW1wb3J0e0FuIGFzIGUsRCBhcyB0LEUgYXMgbixMciBhcyByLE1yIGFzIGksUW4gYXMgYSxUIGFzIG8sWHQgYXMgcyxfbiBhcyBjLGJ0IGFzIGwsY24gYXMgdSxlaSBhcyBkLGZyIGFzIGYsZyBhcyBwLGduIGFzIG0sZ3QgYXMgaCxpciBhcyBnLGxuIGFzIF8sbiBhcyB2LG5yIGFzIHksbnQgYXMgYixvbiBhcyB4LHNuIGFzIFMsdW4gYXMgQyx1ciBhcyBlZSx2aSBhcyB3LHcgYXMgVCx3aSBhcyBFLHluIGFzIER9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7XyBhcyBPLGEgYXMgayxnIGFzIHRlLGggYXMgQSxpIGFzIGosbCBhcyBNLG4gYXMgbmUsbyBhcyByZSxyIGFzIE4scyBhcyBQLHQgYXMgRn1mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO2ltcG9ydHt0IGFzIEl9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHtTIGFzIEwsaSBhcyBSLGsgYXMgeixtIGFzIEIsbiBhcyBWLHQgYXMgSCx4IGFzIFV9ZnJvbSIuL2JhZGdlLUJKTGctUjNNLmpzIjtpbXBvcnR7aSBhcyBXfWZyb20iLi9jb2x1bW5zLUNvZWNuZjc0LmpzIjtpbXBvcnR7dCBhcyBpZX1mcm9tIi4vU2tlbGV0b25DaGFydC0xWV81czlmMC5qcyI7aW1wb3J0e24gYXMgYWUsdCBhcyBHfWZyb20iLi91c2VTZWFyY2hRdWVyeS1CU2tDOGJHZC5qcyI7aW1wb3J0e24gYXMgSyx0IGFzIHF9ZnJvbSIuL0NoYXJ0Q2FyZC1DQUNTSVgxZi5qcyI7aW1wb3J0e3QgYXMgb2V9ZnJvbSIuL1N0YXREaXNhYmxlZEFsZXJ0LUJKdEhSWHdFLmpzIjtpbXBvcnR7dCBhcyBzZX1mcm9tIi4vZXZlbnRzLVI5eVFsQmMwLmpzIjtpbXBvcnR7YSBhcyBjZSxpIGFzIEosbiBhcyBZLHIgYXMgWCx0IGFzIGxlfWZyb20iLi9ldmVudHMtZmlsdGVyLUNpZXUxVUJSLmpzIjtpbXBvcnR7YyBhcyB1ZX1mcm9tIi4va3BpLVAwOFV2cktpLmpzIjtpbXBvcnR7bCBhcyBkZX1mcm9tIi4vc2VyaWVzLURac3VBWEhJLmpzIjtpbXBvcnR7biBhcyBmZX1mcm9tIi4vcmVsaWFiaWxpdHktQ1lkSnFfNzQuanMiO2ltcG9ydHtuIGFzIHBlfWZyb20iLi9jaGFydC1wYWxldHRlLWhtNFpJa0FYLmpzIjtmdW5jdGlvbiBaKGUpe3JldHVybiBlLnVzZXI/YHVzZXI6JHtlLnVzZXJ9YDplLmdyb3VwP2Bncm91cDoke2UuZ3JvdXB9YDpg4oCUYH1mdW5jdGlvbiBtZShlKXtsZXQgdD1bZS5tb2RlbCxlLnByb3ZpZGVyXS5maWx0ZXIoZT0+ISFlKTtyZXR1cm4gdC5sZW5ndGg/dC5qb2luKGAg4oaSIGApOmDigJRgfWZ1bmN0aW9uIGhlKCl7cmV0dXJuW3tpZDpgdGltZWAsaGVhZGVyOmBUaW1lYCxhY2Nlc3NvckZuOmU9PmUudGltZSxjZWxsOih7cm93OnR9KT0+ZShgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGFidWxhci1udW1zYH0sQih0Lm9yaWdpbmFsLnRpbWUpKX0se2lkOmBraW5kYCxoZWFkZXI6YEtpbmRgLGFjY2Vzc29yRm46ZT0+ZS5raW5kLGNlbGw6KHtyb3c6dH0pPT5lKEgse2FzOmBzcGFuYCx2YXJpYW50OlgodC5vcmlnaW5hbC5raW5kKSxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+Y2UodC5vcmlnaW5hbC5raW5kKSl9LHtpZDpgcm91dGVgLGhlYWRlcjpgUm91dGVgLGFjY2Vzc29yRm46ZT0+ZS5yb3V0ZSxjZWxsOih7cm93OnR9KT0+ZShgc3BhbmAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LHQub3JpZ2luYWwucm91dGUpfSx7aWQ6YHNjb3BlYCxoZWFkZXI6YFVzZXIgLyBncm91cGAsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PmUudXNlcj8/ZS5ncm91cD8/YGAsY2VsbDooe3Jvdzp0fSk9PntsZXQgbj1aKHQub3JpZ2luYWwpO3JldHVybiBlKGBzcGFuYCx7Y2xhc3M6bj09PWDigJRgP2B0ZXh0LW11dGVkLWZvcmVncm91bmRgOnZvaWQgMH0sbil9fSx7aWQ6YHRhcmdldGAsaGVhZGVyOmBNb2RlbCAvIHByb3ZpZGVyYCxlbmFibGVTb3J0aW5nOiExLGFjY2Vzc29yRm46ZT0+YCR7ZS5tb2RlbD8/YGB9ICR7ZS5wcm92aWRlcj8/YGB9YCxjZWxsOih7cm93OnR9KT0+e2xldCBuPW1lKHQub3JpZ2luYWwpO3JldHVybiBlKGBzcGFuYCx7Y2xhc3M6bj09PWDigJRgP2B0ZXh0LW11dGVkLWZvcmVncm91bmRgOmBmb250LW1vbm8gdGV4dC14c2B9LG4pfX0se2lkOmByZXBsaWNhYCxoZWFkZXI6YFJlcGxpY2FgLGFjY2Vzc29yRm46ZT0+ZS5yZXBsaWNhLGNlbGw6KHtyb3c6dH0pPT5lKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHQub3JpZ2luYWwucmVwbGljYSl9LHtpZDpgc3RhdHVzYCxoZWFkZXI6YFN0YXR1c2AsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5lLnN0YXR1cz8/MCxjZWxsOih7cm93OnR9KT0+ZShgc3BhbmAse2NsYXNzOmB0YWJ1bGFyLW51bXNgfSx0Lm9yaWdpbmFsLnN0YXR1cz09PXZvaWQgMD9g4oCUYDpTdHJpbmcodC5vcmlnaW5hbC5zdGF0dXMpKX0se2lkOmBtZXNzYWdlYCxoZWFkZXI6YE1lc3NhZ2VgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLm1lc3NhZ2UsY2VsbDooe3Jvdzp0fSk9PmUoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sdC5vcmlnaW5hbC5tZXNzYWdlKX1dfXZhciBnZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxRPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zYH0sJD1gYWxsYCxfZT1EKHtfX25hbWU6YEV2ZW50c1ZpZXdgLHNldHVwKGUpe2xldCBpPXNlKCkse2tpbmRGaWx0ZXI6cCx1c2VyRmlsdGVyOnZ9PWwoaSkse25vcm1hbGl6ZWQ6RH09Ryh2KSxuZT14KCgpPT5wLnZhbHVlPT09YGA/JDpwLnZhbHVlKSxGPXgoKCk9PkooaS5ldmVudHMse2tpbmQ6cC52YWx1ZSx1c2VyOkQudmFsdWV9KSk7ZnVuY3Rpb24gUihlKXt0eXBlb2YgZT09YHN0cmluZ2AmJmkuc2V0S2luZEZpbHRlcihlPT09JD9gYDplKX1sZXQgQj1oZSgpLFY9eCgoKT0+VSh7bG9hZGluZzppLnJlZnJlc2hpbmcsaGFzRGF0YTppLmxhc3RVcGRhdGVkIT09bnVsbCxlcnJvcjppLmVycm9yfSkpLEg9eCgoKT0+aS5ldmVudHMubGVuZ3RoPT09MCksaWU9eCgoKT0+cC52YWx1ZSE9PWBgfHxELnZhbHVlP2BubyBldmVudHMgbWF0Y2ggdGhlIGN1cnJlbnQgZmlsdGVyYDpgbm9uZWApLEs9eCgoKT0+aS5zb3VyY2U9PT1gcmVkaXNgP2BGbGVldC13aWRlLCBhY3Jvc3MgZXZlcnkgcmVwbGljYWA6YFRoaXMgcmVwbGljYSBvbmx5ICgke2kucmVwbGljYXx8YHVua25vd25gfSkg4oCUIFJlZGlzIGlzIHVucmVhY2hhYmxlIG9yIHVuY29uZmlndXJlZGApO3JldHVybiBhKCgpPT57aS5zdGFydFBvbGxpbmcoKX0pLHkoKCk9PntpLnN0b3BQb2xsaW5nKCl9KSwoZSxhKT0+e2xldCBsPWYoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBnKCksQyhgZGl2YCxnZSxbdyhpKS5kZWdyYWRlZD8oZygpLHUodyhPKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpyKCgpPT5bYyhsLHtpY29uOncoaCksY2xhc3M6YHNpemUtNGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksYyh3KEEpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMV18fD1bbShgRmxlZXQtd2lkZSBldmVudCBsb2cgdW5hdmFpbGFibGVgLC0xKV1dKSxfOjF9KSxjKHcodGUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMl18fD1bbShgIFJlZGlzIGlzIGNvbmZpZ3VyZWQgYnV0IGNvdWxkIG5vdCBiZSByZWFkIOKAlCBzaG93aW5nIHRoaXMgcmVwbGljYSdzIG93biBpbi1tZW1vcnkgZXZlbnRzIG9ubHksIHdoaWNoIG1heSBtaXNzIGV2ZW50cyByZWNvcmRlZCBieSBvdGhlciByZXBsaWNhcy4gYCwtMSldXSksXzoxfSldKSxfOjF9KSk6XyhgYCwhMCksYyh3KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2ModyhvKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTQgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlbmB9LHtkZWZhdWx0OnIoKCk9PltTKGBkaXZgLG51bGwsW2ModyhUKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzNdfHw9W20oYEV2ZW50c2AsLTEpXV0pLF86MX0pLFYudmFsdWU9PT1gcmVhZHlgPyhnKCksdSh3KE0pLHtrZXk6MH0se2RlZmF1bHQ6cigoKT0+W20oRShLLnZhbHVlKStgIOKAlCByYXRlIGxpbWl0LCBidWRnZXQsIGFuZCB1cHN0cmVhbSBldmVudHMsIG5ld2VzdCBmaXJzdCAoY2FwYWNpdHkgYCtFKHcoaSkuY2FwYWNpdHkpK2ApLiBgLDEpXSksXzoxfSkpOl8oYGAsITApXSksUyhgZGl2YCxRLFtjKGFlLHttb2RlbFZhbHVlOncodiksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmFbMF18fD1lPT5kKHYpP3YudmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgYnkgdXNlciBvciBncm91cGAsY2xhc3M6YHctNTZgfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLGModyhQKSx7Im1vZGVsLXZhbHVlIjpuZS52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6Un0se2RlZmF1bHQ6cigoKT0+W2ModyhqKSx7Y2xhc3M6YHctNDRgLCJhcmlhLWxhYmVsIjpgRmlsdGVyIGJ5IGtpbmRgfSx7ZGVmYXVsdDpyKCgpPT5bYyh3KE4pLHtwbGFjZWhvbGRlcjpgS2luZGB9KV0pLF86MX0pLGModyhyZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bYyh3KGspLHt2YWx1ZTokfSx7ZGVmYXVsdDpyKCgpPT5bLi4uYVs0XXx8PVttKGBBbGwga2luZHNgLC0xKV1dKSxfOjF9KSwoZyghMCksQyhzLG51bGwsZWUodyhsZSksZT0+KGcoKSx1KHcoaykse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0OnIoKCk9PlttKEUodyhZKVtlXSksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pXSksXzoxfSksYyh3KG4pLG51bGwse2RlZmF1bHQ6cigoKT0+W1YudmFsdWU9PT1gc2tlbGV0b25gPyhnKCksdShMLHtrZXk6MCxyb3dzOjUsY29sczp3KEIpLmxlbmd0aH0sbnVsbCw4LFtgY29sc2BdKSk6Vi52YWx1ZT09PWBlcnJvcmA/KGcoKSx1KEkse2tleToxLG1lc3NhZ2U6dyhpKS5lcnJvciwib24tcmV0cnkiOncoaSkucmVmcmVzaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTpILnZhbHVlPyhnKCksdSh6LHtrZXk6MixpY29uOncoYiksdGl0bGU6YE5vIGZhaWx1cmVzIHJlY29yZGVkLmAsZGVzY3JpcHRpb246YFJhdGUtbGltaXQsIGJ1ZGdldCwgYW5kIHVwc3RyZWFtIGV2ZW50cyB3aWxsIHNob3cgdXAgaGVyZSBhcyB0aGV5IGhhcHBlbi5gfSxudWxsLDgsW2BpY29uYF0pKTooZygpLHUoVyx7a2V5OjMsY29sdW1uczp3KEIpLGRhdGE6Ri52YWx1ZSwiZW1wdHktbWVzc2FnZSI6aWUudmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKSldKSxfOjF9KV0pLF86MX0pXSl9fX0pLHZlPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LHllPXtrZXk6MixjbGFzczpgdGV4dC1zbSBicmVhay13b3JkcyB0ZXh0LWRlc3RydWN0aXZlYH0sYmU9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHhlPXtrZXk6MixjbGFzczpgZ3JpZCBnYXAtNiBsZzpncmlkLWNvbHMtMmB9LFNlPXtjbGFzczpgZ3JpZCBnYXAtNiBsZzpncmlkLWNvbHMtMmB9LENlPUQoe19fbmFtZTpgUmVsaWFiaWxpdHlQYWdlYCxzZXR1cChlKXtsZXQgbD1wKCksZD1zZSgpLGY9RigpLGg9digpLHk9ZmUoKSxiPXgoKCk9PmgucGFyYW1zLnByb3ZpZGVyPz9gYCksZWU9eCgoKT0+KGwub3ZlcnZpZXc/LnByb3ZpZGVycz8/W10pLm1hcChlPT4oe3ZhbHVlOmUubmFtZSxsYWJlbDplLm5hbWV9KSkpO2Z1bmN0aW9uIEQoZSl7aC5nb1RvKGByZWxpYWJpbGl0eWAsey4uLmgucGFyYW1zLHByb3ZpZGVyOmV9KX1mdW5jdGlvbiBrKGUpe3JldHVybiBkZShlKX1mdW5jdGlvbiBBKGUpe3JldHVybiBiLnZhbHVlP2UuZmlsdGVyKGU9PmsoZS5zY29wZSk9PT1iLnZhbHVlKTplfWZ1bmN0aW9uIGooZSl7cmV0dXJuIGUubWFwKGU9PmU9PT1udWxsP05hTjplKX1sZXQgcmU9eCgoKT0+QSh5LmVycm9yUmF0ZSkubWFwKChlLHQpPT4oe2xhYmVsOmsoZS5zY29wZSksZGF0YTpqKGUucG9pbnRzKSxjb2xvcjpwZSh0KX0pKSk7ZnVuY3Rpb24gTihlKXtyZXR1cm4gQShlKS5tYXAoKGUsdCk9Pih7bGFiZWw6ayhlLnNjb3BlKSxkYXRhOmUucG9pbnRzLGNvbG9yOnBlKHQpfSkpfWxldCBQPXgoKCk9Pk4oeS50aW1lb3V0cykpLEw9eCgoKT0+Tih5LmZhaWxvdmVycykpLEI9eCgoKT0+W3tsYWJlbDpgNDI5IHJlamVjdGlvbnNgLGRhdGE6eS5yZWplY3Rpb25zLGNvbG9yOmAtLWRlc3RydWN0aXZlYH1dKSxIPXgoKCk9Plt7bGFiZWw6YDQwMiB1bnByaWNlZCByZWZ1c2Fsc2AsZGF0YTp5LnVucHJpY2VkLGNvbG9yOmAtLXN0YXR1cy13YXJuYH1dKSxXPXgoKCk9PnkuYnVja2V0cy5tYXAoZT0+UihlLHkud2luZG93VXNlZCkpKTtmdW5jdGlvbiBhZShlKXtyZXR1cm4gdWUoTnVtYmVyLmlzTmFOKGUpP251bGw6ZSl9bGV0IEc9eCgoKT0+KGwub3ZlcnZpZXc/LnByb3ZpZGVycy5sZW5ndGg/PzApPjApLGNlPXgoKCk9Pmwub3ZlcnZpZXchPT1udWxsJiZsLm92ZXJ2aWV3LmZlYXR1cmVzLmZhaWxvdmVyPT09ITEpLEo9eCgoKT0+VSh7bG9hZGluZzohbC5sYXN0VXBkYXRlZCxoYXNEYXRhOmwub3ZlcnZpZXchPT1udWxsLGVycm9yOmwuZXJyb3J9KSksWT14KCgpPT5KLnZhbHVlPT09YHJlYWR5YD9HLnZhbHVlP2ByZWFkeWA6YGVtcHR5YDpKLnZhbHVlKSxYPXgoKCk9Pmwub3ZlcnZpZXc/LmZlYXR1cmVzLmxhdGVuY3lTdGF0cz8/ITEpLGxlPXgoKCk9PmIudmFsdWUhPT1gYCYmWC52YWx1ZSksWj14KCgpPT55LnByb3ZpZGVyUGVyZkJ1Y2tldHMubWFwKGU9PlIoZSx5LnByb3ZpZGVyUGVyZldpbmRvd1VzZWQpKSksbWU9eCgoKT0+W3tsYWJlbDpgcDUwYCxkYXRhOnkucHJvdmlkZXJQZXJmUG9pbnRzLm1hcChlPT5lLnA1ME1zPz9OYU4pLGNvbG9yOmAtLWNoYXJ0LXJlcXVlc3RzYH0se2xhYmVsOmBwOTVgLGRhdGE6eS5wcm92aWRlclBlcmZQb2ludHMubWFwKGU9PmUucDk1TXM/P05hTiksY29sb3I6YC0tY2hhcnQtdG9rZW5zLWluYH1dKSxoZT14KCgpPT5be2xhYmVsOmBmYWlsdXJlc2AsZGF0YTp5LnByb3ZpZGVyUGVyZlBvaW50cy5tYXAoZT0+ZS5mYWlsdXJlcyksY29sb3I6YC0tZGVzdHJ1Y3RpdmVgfV0pO2koKCk9PltiLnZhbHVlLGYucmFuZ2VdLChbZV0pPT52b2lkIHkuZmV0Y2hQcm92aWRlclBlcmYoZSkse2ltbWVkaWF0ZTohMH0pO2xldCBnZT14KCgpPT5mLndpbmRvdz09PWBtb250aGApLFE9eCgoKT0+Si52YWx1ZT09PWByZWFkeWA/VSh7bG9hZGluZzp5LmxvYWRpbmcsaGFzRGF0YTp5LmJ1Y2tldHMubGVuZ3RoPjAsZXJyb3I6eS5lcnJvcn0pOkoudmFsdWUpLCQ9eCgoKT0+VSh7bG9hZGluZzp5LnByb3ZpZGVyUGVyZkxvYWRpbmcsaGFzRGF0YTp5LnByb3ZpZGVyUGVyZlBvaW50cy5sZW5ndGg+MCxlcnJvcjp5LnByb3ZpZGVyUGVyZkVycm9yfSkpO3JldHVybiBpKCgpPT5bZi5yYW5nZSxsLm92ZXJ2aWV3Py5wcm92aWRlcnMubGVuZ3RoPz8wXSwoKT0+dm9pZCB5LmZldGNoKCkpLGkoKCk9PltkLmtpbmRGaWx0ZXIsZC51c2VyRmlsdGVyXSwoW2UsdF0pPT57aC5nb1RvKGByZWxpYWJpbGl0eWAsey4uLmgucGFyYW1zLGtpbmQ6ZSx1c2VyOnR9KX0pLGkoKCk9PltoLnBhcmFtcy5raW5kLGgucGFyYW1zLnVzZXJdLChbZSx0XSk9PntkLnNldEtpbmRGaWx0ZXIoZT8/YGApLGQuc2V0VXNlckZpbHRlcih0Pz9gYCl9LHtpbW1lZGlhdGU6ITB9KSxhKCgpPT52b2lkIHkuZmV0Y2goKSksKGUsaSk9PihnKCksQyhgZGl2YCx2ZSxbYyh3KHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2ModyhvKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlbmB9LHtkZWZhdWx0OnIoKCk9PltTKGBkaXZgLG51bGwsW2ModyhUKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzBdfHw9W20oYFJlbGlhYmlsaXR5YCwtMSldXSksXzoxfSksYyh3KE0pLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMV18fD1bbShgUHJvdmlkZXIgZXJyb3IgcmF0ZSwgZmFpbG92ZXJzLCB0aW1lb3V0cywgcmF0ZS1saW1pdCByZWplY3Rpb25zLCBhbmQgNDAyIHJlZnVzYWxzLmAsLTEpXV0pLF86MX0pXSksYyhuZSx7bGFiZWw6YFByb3ZpZGVyYCwibW9kZWwtdmFsdWUiOmIudmFsdWUsb3B0aW9uczplZS52YWx1ZSwiYWxsLWxhYmVsIjpgQWxsIHByb3ZpZGVyc2AsInRyaWdnZXItY2xhc3MiOmB3LTQ4YCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6RH0sbnVsbCw4LFtgbW9kZWwtdmFsdWVgLGBvcHRpb25zYF0pXSksXzoxfSksYyh3KG4pLG51bGwse2RlZmF1bHQ6cigoKT0+W0oudmFsdWU9PT1gc2tlbGV0b25gPyhnKCksdShWLHtrZXk6MCxyb3dzOjJ9KSk6Si52YWx1ZT09PWBlcnJvcmA/KGcoKSx1KEkse2tleToxLG1lc3NhZ2U6dyhsKS5lcnJvciwib24tcmV0cnkiOncobCkucmVmcmVzaH0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTp3KHkpLmVycm9yPyhnKCksQyhgcGAseWUsRSh3KHkpLmVycm9yKSwxKSk6Ry52YWx1ZT9fKGBgLCEwKTooZygpLHUoeix7a2V5OjMsdGl0bGU6YE5vIHByb3ZpZGVycyBjb25maWd1cmVkLmB9KSldKSxfOjF9KV0pLF86MX0pLGdlLnZhbHVlPyhnKCksdSh3KE8pLHtrZXk6MCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6cigoKT0+W2Modyh0ZSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bbShgIFJlbGlhYmlsaXR5IGRhdGEgaGFzIG5vIG1vbnRobHkgcmV0ZW50aW9uIOKAlCBldmVyeSBjaGFydCBiZWxvdyBzaG93cyB0aGUgbW9zdCByZWNlbnQgMzAgZGF5cywgbm90IHRoZSBmdWxsIGArRSh3KGYpLnJhbmdlKStgIHJhbmdlIHNlbGVjdGVkIGFib3ZlLiBgLDEpXSksXzoxfSldKSxfOjF9KSk6XyhgYCwhMCksWS52YWx1ZT09PWBza2VsZXRvbmA/KGcoKSxDKHMse2tleToxfSxbYyhxLHt0aXRsZTpgRXJyb3IgcmF0ZSBieSBwcm92aWRlcmAsc3RhdGU6YHNrZWxldG9uYH0pLGMocSx7dGl0bGU6YFNlbGVjdGVkIHByb3ZpZGVyIHBlcmZvcm1hbmNlYCxzdGF0ZTpgc2tlbGV0b25gfSksYyhxLHt0aXRsZTpgVGltZW91dHMgYnkgcHJvdmlkZXJgLHN0YXRlOmBza2VsZXRvbmB9KSxjKHEse3RpdGxlOmBGYWlsb3ZlcnMgYnkgcHJvdmlkZXJgLHN0YXRlOmBza2VsZXRvbmB9KV0sNjQpKTpZLnZhbHVlPT09YGVtcHR5YD8oZygpLHUodyh0KSx7a2V5OjJ9LHtkZWZhdWx0OnIoKCk9PltjKHcobiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bYyh6LHt0aXRsZTpgTm8gcHJvdmlkZXJzIGNvbmZpZ3VyZWQuYCxkZXNjcmlwdGlvbjpgQWRkIGEgcHJvdmlkZXJzIGVudHJ5IHRvIHRoZSBtaWRkbGV3YXJlIGNvbmZpZyB0byBzZWUgcGVyLXByb3ZpZGVyIHJlbGlhYmlsaXR5IGNoYXJ0cyBoZXJlLmB9KV0pLF86MX0pXSksXzoxfSkpOlkudmFsdWU9PT1gcmVhZHlgPyhnKCksQyhzLHtrZXk6M30sW2MocSx7dGl0bGU6YEVycm9yIHJhdGUgYnkgcHJvdmlkZXJgLGRlc2NyaXB0aW9uOmBGYWlsZWQgYXR0ZW1wdHMgLyB0b3RhbCBhdHRlbXB0cyBwZXIgYnVja2V0LiBBIGdhcCBtZWFucyBubyBhdHRlbXB0cyBpbiB0aGF0IGJ1Y2tldC5gLHN0YXRlOlEudmFsdWUsZXJyb3I6dyh5KS5lcnJvciwib24tcmV0cnkiOncoeSkuZmV0Y2gsbGFiZWxzOlcudmFsdWUsZGF0YXNldHM6cmUudmFsdWUsInZhbHVlLWZvcm1hdHRlciI6YWUsImFyaWEtbGFiZWwiOmBFcnJvciByYXRlIGJ5IHByb3ZpZGVyIG92ZXIgdGltZWB9LG51bGwsOCxbYHN0YXRlYCxgZXJyb3JgLGBvbi1yZXRyeWAsYGxhYmVsc2AsYGRhdGFzZXRzYF0pLGModyh0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltjKHcobyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bYyh3KFQpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMl18fD1bbShgU2VsZWN0ZWQgcHJvdmlkZXIgcGVyZm9ybWFuY2VgLC0xKV1dKSxfOjF9KSxjKHcoTSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uaVszXXx8PVttKGBMYXRlbmN5IChwNTAvcDk1KSBhbmQgZmFpbHVyZXMgcGVyIGJ1Y2tldCBmb3Igb25lIHByb3ZpZGVyLmAsLTEpXV0pLF86MX0pXSksXzoxfSksYyh3KG4pLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OnIoKCk9PltiLnZhbHVlPT09YGA/KGcoKSxDKGBwYCxiZSxgIFNlbGVjdCBhIHByb3ZpZGVyIGFib3ZlIHRvIHNlZSBpdHMgbGF0ZW5jeSBhbmQgZmFpbHVyZSBicmVha2Rvd24gcGVyIGJ1Y2tldC4gYCkpOlgudmFsdWU/bGUudmFsdWU/KGcoKSxDKHMse2tleToyfSxbJC52YWx1ZT09PWBza2VsZXRvbmA/KGcoKSx1KGllLHtrZXk6MH0pKTokLnZhbHVlPT09YGVycm9yYD8oZygpLHUoSSx7a2V5OjEsbWVzc2FnZTp3KHkpLnByb3ZpZGVyUGVyZkVycm9yLCJvbi1yZXRyeSI6KCk9PncoeSkuZmV0Y2hQcm92aWRlclBlcmYoYi52YWx1ZSl9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6KGcoKSxDKGBkaXZgLHhlLFtTKGBkaXZgLG51bGwsW2lbNF18fD1TKGBwYCx7Y2xhc3M6YG1iLTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGF0ZW5jeSAobXMpYCwtMSksYyhLLHtsYWJlbHM6Wi52YWx1ZSxkYXRhc2V0czptZS52YWx1ZSxhcmlhTGFiZWw6YHA1MC9wOTUgbGF0ZW5jeSBmb3IgJHtiLnZhbHVlfSBvdmVyIHRpbWVgfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2AsYGFyaWFMYWJlbGBdKV0pLFMoYGRpdmAsbnVsbCxbaVs1XXx8PVMoYHBgLHtjbGFzczpgbWItMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBGYWlsdXJlc2AsLTEpLGMoSyx7bGFiZWxzOloudmFsdWUsZGF0YXNldHM6aGUudmFsdWUsYXJpYUxhYmVsOmBGYWlsdXJlcyBmb3IgJHtiLnZhbHVlfSBvdmVyIHRpbWVgfSxudWxsLDgsW2BsYWJlbHNgLGBkYXRhc2V0c2AsYGFyaWFMYWJlbGBdKV0pXSkpXSw2NCkpOl8oYGAsITApOihnKCksdShvZSx7a2V5OjEsdGl0bGU6YExhdGVuY3kgc3RhdGlzdGljcyBhcmUgb2ZmYCwiY29uZmlnLWtleSI6YGFkbWluLnN0YXRzLmxhdGVuY3lgLHB1cnBvc2U6YHRvIHNlZSBwZXItYnVja2V0IGxhdGVuY3kgZm9yICR7Yi52YWx1ZX0uYH0sbnVsbCw4LFtgcHVycG9zZWBdKSldKSxfOjF9KV0pLF86MX0pLGMocSx7dGl0bGU6YFRpbWVvdXRzIGJ5IHByb3ZpZGVyYCxzdGF0ZTpRLnZhbHVlLGVycm9yOncoeSkuZXJyb3IsIm9uLXJldHJ5Ijp3KHkpLmZldGNoLGxhYmVsczpXLnZhbHVlLGRhdGFzZXRzOlAudmFsdWUsImFyaWEtbGFiZWwiOmBUaW1lb3V0cyBieSBwcm92aWRlciBvdmVyIHRpbWVgfSxudWxsLDgsW2BzdGF0ZWAsYGVycm9yYCxgb24tcmV0cnlgLGBsYWJlbHNgLGBkYXRhc2V0c2BdKSxjKHEse3RpdGxlOmBGYWlsb3ZlcnMgYnkgcHJvdmlkZXJgLGRlc2NyaXB0aW9uOmNlLnZhbHVlP2BUaGlzIGRlcGxveW1lbnQgaGFzIG5vIGZhaWxvdmVyIGNoYWlucyBjb25maWd1cmVkLmA6dm9pZCAwLHN0YXRlOlEudmFsdWUsZXJyb3I6dyh5KS5lcnJvciwib24tcmV0cnkiOncoeSkuZmV0Y2gsbGFiZWxzOlcudmFsdWUsZGF0YXNldHM6TC52YWx1ZSwiYXJpYS1sYWJlbCI6YEZhaWxvdmVycyBieSBwcm92aWRlciBvdmVyIHRpbWVgfSxudWxsLDgsW2BkZXNjcmlwdGlvbmAsYHN0YXRlYCxgZXJyb3JgLGBvbi1yZXRyeWAsYGxhYmVsc2AsYGRhdGFzZXRzYF0pXSw2NCkpOl8oYGAsITApLFMoYGRpdmAsU2UsW2MocSx7dGl0bGU6YFJhdGUtbGltaXQgcmVqZWN0aW9ucyAoNDI5KWAsZGVzY3JpcHRpb246YEZsZWV0LXdpZGUsIGV2ZXJ5IHNjb3BlIGNvbWJpbmVkLmAsc3RhdGU6US52YWx1ZSxlcnJvcjp3KHkpLmVycm9yLCJvbi1yZXRyeSI6dyh5KS5mZXRjaCxsYWJlbHM6Vy52YWx1ZSxkYXRhc2V0czpCLnZhbHVlLCJhcmlhLWxhYmVsIjpgUmF0ZS1saW1pdCByZWplY3Rpb25zIG92ZXIgdGltZSwgZmxlZXQtd2lkZWB9LG51bGwsOCxbYHN0YXRlYCxgZXJyb3JgLGBvbi1yZXRyeWAsYGxhYmVsc2AsYGRhdGFzZXRzYF0pLGMocSx7dGl0bGU6YFVucHJpY2VkIHJlZnVzYWxzICg0MDIpYCxkZXNjcmlwdGlvbjpgRmxlZXQtd2lkZSByZXF1ZXN0cyByZWZ1c2VkIGZvciBoYXZpbmcgbm8gcmVzb2x2YWJsZSBwcmljZS5gLHN0YXRlOlEudmFsdWUsZXJyb3I6dyh5KS5lcnJvciwib24tcmV0cnkiOncoeSkuZmV0Y2gsbGFiZWxzOlcudmFsdWUsZGF0YXNldHM6SC52YWx1ZSwiYXJpYS1sYWJlbCI6YFVucHJpY2VkIHJlZnVzYWxzICg0MDIpIG92ZXIgdGltZSwgZmxlZXQtd2lkZWB9LG51bGwsOCxbYHN0YXRlYCxgZXJyb3JgLGBvbi1yZXRyeWAsYGxhYmVsc2AsYGRhdGFzZXRzYF0pXSksYyhfZSldKSl9fSk7ZXhwb3J0e0NlIGFzIGRlZmF1bHR9Ow==", ), }, - "Skeleton-B0ziB6Od.js": { + "Skeleton-D0NnvHY1.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "ZnVuY3Rpb24gZShlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbiBvZiBlLnNwbGl0KGAsYCkpdFtuXT0xO3JldHVybiBlPT5lIGluIHR9dmFyIHQ9e30sbj1bXSxyPSgpPT57fSxpPSgpPT4hMSxhPWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZUF0KDEpPT09MTEwJiYoZS5jaGFyQ29kZUF0KDIpPjEyMnx8ZS5jaGFyQ29kZUF0KDIpPDk3KSxvPWU9PmUuc3RhcnRzV2l0aChgb25VcGRhdGU6YCkscz1PYmplY3QuYXNzaWduLGM9KGUsdCk9PntsZXQgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX0sbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHU9KGUsdCk9PmwuY2FsbChlLHQpLGQ9QXJyYXkuaXNBcnJheSxmPWU9PlMoZSk9PT1gW29iamVjdCBNYXBdYCxwPWU9PlMoZSk9PT1gW29iamVjdCBTZXRdYCxtPWU9PlMoZSk9PT1gW29iamVjdCBEYXRlXWAsaD1lPT5TKGUpPT09YFtvYmplY3QgUmVnRXhwXWAsZz1lPT50eXBlb2YgZT09YGZ1bmN0aW9uYCxfPWU9PnR5cGVvZiBlPT1gc3RyaW5nYCx2PWU9PnR5cGVvZiBlPT1gc3ltYm9sYCx5PWU9PnR5cGVvZiBlPT1gb2JqZWN0YCYmISFlLGI9ZT0+KHkoZSl8fGcoZSkpJiZnKGUudGhlbikmJmcoZS5jYXRjaCkseD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFM9ZT0+eC5jYWxsKGUpLEM9ZT0+UyhlKS5zbGljZSg4LC0xKSx3PWU9PlMoZSk9PT1gW29iamVjdCBPYmplY3RdYCxUPWU9Pl8oZSkmJmUhPT1gTmFOYCYmZVswXSE9PWAtYCYmYGArcGFyc2VJbnQoZSwxMCk9PT1lLEU9ZShgLGtleSxyZWYscmVmX2ZvcixyZWZfa2V5LG9uVm5vZGVCZWZvcmVNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZGVVcGRhdGVkLG9uVm5vZGVCZWZvcmVVbm1vdW50LG9uVm5vZGVVbm1vdW50ZWRgKSxEPWU9PntsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybihuPT50W25dfHwodFtuXT1lKG4pKSl9LGVlPS8tXHcvZyxPPUQoZT0+ZS5yZXBsYWNlKGVlLGU9PmUuc2xpY2UoMSkudG9VcHBlckNhc2UoKSkpLHRlPS9cQihbQS1aXSkvZyxrPUQoZT0+ZS5yZXBsYWNlKHRlLGAtJDFgKS50b0xvd2VyQ2FzZSgpKSxBPUQoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKSxuZT1EKGU9PmU/YG9uJHtBKGUpfWA6YGApLGo9KGUsdCk9PiFPYmplY3QuaXMoZSx0KSxNPShlLC4uLnQpPT57Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSguLi50KX0sTj0oZSx0LG4scj0hMSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTpyLHZhbHVlOm59KX0scmU9ZT0+e2xldCB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHQpP2U6dH0saWU9ZT0+e2xldCB0PV8oZSk/TnVtYmVyKGUpOk5hTjtyZXR1cm4gaXNOYU4odCk/ZTp0fSxhZSxvZT0oKT0+YWV8fD10eXBlb2YgZ2xvYmFsVGhpczxgdWA/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjxgdWA/c2VsZjp0eXBlb2Ygd2luZG93PGB1YD93aW5kb3c6dHlwZW9mIGdsb2JhbDxgdWA/Z2xvYmFsOnt9LFA9ZShgSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IsU3ltYm9sYCk7ZnVuY3Rpb24gRihlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPV8ocik/bGUocik6RihyKTtpZihpKWZvcihsZXQgZSBpbiBpKXRbZV09aVtlXX1yZXR1cm4gdH1pZihfKGUpfHx5KGUpKXJldHVybiBlfXZhciBzZT0vOyg/IVteKF0qXCkpL2csY2U9LzooW15dKykvLEk9L1wvXCpbXl0qP1wqXC8vZztmdW5jdGlvbiBsZShlKXtsZXQgdD17fTtyZXR1cm4gZS5yZXBsYWNlKEksYGApLnNwbGl0KHNlKS5mb3JFYWNoKGU9PntpZihlKXtsZXQgbj1lLnNwbGl0KGNlKTtuLmxlbmd0aD4xJiYodFtuWzBdLnRyaW0oKV09blsxXS50cmltKCkpfX0pLHR9ZnVuY3Rpb24gTChlKXtsZXQgdD1gYDtpZihfKGUpKXQ9ZTtlbHNlIGlmKGQoZSkpZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPUwoZVtuXSk7ciYmKHQrPXIrYCBgKX1lbHNlIGlmKHkoZSkpZm9yKGxldCBuIGluIGUpZVtuXSYmKHQrPW4rYCBgKTtyZXR1cm4gdC50cmltKCl9ZnVuY3Rpb24gdWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0e2NsYXNzOnQsc3R5bGU6bn09ZTtyZXR1cm4gdCYmIV8odCkmJihlLmNsYXNzPUwodCkpLG4mJihlLnN0eWxlPUYobikpLGV9dmFyIGRlPWBpdGVtc2NvcGUsYWxsb3dmdWxsc2NyZWVuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZG9ubHlgLGZlPWUoZGUpO2RlK2BgO2Z1bmN0aW9uIHBlKGUpe3JldHVybiEhZXx8ZT09PWBgfWZ1bmN0aW9uIG1lKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtsZXQgbj0hMDtmb3IobGV0IHI9MDtuJiZyPGUubGVuZ3RoO3IrKyluPWhlKGVbcl0sdFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gaGUoZSx0KXtpZihlPT09dClyZXR1cm4hMDtsZXQgbj1tKGUpLHI9bSh0KTtpZihufHxyKXJldHVybiBuJiZyP2UuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk6ITE7aWYobj12KGUpLHI9dih0KSxufHxyKXJldHVybiBlPT09dDtpZihuPWQoZSkscj1kKHQpLG58fHIpcmV0dXJuIG4mJnI/bWUoZSx0KTohMTtpZihuPXkoZSkscj15KHQpLG58fHIpe2lmKCFufHwhcnx8T2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lLmhhc093blByb3BlcnR5KG4pLGk9dC5oYXNPd25Qcm9wZXJ0eShuKTtpZihyJiYhaXx8IXImJml8fCFoZShlW25dLHRbbl0pKXJldHVybiExfX1yZXR1cm4gU3RyaW5nKGUpPT09U3RyaW5nKHQpfWZ1bmN0aW9uIGdlKGUsdCl7cmV0dXJuIGUuZmluZEluZGV4KGU9PmhlKGUsdCkpfXZhciBfZT1lPT4hIShlJiZlLl9fdl9pc1JlZj09PSEwKSx2ZT1lPT5fKGUpP2U6ZT09bnVsbD9gYDpkKGUpfHx5KGUpJiYoZS50b1N0cmluZz09PXh8fCFnKGUudG9TdHJpbmcpKT9fZShlKT92ZShlLnZhbHVlKTpKU09OLnN0cmluZ2lmeShlLHllLDIpOlN0cmluZyhlKSx5ZT0oZSx0KT0+X2UodCk/eWUoZSx0LnZhbHVlKTpmKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cmllcygpXS5yZWR1Y2UoKGUsW3Qsbl0scik9PihlW2JlKHQscikrYCA9PmBdPW4sZSkse30pfTpwKHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChlPT5iZShlKSl9OnYodCk/YmUodCk6eSh0KSYmIWQodCkmJiF3KHQpP1N0cmluZyh0KTp0LGJlPShlLHQ9YGApPT52KGUpP2BTeW1ib2woJHtlLmRlc2NyaXB0aW9uPz90fSlgOmU7ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGU9PW51bGw/YGluaXRpYWxgOnR5cGVvZiBlPT1gc3RyaW5nYD9lPT09YGA/YCBgOmU6U3RyaW5nKGUpfXZhciBSLFNlPWNsYXNze2NvbnN0cnVjdG9yKGU9ITEpe3RoaXMuZGV0YWNoZWQ9ZSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fb249MCx0aGlzLmVmZmVjdHM9W10sdGhpcy5jbGVhbnVwcz1bXSx0aGlzLl9pc1BhdXNlZD0hMSx0aGlzLl93YXJuT25SdW49ITAsdGhpcy5fX3Zfc2tpcD0hMCwhZSYmUiYmKFIuYWN0aXZlPyh0aGlzLnBhcmVudD1SLHRoaXMuaW5kZXg9KFIuc2NvcGVzfHwoUi5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpOih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fd2Fybk9uUnVuPSExKSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9cGF1c2UoKXtpZih0aGlzLl9hY3RpdmUpe3RoaXMuX2lzUGF1c2VkPSEwO2xldCBlLHQ7aWYodGhpcy5zY29wZXMpe2xldCBuPXRoaXMuc2NvcGVzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5wYXVzZSgpfWZvcihlPTAsdD10aGlzLmVmZmVjdHMubGVuZ3RoO2U8dDtlKyspdGhpcy5lZmZlY3RzW2VdLnBhdXNlKCl9fXJlc3VtZSgpe2lmKHRoaXMuX2FjdGl2ZSYmdGhpcy5faXNQYXVzZWQpe3RoaXMuX2lzUGF1c2VkPSExO2xldCBlLHQ7aWYodGhpcy5zY29wZXMpe2xldCBuPXRoaXMuc2NvcGVzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5yZXN1bWUoKX1sZXQgbj10aGlzLmVmZmVjdHMuc2xpY2UoKTtmb3IoZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyluW2VdLnJlc3VtZSgpfX1ydW4oZSl7aWYodGhpcy5fYWN0aXZlKXtsZXQgdD1SO3RyeXtyZXR1cm4gUj10aGlzLGUoKX1maW5hbGx5e1I9dH19fW9uKCl7Kyt0aGlzLl9vbj09PTEmJih0aGlzLnByZXZTY29wZT1SLFI9dGhpcyl9b2ZmKCl7aWYodGhpcy5fb24+MCYmLS10aGlzLl9vbj09PTApe2lmKFI9PT10aGlzKVI9dGhpcy5wcmV2U2NvcGU7ZWxzZXtsZXQgZT1SO2Zvcig7ZTspe2lmKGUucHJldlNjb3BlPT09dGhpcyl7ZS5wcmV2U2NvcGU9dGhpcy5wcmV2U2NvcGU7YnJlYWt9ZT1lLnByZXZTY29wZX19dGhpcy5wcmV2U2NvcGU9dm9pZCAwfX1zdG9wKGUpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5fYWN0aXZlPSExO2xldCB0LG47Zm9yKHQ9MCxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjdHMubGVuZ3RoPTAsdD0wLG49dGhpcy5jbGVhbnVwcy5sZW5ndGg7dDxuO3QrKyl0aGlzLmNsZWFudXBzW3RdKCk7aWYodGhpcy5jbGVhbnVwcy5sZW5ndGg9MCx0aGlzLnNjb3Blcyl7bGV0IGU9dGhpcy5zY29wZXMuc2xpY2UoKTtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aGlzLnBhcmVudCYmIWUpe2xldCBlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtlJiZlIT09dGhpcyYmKHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XT1lLGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwfX19O2Z1bmN0aW9uIENlKGUpe3JldHVybiBuZXcgU2UoZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gUn1mdW5jdGlvbiBUZShlLHQ9ITEpe1ImJlIuY2xlYW51cHMucHVzaChlKX12YXIgeixFZT1uZXcgV2Vha1NldCxEZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZuPWUsdGhpcy5kZXBzPXZvaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmNsZWFudXA9dm9pZCAwLHRoaXMuc2NoZWR1bGVyPXZvaWQgMCxSJiYoUi5hY3RpdmU/Ui5lZmZlY3RzLnB1c2godGhpcyk6dGhpcy5mbGFncyY9LTIpfXBhdXNlKCl7dGhpcy5mbGFnc3w9NjR9cmVzdW1lKCl7dGhpcy5mbGFncyY2NCYmKHRoaXMuZmxhZ3MmPS02NSxFZS5oYXModGhpcykmJihFZS5kZWxldGUodGhpcyksdGhpcy50cmlnZ2VyKCkpKX1ub3RpZnkoKXt0aGlzLmZsYWdzJjImJiEodGhpcy5mbGFncyYzMil8fHRoaXMuZmxhZ3MmOHx8amUodGhpcyl9cnVuKCl7aWYoISh0aGlzLmZsYWdzJjEpKXJldHVybiB0aGlzLmZuKCk7dGhpcy5mbGFnc3w9MixLZSh0aGlzKSxQZSh0aGlzKTtsZXQgZT16LHQ9SGU7ej10aGlzLEhlPSEwO3RyeXtyZXR1cm4gdGhpcy5mbigpfWZpbmFsbHl7RmUodGhpcyksej1lLEhlPXQsdGhpcy5mbGFncyY9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWdzJjEpe2ZvcihsZXQgZT10aGlzLmRlcHM7ZTtlPWUubmV4dERlcClSZShlKTt0aGlzLmRlcHM9dGhpcy5kZXBzVGFpbD12b2lkIDAsS2UodGhpcyksdGhpcy5vblN0b3AmJnRoaXMub25TdG9wKCksdGhpcy5mbGFncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P0VlLmFkZCh0aGlzKTp0aGlzLnNjaGVkdWxlcj90aGlzLnNjaGVkdWxlcigpOnRoaXMucnVuSWZEaXJ0eSgpfXJ1bklmRGlydHkoKXtJZSh0aGlzKSYmdGhpcy5ydW4oKX1nZXQgZGlydHkoKXtyZXR1cm4gSWUodGhpcyl9fSxPZT0wLGtlLEFlO2Z1bmN0aW9uIGplKGUsdD0hMSl7aWYoZS5mbGFnc3w9OCx0KXtlLm5leHQ9QWUsQWU9ZTtyZXR1cm59ZS5uZXh0PWtlLGtlPWV9ZnVuY3Rpb24gTWUoKXtPZSsrfWZ1bmN0aW9uIE5lKCl7aWYoLS1PZT4wKXJldHVybjtpZihBZSl7bGV0IGU9QWU7Zm9yKEFlPXZvaWQgMDtlOyl7bGV0IHQ9ZS5uZXh0O2UubmV4dD12b2lkIDAsZS5mbGFncyY9LTksZT10fX1sZXQgZTtmb3IoO2tlOyl7bGV0IHQ9a2U7Zm9yKGtlPXZvaWQgMDt0Oyl7bGV0IG49dC5uZXh0O2lmKHQubmV4dD12b2lkIDAsdC5mbGFncyY9LTksdC5mbGFncyYxKXRyeXt0LnRyaWdnZXIoKX1jYXRjaCh0KXtlfHw9dH10PW59fWlmKGUpdGhyb3cgZX1mdW5jdGlvbiBQZShlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApdC52ZXJzaW9uPS0xLHQucHJldkFjdGl2ZUxpbms9dC5kZXAuYWN0aXZlTGluayx0LmRlcC5hY3RpdmVMaW5rPXR9ZnVuY3Rpb24gRmUoZSl7bGV0IHQsbj1lLmRlcHNUYWlsLHI9bjtmb3IoO3I7KXtsZXQgZT1yLnByZXZEZXA7ci52ZXJzaW9uPT09LTE/KHI9PT1uJiYobj1lKSxSZShyKSx6ZShyKSk6dD1yLHIuZGVwLmFjdGl2ZUxpbms9ci5wcmV2QWN0aXZlTGluayxyLnByZXZBY3RpdmVMaW5rPXZvaWQgMCxyPWV9ZS5kZXBzPXQsZS5kZXBzVGFpbD1ufWZ1bmN0aW9uIEllKGUpe2ZvcihsZXQgdD1lLmRlcHM7dDt0PXQubmV4dERlcClpZih0LmRlcC52ZXJzaW9uIT09dC52ZXJzaW9ufHx0LmRlcC5jb21wdXRlZCYmKExlKHQuZGVwLmNvbXB1dGVkKXx8dC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbikpcmV0dXJuITA7cmV0dXJuISFlLl9kaXJ0eX1mdW5jdGlvbiBMZShlKXtpZihlLmZsYWdzJjQmJiEoZS5mbGFncyYxNil8fChlLmZsYWdzJj0tMTcsZS5nbG9iYWxWZXJzaW9uPT09cWUpfHwoZS5nbG9iYWxWZXJzaW9uPXFlLCFlLmlzU1NSJiZlLmZsYWdzJjEyOCYmKCFlLmRlcHMmJiFlLl9kaXJ0eXx8IUllKGUpKSkpcmV0dXJuO2UuZmxhZ3N8PTI7bGV0IHQ9ZS5kZXAsbj16LHI9SGU7ej1lLEhlPSEwO3RyeXtQZShlKTtsZXQgbj1lLmZuKGUuX3ZhbHVlKTsodC52ZXJzaW9uPT09MHx8aihuLGUuX3ZhbHVlKSkmJihlLmZsYWdzfD0xMjgsZS5fdmFsdWU9bix0LnZlcnNpb24rKyl9Y2F0Y2goZSl7dGhyb3cgdC52ZXJzaW9uKyssZX1maW5hbGx5e3o9bixIZT1yLEZlKGUpLGUuZmxhZ3MmPS0zfX1mdW5jdGlvbiBSZShlLHQ9ITEpe2xldHtkZXA6bixwcmV2U3ViOnIsbmV4dFN1YjppfT1lO2lmKHImJihyLm5leHRTdWI9aSxlLnByZXZTdWI9dm9pZCAwKSxpJiYoaS5wcmV2U3ViPXIsZS5uZXh0U3ViPXZvaWQgMCksbi5zdWJzPT09ZSYmKG4uc3Vicz1yLCFyJiZuLmNvbXB1dGVkKSl7bi5jb21wdXRlZC5mbGFncyY9LTU7Zm9yKGxldCBlPW4uY29tcHV0ZWQuZGVwcztlO2U9ZS5uZXh0RGVwKVJlKGUsITApfSF0JiYhLS1uLnNjJiZuLm1hcCYmbi5tYXAuZGVsZXRlKG4ua2V5KX1mdW5jdGlvbiB6ZShlKXtsZXR7cHJldkRlcDp0LG5leHREZXA6bn09ZTt0JiYodC5uZXh0RGVwPW4sZS5wcmV2RGVwPXZvaWQgMCksbiYmKG4ucHJldkRlcD10LGUubmV4dERlcD12b2lkIDApfWZ1bmN0aW9uIEJlKGUsdCl7ZS5lZmZlY3QgaW5zdGFuY2VvZiBEZSYmKGU9ZS5lZmZlY3QuZm4pO2xldCBuPW5ldyBEZShlKTt0JiZzKG4sdCk7dHJ5e24ucnVuKCl9Y2F0Y2goZSl7dGhyb3cgbi5zdG9wKCksZX1sZXQgcj1uLnJ1bi5iaW5kKG4pO3JldHVybiByLmVmZmVjdD1uLHJ9ZnVuY3Rpb24gVmUoZSl7ZS5lZmZlY3Quc3RvcCgpfXZhciBIZT0hMCxVZT1bXTtmdW5jdGlvbiBXZSgpe1VlLnB1c2goSGUpLEhlPSExfWZ1bmN0aW9uIEdlKCl7bGV0IGU9VWUucG9wKCk7SGU9ZT09PXZvaWQgMHx8ZX1mdW5jdGlvbiBLZShlKXtsZXR7Y2xlYW51cDp0fT1lO2lmKGUuY2xlYW51cD12b2lkIDAsdCl7bGV0IGU9ejt6PXZvaWQgMDt0cnl7dCgpfWZpbmFsbHl7ej1lfX19dmFyIHFlPTAsSmU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN1Yj1lLHRoaXMuZGVwPXQsdGhpcy52ZXJzaW9uPXQudmVyc2lvbix0aGlzLm5leHREZXA9dGhpcy5wcmV2RGVwPXRoaXMubmV4dFN1Yj10aGlzLnByZXZTdWI9dGhpcy5wcmV2QWN0aXZlTGluaz12b2lkIDB9fSxZZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXB1dGVkPWUsdGhpcy52ZXJzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnM9dm9pZCAwLHRoaXMubWFwPXZvaWQgMCx0aGlzLmtleT12b2lkIDAsdGhpcy5zYz0wLHRoaXMuX192X3NraXA9ITB9dHJhY2soZSl7aWYoIXp8fCFIZXx8ej09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCB0PXRoaXMuYWN0aXZlTGluaztpZih0PT09dm9pZCAwfHx0LnN1YiE9PXopdD10aGlzLmFjdGl2ZUxpbms9bmV3IEplKHosdGhpcyksei5kZXBzPyh0LnByZXZEZXA9ei5kZXBzVGFpbCx6LmRlcHNUYWlsLm5leHREZXA9dCx6LmRlcHNUYWlsPXQpOnouZGVwcz16LmRlcHNUYWlsPXQsWGUodCk7ZWxzZSBpZih0LnZlcnNpb249PT0tMSYmKHQudmVyc2lvbj10aGlzLnZlcnNpb24sdC5uZXh0RGVwKSl7bGV0IGU9dC5uZXh0RGVwO2UucHJldkRlcD10LnByZXZEZXAsdC5wcmV2RGVwJiYodC5wcmV2RGVwLm5leHREZXA9ZSksdC5wcmV2RGVwPXouZGVwc1RhaWwsdC5uZXh0RGVwPXZvaWQgMCx6LmRlcHNUYWlsLm5leHREZXA9dCx6LmRlcHNUYWlsPXQsei5kZXBzPT09dCYmKHouZGVwcz1lKX1yZXR1cm4gdH10cmlnZ2VyKGUpe3RoaXMudmVyc2lvbisrLHFlKyssdGhpcy5ub3RpZnkoZSl9bm90aWZ5KGUpe01lKCk7dHJ5e2ZvcihsZXQgZT10aGlzLnN1YnM7ZTtlPWUucHJldlN1YillLnN1Yi5ub3RpZnkoKSYmZS5zdWIuZGVwLm5vdGlmeSgpfWZpbmFsbHl7TmUoKX19fTtmdW5jdGlvbiBYZShlKXtpZihlLmRlcC5zYysrLGUuc3ViLmZsYWdzJjQpe2xldCB0PWUuZGVwLmNvbXB1dGVkO2lmKHQmJiFlLmRlcC5zdWJzKXt0LmZsYWdzfD0yMDtmb3IobGV0IGU9dC5kZXBzO2U7ZT1lLm5leHREZXApWGUoZSl9bGV0IG49ZS5kZXAuc3VicztuIT09ZSYmKGUucHJldlN1Yj1uLG4mJihuLm5leHRTdWI9ZSkpLGUuZGVwLnN1YnM9ZX19dmFyIFplPW5ldyBXZWFrTWFwLFFlPVN5bWJvbChgYCksJGU9U3ltYm9sKGBgKSxldD1TeW1ib2woYGApO2Z1bmN0aW9uIEIoZSx0LG4pe2lmKEhlJiZ6KXtsZXQgdD1aZS5nZXQoZSk7dHx8WmUuc2V0KGUsdD1uZXcgTWFwKTtsZXQgcj10LmdldChuKTtyfHwodC5zZXQobixyPW5ldyBZZSksci5tYXA9dCxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0aW9uIHR0KGUsdCxuLHIsaSxhKXtsZXQgbz1aZS5nZXQoZSk7aWYoIW8pe3FlKys7cmV0dXJufWxldCBzPWU9PntlJiZlLnRyaWdnZXIoKX07aWYoTWUoKSx0PT09YGNsZWFyYClvLmZvckVhY2gocyk7ZWxzZXtsZXQgaT1kKGUpLGE9aSYmVChuKTtpZihpJiZuPT09YGxlbmd0aGApe2xldCBlPU51bWJlcihyKTtvLmZvckVhY2goKHQsbik9Pnsobj09PWBsZW5ndGhgfHxuPT09ZXR8fCF2KG4pJiZuPj1lKSYmcyh0KX0pfWVsc2Ugc3dpdGNoKChuIT09dm9pZCAwfHxvLmhhcyh2b2lkIDApKSYmcyhvLmdldChuKSksYSYmcyhvLmdldChldCkpLHQpe2Nhc2VgYWRkYDppP2EmJnMoby5nZXQoYGxlbmd0aGApKToocyhvLmdldChRZSkpLGYoZSkmJnMoby5nZXQoJGUpKSk7YnJlYWs7Y2FzZWBkZWxldGVgOml8fChzKG8uZ2V0KFFlKSksZihlKSYmcyhvLmdldCgkZSkpKTticmVhaztjYXNlYHNldGA6ZihlKSYmcyhvLmdldChRZSkpfX1OZSgpfWZ1bmN0aW9uIG50KGUsdCl7bGV0IG49WmUuZ2V0KGUpO3JldHVybiBuJiZuLmdldCh0KX1mdW5jdGlvbiBydChlKXtsZXQgdD1WKGUpO3JldHVybiB0PT09ZT90OihCKHQsYGl0ZXJhdGVgLGV0KSxHdChlKT90OnQubWFwKEp0KSl9ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIEIoZT1WKGUpLGBpdGVyYXRlYCxldCksZX1mdW5jdGlvbiBhdChlLHQpe3JldHVybiBXdChlKT9ZdChVdChlKT9KdCh0KTp0KTpKdCh0KX12YXIgb3Q9e19fcHJvdG9fXzpudWxsLFtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHN0KHRoaXMsU3ltYm9sLml0ZXJhdG9yLGU9PmF0KHRoaXMsZSkpfSxjb25jYXQoLi4uZSl7cmV0dXJuIHJ0KHRoaXMpLmNvbmNhdCguLi5lLm1hcChlPT5kKGUpP3J0KGUpOmUpKX0sZW50cmllcygpe3JldHVybiBzdCh0aGlzLGBlbnRyaWVzYCxlPT4oZVsxXT1hdCh0aGlzLGVbMV0pLGUpKX0sZXZlcnkoZSx0KXtyZXR1cm4gbHQodGhpcyxgZXZlcnlgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZmlsdGVyKGUsdCl7cmV0dXJuIGx0KHRoaXMsYGZpbHRlcmAsZSx0LGU9PmUubWFwKGU9PmF0KHRoaXMsZSkpLGFyZ3VtZW50cyl9LGZpbmQoZSx0KXtyZXR1cm4gbHQodGhpcyxgZmluZGAsZSx0LGU9PmF0KHRoaXMsZSksYXJndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7cmV0dXJuIGx0KHRoaXMsYGZpbmRJbmRleGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmaW5kTGFzdChlLHQpe3JldHVybiBsdCh0aGlzLGBmaW5kTGFzdGAsZSx0LGU9PmF0KHRoaXMsZSksYXJndW1lbnRzKX0sZmluZExhc3RJbmRleChlLHQpe3JldHVybiBsdCh0aGlzLGBmaW5kTGFzdEluZGV4YCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZvckVhY2goZSx0KXtyZXR1cm4gbHQodGhpcyxgZm9yRWFjaGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gZHQodGhpcyxgaW5jbHVkZXNgLGUpfSxpbmRleE9mKC4uLmUpe3JldHVybiBkdCh0aGlzLGBpbmRleE9mYCxlKX0sam9pbihlKXtyZXR1cm4gcnQodGhpcykuam9pbihlKX0sbGFzdEluZGV4T2YoLi4uZSl7cmV0dXJuIGR0KHRoaXMsYGxhc3RJbmRleE9mYCxlKX0sbWFwKGUsdCl7cmV0dXJuIGx0KHRoaXMsYG1hcGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxwb3AoKXtyZXR1cm4gZnQodGhpcyxgcG9wYCl9LHB1c2goLi4uZSl7cmV0dXJuIGZ0KHRoaXMsYHB1c2hgLGUpfSxyZWR1Y2UoZSwuLi50KXtyZXR1cm4gdXQodGhpcyxgcmVkdWNlYCxlLHQpfSxyZWR1Y2VSaWdodChlLC4uLnQpe3JldHVybiB1dCh0aGlzLGByZWR1Y2VSaWdodGAsZSx0KX0sc2hpZnQoKXtyZXR1cm4gZnQodGhpcyxgc2hpZnRgKX0sc29tZShlLHQpe3JldHVybiBsdCh0aGlzLGBzb21lYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LHNwbGljZSguLi5lKXtyZXR1cm4gZnQodGhpcyxgc3BsaWNlYCxlKX0sdG9SZXZlcnNlZCgpe3JldHVybiBydCh0aGlzKS50b1JldmVyc2VkKCl9LHRvU29ydGVkKGUpe3JldHVybiBydCh0aGlzKS50b1NvcnRlZChlKX0sdG9TcGxpY2VkKC4uLmUpe3JldHVybiBydCh0aGlzKS50b1NwbGljZWQoLi4uZSl9LHVuc2hpZnQoLi4uZSl7cmV0dXJuIGZ0KHRoaXMsYHVuc2hpZnRgLGUpfSx2YWx1ZXMoKXtyZXR1cm4gc3QodGhpcyxgdmFsdWVzYCxlPT5hdCh0aGlzLGUpKX19O2Z1bmN0aW9uIHN0KGUsdCxuKXtsZXQgcj1pdChlKSxpPXJbdF0oKTtyZXR1cm4gciE9PWUmJiFHdChlKSYmKGkuX25leHQ9aS5uZXh0LGkubmV4dD0oKT0+e2xldCBlPWkuX25leHQoKTtyZXR1cm4gZS5kb25lfHwoZS52YWx1ZT1uKGUudmFsdWUpKSxlfSksaX12YXIgY3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGx0KGUsdCxuLHIsaSxhKXtsZXQgbz1pdChlKSxzPW8hPT1lJiYhR3QoZSksYz1vW3RdO2lmKGMhPT1jdFt0XSl7bGV0IHQ9Yy5hcHBseShlLGEpO3JldHVybiBzP0p0KHQpOnR9bGV0IGw9bjtvIT09ZSYmKHM/bD1mdW5jdGlvbih0LHIpe3JldHVybiBuLmNhbGwodGhpcyxhdChlLHQpLHIsZSl9Om4ubGVuZ3RoPjImJihsPWZ1bmN0aW9uKHQscil7cmV0dXJuIG4uY2FsbCh0aGlzLHQscixlKX0pKTtsZXQgdT1jLmNhbGwobyxsLHIpO3JldHVybiBzJiZpP2kodSk6dX1mdW5jdGlvbiB1dChlLHQsbixyKXtsZXQgaT1pdChlKSxhPWkhPT1lJiYhR3QoZSksbz1uLHM9ITE7aSE9PWUmJihhPyhzPXIubGVuZ3RoPT09MCxvPWZ1bmN0aW9uKHQscixpKXtyZXR1cm4gcyYmKHM9ITEsdD1hdChlLHQpKSxuLmNhbGwodGhpcyx0LGF0KGUsciksaSxlKX0pOm4ubGVuZ3RoPjMmJihvPWZ1bmN0aW9uKHQscixpKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxyLGksZSl9KSk7bGV0IGM9aVt0XShvLC4uLnIpO3JldHVybiBzP2F0KGUsYyk6Y31mdW5jdGlvbiBkdChlLHQsbil7bGV0IHI9VihlKTtCKHIsYGl0ZXJhdGVgLGV0KTtsZXQgaT1yW3RdKC4uLm4pO3JldHVybihpPT09LTF8fGk9PT0hMSkmJkt0KG5bMF0pPyhuWzBdPVYoblswXSksclt0XSguLi5uKSk6aX1mdW5jdGlvbiBmdChlLHQsbj1bXSl7V2UoKSxNZSgpO2xldCByPVYoZSlbdF0uYXBwbHkoZSxuKTtyZXR1cm4gTmUoKSxHZSgpLHJ9dmFyIHB0PWUoYF9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZWApLG10PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoZT0+ZSE9PWBhcmd1bWVudHNgJiZlIT09YGNhbGxlcmApLm1hcChlPT5TeW1ib2xbZV0pLmZpbHRlcih2KSk7ZnVuY3Rpb24gaHQoZSl7dihlKXx8KGU9U3RyaW5nKGUpKTtsZXQgdD1WKHRoaXMpO3JldHVybiBCKHQsYGhhc2AsZSksdC5oYXNPd25Qcm9wZXJ0eShlKX12YXIgZ3Q9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSx0PSExKXt0aGlzLl9pc1JlYWRvbmx5PWUsdGhpcy5faXNTaGFsbG93PXR9Z2V0KGUsdCxuKXtpZih0PT09YF9fdl9za2lwYClyZXR1cm4gZS5fX3Zfc2tpcDtsZXQgcj10aGlzLl9pc1JlYWRvbmx5LGk9dGhpcy5faXNTaGFsbG93O2lmKHQ9PT1gX192X2lzUmVhY3RpdmVgKXJldHVybiFyO2lmKHQ9PT1gX192X2lzUmVhZG9ubHlgKXJldHVybiByO2lmKHQ9PT1gX192X2lzU2hhbGxvd2ApcmV0dXJuIGk7aWYodD09PWBfX3ZfcmF3YClyZXR1cm4gbj09PShyP2k/SXQ6RnQ6aT9QdDpOdCkuZ2V0KGUpfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik/ZTp2b2lkIDA7bGV0IGE9ZChlKTtpZighcil7bGV0IGU7aWYoYSYmKGU9b3RbdF0pKXJldHVybiBlO2lmKHQ9PT1gaGFzT3duUHJvcGVydHlgKXJldHVybiBodH1sZXQgbz1SZWZsZWN0LmdldChlLHQsSChlKT9lOm4pO2lmKCh2KHQpP210Lmhhcyh0KTpwdCh0KSl8fChyfHxCKGUsYGdldGAsdCksaSkpcmV0dXJuIG87aWYoSChvKSl7bGV0IGU9YSYmVCh0KT9vOm8udmFsdWU7cmV0dXJuIHImJnkoZSk/QnQoZSk6ZX1yZXR1cm4geShvKT9yP0J0KG8pOlJ0KG8pOm99fSxfdD1jbGFzcyBleHRlbmRzIGd0e2NvbnN0cnVjdG9yKGU9ITEpe3N1cGVyKCExLGUpfXNldChlLHQsbixyKXtsZXQgaT1lW3RdLGE9ZChlKSYmVCh0KTtpZighdGhpcy5faXNTaGFsbG93KXtsZXQgZT1XdChpKTtpZighR3QobikmJiFXdChuKSYmKGk9VihpKSxuPVYobikpLCFhJiZIKGkpJiYhSChuKSlyZXR1cm4gZXx8KGkudmFsdWU9biksITB9bGV0IG89YT9OdW1iZXIodCk8ZS5sZW5ndGg6dShlLHQpLHM9UmVmbGVjdC5zZXQoZSx0LG4sSChlKT9lOnIpO3JldHVybiBlPT09VihyKSYmcyYmKG8/aihuLGkpJiZ0dChlLGBzZXRgLHQsbixpKTp0dChlLGBhZGRgLHQsbikpLHN9ZGVsZXRlUHJvcGVydHkoZSx0KXtsZXQgbj11KGUsdCkscj1lW3RdLGk9UmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlLHQpO3JldHVybiBpJiZuJiZ0dChlLGBkZWxldGVgLHQsdm9pZCAwLHIpLGl9aGFzKGUsdCl7bGV0IG49UmVmbGVjdC5oYXMoZSx0KTtyZXR1cm4oIXYodCl8fCFtdC5oYXModCkpJiZCKGUsYGhhc2AsdCksbn1vd25LZXlzKGUpe3JldHVybiBCKGUsYGl0ZXJhdGVgLGQoZSk/YGxlbmd0aGA6UWUpLFJlZmxlY3Qub3duS2V5cyhlKX19LHZ0PWNsYXNzIGV4dGVuZHMgZ3R7Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoITAsZSl9c2V0KGUsdCl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkoZSx0KXtyZXR1cm4hMH19LHl0PW5ldyBfdCxidD1uZXcgdnQseHQ9bmV3IF90KCEwKSxTdD1uZXcgdnQoITApLEN0PWU9PmUsd3Q9ZT0+UmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKTtmdW5jdGlvbiBUdChlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe2xldCBpPXRoaXMuX192X3JhdyxhPVYoaSksbz1mKGEpLGM9ZT09PWBlbnRyaWVzYHx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbyxsPWU9PT1ga2V5c2AmJm8sdT1pW2VdKC4uLnIpLGQ9bj9DdDp0P1l0Okp0O3JldHVybiF0JiZCKGEsYGl0ZXJhdGVgLGw/JGU6UWUpLHMoT2JqZWN0LmNyZWF0ZSh1KSx7bmV4dCgpe2xldHt2YWx1ZTplLGRvbmU6dH09dS5uZXh0KCk7cmV0dXJuIHQ/e3ZhbHVlOmUsZG9uZTp0fTp7dmFsdWU6Yz9bZChlWzBdKSxkKGVbMV0pXTpkKGUpLGRvbmU6dH19fSl9fWZ1bmN0aW9uIEV0KGUpe3JldHVybiBmdW5jdGlvbiguLi50KXtyZXR1cm4gZT09PWBkZWxldGVgPyExOmU9PT1gY2xlYXJgP3ZvaWQgMDp0aGlzfX1mdW5jdGlvbiBEdChlLHQpe2xldCBuPXtnZXQobil7bGV0IHI9dGhpcy5fX3ZfcmF3LGk9VihyKSxhPVYobik7ZXx8KGoobixhKSYmQihpLGBnZXRgLG4pLEIoaSxgZ2V0YCxhKSk7bGV0e2hhczpvfT13dChpKSxzPXQ/Q3Q6ZT9ZdDpKdDtpZihvLmNhbGwoaSxuKSlyZXR1cm4gcyhyLmdldChuKSk7aWYoby5jYWxsKGksYSkpcmV0dXJuIHMoci5nZXQoYSkpO3IhPT1pJiZyLmdldChuKX0sZ2V0IHNpemUoKXtsZXQgdD10aGlzLl9fdl9yYXc7cmV0dXJuIWUmJkIoVih0KSxgaXRlcmF0ZWAsUWUpLHQuc2l6ZX0saGFzKHQpe2xldCBuPXRoaXMuX192X3JhdyxyPVYobiksaT1WKHQpO3JldHVybiBlfHwoaih0LGkpJiZCKHIsYGhhc2AsdCksQihyLGBoYXNgLGkpKSx0PT09aT9uLmhhcyh0KTpuLmhhcyh0KXx8bi5oYXMoaSl9LGZvckVhY2gobixyKXtsZXQgaT10aGlzLGE9aS5fX3ZfcmF3LG89VihhKSxzPXQ/Q3Q6ZT9ZdDpKdDtyZXR1cm4hZSYmQihvLGBpdGVyYXRlYCxRZSksYS5mb3JFYWNoKChlLHQpPT5uLmNhbGwocixzKGUpLHModCksaSkpfX07cmV0dXJuIHMobixlP3thZGQ6RXQoYGFkZGApLHNldDpFdChgc2V0YCksZGVsZXRlOkV0KGBkZWxldGVgKSxjbGVhcjpFdChgY2xlYXJgKX06e2FkZChlKXtsZXQgbj1WKHRoaXMpLHI9d3QobiksaT1WKGUpLGE9IXQmJiFHdChlKSYmIVd0KGUpP2k6ZTtyZXR1cm4gci5oYXMuY2FsbChuLGEpfHxqKGUsYSkmJnIuaGFzLmNhbGwobixlKXx8aihpLGEpJiZyLmhhcy5jYWxsKG4saSl8fChuLmFkZChhKSx0dChuLGBhZGRgLGEsYSkpLHRoaXN9LHNldChlLG4peyF0JiYhR3QobikmJiFXdChuKSYmKG49VihuKSk7bGV0IHI9Vih0aGlzKSx7aGFzOmksZ2V0OmF9PXd0KHIpLG89aS5jYWxsKHIsZSk7b3x8PShlPVYoZSksaS5jYWxsKHIsZSkpO2xldCBzPWEuY2FsbChyLGUpO3JldHVybiByLnNldChlLG4pLG8/aihuLHMpJiZ0dChyLGBzZXRgLGUsbixzKTp0dChyLGBhZGRgLGUsbiksdGhpc30sZGVsZXRlKGUpe2xldCB0PVYodGhpcykse2hhczpuLGdldDpyfT13dCh0KSxpPW4uY2FsbCh0LGUpO2l8fD0oZT1WKGUpLG4uY2FsbCh0LGUpKTtsZXQgYT1yP3IuY2FsbCh0LGUpOnZvaWQgMCxvPXQuZGVsZXRlKGUpO3JldHVybiBpJiZ0dCh0LGBkZWxldGVgLGUsdm9pZCAwLGEpLG99LGNsZWFyKCl7bGV0IGU9Vih0aGlzKSx0PWUuc2l6ZSE9PTAsbj1lLmNsZWFyKCk7cmV0dXJuIHQmJnR0KGUsYGNsZWFyYCx2b2lkIDAsdm9pZCAwLHZvaWQgMCksbn19KSxbYGtleXNgLGB2YWx1ZXNgLGBlbnRyaWVzYCxTeW1ib2wuaXRlcmF0b3JdLmZvckVhY2gocj0+e25bcl09VHQocixlLHQpfSksbn1mdW5jdGlvbiBPdChlLHQpe2xldCBuPUR0KGUsdCk7cmV0dXJuKHQscixpKT0+cj09PWBfX3ZfaXNSZWFjdGl2ZWA/IWU6cj09PWBfX3ZfaXNSZWFkb25seWA/ZTpyPT09YF9fdl9yYXdgP3Q6UmVmbGVjdC5nZXQodShuLHIpJiZyIGluIHQ/bjp0LHIsaSl9dmFyIGt0PXtnZXQ6T3QoITEsITEpfSxBdD17Z2V0Ok90KCExLCEwKX0sanQ9e2dldDpPdCghMCwhMSl9LE10PXtnZXQ6T3QoITAsITApfSxOdD1uZXcgV2Vha01hcCxQdD1uZXcgV2Vha01hcCxGdD1uZXcgV2Vha01hcCxJdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBMdChlKXtzd2l0Y2goZSl7Y2FzZWBPYmplY3RgOmNhc2VgQXJyYXlgOnJldHVybiAxO2Nhc2VgTWFwYDpjYXNlYFNldGA6Y2FzZWBXZWFrTWFwYDpjYXNlYFdlYWtTZXRgOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBXdChlKT9lOkh0KGUsITEseXQsa3QsTnQpfWZ1bmN0aW9uIHp0KGUpe3JldHVybiBIdChlLCExLHh0LEF0LFB0KX1mdW5jdGlvbiBCdChlKXtyZXR1cm4gSHQoZSwhMCxidCxqdCxGdCl9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIEh0KGUsITAsU3QsTXQsSXQpfWZ1bmN0aW9uIEh0KGUsdCxuLHIsaSl7aWYoIXkoZSl8fGUuX192X3JhdyYmISh0JiZlLl9fdl9pc1JlYWN0aXZlKXx8ZS5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoZSkpcmV0dXJuIGU7bGV0IGE9aS5nZXQoZSk7aWYoYSlyZXR1cm4gYTtsZXQgbz1MdChDKGUpKTtpZihvPT09MClyZXR1cm4gZTtsZXQgcz1uZXcgUHJveHkoZSxvPT09Mj9yOm4pO3JldHVybiBpLnNldChlLHMpLHN9ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIFd0KGUpP1V0KGUuX192X3Jhdyk6ISEoZSYmZS5fX3ZfaXNSZWFjdGl2ZSl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNSZWFkb25seSl9ZnVuY3Rpb24gR3QoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNTaGFsbG93KX1mdW5jdGlvbiBLdChlKXtyZXR1cm4gZT8hIWUuX192X3JhdzohMX1mdW5jdGlvbiBWKGUpe2xldCB0PWUmJmUuX192X3JhdztyZXR1cm4gdD9WKHQpOmV9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIXUoZSxgX192X3NraXBgKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmTihlLGBfX3Zfc2tpcGAsITApLGV9dmFyIEp0PWU9PnkoZSk/UnQoZSk6ZSxZdD1lPT55KGUpP0J0KGUpOmU7ZnVuY3Rpb24gSChlKXtyZXR1cm4gZT9lLl9fdl9pc1JlZj09PSEwOiExfWZ1bmN0aW9uIFh0KGUpe3JldHVybiBRdChlLCExKX1mdW5jdGlvbiBadChlKXtyZXR1cm4gUXQoZSwhMCl9ZnVuY3Rpb24gUXQoZSx0KXtyZXR1cm4gSChlKT9lOm5ldyAkdChlLHQpfXZhciAkdD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGVwPW5ldyBZZSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1NoYWxsb3c9ITEsdGhpcy5fcmF3VmFsdWU9dD9lOlYoZSksdGhpcy5fdmFsdWU9dD9lOkp0KGUpLHRoaXMuX192X2lzU2hhbGxvdz10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmRlcC50cmFjaygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXtsZXQgdD10aGlzLl9yYXdWYWx1ZSxuPXRoaXMuX192X2lzU2hhbGxvd3x8R3QoZSl8fFd0KGUpO2U9bj9lOlYoZSksaihlLHQpJiYodGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl92YWx1ZT1uP2U6SnQoZSksdGhpcy5kZXAudHJpZ2dlcigpKX19O2Z1bmN0aW9uIGVuKGUpe2UuZGVwJiZlLmRlcC50cmlnZ2VyKCl9ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIEgoZSk/ZS52YWx1ZTplfWZ1bmN0aW9uIG5uKGUpe3JldHVybiBnKGUpP2UoKTp0bihlKX12YXIgcm49e2dldDooZSx0LG4pPT50PT09YF9fdl9yYXdgP2U6dG4oUmVmbGVjdC5nZXQoZSx0LG4pKSxzZXQ6KGUsdCxuLHIpPT57bGV0IGk9ZVt0XTtyZXR1cm4gSChpKSYmIUgobik/KGkudmFsdWU9biwhMCk6UmVmbGVjdC5zZXQoZSx0LG4scil9fTtmdW5jdGlvbiBhbihlKXtyZXR1cm4gVXQoZSk/ZTpuZXcgUHJveHkoZSxybil9dmFyIG9uPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMDtsZXQgdD10aGlzLmRlcD1uZXcgWWUse2dldDpuLHNldDpyfT1lKHQudHJhY2suYmluZCh0KSx0LnRyaWdnZXIuYmluZCh0KSk7dGhpcy5fZ2V0PW4sdGhpcy5fc2V0PXJ9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlPXRoaXMuX2dldCgpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXQoZSl9fTtmdW5jdGlvbiBzbihlKXtyZXR1cm4gbmV3IG9uKGUpfWZ1bmN0aW9uIGNuKGUpe2xldCB0PWQoZSk/QXJyYXkoZS5sZW5ndGgpOnt9O2ZvcihsZXQgbiBpbiBlKXRbbl09Zm4oZSxuKTtyZXR1cm4gdH12YXIgbG49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX29iamVjdD1lLHRoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLl9rZXk9dih0KT90OlN0cmluZyh0KSx0aGlzLl9yYXc9VihlKTtsZXQgcj0hMCxpPWU7aWYoIWQoZSl8fHYodGhpcy5fa2V5KXx8IVQodGhpcy5fa2V5KSlkbyByPSFLdChpKXx8R3QoaSk7d2hpbGUociYmKGk9aS5fX3ZfcmF3KSk7dGhpcy5fc2hhbGxvdz1yfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX29iamVjdFt0aGlzLl9rZXldO3JldHVybiB0aGlzLl9zaGFsbG93JiYoZT10bihlKSksdGhpcy5fdmFsdWU9ZT09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6ZX1zZXQgdmFsdWUoZSl7aWYodGhpcy5fc2hhbGxvdyYmSCh0aGlzLl9yYXdbdGhpcy5fa2V5XSkpe2xldCB0PXRoaXMuX29iamVjdFt0aGlzLl9rZXldO2lmKEgodCkpe3QudmFsdWU9ZTtyZXR1cm59fXRoaXMuX29iamVjdFt0aGlzLl9rZXldPWV9Z2V0IGRlcCgpe3JldHVybiBudCh0aGlzLl9yYXcsdGhpcy5fa2V5KX19LHVuPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2dldHRlcj1lLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX192X2lzUmVhZG9ubHk9ITAsdGhpcy5fdmFsdWU9dm9pZCAwfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZT10aGlzLl9nZXR0ZXIoKX19O2Z1bmN0aW9uIGRuKGUsdCxuKXtyZXR1cm4gSChlKT9lOmcoZSk/bmV3IHVuKGUpOnkoZSkmJmFyZ3VtZW50cy5sZW5ndGg+MT9mbihlLHQsbik6WHQoZSl9ZnVuY3Rpb24gZm4oZSx0LG4pe3JldHVybiBuZXcgbG4oZSx0LG4pfXZhciBwbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5mbj1lLHRoaXMuc2V0dGVyPXQsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuZGVwPW5ldyBZZSh0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm9pZCAwLHRoaXMuZGVwc1RhaWw9dm9pZCAwLHRoaXMuZmxhZ3M9MTYsdGhpcy5nbG9iYWxWZXJzaW9uPXFlLTEsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmVmZmVjdD10aGlzLHRoaXMuX192X2lzUmVhZG9ubHk9IXQsdGhpcy5pc1NTUj1ufW5vdGlmeSgpe2lmKHRoaXMuZmxhZ3N8PTE2LCEodGhpcy5mbGFncyY4KSYmeiE9PXRoaXMpcmV0dXJuIGplKHRoaXMsITApLCEwfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuZGVwLnRyYWNrKCk7cmV0dXJuIExlKHRoaXMpLGUmJihlLnZlcnNpb249dGhpcy5kZXAudmVyc2lvbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMuc2V0dGVyJiZ0aGlzLnNldHRlcihlKX19O2Z1bmN0aW9uIG1uKGUsdCxuPSExKXtsZXQgcixpO3JldHVybiBnKGUpP3I9ZToocj1lLmdldCxpPWUuc2V0KSxuZXcgcG4ocixpLG4pfXZhciBobj17R0VUOmBnZXRgLEhBUzpgaGFzYCxJVEVSQVRFOmBpdGVyYXRlYH0sZ249e1NFVDpgc2V0YCxBREQ6YGFkZGAsREVMRVRFOmBkZWxldGVgLENMRUFSOmBjbGVhcmB9LF9uPXt9LHZuPW5ldyBXZWFrTWFwLHluPXZvaWQgMDtmdW5jdGlvbiBibigpe3JldHVybiB5bn1mdW5jdGlvbiB4bihlLHQ9ITEsbj15bil7aWYobil7bGV0IHQ9dm4uZ2V0KG4pO3R8fHZuLnNldChuLHQ9W10pLHQucHVzaChlKX19ZnVuY3Rpb24gU24oZSxuLGk9dCl7bGV0e2ltbWVkaWF0ZTphLGRlZXA6byxvbmNlOnMsc2NoZWR1bGVyOmwsYXVnbWVudEpvYjp1LGNhbGw6Zn09aSxwPWU9Pm8/ZTpHdChlKXx8bz09PSExfHxvPT09MD9DbihlLDEpOkNuKGUpLG0saCxfLHYseT0hMSxiPSExO2lmKEgoZSk/KGg9KCk9PmUudmFsdWUseT1HdChlKSk6VXQoZSk/KGg9KCk9PnAoZSkseT0hMCk6ZChlKT8oYj0hMCx5PWUuc29tZShlPT5VdChlKXx8R3QoZSkpLGg9KCk9PmUubWFwKGU9PntpZihIKGUpKXJldHVybiBlLnZhbHVlO2lmKFV0KGUpKXJldHVybiBwKGUpO2lmKGcoZSkpcmV0dXJuIGY/ZihlLDIpOmUoKX0pKTpoPWcoZSk/bj9mPygpPT5mKGUsMik6ZTooKT0+e2lmKF8pe1dlKCk7dHJ5e18oKX1maW5hbGx5e0dlKCl9fWxldCB0PXluO3luPW07dHJ5e3JldHVybiBmP2YoZSwzLFt2XSk6ZSh2KX1maW5hbGx5e3luPXR9fTpyLG4mJm8pe2xldCBlPWgsdD1vPT09ITA/MS8wOm87aD0oKT0+Q24oZSgpLHQpfWxldCB4PXdlKCksUz0oKT0+e20uc3RvcCgpLHgmJnguYWN0aXZlJiZjKHguZWZmZWN0cyxtKX07aWYocyYmbil7bGV0IGU9bjtuPSguLi50KT0+e2xldCBuPWUoLi4udCk7cmV0dXJuIFMoKSxufX1sZXQgQz1iP0FycmF5KGUubGVuZ3RoKS5maWxsKF9uKTpfbix3PWU9PntpZighKCEobS5mbGFncyYxKXx8IW0uZGlydHkmJiFlKSl7aWYobil7bGV0IHQ9bS5ydW4oKTtpZihlfHxvfHx5fHwoYj90LnNvbWUoKGUsdCk9PmooZSxDW3RdKSk6aih0LEMpKSl7XyYmXygpO2xldCBlPXluO3luPW07dHJ5e2xldCBlPVt0LEM9PT1fbj92b2lkIDA6YiYmQ1swXT09PV9uP1tdOkMsdl07Qz10LGY/ZihuLDMsZSk6biguLi5lKX1maW5hbGx5e3luPWV9fX1lbHNlIG0ucnVuKCl9fTtyZXR1cm4gdSYmdSh3KSxtPW5ldyBEZShoKSxtLnNjaGVkdWxlcj1sPygpPT5sKHcsITEpOncsdj1lPT54bihlLCExLG0pLF89bS5vblN0b3A9KCk9PntsZXQgZT12bi5nZXQobSk7aWYoZSl7aWYoZilmKGUsNCk7ZWxzZSBmb3IobGV0IHQgb2YgZSl0KCk7dm4uZGVsZXRlKG0pfX0sbj9hP3coITApOkM9bS5ydW4oKTpsP2wody5iaW5kKG51bGwsITApLCEwKTptLnJ1bigpLFMucGF1c2U9bS5wYXVzZS5iaW5kKG0pLFMucmVzdW1lPW0ucmVzdW1lLmJpbmQobSksUy5zdG9wPVMsU31mdW5jdGlvbiBDbihlLHQ9MS8wLG4pe2lmKHQ8PTB8fCF5KGUpfHxlLl9fdl9za2lwfHwobnx8PW5ldyBNYXAsKG4uZ2V0KGUpfHwwKT49dCkpcmV0dXJuIGU7aWYobi5zZXQoZSx0KSx0LS0sSChlKSlDbihlLnZhbHVlLHQsbik7ZWxzZSBpZihkKGUpKWZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKUNuKGVbcl0sdCxuKTtlbHNlIGlmKHAoZSl8fGYoZSkpZS5mb3JFYWNoKGU9PntDbihlLHQsbil9KTtlbHNlIGlmKHcoZSkpe2ZvcihsZXQgciBpbiBlKUNuKGVbcl0sdCxuKTtmb3IobGV0IHIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSlPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmQ24oZVtyXSx0LG4pfXJldHVybiBlfXZhciB3bj1bXTtmdW5jdGlvbiBUbihlKXt3bi5wdXNoKGUpfWZ1bmN0aW9uIEVuKCl7d24ucG9wKCl9ZnVuY3Rpb24gRG4oZSx0KXt9dmFyIE9uPXtTRVRVUF9GVU5DVElPTjowLDA6YFNFVFVQX0ZVTkNUSU9OYCxSRU5ERVJfRlVOQ1RJT046MSwxOmBSRU5ERVJfRlVOQ1RJT05gLE5BVElWRV9FVkVOVF9IQU5ETEVSOjUsNTpgTkFUSVZFX0VWRU5UX0hBTkRMRVJgLENPTVBPTkVOVF9FVkVOVF9IQU5ETEVSOjYsNjpgQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVJgLFZOT0RFX0hPT0s6Nyw3OmBWTk9ERV9IT09LYCxESVJFQ1RJVkVfSE9PSzo4LDg6YERJUkVDVElWRV9IT09LYCxUUkFOU0lUSU9OX0hPT0s6OSw5OmBUUkFOU0lUSU9OX0hPT0tgLEFQUF9FUlJPUl9IQU5ETEVSOjEwLDEwOmBBUFBfRVJST1JfSEFORExFUmAsQVBQX1dBUk5fSEFORExFUjoxMSwxMTpgQVBQX1dBUk5fSEFORExFUmAsRlVOQ1RJT05fUkVGOjEyLDEyOmBGVU5DVElPTl9SRUZgLEFTWU5DX0NPTVBPTkVOVF9MT0FERVI6MTMsMTM6YEFTWU5DX0NPTVBPTkVOVF9MT0FERVJgLFNDSEVEVUxFUjoxNCwxNDpgU0NIRURVTEVSYCxDT01QT05FTlRfVVBEQVRFOjE1LDE1OmBDT01QT05FTlRfVVBEQVRFYCxBUFBfVU5NT1VOVF9DTEVBTlVQOjE2LDE2OmBBUFBfVU5NT1VOVF9DTEVBTlVQYH0sa249e3NwOmBzZXJ2ZXJQcmVmZXRjaCBob29rYCxiYzpgYmVmb3JlQ3JlYXRlIGhvb2tgLGM6YGNyZWF0ZWQgaG9va2AsYm06YGJlZm9yZU1vdW50IGhvb2tgLG06YG1vdW50ZWQgaG9va2AsYnU6YGJlZm9yZVVwZGF0ZSBob29rYCx1OmB1cGRhdGVkYCxidW06YGJlZm9yZVVubW91bnQgaG9va2AsdW06YHVubW91bnRlZCBob29rYCxhOmBhY3RpdmF0ZWQgaG9va2AsZGE6YGRlYWN0aXZhdGVkIGhvb2tgLGVjOmBlcnJvckNhcHR1cmVkIGhvb2tgLHJ0YzpgcmVuZGVyVHJhY2tlZCBob29rYCxydGc6YHJlbmRlclRyaWdnZXJlZCBob29rYCwwOmBzZXR1cCBmdW5jdGlvbmAsMTpgcmVuZGVyIGZ1bmN0aW9uYCwyOmB3YXRjaGVyIGdldHRlcmAsMzpgd2F0Y2hlciBjYWxsYmFja2AsNDpgd2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uYCw1OmBuYXRpdmUgZXZlbnQgaGFuZGxlcmAsNjpgY29tcG9uZW50IGV2ZW50IGhhbmRsZXJgLDc6YHZub2RlIGhvb2tgLDg6YGRpcmVjdGl2ZSBob29rYCw5OmB0cmFuc2l0aW9uIGhvb2tgLDEwOmBhcHAgZXJyb3JIYW5kbGVyYCwxMTpgYXBwIHdhcm5IYW5kbGVyYCwxMjpgcmVmIGZ1bmN0aW9uYCwxMzpgYXN5bmMgY29tcG9uZW50IGxvYWRlcmAsMTQ6YHNjaGVkdWxlciBmbHVzaGAsMTU6YGNvbXBvbmVudCB1cGRhdGVgLDE2OmBhcHAgdW5tb3VudCBjbGVhbnVwIGZ1bmN0aW9uYH07ZnVuY3Rpb24gQW4oZSx0LG4scil7dHJ5e3JldHVybiByP2UoLi4ucik6ZSgpfWNhdGNoKGUpe01uKGUsdCxuKX19ZnVuY3Rpb24gam4oZSx0LG4scil7aWYoZyhlKSl7bGV0IGk9QW4oZSx0LG4scik7cmV0dXJuIGkmJmIoaSkmJmkuY2F0Y2goZT0+e01uKGUsdCxuKX0pLGl9aWYoZChlKSl7bGV0IGk9W107Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspaS5wdXNoKGpuKGVbYV0sdCxuLHIpKTtyZXR1cm4gaX19ZnVuY3Rpb24gTW4oZSxuLHIsaT0hMCl7bGV0IGE9bj9uLnZub2RlOm51bGwse2Vycm9ySGFuZGxlcjpvLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246c309biYmbi5hcHBDb250ZXh0LmNvbmZpZ3x8dDtpZihuKXtsZXQgdD1uLnBhcmVudCxpPW4ucHJveHksYT1gaHR0cHM6Ly92dWVqcy5vcmcvZXJyb3ItcmVmZXJlbmNlLyNydW50aW1lLSR7cn1gO2Zvcig7dDspe2xldCBuPXQuZWM7aWYobil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoblt0XShlLGksYSk9PT0hMSlyZXR1cm59dD10LnBhcmVudH1pZihvKXtXZSgpLEFuKG8sbnVsbCwxMCxbZSxpLGFdKSxHZSgpO3JldHVybn19Tm4oZSxyLGEsaSxzKX1mdW5jdGlvbiBObihlLHQsbixyPSEwLGk9ITEpe2lmKGkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciBQbj1bXSxGbj0tMSxJbj1bXSxMbj1udWxsLFJuPTAsem49UHJvbWlzZS5yZXNvbHZlKCksQm49bnVsbDtmdW5jdGlvbiBWbihlKXtsZXQgdD1Cbnx8em47cmV0dXJuIGU/dC50aGVuKHRoaXM/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gSG4oZSl7bGV0IHQ9Rm4rMSxuPVBuLmxlbmd0aDtmb3IoO3Q8bjspe2xldCByPXQrbj4+PjEsaT1QbltyXSxhPUpuKGkpO2E8ZXx8YT09PWUmJmkuZmxhZ3MmMj90PXIrMTpuPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gVW4oZSl7aWYoIShlLmZsYWdzJjEpKXtsZXQgdD1KbihlKSxuPVBuW1BuLmxlbmd0aC0xXTshbnx8IShlLmZsYWdzJjIpJiZ0Pj1KbihuKT9Qbi5wdXNoKGUpOlBuLnNwbGljZShIbih0KSwwLGUpLGUuZmxhZ3N8PTEsV24oKX19ZnVuY3Rpb24gV24oKXtCbnx8PXpuLnRoZW4oWW4pfWZ1bmN0aW9uIEduKGUpe2lmKCFkKGUpKUxuJiZlLmlkPT09LTE/TG4uc3BsaWNlKFJuKzEsMCxlKTplLmZsYWdzJjF8fChJbi5wdXNoKGUpLGUuZmxhZ3N8PTEpO2Vsc2UgZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspSW4ucHVzaChlW3RdKTtXbigpfWZ1bmN0aW9uIEtuKGUsdCxuPUZuKzEpe2Zvcig7bjxQbi5sZW5ndGg7bisrKXtsZXQgdD1QbltuXTtpZih0JiZ0LmZsYWdzJjIpe2lmKGUmJnQuaWQhPT1lLnVpZCljb250aW51ZTtQbi5zcGxpY2UobiwxKSxuLS0sdC5mbGFncyY0JiYodC5mbGFncyY9LTIpLHQoKSx0LmZsYWdzJjR8fCh0LmZsYWdzJj0tMil9fX1mdW5jdGlvbiBxbihlKXtpZihJbi5sZW5ndGgpe2xldCBlPVsuLi5uZXcgU2V0KEluKV0uc29ydCgoZSx0KT0+Sm4oZSktSm4odCkpO2lmKEluLmxlbmd0aD0wLExuKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylMbi5wdXNoKGVbdF0pO3JldHVybn1mb3IoTG49ZSxSbj0wO1JuPExuLmxlbmd0aDtSbisrKXtsZXQgZT1MbltSbl07ZS5mbGFncyY0JiYoZS5mbGFncyY9LTIpLGUuZmxhZ3MmOHx8ZSgpLGUuZmxhZ3MmPS0yfUxuPW51bGwsUm49MH19dmFyIEpuPWU9PmUuaWQ9PW51bGw/ZS5mbGFncyYyPy0xOjEvMDplLmlkO2Z1bmN0aW9uIFluKGUpe3RyeXtmb3IoRm49MDtGbjxQbi5sZW5ndGg7Rm4rKyl7bGV0IGU9UG5bRm5dO2UmJiEoZS5mbGFncyY4KSYmKGUuZmxhZ3MmNCYmKGUuZmxhZ3MmPS0yKSxBbihlLGUuaSxlLmk/MTU6MTQpLGUuZmxhZ3MmNHx8KGUuZmxhZ3MmPS0yKSl9fWZpbmFsbHl7Zm9yKDtGbjxQbi5sZW5ndGg7Rm4rKyl7bGV0IGU9UG5bRm5dO2UmJihlLmZsYWdzJj0tMil9Rm49LTEsUG4ubGVuZ3RoPTAscW4oZSksQm49bnVsbCwoUG4ubGVuZ3RofHxJbi5sZW5ndGgpJiZZbihlKX19dmFyIFhuLFpuPVtdO2Z1bmN0aW9uIFFuKGUsdCl7WG49ZSxYbj8oWG4uZW5hYmxlZD0hMCxabi5mb3JFYWNoKCh7ZXZlbnQ6ZSxhcmdzOnR9KT0+WG4uZW1pdChlLC4uLnQpKSxabj1bXSk6dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdy5IVE1MRWxlbWVudCYmISh3aW5kb3cubmF2aWdhdG9yPy51c2VyQWdlbnQpPy5pbmNsdWRlcyhganNkb21gKT8oKHQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz10Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdKS5wdXNoKGU9PntRbihlLHQpfSksc2V0VGltZW91dCgoKT0+e1hufHwodC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsWm49W10pfSwzZTMpKTpabj1bXX12YXIgVT1udWxsLCRuPW51bGw7ZnVuY3Rpb24gZXIoZSl7bGV0IHQ9VTtyZXR1cm4gVT1lLCRuPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiB0cihlKXskbj1lfWZ1bmN0aW9uIG5yKCl7JG49bnVsbH12YXIgcnI9ZT0+aXI7ZnVuY3Rpb24gaXIoZSx0PVUsbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7bGV0IHI9KC4uLm4pPT57ci5fZCYmaXMoLTEpO2xldCBpPWVyKHQpLGE9JG8ubGVuZ3RoLG87dHJ5e289ZSguLi5uKX1maW5hbGx5e2ZvcihsZXQgZT0kby5sZW5ndGg7ZT5hO2UtLSlucygpO2VyKGkpLHIuX2QmJmlzKDEpfXJldHVybiBvfTtyZXR1cm4gci5fbj0hMCxyLl9jPSEwLHIuX2Q9ITAscn1mdW5jdGlvbiBhcihlLG4pe2lmKFU9PT1udWxsKXJldHVybiBlO2xldCByPVdzKFUpLGk9ZS5kaXJzfHw9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldFthLG8scyxjPXRdPW5bZV07YSYmKGcoYSkmJihhPXttb3VudGVkOmEsdXBkYXRlZDphfSksYS5kZWVwJiZDbihvKSxpLnB1c2goe2RpcjphLGluc3RhbmNlOnIsdmFsdWU6byxvbGRWYWx1ZTp2b2lkIDAsYXJnOnMsbW9kaWZpZXJzOmN9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoZSx0LG4scil7bGV0IGk9ZS5kaXJzLGE9dCYmdC5kaXJzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgcz1pW29dO2EmJihzLm9sZFZhbHVlPWFbb10udmFsdWUpO2xldCBjPXMuZGlyW3JdO2MmJihXZSgpLGpuKGMsbiw4LFtlLmVsLHMsZSx0XSksR2UoKSl9fWZ1bmN0aW9uIHNyKGUsdCl7aWYoSil7bGV0IG49Si5wcm92aWRlcyxyPUoucGFyZW50JiZKLnBhcmVudC5wcm92aWRlcztyPT09biYmKG49Si5wcm92aWRlcz1PYmplY3QuY3JlYXRlKHIpKSxuW2VdPXR9fWZ1bmN0aW9uIGNyKGUsdCxuPSExKXtsZXQgcj1ZKCk7aWYocnx8cWEpe2xldCBpPXFhP3FhLl9jb250ZXh0LnByb3ZpZGVzOnI/ci5wYXJlbnQ9PW51bGx8fHIuY2U/ci52bm9kZS5hcHBDb250ZXh0JiZyLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6ci5wYXJlbnQucHJvdmlkZXM6dm9pZCAwO2lmKGkmJmUgaW4gaSlyZXR1cm4gaVtlXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIG4mJmcodCk/dC5jYWxsKHImJnIucHJveHkpOnR9fWZ1bmN0aW9uIGxyKCl7cmV0dXJuISEoWSgpfHxxYSl9dmFyIHVyPVN5bWJvbC5mb3IoYHYtc2N4YCksZHI9KCk9PmNyKHVyKTtmdW5jdGlvbiBmcihlLHQpe3JldHVybiBncihlLG51bGwsdCl9ZnVuY3Rpb24gcHIoZSx0KXtyZXR1cm4gZ3IoZSxudWxsLHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBncihlLG51bGwse2ZsdXNoOmBzeW5jYH0pfWZ1bmN0aW9uIGhyKGUsdCxuKXtyZXR1cm4gZ3IoZSx0LG4pfWZ1bmN0aW9uIGdyKGUsbixpPXQpe2xldHtpbW1lZGlhdGU6YSxkZWVwOm8sZmx1c2g6YyxvbmNlOmx9PWksdT1zKHt9LGkpLGQ9biYmYXx8IW4mJmMhPT1gcG9zdGAsZjtpZihOcyl7aWYoYz09PWBzeW5jYCl7bGV0IGU9ZHIoKTtmPWUuX193YXRjaGVySGFuZGxlc3x8PVtdfWVsc2UgaWYoIWQpe2xldCBlPSgpPT57fTtyZXR1cm4gZS5zdG9wPXIsZS5yZXN1bWU9cixlLnBhdXNlPXIsZX19bGV0IHA9Sjt1LmNhbGw9KGUsdCxuKT0+am4oZSxwLHQsbik7bGV0IG09ITE7Yz09PWBwb3N0YD91LnNjaGVkdWxlcj1lPT57VyhlLHAmJnAuc3VzcGVuc2UpfTpjIT09YHN5bmNgJiYobT0hMCx1LnNjaGVkdWxlcj0oZSx0KT0+e3Q/ZSgpOlVuKGUpfSksdS5hdWdtZW50Sm9iPWU9PntuJiYoZS5mbGFnc3w9NCksbSYmKGUuZmxhZ3N8PTIscCYmKGUuaWQ9cC51aWQsZS5pPXApKX07bGV0IGg9U24oZSxuLHUpO3JldHVybiBOcyYmKGY/Zi5wdXNoKGgpOmQmJmgoKSksaH1mdW5jdGlvbiBfcihlLHQsbil7bGV0IHI9dGhpcy5wcm94eSxpPV8oZSk/ZS5pbmNsdWRlcyhgLmApP3ZyKHIsZSk6KCk9PnJbZV06ZS5iaW5kKHIsciksYTtnKHQpP2E9dDooYT10LmhhbmRsZXIsbj10KTtsZXQgbz1Bcyh0aGlzKSxzPWdyKGksYS5iaW5kKHIpLG4pO3JldHVybiBvKCksc31mdW5jdGlvbiB2cihlLHQpe2xldCBuPXQuc3BsaXQoYC5gKTtyZXR1cm4oKT0+e2xldCB0PWU7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmdDtlKyspdD10W25bZV1dO3JldHVybiB0fX12YXIgeXI9bmV3IFdlYWtNYXAsYnI9U3ltYm9sKGBfdnRlYCkseHI9ZT0+ZS5fX2lzVGVsZXBvcnQsU3I9ZT0+ZSYmKGUuZGlzYWJsZWR8fGUuZGlzYWJsZWQ9PT1gYCksQ3I9ZT0+ZSYmKGUuZGVmZXJ8fGUuZGVmZXI9PT1gYCksd3I9ZT0+dHlwZW9mIFNWR0VsZW1lbnQ8YHVgJiZlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCxUcj1lPT50eXBlb2YgTWF0aE1MRWxlbWVudD09YGZ1bmN0aW9uYCYmZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQsRXI9KGUsdCk9PntsZXQgbj1lJiZlLnRvO3JldHVybiBfKG4pP3Q/dChuKTpudWxsOm59LERyPXtuYW1lOmBUZWxlcG9ydGAsX19pc1RlbGVwb3J0OiEwLHByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbCl7bGV0e21jOnUscGM6ZCxwYmM6ZixvOntpbnNlcnQ6cCxxdWVyeVNlbGVjdG9yOm0sY3JlYXRlVGV4dDpoLGNyZWF0ZUNvbW1lbnQ6ZyxwYXJlbnROb2RlOl99fT1sLHY9U3IodC5wcm9wcykse2R5bmFtaWNDaGlsZHJlbjp5fT10LGI9KGUsdCxuKT0+e2Uuc2hhcGVGbGFnJjE2JiZ1KGUuY2hpbGRyZW4sdCxuLGksYSxvLHMsYyl9LHg9KGU9dCk9PntsZXQgbj1TcihlLnByb3BzKSxyPWUudGFyZ2V0PUVyKGUucHJvcHMsbSksYT1NcihyLGUsaCxwKTtyJiYobyE9PWBzdmdgJiZ3cihyKT9vPWBzdmdgOm8hPT1gbWF0aG1sYCYmVHIocikmJihvPWBtYXRobWxgKSxpJiZpLmlzQ0UmJihpLmNlLl90ZWxlcG9ydFRhcmdldHN8fChpLmNlLl90ZWxlcG9ydFRhcmdldHM9bmV3IFNldCkpLmFkZChyKSxufHwoYihlLHIsYSksanIoZSwhMSkpKX0sUz1lPT57bGV0IHQ9KCk9PntpZih5ci5nZXQoZSk9PT10KXtpZih5ci5kZWxldGUoZSksU3IoZS5wcm9wcykpe2xldCB0PV8oZS5lbCl8fG47YihlLHQsZS5hbmNob3IpLGpyKGUsITApfXgoZSl9fTt5ci5zZXQoZSx0KSxXKHQsYSl9O2lmKGU9PW51bGwpe2xldCBlPXQuZWw9aChgYCksaT10LmFuY2hvcj1oKGBgKTtpZihwKGUsbixyKSxwKGksbixyKSxDcih0LnByb3BzKXx8YSYmYS5wZW5kaW5nQnJhbmNoKXtTKHQpO3JldHVybn12JiYoYih0LG4saSksanIodCwhMCkpLHgoKX1lbHNle3QuZWw9ZS5lbDtsZXQgcj10LmFuY2hvcj1lLmFuY2hvcix1PXlyLmdldChlKTtpZih1KXt1LmZsYWdzfD04LHlyLmRlbGV0ZShlKSxTKHQpO3JldHVybn10LnRhcmdldFN0YXJ0PWUudGFyZ2V0U3RhcnQ7bGV0IHA9dC50YXJnZXQ9ZS50YXJnZXQsaD10LnRhcmdldEFuY2hvcj1lLnRhcmdldEFuY2hvcixnPVNyKGUucHJvcHMpLF89Zz9uOnAsYj1nP3I6aDtpZihvPT09YHN2Z2B8fHdyKHApP289YHN2Z2A6KG89PT1gbWF0aG1sYHx8VHIocCkpJiYobz1gbWF0aG1sYCkseT8oZihlLmR5bmFtaWNDaGlsZHJlbix5LF8saSxhLG8scyksTm8oZSx0LCEwKSk6Y3x8ZChlLHQsXyxiLGksYSxvLHMsITEpLHYpZz90LnByb3BzJiZlLnByb3BzJiZ0LnByb3BzLnRvIT09ZS5wcm9wcy50byYmKHQucHJvcHMudG89ZS5wcm9wcy50byk6T3IodCxuLHIsbCwxKTtlbHNlIGlmKCh0LnByb3BzJiZ0LnByb3BzLnRvKSE9PShlLnByb3BzJiZlLnByb3BzLnRvKSl7bGV0IGU9RXIodC5wcm9wcyxtKTtlJiYodC50YXJnZXQ9ZSxPcih0LGUsbnVsbCxsLDApKX1lbHNlIGcmJk9yKHQscCxoLGwsMSk7anIodCx2KX19LHJlbW92ZShlLHQsbix7dW06cixvOntyZW1vdmU6aX19LGEpe2xldHtzaGFwZUZsYWc6byxjaGlsZHJlbjpzLGFuY2hvcjpjLHRhcmdldFN0YXJ0OmwsdGFyZ2V0QW5jaG9yOnUsdGFyZ2V0OmQscHJvcHM6Zn09ZSxwPVNyKGYpLG09YXx8IXAsaD15ci5nZXQoZSk7aWYoaCYmKGguZmxhZ3N8PTgseXIuZGVsZXRlKGUpKSxkJiYoaShsKSxpKHUpKSxhJiZpKGMpLCFoJiYocHx8ZCkmJm8mMTYpZm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspe2xldCBpPXNbZV07cihpLHQsbixtLCEhaS5keW5hbWljQ2hpbGRyZW4pfX0sbW92ZTpPcixoeWRyYXRlOmtyfTtmdW5jdGlvbiBPcihlLHQsbix7bzp7aW5zZXJ0OnJ9LG06aX0sYT0yKXthPT09MCYmcihlLnRhcmdldEFuY2hvcix0LG4pO2xldHtlbDpvLGFuY2hvcjpzLHNoYXBlRmxhZzpjLGNoaWxkcmVuOmwscHJvcHM6dX09ZSxkPWE9PT0yO2lmKGQmJnIobyx0LG4pLCF5ci5oYXMoZSkmJighZHx8U3IodSkpJiZjJjE2KWZvcihsZXQgZT0wO2U8bC5sZW5ndGg7ZSsrKWkobFtlXSx0LG4sMik7ZCYmcihzLHQsbil9ZnVuY3Rpb24ga3IoZSx0LG4scixpLGEse286e25leHRTaWJsaW5nOm8scGFyZW50Tm9kZTpzLHF1ZXJ5U2VsZWN0b3I6YyxpbnNlcnQ6bCxjcmVhdGVUZXh0OnV9fSxkKXtmdW5jdGlvbiBmKGUsbil7bGV0IHI9bjtmb3IoO3I7KXtpZihyJiZyLm5vZGVUeXBlPT09OCl7aWYoci5kYXRhPT09YHRlbGVwb3J0IHN0YXJ0IGFuY2hvcmApdC50YXJnZXRTdGFydD1yO2Vsc2UgaWYoci5kYXRhPT09YHRlbGVwb3J0IGFuY2hvcmApe3QudGFyZ2V0QW5jaG9yPXIsZS5fbHBhPXQudGFyZ2V0QW5jaG9yJiZvKHQudGFyZ2V0QW5jaG9yKTticmVha319cj1vKHIpfX1mdW5jdGlvbiBwKGUsdCl7dC5hbmNob3I9ZChvKGUpLHQscyhlKSxuLHIsaSxhKX1sZXQgbT10LnRhcmdldD1Fcih0LnByb3BzLGMpLGg9U3IodC5wcm9wcyk7aWYobSl7bGV0IGM9bS5fbHBhfHxtLmZpcnN0Q2hpbGQ7dC5zaGFwZUZsYWcmMTYmJihoPyhwKGUsdCksZihtLGMpLHQudGFyZ2V0QW5jaG9yfHxNcihtLHQsdSxsLHMoZSk9PT1tP2U6bnVsbCkpOih0LmFuY2hvcj1vKGUpLGYobSxjKSx0LnRhcmdldEFuY2hvcnx8TXIobSx0LHUsbCksZChjJiZvKGMpLHQsbSxuLHIsaSxhKSkpLGpyKHQsaCl9ZWxzZSBoJiZ0LnNoYXBlRmxhZyYxNiYmKHAoZSx0KSx0LnRhcmdldFN0YXJ0PWUsdC50YXJnZXRBbmNob3I9byhlKSk7cmV0dXJuIHQuYW5jaG9yJiZvKHQuYW5jaG9yKX12YXIgQXI9RHI7ZnVuY3Rpb24ganIoZSx0KXtsZXQgbj1lLmN0eDtpZihuJiZuLnV0KXtsZXQgcixpO2Zvcih0PyhyPWUuZWwsaT1lLmFuY2hvcik6KHI9ZS50YXJnZXRTdGFydCxpPWUudGFyZ2V0QW5jaG9yKTtyJiZyIT09aTspci5ub2RlVHlwZT09PTEmJnIuc2V0QXR0cmlidXRlKGBkYXRhLXYtb3duZXJgLG4udWlkKSxyPXIubmV4dFNpYmxpbmc7bi51dCgpfX1mdW5jdGlvbiBNcihlLHQsbixyLGk9bnVsbCl7bGV0IGE9dC50YXJnZXRTdGFydD1uKGBgKSxvPXQudGFyZ2V0QW5jaG9yPW4oYGApO3JldHVybiBhW2JyXT1vLGUmJihyKGEsZSxpKSxyKG8sZSxpKSksb312YXIgTnI9U3ltYm9sKGBfbGVhdmVDYmApLFByPVN5bWJvbChgX2VudGVyQ2JgKTtmdW5jdGlvbiBGcigpe2xldCBlPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBWaSgoKT0+e2UuaXNNb3VudGVkPSEwfSksV2koKCk9PntlLmlzVW5tb3VudGluZz0hMH0pLGV9dmFyIElyPVtGdW5jdGlvbixBcnJheV0sTHI9e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6SXIsb25FbnRlcjpJcixvbkFmdGVyRW50ZXI6SXIsb25FbnRlckNhbmNlbGxlZDpJcixvbkJlZm9yZUxlYXZlOklyLG9uTGVhdmU6SXIsb25BZnRlckxlYXZlOklyLG9uTGVhdmVDYW5jZWxsZWQ6SXIsb25CZWZvcmVBcHBlYXI6SXIsb25BcHBlYXI6SXIsb25BZnRlckFwcGVhcjpJcixvbkFwcGVhckNhbmNlbGxlZDpJcn0sUnI9ZT0+e2xldCB0PWUuc3ViVHJlZTtyZXR1cm4gdC5jb21wb25lbnQ/UnIodC5jb21wb25lbnQpOnR9LHpyPXtuYW1lOmBCYXNlVHJhbnNpdGlvbmAscHJvcHM6THIsc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPVkoKSxyPUZyKCk7cmV0dXJuKCk9PntsZXQgaT10LmRlZmF1bHQmJnFyKHQuZGVmYXVsdCgpLCEwKSxhPWkmJmkubGVuZ3RoP0JyKGkpOm4uc3ViVHJlZT95cygpOnZvaWQgMDtpZighYSlyZXR1cm47bGV0IG89VihlKSx7bW9kZTpzfT1vO2lmKHIuaXNMZWF2aW5nKXJldHVybiBXcihhKTtsZXQgYz1HcihhKTtpZighYylyZXR1cm4gV3IoYSk7bGV0IGw9VXIoYyxvLHIsbixlPT5sPWUpO2MudHlwZSE9PUsmJktyKGMsbCk7bGV0IHU9bi5zdWJUcmVlJiZHcihuLnN1YlRyZWUpO2lmKHUmJnUudHlwZSE9PUsmJiFscyh1LGMpJiZScihuKS50eXBlIT09Syl7bGV0IGU9VXIodSxvLHIsbik7aWYoS3IodSxlKSxzPT09YG91dC1pbmAmJmMudHlwZSE9PUspcmV0dXJuIHIuaXNMZWF2aW5nPSEwLGUuYWZ0ZXJMZWF2ZT0oKT0+e3IuaXNMZWF2aW5nPSExLG4uam9iLmZsYWdzJjh8fG4udXBkYXRlKCksZGVsZXRlIGUuYWZ0ZXJMZWF2ZSx1PXZvaWQgMH0sV3IoYSk7cz09PWBpbi1vdXRgJiZjLnR5cGUhPT1LP2UuZGVsYXlMZWF2ZT0oZSx0LG4pPT57bGV0IGk9SHIocix1KTtpW1N0cmluZyh1LmtleSldPXUsZVtOcl09KCk9Pnt0KCksZVtOcl09dm9pZCAwLGRlbGV0ZSBsLmRlbGF5ZWRMZWF2ZSx1PXZvaWQgMH0sbC5kZWxheWVkTGVhdmU9KCk9PntuKCksZGVsZXRlIGwuZGVsYXllZExlYXZlLHU9dm9pZCAwfX06dT12b2lkIDB9ZWxzZSB1JiY9dm9pZCAwO3JldHVybiBhfX19O2Z1bmN0aW9uIEJyKGUpe2xldCB0PWVbMF07aWYoZS5sZW5ndGg+MSl7Zm9yKGxldCBuIG9mIGUpaWYobi50eXBlIT09Syl7dD1uO2JyZWFrfX1yZXR1cm4gdH12YXIgVnI9enI7ZnVuY3Rpb24gSHIoZSx0KXtsZXR7bGVhdmluZ1ZOb2RlczpufT1lLHI9bi5nZXQodC50eXBlKTtyZXR1cm4gcnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuLnNldCh0LnR5cGUscikpLHJ9ZnVuY3Rpb24gVXIoZSx0LG4scixpKXtsZXR7YXBwZWFyOmEsbW9kZTpvLHBlcnNpc3RlZDpzPSExLG9uQmVmb3JlRW50ZXI6YyxvbkVudGVyOmwsb25BZnRlckVudGVyOnUsb25FbnRlckNhbmNlbGxlZDpmLG9uQmVmb3JlTGVhdmU6cCxvbkxlYXZlOm0sb25BZnRlckxlYXZlOmgsb25MZWF2ZUNhbmNlbGxlZDpnLG9uQmVmb3JlQXBwZWFyOl8sb25BcHBlYXI6dixvbkFmdGVyQXBwZWFyOnksb25BcHBlYXJDYW5jZWxsZWQ6Yn09dCx4PVN0cmluZyhlLmtleSksUz1IcihuLGUpLEM9KGUsdCk9PntlJiZqbihlLHIsOSx0KX0sdz0oZSx0KT0+e2xldCBuPXRbMV07QyhlLHQpLGQoZSk/ZS5ldmVyeShlPT5lLmxlbmd0aDw9MSkmJm4oKTplLmxlbmd0aDw9MSYmbigpfSxUPXttb2RlOm8scGVyc2lzdGVkOnMsYmVmb3JlRW50ZXIodCl7bGV0IHI9YztpZighbi5pc01vdW50ZWQpe2lmKGEpcj1ffHxjO2Vsc2UgcmV0dXJufXRbTnJdJiZ0W05yXSghMCk7bGV0IGk9U1t4XTtpJiZscyhlLGkpJiZpLmVsW05yXSYmaS5lbFtOcl0oKSxDKHIsW3RdKX0sZW50ZXIodCl7aWYoU1t4XT09PWUpcmV0dXJuO2xldCByPWwsaT11LG89ZjtpZighbi5pc01vdW50ZWQpe2lmKGEpcj12fHxsLGk9eXx8dSxvPWJ8fGY7ZWxzZSByZXR1cm59bGV0IHM9ITE7dFtQcl09ZT0+e3N8fChzPSEwLEMoZT9vOmksW3RdKSxULmRlbGF5ZWRMZWF2ZSYmVC5kZWxheWVkTGVhdmUoKSx0W1ByXT12b2lkIDApfTtsZXQgYz10W1ByXS5iaW5kKG51bGwsITEpO3I/dyhyLFt0LGNdKTpjKCl9LGxlYXZlKHQscil7bGV0IGk9U3RyaW5nKGUua2V5KTtpZih0W1ByXSYmdFtQcl0oITApLG4uaXNVbm1vdW50aW5nKXJldHVybiByKCk7QyhwLFt0XSk7bGV0IGE9ITE7dFtOcl09bj0+e2F8fChhPSEwLHIoKSxDKG4/ZzpoLFt0XSksdFtOcl09dm9pZCAwLFNbaV09PT1lJiZkZWxldGUgU1tpXSl9O2xldCBvPXRbTnJdLmJpbmQobnVsbCwhMSk7U1tpXT1lLG0/dyhtLFt0LG9dKTpvKCl9LGNsb25lKGUpe2xldCBhPVVyKGUsdCxuLHIsaSk7cmV0dXJuIGkmJmkoYSksYX19O3JldHVybiBUfWZ1bmN0aW9uIFdyKGUpe2lmKGtpKGUpKXJldHVybiBlPWdzKGUpLGUuY2hpbGRyZW49bnVsbCxlfWZ1bmN0aW9uIEdyKGUpe2lmKCFraShlKSlyZXR1cm4geHIoZS50eXBlKSYmZS5jaGlsZHJlbj9CcihlLmNoaWxkcmVuKTplO2lmKGUuY29tcG9uZW50KXJldHVybiBlLmNvbXBvbmVudC5zdWJUcmVlO2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lO2lmKG4pe2lmKHQmMTYpcmV0dXJuIG5bMF07aWYodCYzMiYmZyhuLmRlZmF1bHQpKXJldHVybiBuLmRlZmF1bHQoKX19ZnVuY3Rpb24gS3IoZSx0KXtpZihlLnNoYXBlRmxhZyY2JiZlLmNvbXBvbmVudCl7ZS50cmFuc2l0aW9uPXQ7bGV0IG49ZS5jb21wb25lbnQuc3ViVHJlZTtLcih4cihuLnR5cGUpJiZHcihuKXx8bix0KX1lbHNlIGUuc2hhcGVGbGFnJjEyOD8oZS5zc0NvbnRlbnQudHJhbnNpdGlvbj10LmNsb25lKGUuc3NDb250ZW50KSxlLnNzRmFsbGJhY2sudHJhbnNpdGlvbj10LmNsb25lKGUuc3NGYWxsYmFjaykpOmUudHJhbnNpdGlvbj10fWZ1bmN0aW9uIHFyKGUsdD0hMSxuKXtsZXQgcj1bXSxpPTA7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2xldCBvPWVbYV0scz1uPT1udWxsP28ua2V5OlN0cmluZyhuKStTdHJpbmcoby5rZXk9PW51bGw/YTpvLmtleSk7by50eXBlPT09Rz8oby5wYXRjaEZsYWcmMTI4JiZpKysscj1yLmNvbmNhdChxcihvLmNoaWxkcmVuLHQscykpKToodHx8by50eXBlIT09SykmJnIucHVzaChzPT1udWxsP286Z3Mobyx7a2V5OnN9KSl9aWYoaT4xKWZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV0ucGF0Y2hGbGFnPS0yO3JldHVybiByfWZ1bmN0aW9uIEpyKGUsdCl7cmV0dXJuIGcoZSk/cyh7bmFtZTplLm5hbWV9LHQse3NldHVwOmV9KTplfWZ1bmN0aW9uIFlyKCl7bGV0IGU9WSgpO3JldHVybiBlPyhlLmFwcENvbnRleHQuY29uZmlnLmlkUHJlZml4fHxgdmApK2AtYCtlLmlkc1swXStlLmlkc1sxXSsrOmBgfWZ1bmN0aW9uIFhyKGUpe2UuaWRzPVtlLmlkc1swXStlLmlkc1syXSsrK2AtYCwwLDBdfWZ1bmN0aW9uIFpyKGUpe2xldCBuPVkoKSxyPVp0KG51bGwpO2lmKG4pe2xldCBpPW4ucmVmcz09PXQ/bi5yZWZzPXt9Om4ucmVmcztPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+ci52YWx1ZSxzZXQ6ZT0+ci52YWx1ZT1lfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gUXIoZSx0KXtsZXQgbjtyZXR1cm4hISgobj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkpJiYhbi5jb25maWd1cmFibGUpfXZhciAkcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBlaShlLG4scixhLG89ITEpe2lmKGQoZSkpe2UuZm9yRWFjaCgoZSx0KT0+ZWkoZSxuJiYoZChuKT9uW3RdOm4pLHIsYSxvKSk7cmV0dXJufWlmKEVpKGEpJiYhbyl7YS5zaGFwZUZsYWcmNTEyJiZhLnR5cGUuX19hc3luY1Jlc29sdmVkJiZhLmNvbXBvbmVudC5zdWJUcmVlLmNvbXBvbmVudCYmZWkoZSxuLHIsYS5jb21wb25lbnQuc3ViVHJlZSk7cmV0dXJufWxldCBzPWEuc2hhcGVGbGFnJjQ/V3MoYS5jb21wb25lbnQpOmEuZWwsbD1vP251bGw6cyx7aTpmLHI6cH09ZSxtPW4mJm4ucixoPWYucmVmcz09PXQ/Zi5yZWZzPXt9OmYucmVmcyx2PWYuc2V0dXBTdGF0ZSx5PVYodiksYj12PT09dD9pOmU9PiFRcihoLGUpJiZ1KHksZSkseD0oZSx0KT0+ISh0JiZRcihoLHQpKTtpZihtIT1udWxsJiZtIT09cCl7aWYodGkobiksXyhtKSloW21dPW51bGwsYihtKSYmKHZbbV09bnVsbCk7ZWxzZSBpZihIKG0pKXtsZXQgZT1uO3gobSxlLmspJiYobS52YWx1ZT1udWxsKSxlLmsmJihoW2Uua109bnVsbCl9fWlmKGcocCkpQW4ocCxmLDEyLFtsLGhdKTtlbHNle2xldCB0PV8ocCksbj1IKHApO2lmKHR8fG4pe2xldCBpPSgpPT57aWYoZS5mKXtsZXQgbj10P2IocCk/dltwXTpoW3BdOngocCl8fCFlLms/cC52YWx1ZTpoW2Uua107aWYobylkKG4pJiZjKG4scyk7ZWxzZSBpZihkKG4pKW4uaW5jbHVkZXMocyl8fG4ucHVzaChzKTtlbHNlIGlmKHQpaFtwXT1bc10sYihwKSYmKHZbcF09aFtwXSk7ZWxzZXtsZXQgdD1bc107eChwLGUuaykmJihwLnZhbHVlPXQpLGUuayYmKGhbZS5rXT10KX19ZWxzZSB0PyhoW3BdPWwsYihwKSYmKHZbcF09bCkpOm4mJih4KHAsZS5rKSYmKHAudmFsdWU9bCksZS5rJiYoaFtlLmtdPWwpKX07aWYobCl7bGV0IHQ9KCk9PntpKCksJHIuZGVsZXRlKGUpfTt0LmlkPS0xLCRyLnNldChlLHQpLFcodCxyKX1lbHNlIHRpKGUpLGkoKX19fWZ1bmN0aW9uIHRpKGUpe2xldCB0PSRyLmdldChlKTt0JiYodC5mbGFnc3w9OCwkci5kZWxldGUoZSkpfXZhciBuaT0hMSxyaT0oKT0+e25pfHw9KGNvbnNvbGUuZXJyb3IoYEh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuYCksITApfSxpaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgc3ZnYCkmJmUudGFnTmFtZSE9PWBmb3JlaWduT2JqZWN0YCxhaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgTWF0aE1MYCksb2k9ZT0+e2lmKGUubm9kZVR5cGU9PT0xKXtpZihpaShlKSlyZXR1cm5gc3ZnYDtpZihhaShlKSlyZXR1cm5gbWF0aG1sYH19LHNpPWU9PmUubm9kZVR5cGU9PT04O2Z1bmN0aW9uIGNpKGUpe2xldHttdDp0LHA6bixvOntwYXRjaFByb3A6cixjcmVhdGVUZXh0OmksbmV4dFNpYmxpbmc6byxwYXJlbnROb2RlOnMscmVtb3ZlOmMsaW5zZXJ0OmwsY3JlYXRlQ29tbWVudDp1fX09ZSxkPShlLHQpPT57aWYoIXQuaGFzQ2hpbGROb2RlcygpKXtuKG51bGwsZSx0KSxxbigpLHQuX3Zub2RlPWU7cmV0dXJufWYodC5maXJzdENoaWxkLGUsbnVsbCxudWxsLG51bGwpLHFuKCksdC5fdm5vZGU9ZX0sZj0obixyLGEsYyx1LGQ9ITEpPT57ZHx8PSEhci5keW5hbWljQ2hpbGRyZW47bGV0IGI9c2kobikmJm4uZGF0YT09PWBbYCx4PSgpPT5nKG4scixhLGMsdSxiKSx7dHlwZTpTLHJlZjpDLHNoYXBlRmxhZzp3LHBhdGNoRmxhZzpUfT1yLEU9bi5ub2RlVHlwZTtyLmVsPW4sVD09PS0yJiYoZD0hMSxyLmR5bmFtaWNDaGlsZHJlbj1udWxsKTtsZXQgRD1udWxsO3N3aXRjaChTKXtjYXNlIFpvOkU9PT0zPyhuLmRhdGEhPT1yLmNoaWxkcmVuJiYocmkoKSxuLmRhdGE9ci5jaGlsZHJlbiksRD1vKG4pKTpyLmNoaWxkcmVuPT09YGA/KGwoci5lbD1pKGBgKSxzKG4pLG4pLEQ9bik6RD14KCk7YnJlYWs7Y2FzZSBLOnkobik/KEQ9byhuKSx2KHIuZWw9bi5jb250ZW50LmZpcnN0Q2hpbGQsbixhKSk6RD1FIT09OHx8Yj94KCk6byhuKTticmVhaztjYXNlIFFvOmlmKGImJihuPW8obiksRT1uLm5vZGVUeXBlKSxFPT09MXx8RT09PTMpe0Q9bjtsZXQgZT0hci5jaGlsZHJlbi5sZW5ndGg7Zm9yKGxldCB0PTA7dDxyLnN0YXRpY0NvdW50O3QrKyllJiYoci5jaGlsZHJlbis9RC5ub2RlVHlwZT09PTE/RC5vdXRlckhUTUw6RC5kYXRhKSx0PT09ci5zdGF0aWNDb3VudC0xJiYoci5hbmNob3I9RCksRD1vKEQpO3JldHVybiBiP28oRCk6RH14KCk7YnJlYWs7Y2FzZSBHOkQ9Yj9oKG4scixhLGMsdSxkKTp4KCk7YnJlYWs7ZGVmYXVsdDppZih3JjEpRD0oRSE9PTF8fHIudHlwZS50b0xvd2VyQ2FzZSgpIT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiYheShuKT94KCk6cChuLHIsYSxjLHUsZCk7ZWxzZSBpZih3JjYpe3Iuc2xvdFNjb3BlSWRzPXU7bGV0IGU9cyhuKTtpZihEPWI/XyhuKTpzaShuKSYmbi5kYXRhPT09YHRlbGVwb3J0IHN0YXJ0YD9fKG4sbi5kYXRhLGB0ZWxlcG9ydCBlbmRgKTpvKG4pLHQocixlLG51bGwsYSxjLG9pKGUpLGQpLEVpKHIpJiYhci50eXBlLl9fYXN5bmNSZXNvbHZlZCl7bGV0IHQ7Yj8odD1xKEcpLHQuYW5jaG9yPUQ/RC5wcmV2aW91c1NpYmxpbmc6ZS5sYXN0Q2hpbGQpOnQ9bi5ub2RlVHlwZT09PTM/X3MoYGApOnEoYGRpdmApLHQuZWw9bixyLmNvbXBvbmVudC5zdWJUcmVlPXR9fWVsc2UgdyY2ND9EPUU9PT04P3IudHlwZS5oeWRyYXRlKG4scixhLGMsdSxkLGUsbSk6eCgpOncmMTI4JiYoRD1yLnR5cGUuaHlkcmF0ZShuLHIsYSxjLG9pKHMobikpLHUsZCxlLGYpKX1yZXR1cm4gQyE9bnVsbCYmZWkoQyxudWxsLGMsciksRH0scD0oZSx0LG4saSxvLHMpPT57c3x8PSEhdC5keW5hbWljQ2hpbGRyZW47bGV0e3R5cGU6bCxkeW5hbWljUHJvcHM6dSxwcm9wczpkLHBhdGNoRmxhZzpmLHNoYXBlRmxhZzpwLGRpcnM6aCx0cmFuc2l0aW9uOmd9PXQsXz1sPT09YGlucHV0YHx8bD09PWBvcHRpb25gLGI9ISF1O2lmKF98fGJ8fGYhPT0tMSl7aCYmb3IodCxudWxsLG4sYGNyZWF0ZWRgKTtsZXQgbD0hMTtpZih5KGUpKXtsPU1vKG51bGwsZykmJm4mJm4udm5vZGUucHJvcHMmJm4udm5vZGUucHJvcHMuYXBwZWFyO2xldCByPWUuY29udGVudC5maXJzdENoaWxkO2lmKGwpe2xldCBlPXIuZ2V0QXR0cmlidXRlKGBjbGFzc2ApO2UmJihyLiRjbHM9ZSksZy5iZWZvcmVFbnRlcihyKX12KHIsZSxuKSx0LmVsPWU9cn1pZihwJjE2JiYhKGQmJihkLmlubmVySFRNTHx8ZC50ZXh0Q29udGVudCkpKXtsZXQgcj1tKGUuZmlyc3RDaGlsZCx0LGUsbixpLG8scyk7Zm9yKHImJiFwaShlLDEpJiZyaSgpO3I7KXtsZXQgZT1yO3I9ci5uZXh0U2libGluZyxjKGUpfX1lbHNlIGlmKHAmOCl7bGV0IG49dC5jaGlsZHJlbjtuWzBdPT09YApgJiYoZS50YWdOYW1lPT09YFBSRWB8fGUudGFnTmFtZT09PWBURVhUQVJFQWApJiYobj1uLnNsaWNlKDEpKTtsZXR7dGV4dENvbnRlbnQ6cn09ZTtyIT09biYmciE9PW4ucmVwbGFjZSgvXHJcbnxcci9nLGAKYCkmJihwaShlLDApfHxyaSgpLGUudGV4dENvbnRlbnQ9dC5jaGlsZHJlbil9aWYoZCl7aWYoX3x8Ynx8IXN8fGYmNDgpe2xldCB0PWUudGFnTmFtZS5pbmNsdWRlcyhgLWApLGk9ZS5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoYHN2Z2ApP2BzdmdgOmUubmFtZXNwYWNlVVJJLmluY2x1ZGVzKGBNYXRoTUxgKT9gbWF0aG1sYDp2b2lkIDA7Zm9yKGxldCBvIGluIGQpaWYoXyYmKG8uZW5kc1dpdGgoYHZhbHVlYCl8fG89PT1gaW5kZXRlcm1pbmF0ZWApfHxhKG8pJiYhRShvKXx8b1swXT09PWAuYHx8dCYmIUUobyl8fHUmJnUuaW5jbHVkZXMobykpe2lmKHVpKGUsbyxkW29dKSljb250aW51ZTtyKGUsbyxudWxsLGRbb10saSxuKX19ZWxzZSBpZihkLm9uQ2xpY2spcihlLGBvbkNsaWNrYCxudWxsLGQub25DbGljayx2b2lkIDAsbik7ZWxzZSBpZihmJjQmJlV0KGQuc3R5bGUpKWZvcihsZXQgZSBpbiBkLnN0eWxlKWQuc3R5bGVbZV19bGV0IHg7KHg9ZCYmZC5vblZub2RlQmVmb3JlTW91bnQpJiZ3cyh4LG4sdCksaCYmb3IodCxudWxsLG4sYGJlZm9yZU1vdW50YCksKCh4PWQmJmQub25Wbm9kZU1vdW50ZWQpfHxofHxsKSYmSm8oKCk9Pnt4JiZ3cyh4LG4sdCksbCYmZy5lbnRlcihlKSxoJiZvcih0LG51bGwsbixgbW91bnRlZGApfSxpKX1yZXR1cm4gZS5uZXh0U2libGluZ30sbT0oZSx0LHIsYSxzLGMsdSk9Pnt1fHw9ISF0LmR5bmFtaWNDaGlsZHJlbjtsZXQgZD10LmNoaWxkcmVuLHA9ZC5sZW5ndGgsbT0hMTtmb3IobGV0IHQ9MDt0PHA7dCsrKXtsZXQgaD11P2RbdF06ZFt0XT1icyhkW3RdKSxnPWgudHlwZT09PVpvO2U/KGcmJiF1JiZ0KzE8cCYmYnMoZFt0KzFdKS50eXBlPT09Wm8mJihsKGkoZS5kYXRhLnNsaWNlKGguY2hpbGRyZW4ubGVuZ3RoKSkscixvKGUpKSxlLmRhdGE9aC5jaGlsZHJlbiksZT1mKGUsaCxhLHMsYyx1KSk6ZyYmIWguY2hpbGRyZW4/bChoLmVsPWkoYGApLHIpOihtfHwobT0hMCxwaShyLDEpfHxyaSgpKSxuKG51bGwsaCxyLG51bGwsYSxzLG9pKHIpLGMpKX1yZXR1cm4gZX0saD0oZSx0LG4scixpLGEpPT57bGV0e3Nsb3RTY29wZUlkczpjfT10O2MmJihpPWk/aS5jb25jYXQoYyk6Yyk7bGV0IGQ9cyhlKSxmPW0obyhlKSx0LGQsbixyLGksYSk7cmV0dXJuIGYmJnNpKGYpJiZmLmRhdGE9PT1gXWA/byh0LmFuY2hvcj1mKToocmkoKSxsKHQuYW5jaG9yPXUoYF1gKSxkLGYpLGYpfSxnPShlLHQscixpLGEsbCk9PntpZihoaShlLHQpfHxyaSgpLHQuZWw9bnVsbCxsKXtsZXQgdD1fKGUpO2Zvcig7Oyl7bGV0IG49byhlKTtpZihuJiZuIT09dCljKG4pO2Vsc2UgYnJlYWt9fWxldCB1PW8oZSksZD1zKGUpO3JldHVybiBjKGUpLG4obnVsbCx0LGQsdSxyLGksb2koZCksYSksciYmKHIudm5vZGUuZWw9dC5lbCxzbyhyLHQuZWwpKSx1fSxfPShlLHQ9YFtgLG49YF1gKT0+e2xldCByPTA7Zm9yKDtlOylpZihlPW8oZSksZSYmc2koZSkmJihlLmRhdGE9PT10JiZyKyssZS5kYXRhPT09bikpe2lmKHI9PT0wKXJldHVybiBvKGUpO3ItLX1yZXR1cm4gZX0sdj0oZSx0LG4pPT57bGV0IHI9dC5wYXJlbnROb2RlO3ImJnIucmVwbGFjZUNoaWxkKGUsdCk7bGV0IGk9bjtmb3IoO2k7KWkudm5vZGUuZWw9PT10JiYoaS52bm9kZS5lbD1pLnN1YlRyZWUuZWw9ZSksaT1pLnBhcmVudH0seT1lPT5lLm5vZGVUeXBlPT09MSYmZS50YWdOYW1lPT09YFRFTVBMQVRFYDtyZXR1cm5bZCxmXX12YXIgbGk9bmV3IFNldChbYHNyY2AsYHNyY3NldGAsYGhyZWZgLGBwb3N0ZXJgXSk7ZnVuY3Rpb24gdWkoZSx0LG4pe3JldHVybiBsaS5oYXModCk/ZS5nZXRBdHRyaWJ1dGUodCk9PT0obj09bnVsbD9udWxsOmAke259YCk6ITF9dmFyIGRpPWBkYXRhLWFsbG93LW1pc21hdGNoYCxmaT17MDpgdGV4dGAsMTpgY2hpbGRyZW5gLDI6YGNsYXNzYCwzOmBzdHlsZWAsNDpgYXR0cmlidXRlYH07ZnVuY3Rpb24gcGkoZSx0KXtpZih0PT09MHx8dD09PTEpZm9yKDtlJiYhZS5oYXNBdHRyaWJ1dGUoZGkpOyllPWUucGFyZW50RWxlbWVudDtyZXR1cm4gbWkoZSYmZS5nZXRBdHRyaWJ1dGUoZGkpLHQpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoZT09bnVsbClyZXR1cm4hMTtpZihlPT09YGApcmV0dXJuITA7e2xldCBuPWUuc3BsaXQoYCxgKTtyZXR1cm4gdD09PTAmJm4uaW5jbHVkZXMoYGNoaWxkcmVuYCk/ITA6bi5pbmNsdWRlcyhmaVt0XSl9fWZ1bmN0aW9uIGhpKGUsdCl7cmV0dXJuIHBpKGUucGFyZW50RWxlbWVudCwxKXx8Z2koZSl8fF9pKHQpfWZ1bmN0aW9uIGdpKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MSYmbWkoZS5nZXRBdHRyaWJ1dGUoZGkpLDEpfWZ1bmN0aW9uIF9pKHtwcm9wczplfSl7bGV0IHQ9ZSYmZVtkaV07cmV0dXJuIHR5cGVvZiB0PT1gc3RyaW5nYCYmbWkodCwxKX12YXIgdmk9b2UoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrfHwoZT0+c2V0VGltZW91dChlLDEpKSx5aT1vZSgpLmNhbmNlbElkbGVDYWxsYmFja3x8KGU9PmNsZWFyVGltZW91dChlKSksYmk9KGU9MWU0KT0+dD0+e2xldCBuPXZpKHQse3RpbWVvdXQ6ZX0pO3JldHVybigpPT55aShuKX07ZnVuY3Rpb24geGkoZSl7bGV0e3RvcDp0LGxlZnQ6bixib3R0b206cixyaWdodDppfT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtpbm5lckhlaWdodDphLGlubmVyV2lkdGg6b309d2luZG93O3JldHVybih0PjAmJnQ8YXx8cj4wJiZyPGEpJiYobj4wJiZuPG98fGk+MCYmaTxvKX12YXIgU2k9ZT0+KHQsbik9PntsZXQgcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgbiBvZiBlKWlmKG4uaXNJbnRlcnNlY3Rpbmcpe3IuZGlzY29ubmVjdCgpLHQoKTticmVha319LGUpO3JldHVybiBuKGU9PntpZihlIGluc3RhbmNlb2YgRWxlbWVudCl7aWYoeGkoZSkpcmV0dXJuIHQoKSxyLmRpc2Nvbm5lY3QoKSwhMTtyLm9ic2VydmUoZSl9fSksKCk9PnIuZGlzY29ubmVjdCgpfSxDaT1lPT50PT57aWYoZSl7bGV0IG49bWF0Y2hNZWRpYShlKTtpZihuLm1hdGNoZXMpdCgpO2Vsc2UgcmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0LHtvbmNlOiEwfSksKCk9Pm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0KX19LHdpPShlPVtdKT0+KHQsbik9PntfKGUpJiYoZT1bZV0pO2xldCByPSExLGk9ZT0+e3J8fChyPSEwLGEoKSx0KCksZS50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgZS5jb25zdHJ1Y3RvcihlLnR5cGUsZSkpKX0sYT0oKT0+e24odD0+e2ZvcihsZXQgbiBvZiBlKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGkpfSl9O3JldHVybiBuKHQ9Pntmb3IobGV0IG4gb2YgZSl0LmFkZEV2ZW50TGlzdGVuZXIobixpLHtvbmNlOiEwfSl9KSxhfTtmdW5jdGlvbiBUaShlLHQpe2lmKHNpKGUpJiZlLmRhdGE9PT1gW2Ape2xldCBuPTEscj1lLm5leHRTaWJsaW5nO2Zvcig7cjspe2lmKHIubm9kZVR5cGU9PT0xKXtpZih0KHIpPT09ITEpYnJlYWt9ZWxzZSBpZihzaShyKSl7aWYoci5kYXRhPT09YF1gKXtpZigtLW49PT0wKWJyZWFrfWVsc2Ugci5kYXRhPT09YFtgJiZuKyt9cj1yLm5leHRTaWJsaW5nfX1lbHNlIHQoZSl9dmFyIEVpPWU9PiEhZS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gRGkoZSl7ZyhlKSYmKGU9e2xvYWRlcjplfSk7bGV0e2xvYWRlcjp0LGxvYWRpbmdDb21wb25lbnQ6bixlcnJvckNvbXBvbmVudDpyLGRlbGF5Omk9MjAwLGh5ZHJhdGU6YSx0aW1lb3V0Om8sc3VzcGVuc2libGU6cz0hMCxvbkVycm9yOmN9PWUsbD1udWxsLHUsZD0wLGY9KCk9PihkKyssbD1udWxsLHAoKSkscD0oKT0+e2xldCBlO3JldHVybiBsfHwoZT1sPXQoKS5jYXRjaChlPT57aWYoZT1lIGluc3RhbmNlb2YgRXJyb3I/ZTpFcnJvcihTdHJpbmcoZSkpLGMpcmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57YyhlLCgpPT50KGYoKSksKCk9Pm4oZSksZCsxKX0pO3Rocm93IGV9KS50aGVuKHQ9PmUhPT1sJiZsP2w6KHQmJih0Ll9fZXNNb2R1bGV8fHRbU3ltYm9sLnRvU3RyaW5nVGFnXT09PWBNb2R1bGVgKSYmKHQ9dC5kZWZhdWx0KSx1PXQsdCkpKX07cmV0dXJuIEpyKHtuYW1lOmBBc3luY0NvbXBvbmVudFdyYXBwZXJgLF9fYXN5bmNMb2FkZXI6cCxfX2FzeW5jSHlkcmF0ZShlLHQsbil7bGV0IHI9ZS5pc0Nvbm5lY3RlZCxpPSExOyh0LmJ1fHw9W10pLnB1c2goKCk9Pmk9ITApO2xldCBvPSgpPT57aXx8IWUucGFyZW50Tm9kZXx8ciYmIWUuaXNDb25uZWN0ZWR8fG4oKX0scz1hPygpPT57bGV0IG49YShvLHQ9PlRpKGUsdCkpO24mJih0LmJ1bXx8PVtdKS5wdXNoKG4pfTpvO3U/cygpOnAoKS50aGVuKCgpPT4hdC5pc1VubW91bnRlZCYmcygpKX0sZ2V0IF9fYXN5bmNSZXNvbHZlZCgpe3JldHVybiB1fSxzZXR1cCgpe2xldCBlPUo7aWYoWHIoZSksdSlyZXR1cm4oKT0+T2kodSxlKTtsZXQgdD10PT57bD1udWxsLE1uKHQsZSwxMywhcil9O2lmKHMmJmUuc3VzcGVuc2V8fE5zKXJldHVybiBwKCkudGhlbih0PT4oKT0+T2kodCxlKSkuY2F0Y2goZT0+KHQoZSksKCk9PnI/cShyLHtlcnJvcjplfSk6bnVsbCkpO2xldCBhPVh0KCExKSxjPVh0KCksZD1YdCghIWkpLGYsbTtyZXR1cm4gR2koKCk9PntmIT1udWxsJiZjbGVhclRpbWVvdXQoZiksbSE9bnVsbCYmY2xlYXJUaW1lb3V0KG0pfSksaSYmKG09c2V0VGltZW91dCgoKT0+e2UuaXNVbm1vdW50ZWR8fChkLnZhbHVlPSExKX0saSkpLG8hPW51bGwmJihmPXNldFRpbWVvdXQoKCk9PntpZighZS5pc1VubW91bnRlZCYmIWEudmFsdWUmJiFjLnZhbHVlKXtsZXQgZT1FcnJvcihgQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAke299bXMuYCk7dChlKSxjLnZhbHVlPWV9fSxvKSkscCgpLnRoZW4oKCk9PntlLmlzVW5tb3VudGVkfHwoYS52YWx1ZT0hMCxlLnBhcmVudCYma2koZS5wYXJlbnQudm5vZGUpJiZlLnBhcmVudC51cGRhdGUoKSl9KS5jYXRjaChuPT57aWYoZS5pc1VubW91bnRlZCl7bD1udWxsO3JldHVybn10KG4pLGMudmFsdWU9bn0pLCgpPT57aWYoYS52YWx1ZSYmdSlyZXR1cm4gT2kodSxlKTtpZihjLnZhbHVlJiZyKXJldHVybiBxKHIse2Vycm9yOmMudmFsdWV9KTtpZihuJiYhZC52YWx1ZSlyZXR1cm4gT2kobixlKX19fSl9ZnVuY3Rpb24gT2koZSx0KXtsZXR7cmVmOm4scHJvcHM6cixjaGlsZHJlbjppLGNlOmF9PXQudm5vZGUsbz1xKGUscixpKTtyZXR1cm4gby5yZWY9bixvLmNlPWEsZGVsZXRlIHQudm5vZGUuY2Usb312YXIga2k9ZT0+ZS50eXBlLl9faXNLZWVwQWxpdmUsQWk9e25hbWU6YEtlZXBBbGl2ZWAsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPVkoKSxyPW4uY3R4O2lmKCFyLnJlbmRlcmVyKXJldHVybigpPT57bGV0IGU9dC5kZWZhdWx0JiZ0LmRlZmF1bHQoKTtyZXR1cm4gZSYmZS5sZW5ndGg9PT0xP2VbMF06ZX07bGV0IGk9bmV3IE1hcCxhPW5ldyBTZXQsbz1udWxsLHM9bi5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6YyxtOmwsdW06dSxvOntjcmVhdGVFbGVtZW50OmR9fX09cixmPWQoYGRpdmApO3IuYWN0aXZhdGU9KGUsdCxuLHIsaSk9PntsZXQgYT1lLmNvbXBvbmVudDtsKGUsdCxuLDAscyksYyhhLnZub2RlLGUsdCxuLGEscyxyLGUuc2xvdFNjb3BlSWRzLGkpLFcoKCk9PnthLmlzRGVhY3RpdmF0ZWQ9ITEsYS5hJiZNKGEuYSk7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5vblZub2RlTW91bnRlZDt0JiZ3cyh0LGEucGFyZW50LGUpfSxzKX0sci5kZWFjdGl2YXRlPWU9PntsZXQgdD1lLmNvbXBvbmVudDtJbyh0Lm0pLElvKHQuYSksbChlLGYsbnVsbCwxLHMpLFcoKCk9Pnt0LmRhJiZNKHQuZGEpO2xldCBuPWUucHJvcHMmJmUucHJvcHMub25Wbm9kZVVubW91bnRlZDtuJiZ3cyhuLHQucGFyZW50LGUpLHQuaXNEZWFjdGl2YXRlZD0hMH0scyl9O2Z1bmN0aW9uIHAoZSl7SWkoZSksdShlLG4scywhMCl9ZnVuY3Rpb24gbShlKXtpLmZvckVhY2goKHQsbik9PntsZXQgcj1HcyhFaSh0KT90LnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTp0LnR5cGUpO3ImJiFlKHIpJiZoKG4pfSl9ZnVuY3Rpb24gaChlKXtsZXQgdD1pLmdldChlKTt0JiYoIW98fCFscyh0LG8pKT9wKHQpOm8mJklpKG8pLGkuZGVsZXRlKGUpLGEuZGVsZXRlKGUpfWhyKCgpPT5bZS5pbmNsdWRlLGUuZXhjbHVkZV0sKFtlLHRdKT0+e2UmJm0odD0+amkoZSx0KSksdCYmbShlPT4hamkodCxlKSl9LHtmbHVzaDpgcG9zdGAsZGVlcDohMH0pO2xldCBnPW51bGwsXz0oKT0+e2chPW51bGwmJihSbyhuLnN1YlRyZWUudHlwZSk/VygoKT0+e2kuc2V0KGcsTGkobi5zdWJUcmVlKSl9LG4uc3ViVHJlZS5zdXNwZW5zZSk6aS5zZXQoZyxMaShuLnN1YlRyZWUpKSl9O3JldHVybiBWaShfKSxVaShfKSxXaSgoKT0+e2kuZm9yRWFjaChlPT57bGV0e3N1YlRyZWU6dCxzdXNwZW5zZTpyfT1uLGk9TGkodCk7aWYoZS50eXBlPT09aS50eXBlJiZlLmtleT09PWkua2V5KXtJaShpKTtsZXQgZT1pLmNvbXBvbmVudC5kYTtlJiZXKGUscik7cmV0dXJufXAoZSl9KX0pLCgpPT57aWYoZz1udWxsLCF0LmRlZmF1bHQpcmV0dXJuIG89bnVsbDtsZXQgbj10LmRlZmF1bHQoKSxyPW5bMF07aWYobi5sZW5ndGg+MSlyZXR1cm4gbz1udWxsLG47aWYoIWNzKHIpfHwhKHIuc2hhcGVGbGFnJjQpJiYhKHIuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIG89bnVsbCxyO2xldCBzPUxpKHIpO2lmKHMudHlwZT09PUspcmV0dXJuIG89bnVsbCxzO2xldCBjPXMudHlwZSxsPUdzKEVpKHMpP3MudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OmMpLHtpbmNsdWRlOnUsZXhjbHVkZTpkLG1heDpmfT1lO2lmKHUmJighbHx8IWppKHUsbCkpfHxkJiZsJiZqaShkLGwpKXJldHVybiBzLnNoYXBlRmxhZyY9LTI1NyxvPXMscjtsZXQgcD1zLmtleT09bnVsbD9jOnMua2V5LG09aS5nZXQocCk7cmV0dXJuIHMuZWwmJihzPWdzKHMpLHIuc2hhcGVGbGFnJjEyOCYmKHIuc3NDb250ZW50PXMpKSxnPXAsbT8ocy5lbD1tLmVsLHMuY29tcG9uZW50PW0uY29tcG9uZW50LHMudHJhbnNpdGlvbiYmS3IocyxzLnRyYW5zaXRpb24pLHMuc2hhcGVGbGFnfD01MTIsYS5kZWxldGUocCksYS5hZGQocCkpOihhLmFkZChwKSxmJiZhLnNpemU+cGFyc2VJbnQoZiwxMCkmJmgoYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpKSxzLnNoYXBlRmxhZ3w9MjU2LG89cyxSbyhyLnR5cGUpP3I6c319fTtmdW5jdGlvbiBqaShlLHQpe3JldHVybiBkKGUpP2Uuc29tZShlPT5qaShlLHQpKTpfKGUpP2Uuc3BsaXQoYCxgKS5pbmNsdWRlcyh0KTpoKGUpPyhlLmxhc3RJbmRleD0wLGUudGVzdCh0KSk6ITF9ZnVuY3Rpb24gTWkoZSx0KXtQaShlLGBhYCx0KX1mdW5jdGlvbiBOaShlLHQpe1BpKGUsYGRhYCx0KX1mdW5jdGlvbiBQaShlLHQsbj1KKXtsZXQgcj1lLl9fd2RjfHw9KCk9PntsZXQgdD1uO2Zvcig7dDspe2lmKHQuaXNEZWFjdGl2YXRlZClyZXR1cm47dD10LnBhcmVudH1yZXR1cm4gZSgpfTtpZihSaSh0LHIsbiksbil7bGV0IGU9bi5wYXJlbnQ7Zm9yKDtlJiZlLnBhcmVudDspa2koZS5wYXJlbnQudm5vZGUpJiZGaShyLHQsbixlKSxlPWUucGFyZW50fX1mdW5jdGlvbiBGaShlLHQsbixyKXtsZXQgaT1SaSh0LGUsciwhMCk7R2koKCk9PntjKHJbdF0saSl9LG4pfWZ1bmN0aW9uIElpKGUpe2Uuc2hhcGVGbGFnJj0tMjU3LGUuc2hhcGVGbGFnJj0tNTEzfWZ1bmN0aW9uIExpKGUpe3JldHVybiBlLnNoYXBlRmxhZyYxMjg/ZS5zc0NvbnRlbnQ6ZX1mdW5jdGlvbiBSaShlLHQsbj1KLHI9ITEpe2lmKG4pe2xldCBpPW5bZV18fChuW2VdPVtdKSxhPXQuX193ZWh8fD0oLi4ucik9PntXZSgpO2xldCBpPUFzKG4pLGE9am4odCxuLGUscik7cmV0dXJuIGkoKSxHZSgpLGF9O3JldHVybiByP2kudW5zaGlmdChhKTppLnB1c2goYSksYX19dmFyIHppPWU9Pih0LG49Sik9PnsoIU5zfHxlPT09YHNwYCkmJlJpKGUsKC4uLmUpPT50KC4uLmUpLG4pfSxCaT16aShgYm1gKSxWaT16aShgbWApLEhpPXppKGBidWApLFVpPXppKGB1YCksV2k9emkoYGJ1bWApLEdpPXppKGB1bWApLEtpPXppKGBzcGApLHFpPXppKGBydGdgKSxKaT16aShgcnRjYCk7ZnVuY3Rpb24gWWkoZSx0PUope1JpKGBlY2AsZSx0KX12YXIgWGk9YGNvbXBvbmVudHNgLFppPWBkaXJlY3RpdmVzYDtmdW5jdGlvbiBRaShlLHQpe3JldHVybiBuYShYaSxlLCEwLHQpfHxlfXZhciAkaT1TeW1ib2wuZm9yKGB2LW5kY2ApO2Z1bmN0aW9uIGVhKGUpe3JldHVybiBfKGUpP25hKFhpLGUsITEpfHxlOmV8fCRpfWZ1bmN0aW9uIHRhKGUpe3JldHVybiBuYShaaSxlKX1mdW5jdGlvbiBuYShlLHQsbj0hMCxyPSExKXtsZXQgaT1VfHxKO2lmKGkpe2xldCBuPWkudHlwZTtpZihlPT09WGkpe2xldCBlPUdzKG4sITEpO2lmKGUmJihlPT09dHx8ZT09PU8odCl8fGU9PT1BKE8odCkpKSlyZXR1cm4gbn1sZXQgYT1yYShpW2VdfHxuW2VdLHQpfHxyYShpLmFwcENvbnRleHRbZV0sdCk7cmV0dXJuIWEmJnI/bjphfX1mdW5jdGlvbiByYShlLHQpe3JldHVybiBlJiYoZVt0XXx8ZVtPKHQpXXx8ZVtBKE8odCkpXSl9ZnVuY3Rpb24gaWEoZSx0LG4scil7bGV0IGksYT1uJiZuW3JdLG89ZChlKTtpZihvfHxfKGUpKXtsZXQgbj1vJiZVdChlKSxyPSExLHM9ITE7biYmKHI9IUd0KGUpLHM9V3QoZSksZT1pdChlKSksaT1BcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuPG87bisrKWlbbl09dChyP3M/WXQoSnQoZVtuXSkpOkp0KGVbbl0pOmVbbl0sbix2b2lkIDAsYSYmYVtuXSl9ZWxzZSBpZih0eXBlb2YgZT09YG51bWJlcmApe2k9QXJyYXkoZSk7Zm9yKGxldCBuPTA7bjxlO24rKylpW25dPXQobisxLG4sdm9pZCAwLGEmJmFbbl0pfWVsc2UgaWYoeShlKSl7aWYoZVtTeW1ib2wuaXRlcmF0b3JdKWk9QXJyYXkuZnJvbShlLChlLG4pPT50KGUsbix2b2lkIDAsYSYmYVtuXSkpO2Vsc2V7bGV0IG49T2JqZWN0LmtleXMoZSk7aT1BcnJheShuLmxlbmd0aCk7Zm9yKGxldCByPTAsbz1uLmxlbmd0aDtyPG87cisrKXtsZXQgbz1uW3JdO2lbcl09dChlW29dLG8scixhJiZhW3JdKX19fWVsc2UgaT1bXTtyZXR1cm4gbiYmKG5bcl09aSksaX1mdW5jdGlvbiBhYShlLHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj10W25dO2lmKGQocikpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0KyspZVtyW3RdLm5hbWVdPXJbdF0uZm47ZWxzZSByJiYoZVtyLm5hbWVdPXIua2V5PyguLi5lKT0+e2xldCB0PXIuZm4oLi4uZSk7cmV0dXJuIHQmJih0LmtleT1yLmtleSksdH06ci5mbil9cmV0dXJuIGV9ZnVuY3Rpb24gb2EoZSx0LG4scixpLGEpe2lmKG4/Pz17fSxVLmNlfHxVLnBhcmVudCYmRWkoVS5wYXJlbnQpJiZVLnBhcmVudC5jZSl7bGV0IGU9YSE9bnVsbCYmbi5rZXk9PW51bGw/cyh7fSxuLHtrZXk6YX0pOm4saT1PYmplY3Qua2V5cyhlKS5sZW5ndGg+MDtyZXR1cm4gdCE9PSJkZWZhdWx0IiYmKGUubmFtZT10KSx0cygpLHNzKEcsbnVsbCxbcShgc2xvdGAsZSxyJiZyKCkpXSxpPy0yOjY0KX1sZXQgbz1lW3RdO28mJm8uX2MmJihvLl9kPSExKTtsZXQgYz0kby5sZW5ndGg7dHMoKTtsZXQgbDt0cnl7bGV0IGk9byYmc2EobyhuKSkscz1uLmtleXx8YXx8aSYmaS5rZXk7bD1zcyhHLHtrZXk6KHMmJiF2KHMpP3M6YF8ke3R9YCkrKCFpJiZyP2BfZmJgOmBgKX0saXx8KHI/cigpOltdKSxpJiZlLl89PT0xPzY0Oi0yKX1jYXRjaChlKXtmb3IobGV0IGU9JG8ubGVuZ3RoO2U+YztlLS0pbnMoKTt0aHJvdyBlfWZpbmFsbHl7byYmby5fYyYmKG8uX2Q9ITApfXJldHVybiFpJiZsLnNjb3BlSWQmJihsLnNsb3RTY29wZUlkcz1bbC5zY29wZUlkK2Atc2BdKSxsfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBlLnNvbWUoZT0+IWNzKGUpfHwhKGUudHlwZT09PUt8fGUudHlwZT09PUcmJiFzYShlLmNoaWxkcmVuKSkpP2U6bnVsbH1mdW5jdGlvbiBjYShlLHQpe2xldCBuPXt9O2ZvcihsZXQgciBpbiBlKW5bdCYmL1tBLVpdLy50ZXN0KHIpP2Bvbjoke3J9YDpuZShyKV09ZVtyXTtyZXR1cm4gbn12YXIgbGE9ZT0+ZT9NcyhlKT9XcyhlKTpsYShlLnBhcmVudCk6bnVsbCx1YT1zKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6ZT0+ZSwkZWw6ZT0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOmU9PmUucHJvcHMsJGF0dHJzOmU9PmUuYXR0cnMsJHNsb3RzOmU9PmUuc2xvdHMsJHJlZnM6ZT0+ZS5yZWZzLCRwYXJlbnQ6ZT0+bGEoZS5wYXJlbnQpLCRyb290OmU9PmxhKGUucm9vdCksJGhvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+UGEoZSksJGZvcmNlVXBkYXRlOmU9PmUuZnx8PSgpPT57VW4oZS51cGRhdGUpfSwkbmV4dFRpY2s6ZT0+ZS5ufHw9Vm4uYmluZChlLnByb3h5KSwkd2F0Y2g6ZT0+X3IuYmluZChlKX0pLGRhPShlLG4pPT5lIT09dCYmIWUuX19pc1NjcmlwdFNldHVwJiZ1KGUsbiksZmE9e2dldCh7XzplfSxuKXtpZihuPT09YF9fdl9za2lwYClyZXR1cm4hMDtsZXR7Y3R4OnIsc2V0dXBTdGF0ZTppLGRhdGE6YSxwcm9wczpvLGFjY2Vzc0NhY2hlOnMsdHlwZTpjLGFwcENvbnRleHQ6bH09ZTtpZihuWzBdIT09YCRgKXtsZXQgZT1zW25dO2lmKGUhPT12b2lkIDApc3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gaVtuXTtjYXNlIDI6cmV0dXJuIGFbbl07Y2FzZSA0OnJldHVybiByW25dO2Nhc2UgMzpyZXR1cm4gb1tuXX1lbHNlIGlmKGRhKGksbikpcmV0dXJuIHNbbl09MSxpW25dO2Vsc2UgaWYoYSE9PXQmJnUoYSxuKSlyZXR1cm4gc1tuXT0yLGFbbl07ZWxzZSBpZih1KG8sbikpcmV0dXJuIHNbbl09MyxvW25dO2Vsc2UgaWYociE9PXQmJnUocixuKSlyZXR1cm4gc1tuXT00LHJbbl07ZWxzZSBrYSYmKHNbbl09MCl9bGV0IGQ9dWFbbl0sZixwO2lmKGQpcmV0dXJuIG49PT1gJGF0dHJzYCYmQihlLmF0dHJzLGBnZXRgLGBgKSxkKGUpO2lmKChmPWMuX19jc3NNb2R1bGVzKSYmKGY9ZltuXSkpcmV0dXJuIGY7aWYociE9PXQmJnUocixuKSlyZXR1cm4gc1tuXT00LHJbbl07aWYocD1sLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLHUocCxuKSlyZXR1cm4gcFtuXX0sc2V0KHtfOmV9LG4scil7bGV0e2RhdGE6aSxzZXR1cFN0YXRlOmEsY3R4Om99PWU7cmV0dXJuIGRhKGEsbik/KGFbbl09ciwhMCk6aSE9PXQmJnUoaSxuKT8oaVtuXT1yLCEwKTp1KGUucHJvcHMsbil8fG5bMF09PT1gJGAmJm4uc2xpY2UoMSlpbiBlPyExOihvW25dPXIsITApfSxoYXMoe186e2RhdGE6ZSxzZXR1cFN0YXRlOm4sYWNjZXNzQ2FjaGU6cixjdHg6aSxhcHBDb250ZXh0OmEscHJvcHM6byx0eXBlOnN9fSxjKXtsZXQgbDtyZXR1cm4hIShyW2NdfHxlIT09dCYmY1swXSE9PWAkYCYmdShlLGMpfHxkYShuLGMpfHx1KG8sYyl8fHUoaSxjKXx8dSh1YSxjKXx8dShhLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGMpfHwobD1zLl9fY3NzTW9kdWxlcykmJmxbY10pfSxkZWZpbmVQcm9wZXJ0eShlLHQsbil7cmV0dXJuIG4uZ2V0PT1udWxsP3UobixgdmFsdWVgKSYmdGhpcy5zZXQoZSx0LG4udmFsdWUsbnVsbCk6ZS5fLmFjY2Vzc0NhY2hlW3RdPTAsUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsbil9fSxwYT1zKHt9LGZhLHtnZXQoZSx0KXtpZih0IT09U3ltYm9sLnVuc2NvcGFibGVzKXJldHVybiBmYS5nZXQoZSx0LGUpfSxoYXMoZSx0KXtyZXR1cm4gdFswXSE9PWBfYCYmIVAodCl9fSk7ZnVuY3Rpb24gbWEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBoYSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGdhKGUpe31mdW5jdGlvbiBfYShlKXt9ZnVuY3Rpb24gdmEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB5YSgpe31mdW5jdGlvbiBiYShlLHQpe3JldHVybiBudWxsfWZ1bmN0aW9uIHhhKCl7cmV0dXJuIENhKGB1c2VTbG90c2ApLnNsb3RzfWZ1bmN0aW9uIFNhKCl7cmV0dXJuIENhKGB1c2VBdHRyc2ApLmF0dHJzfWZ1bmN0aW9uIENhKGUpe2xldCB0PVkoKTtyZXR1cm4gdC5zZXR1cENvbnRleHR8fD1Vcyh0KX1mdW5jdGlvbiB3YShlKXtyZXR1cm4gZChlKT9lLnJlZHVjZSgoZSx0KT0+KGVbdF09bnVsbCxlKSx7fSk6ZX1mdW5jdGlvbiBUYShlLHQpe2xldCBuPXdhKGUpO2ZvcihsZXQgZSBpbiB0KXtpZihlLnN0YXJ0c1dpdGgoYF9fc2tpcGApKWNvbnRpbnVlO2xldCByPW5bZV07cj9kKHIpfHxnKHIpP3I9bltlXT17dHlwZTpyLGRlZmF1bHQ6dFtlXX06ci5kZWZhdWx0PXRbZV06cj09PW51bGwmJihyPW5bZV09e2RlZmF1bHQ6dFtlXX0pLHImJnRbYF9fc2tpcF8ke2V9YF0mJihyLnNraXBGYWN0b3J5PSEwKX1yZXR1cm4gbn1mdW5jdGlvbiBFYShlLHQpe3JldHVybiFlfHwhdD9lfHx0OmQoZSkmJmQodCk/ZS5jb25jYXQodCk6cyh7fSx3YShlKSx3YSh0KSl9ZnVuY3Rpb24gRGEoZSx0KXtsZXQgbj17fTtmb3IobGV0IHIgaW4gZSl0LmluY2x1ZGVzKHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+ZVtyXX0pO3JldHVybiBufWZ1bmN0aW9uIE9hKGUpe2xldCB0PVkoKSxuPU5zLHI9ZSgpO2pzKCksbiYma3MoITEpO2xldCBpPSgpPT57QXModCksbiYma3MoITApfSxhPSgpPT57WSgpIT09dCYmdC5zY29wZS5vZmYoKSxqcygpLG4mJmtzKCExKX07cmV0dXJuIGIocikmJihyPXIuY2F0Y2goZT0+e3Rocm93IGkoKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGEpKSxlfSkpLFtyLCgpPT57aSgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYSl9XX12YXIga2E9ITA7ZnVuY3Rpb24gQWEoZSl7bGV0IHQ9UGEoZSksbj1lLnByb3h5LGk9ZS5jdHg7a2E9ITEsdC5iZWZvcmVDcmVhdGUmJk1hKHQuYmVmb3JlQ3JlYXRlLGUsYGJjYCk7bGV0e2RhdGE6YSxjb21wdXRlZDpvLG1ldGhvZHM6cyx3YXRjaDpjLHByb3ZpZGU6bCxpbmplY3Q6dSxjcmVhdGVkOmYsYmVmb3JlTW91bnQ6cCxtb3VudGVkOm0sYmVmb3JlVXBkYXRlOmgsdXBkYXRlZDpfLGFjdGl2YXRlZDp2LGRlYWN0aXZhdGVkOmIsYmVmb3JlRGVzdHJveTp4LGJlZm9yZVVubW91bnQ6UyxkZXN0cm95ZWQ6Qyx1bm1vdW50ZWQ6dyxyZW5kZXI6VCxyZW5kZXJUcmFja2VkOkUscmVuZGVyVHJpZ2dlcmVkOkQsZXJyb3JDYXB0dXJlZDplZSxzZXJ2ZXJQcmVmZXRjaDpPLGV4cG9zZTp0ZSxpbmhlcml0QXR0cnM6ayxjb21wb25lbnRzOkEsZGlyZWN0aXZlczpuZSxmaWx0ZXJzOmp9PXQ7aWYodSYmamEodSxpLG51bGwpLHMpZm9yKGxldCBlIGluIHMpe2xldCB0PXNbZV07Zyh0KSYmKGlbZV09dC5iaW5kKG4pKX1pZihhKXtsZXQgdD1hLmNhbGwobixuKTt5KHQpJiYoZS5kYXRhPVJ0KHQpKX1pZihrYT0hMCxvKWZvcihsZXQgZSBpbiBvKXtsZXQgdD1vW2VdLGE9cXMoe2dldDpnKHQpP3QuYmluZChuLG4pOmcodC5nZXQpP3QuZ2V0LmJpbmQobixuKTpyLHNldDohZyh0KSYmZyh0LnNldCk/dC5zZXQuYmluZChuKTpyfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5hLnZhbHVlLHNldDplPT5hLnZhbHVlPWV9KX1pZihjKWZvcihsZXQgZSBpbiBjKU5hKGNbZV0saSxuLGUpO2lmKGwpe2xldCBlPWcobCk/bC5jYWxsKG4pOmw7UmVmbGVjdC5vd25LZXlzKGUpLmZvckVhY2godD0+e3NyKHQsZVt0XSl9KX1mJiZNYShmLGUsYGNgKTtmdW5jdGlvbiBNKGUsdCl7ZCh0KT90LmZvckVhY2godD0+ZSh0LmJpbmQobikpKTp0JiZlKHQuYmluZChuKSl9aWYoTShCaSxwKSxNKFZpLG0pLE0oSGksaCksTShVaSxfKSxNKE1pLHYpLE0oTmksYiksTShZaSxlZSksTShKaSxFKSxNKHFpLEQpLE0oV2ksUyksTShHaSx3KSxNKEtpLE8pLGQodGUpKXtpZih0ZS5sZW5ndGgpe2xldCB0PWUuZXhwb3NlZHx8PXt9O3RlLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2dldDooKT0+bltlXSxzZXQ6dD0+bltlXT10LGVudW1lcmFibGU6ITB9KX0pfWVsc2UgZS5leHBvc2VkfHw9e319VCYmZS5yZW5kZXI9PT1yJiYoZS5yZW5kZXI9VCksayE9bnVsbCYmKGUuaW5oZXJpdEF0dHJzPWspLEEmJihlLmNvbXBvbmVudHM9QSksbmUmJihlLmRpcmVjdGl2ZXM9bmUpLE8mJlhyKGUpfWZ1bmN0aW9uIGphKGUsdCxuPXIpe2QoZSkmJihlPXphKGUpKTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXSxpO2k9eShyKT9gZGVmYXVsdGBpbiByP2NyKHIuZnJvbXx8bixyLmRlZmF1bHQsITApOmNyKHIuZnJvbXx8bik6Y3IociksSChpKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmkudmFsdWUsc2V0OmU9PmkudmFsdWU9ZX0pOnRbbl09aX19ZnVuY3Rpb24gTWEoZSx0LG4pe2puKGQoZSk/ZS5tYXAoZT0+ZS5iaW5kKHQucHJveHkpKTplLmJpbmQodC5wcm94eSksdCxuKX1mdW5jdGlvbiBOYShlLHQsbixyKXtsZXQgaT1yLmluY2x1ZGVzKGAuYCk/dnIobixyKTooKT0+bltyXTtpZihfKGUpKXtsZXQgbj10W2VdO2cobikmJmhyKGksbil9ZWxzZSBpZihnKGUpKWhyKGksZS5iaW5kKG4pKTtlbHNlIGlmKHkoZSkpe2lmKGQoZSkpZS5mb3JFYWNoKGU9Pk5hKGUsdCxuLHIpKTtlbHNle2xldCByPWcoZS5oYW5kbGVyKT9lLmhhbmRsZXIuYmluZChuKTp0W2UuaGFuZGxlcl07ZyhyKSYmaHIoaSxyLGUpfX19ZnVuY3Rpb24gUGEoZSl7bGV0IHQ9ZS50eXBlLHttaXhpbnM6bixleHRlbmRzOnJ9PXQse21peGluczppLG9wdGlvbnNDYWNoZTphLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOm99fT1lLmFwcENvbnRleHQscz1hLmdldCh0KSxjO3JldHVybiBzP2M9czohaS5sZW5ndGgmJiFuJiYhcj9jPXQ6KGM9e30saS5sZW5ndGgmJmkuZm9yRWFjaChlPT5GYShjLGUsbywhMCkpLEZhKGMsdCxvKSkseSh0KSYmYS5zZXQodCxjKSxjfWZ1bmN0aW9uIEZhKGUsdCxuLHI9ITEpe2xldHttaXhpbnM6aSxleHRlbmRzOmF9PXQ7YSYmRmEoZSxhLG4sITApLGkmJmkuZm9yRWFjaCh0PT5GYShlLHQsbiwhMCkpO2ZvcihsZXQgaSBpbiB0KWlmKCEociYmaT09PWBleHBvc2VgKSl7bGV0IHI9SWFbaV18fG4mJm5baV07ZVtpXT1yP3IoZVtpXSx0W2ldKTp0W2ldfXJldHVybiBlfXZhciBJYT17ZGF0YTpMYSxwcm9wczpIYSxlbWl0czpIYSxtZXRob2RzOlZhLGNvbXB1dGVkOlZhLGJlZm9yZUNyZWF0ZTpCYSxjcmVhdGVkOkJhLGJlZm9yZU1vdW50OkJhLG1vdW50ZWQ6QmEsYmVmb3JlVXBkYXRlOkJhLHVwZGF0ZWQ6QmEsYmVmb3JlRGVzdHJveTpCYSxiZWZvcmVVbm1vdW50OkJhLGRlc3Ryb3llZDpCYSx1bm1vdW50ZWQ6QmEsYWN0aXZhdGVkOkJhLGRlYWN0aXZhdGVkOkJhLGVycm9yQ2FwdHVyZWQ6QmEsc2VydmVyUHJlZmV0Y2g6QmEsY29tcG9uZW50czpWYSxkaXJlY3RpdmVzOlZhLHdhdGNoOlVhLHByb3ZpZGU6TGEsaW5qZWN0OlJhfTtmdW5jdGlvbiBMYShlLHQpe3JldHVybiB0P2U/ZnVuY3Rpb24oKXtyZXR1cm4gcyhnKGUpP2UuY2FsbCh0aGlzLHRoaXMpOmUsZyh0KT90LmNhbGwodGhpcyx0aGlzKTp0KX06dDplfWZ1bmN0aW9uIFJhKGUsdCl7cmV0dXJuIFZhKHphKGUpLHphKHQpKX1mdW5jdGlvbiB6YShlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0W2Vbbl1dPWVbbl07cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gQmEoZSx0KXtyZXR1cm4gZT9bLi4ubmV3IFNldChbXS5jb25jYXQoZSx0KSldOnR9ZnVuY3Rpb24gVmEoZSx0KXtyZXR1cm4gZT9zKE9iamVjdC5jcmVhdGUobnVsbCksZSx0KTp0fWZ1bmN0aW9uIEhhKGUsdCl7cmV0dXJuIGU/ZChlKSYmZCh0KT9bLi4ubmV3IFNldChbLi4uZSwuLi50XSldOnMoT2JqZWN0LmNyZWF0ZShudWxsKSx3YShlKSx3YSh0Pz97fSkpOnR9ZnVuY3Rpb24gVWEoZSx0KXtpZighZSlyZXR1cm4gdDtpZighdClyZXR1cm4gZTtsZXQgbj1zKE9iamVjdC5jcmVhdGUobnVsbCksZSk7Zm9yKGxldCByIGluIHQpbltyXT1CYShlW3JdLHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIFdhKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6aSxwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9LG9wdGlvbk1lcmdlU3RyYXRlZ2llczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb21waWxlck9wdGlvbnM6e319LG1peGluczpbXSxjb21wb25lbnRzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpb25zQ2FjaGU6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm5ldyBXZWFrTWFwfX12YXIgR2E9MDtmdW5jdGlvbiBLYShlLHQpe3JldHVybiBmdW5jdGlvbihuLHI9bnVsbCl7ZyhuKXx8KG49cyh7fSxuKSksciE9bnVsbCYmIXkocikmJihyPW51bGwpO2xldCBpPVdhKCksYT1uZXcgV2Vha1NldCxvPVtdLGM9ITEsbD1pLmFwcD17X3VpZDpHYSsrLF9jb21wb25lbnQ6bixfcHJvcHM6cixfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6aSxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOlFzLGdldCBjb25maWcoKXtyZXR1cm4gaS5jb25maWd9LHNldCBjb25maWcoZSl7fSx1c2UoZSwuLi50KXtyZXR1cm4gYS5oYXMoZSl8fChlJiZnKGUuaW5zdGFsbCk/KGEuYWRkKGUpLGUuaW5zdGFsbChsLC4uLnQpKTpnKGUpJiYoYS5hZGQoZSksZShsLC4uLnQpKSksbH0sbWl4aW4oZSl7cmV0dXJuIGkubWl4aW5zLmluY2x1ZGVzKGUpfHxpLm1peGlucy5wdXNoKGUpLGx9LGNvbXBvbmVudChlLHQpe3JldHVybiB0PyhpLmNvbXBvbmVudHNbZV09dCxsKTppLmNvbXBvbmVudHNbZV19LGRpcmVjdGl2ZShlLHQpe3JldHVybiB0PyhpLmRpcmVjdGl2ZXNbZV09dCxsKTppLmRpcmVjdGl2ZXNbZV19LG1vdW50KGEsbyxzKXtpZighYyl7bGV0IHU9bC5fY2VWTm9kZXx8cShuLHIpO3JldHVybiB1LmFwcENvbnRleHQ9aSxzPT09ITA/cz1gc3ZnYDpzPT09ITEmJihzPXZvaWQgMCksbyYmdD90KHUsYSk6ZSh1LGEscyksYz0hMCxsLl9jb250YWluZXI9YSxhLl9fdnVlX2FwcF9fPWwsV3ModS5jb21wb25lbnQpfX0sb25Vbm1vdW50KGUpe28ucHVzaChlKX0sdW5tb3VudCgpe2MmJihqbihvLGwuX2luc3RhbmNlLDE2KSxlKG51bGwsbC5fY29udGFpbmVyKSxkZWxldGUgbC5fY29udGFpbmVyLl9fdnVlX2FwcF9fKX0scHJvdmlkZShlLHQpe3JldHVybiBpLnByb3ZpZGVzW2VdPXQsbH0scnVuV2l0aENvbnRleHQoZSl7bGV0IHQ9cWE7cWE9bDt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3FhPXR9fX07cmV0dXJuIGx9fXZhciBxYT1udWxsO2Z1bmN0aW9uIEphKGUsbixyPXQpe2xldCBpPVkoKSxhPU8obiksbz1rKG4pLHM9WWEoZSxhKSxjPXNuKChzLGMpPT57bGV0IGwsdT10LGQ7cmV0dXJuIG1yKCgpPT57bGV0IHQ9ZVthXTtqKGwsdCkmJihsPXQsYygpKX0pLHtnZXQoKXtyZXR1cm4gcygpLHIuZ2V0P3IuZ2V0KGwpOmx9LHNldChlKXtsZXQgcz1yLnNldD9yLnNldChlKTplO2lmKCFqKHMsbCkmJiEodSE9PXQmJmooZSx1KSkpcmV0dXJuO2xldCBmPWkudm5vZGUucHJvcHMscD0hIShmJiYobiBpbiBmfHxhIGluIGZ8fG8gaW4gZikmJihgb25VcGRhdGU6JHtufWBpbiBmfHxgb25VcGRhdGU6JHthfWBpbiBmfHxgb25VcGRhdGU6JHtvfWBpbiBmKSk7cHx8KGw9ZSxjKCkpLGkuZW1pdChgdXBkYXRlOiR7bn1gLHMpLGooZSx1KSYmKGooZSxzKSYmIWoocyxkKXx8cCYmdSE9PXQmJiFqKHMsbCkpJiZjKCksdT1lLGQ9c319fSk7cmV0dXJuIGNbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e2xldCBlPTA7cmV0dXJue25leHQoKXtyZXR1cm4gZTwyP3t2YWx1ZTplKys/c3x8dDpjLGRvbmU6ITF9Ontkb25lOiEwfX19fSxjfXZhciBZYT0oZSx0KT0+dD09PWBtb2RlbFZhbHVlYHx8dD09PWBtb2RlbC12YWx1ZWA/ZS5tb2RlbE1vZGlmaWVyczplW2Ake3R9TW9kaWZpZXJzYF18fGVbYCR7Tyh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtrKHQpfU1vZGlmaWVyc2BdO2Z1bmN0aW9uIFhhKGUsbiwuLi5yKXtpZihlLmlzVW5tb3VudGVkKXJldHVybjtsZXQgaT1lLnZub2RlLnByb3BzfHx0LGE9cixvPW4uc3RhcnRzV2l0aChgdXBkYXRlOmApLHM9byYmWWEoaSxuLnNsaWNlKDcpKTtzJiYocy50cmltJiYoYT1yLm1hcChlPT5fKGUpP2UudHJpbSgpOmUpKSxzLm51bWJlciYmKGE9ci5tYXAocmUpKSk7bGV0IGMsbD1pW2M9bmUobildfHxpW2M9bmUoTyhuKSldOyFsJiZvJiYobD1pW2M9bmUoayhuKSldKSxsJiZqbihsLGUsNixhKTtsZXQgdT1pW2MrYE9uY2VgXTtpZih1KXtpZighZS5lbWl0dGVkKWUuZW1pdHRlZD17fTtlbHNlIGlmKGUuZW1pdHRlZFtjXSlyZXR1cm47ZS5lbWl0dGVkW2NdPSEwLGpuKHUsZSw2LGEpfX12YXIgWmE9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gUWEoZSx0LG49ITEpe2xldCByPW4/WmE6dC5lbWl0c0NhY2hlLGk9ci5nZXQoZSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgYT1lLmVtaXRzLG89e30sYz0hMTtpZighZyhlKSl7bGV0IHI9ZT0+e2xldCBuPVFhKGUsdCwhMCk7biYmKGM9ITAscyhvLG4pKX07IW4mJnQubWl4aW5zLmxlbmd0aCYmdC5taXhpbnMuZm9yRWFjaChyKSxlLmV4dGVuZHMmJnIoZS5leHRlbmRzKSxlLm1peGlucyYmZS5taXhpbnMuZm9yRWFjaChyKX1yZXR1cm4hYSYmIWM/KHkoZSkmJnIuc2V0KGUsbnVsbCksbnVsbCk6KGQoYSk/YS5mb3JFYWNoKGU9Pm9bZV09bnVsbCk6cyhvLGEpLHkoZSkmJnIuc2V0KGUsbyksbyl9ZnVuY3Rpb24gJGEoZSx0KXtyZXR1cm4hZXx8IWEodCk/ITE6KHQ9dC5zbGljZSgyKSx0PXQ9PT1gT25jZWA/dDp0LnJlcGxhY2UoL09uY2UkLyxgYCksdShlLHRbMF0udG9Mb3dlckNhc2UoKSt0LnNsaWNlKDEpKXx8dShlLGsodCkpfHx1KGUsdCkpfWZ1bmN0aW9uIGVvKGUpe2xldHt0eXBlOnQsdm5vZGU6bixwcm94eTpyLHdpdGhQcm94eTppLHByb3BzT3B0aW9uczpbYV0sc2xvdHM6cyxhdHRyczpjLGVtaXQ6bCxyZW5kZXI6dSxyZW5kZXJDYWNoZTpkLHByb3BzOmYsZGF0YTpwLHNldHVwU3RhdGU6bSxjdHg6aCxpbmhlcml0QXR0cnM6Z309ZSxfPWVyKGUpLHYseTt0cnl7aWYobi5zaGFwZUZsYWcmNCl7bGV0IGU9aXx8cix0PWU7dj1icyh1LmNhbGwodCxlLGQsZixtLHAsaCkpLHk9Y31lbHNle2xldCBlPXQ7dj1icyhlLmxlbmd0aD4xP2UoZix7YXR0cnM6YyxzbG90czpzLGVtaXQ6bH0pOmUoZixudWxsKSkseT10LnByb3BzP2M6bm8oYyl9fWNhdGNoKHQpeyRvLmxlbmd0aD0wLE1uKHQsZSwxKSx2PXEoSyl9bGV0IGI9djtpZih5JiZnIT09ITEpe2xldCBlPU9iamVjdC5rZXlzKHkpLHtzaGFwZUZsYWc6dH09YjtlLmxlbmd0aCYmdCY3JiYoYSYmZS5zb21lKG8pJiYoeT1ybyh5LGEpKSxiPWdzKGIseSwhMSwhMCkpfXJldHVybiBuLmRpcnMmJihiPWdzKGIsbnVsbCwhMSwhMCksYi5kaXJzPWIuZGlycz9iLmRpcnMuY29uY2F0KG4uZGlycyk6bi5kaXJzKSxuLnRyYW5zaXRpb24mJktyKHhyKGIudHlwZSkmJkdyKGIpfHxiLG4udHJhbnNpdGlvbiksdj1iLGVyKF8pLHZ9ZnVuY3Rpb24gdG8oZSx0PSEwKXtsZXQgbjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtpZihjcyhyKSl7aWYoci50eXBlIT09S3x8ci5jaGlsZHJlbj09PWB2LWlmYCl7aWYobilyZXR1cm47bj1yfX1lbHNlIHJldHVybn1yZXR1cm4gbn12YXIgbm89ZT0+e2xldCB0O2ZvcihsZXQgbiBpbiBlKShuPT09YGNsYXNzYHx8bj09PWBzdHlsZWB8fGEobikpJiYoKHR8fD17fSlbbl09ZVtuXSk7cmV0dXJuIHR9LHJvPShlLHQpPT57bGV0IG49e307Zm9yKGxldCByIGluIGUpKCFvKHIpfHwhKHIuc2xpY2UoOSlpbiB0KSkmJihuW3JdPWVbcl0pO3JldHVybiBufTtmdW5jdGlvbiBpbyhlLHQsbil7bGV0e3Byb3BzOnIsY2hpbGRyZW46aSxjb21wb25lbnQ6YX09ZSx7cHJvcHM6byxjaGlsZHJlbjpzLHBhdGNoRmxhZzpjfT10LGw9YS5lbWl0c09wdGlvbnM7aWYodC5kaXJzfHx0LnRyYW5zaXRpb24pcmV0dXJuITA7aWYobiYmYz49MCl7aWYoYyYxMDI0KXJldHVybiEwO2lmKGMmMTYpcmV0dXJuIHI/YW8ocixvLGwpOiEhbztpZihjJjgpe2xldCBlPXQuZHluYW1pY1Byb3BzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgbj1lW3RdO2lmKG9vKG8scixuKSYmISRhKGwsbikpcmV0dXJuITB9fX1lbHNlIHJldHVybihpfHxzKSYmKCFzfHwhcy4kc3RhYmxlKT8hMDpyPT09bz8hMTpyPyFvfHxhbyhyLG8sbCk6ISFvO3JldHVybiExfWZ1bmN0aW9uIGFvKGUsdCxuKXtsZXQgcj1PYmplY3Qua2V5cyh0KTtpZihyLmxlbmd0aCE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aClyZXR1cm4hMDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGE9cltpXTtpZihvbyh0LGUsYSkmJiEkYShuLGEpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG9vKGUsdCxuKXtsZXQgcj1lW25dLGk9dFtuXTtyZXR1cm4gbj09PWBzdHlsZWAmJnkocikmJnkoaSk/IWhlKHIsaSk6ciE9PWl9ZnVuY3Rpb24gc28oe3Zub2RlOmUscGFyZW50OnQsc3VzcGVuc2U6bn0scil7Zm9yKDt0Oyl7bGV0IG49dC5zdWJUcmVlO2lmKG4uc3VzcGVuc2UmJm4uc3VzcGVuc2UuYWN0aXZlQnJhbmNoPT09ZSYmKG4uc3VzcGVuc2Uudm5vZGUuZWw9bi5lbD1yLGU9biksbj09PWUpKGU9dC52bm9kZSkuZWw9cix0PXQucGFyZW50O2Vsc2UgYnJlYWt9biYmbi5hY3RpdmVCcmFuY2g9PT1lJiYobi52bm9kZS5lbD1yKX12YXIgY289e30sbG89KCk9Pk9iamVjdC5jcmVhdGUoY28pLHVvPWU9Pk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PWNvO2Z1bmN0aW9uIGZvKGUsdCxuLHI9ITEpe2xldCBpPXt9LGE9bG8oKTtlLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSxtbyhlLHQsaSxhKTtmb3IobGV0IHQgaW4gZS5wcm9wc09wdGlvbnNbMF0pdCBpbiBpfHwoaVt0XT12b2lkIDApO2UucHJvcHM9bj9yP2k6enQoaSk6ZS50eXBlLnByb3BzP2k6YSxlLmF0dHJzPWF9ZnVuY3Rpb24gcG8oZSx0LG4scil7bGV0e3Byb3BzOmksYXR0cnM6YSx2bm9kZTp7cGF0Y2hGbGFnOm99fT1lLHM9VihpKSxbY109ZS5wcm9wc09wdGlvbnMsbD0hMTtpZigocnx8bz4wKSYmIShvJjE2KSl7aWYobyY4KXtsZXQgbj1lLnZub2RlLmR5bmFtaWNQcm9wcztmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IG89bltyXTtpZigkYShlLmVtaXRzT3B0aW9ucyxvKSljb250aW51ZTtsZXQgZD10W29dO2lmKGMpe2lmKHUoYSxvKSlkIT09YVtvXSYmKGFbb109ZCxsPSEwKTtlbHNle2xldCB0PU8obyk7aVt0XT1obyhjLHMsdCxkLGUsITEpfX1lbHNlIGQhPT1hW29dJiYoYVtvXT1kLGw9ITApfX19ZWxzZXttbyhlLHQsaSxhKSYmKGw9ITApO2xldCByO2ZvcihsZXQgYSBpbiBzKSghdHx8IXUodCxhKSYmKChyPWsoYSkpPT09YXx8IXUodCxyKSkpJiYoYz9uJiYoblthXSE9PXZvaWQgMHx8bltyXSE9PXZvaWQgMCkmJihpW2FdPWhvKGMscyxhLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIGlbYV0pO2lmKGEhPT1zKWZvcihsZXQgZSBpbiBhKSghdHx8IXUodCxlKSkmJihkZWxldGUgYVtlXSxsPSEwKX1sJiZ0dChlLmF0dHJzLGBzZXRgLGBgKX1mdW5jdGlvbiBtbyhlLG4scixpKXtsZXRbYSxvXT1lLnByb3BzT3B0aW9ucyxzPSExLGM7aWYobilmb3IobGV0IHQgaW4gbil7aWYoRSh0KSljb250aW51ZTtsZXQgbD1uW3RdLGQ7YSYmdShhLGQ9Tyh0KSk/IW98fCFvLmluY2x1ZGVzKGQpP3JbZF09bDooY3x8PXt9KVtkXT1sOiRhKGUuZW1pdHNPcHRpb25zLHQpfHwoISh0IGluIGkpfHxsIT09aVt0XSkmJihpW3RdPWwscz0hMCl9aWYobyl7bGV0IG49VihyKSxpPWN8fHQ7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2xldCBzPW9bdF07cltzXT1obyhhLG4scyxpW3NdLGUsIXUoaSxzKSl9fXJldHVybiBzfWZ1bmN0aW9uIGhvKGUsdCxuLHIsaSxhKXtsZXQgbz1lW25dO2lmKG8hPW51bGwpe2xldCBlPXUobyxgZGVmYXVsdGApO2lmKGUmJnI9PT12b2lkIDApe2xldCBlPW8uZGVmYXVsdDtpZihvLnR5cGUhPT1GdW5jdGlvbiYmIW8uc2tpcEZhY3RvcnkmJmcoZSkpe2xldHtwcm9wc0RlZmF1bHRzOmF9PWk7aWYobiBpbiBhKXI9YVtuXTtlbHNle2xldCBvPUFzKGkpO3I9YVtuXT1lLmNhbGwobnVsbCx0KSxvKCl9fWVsc2Ugcj1lO2kuY2UmJmkuY2UuX3NldFByb3AobixyKX1vWzBdJiYoYSYmIWU/cj0hMTpvWzFdJiYocj09PWBgfHxyPT09ayhuKSkmJihyPSEwKSl9cmV0dXJuIHJ9dmFyIGdvPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIF9vKGUscixpPSExKXtsZXQgYT1pP2dvOnIucHJvcHNDYWNoZSxvPWEuZ2V0KGUpO2lmKG8pcmV0dXJuIG87bGV0IGM9ZS5wcm9wcyxsPXt9LGY9W10scD0hMTtpZighZyhlKSl7bGV0IHQ9ZT0+e3A9ITA7bGV0W3Qsbl09X28oZSxyLCEwKTtzKGwsdCksbiYmZi5wdXNoKC4uLm4pfTshaSYmci5taXhpbnMubGVuZ3RoJiZyLm1peGlucy5mb3JFYWNoKHQpLGUuZXh0ZW5kcyYmdChlLmV4dGVuZHMpLGUubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKHQpfWlmKCFjJiYhcClyZXR1cm4geShlKSYmYS5zZXQoZSxuKSxuO2lmKGQoYykpZm9yKGxldCBlPTA7ZTxjLmxlbmd0aDtlKyspe2xldCBuPU8oY1tlXSk7dm8obikmJihsW25dPXQpfWVsc2UgaWYoYylmb3IobGV0IGUgaW4gYyl7bGV0IHQ9TyhlKTtpZih2byh0KSl7bGV0IG49Y1tlXSxyPWxbdF09ZChuKXx8ZyhuKT97dHlwZTpufTpzKHt9LG4pLGk9ci50eXBlLGE9ITEsbz0hMDtpZihkKGkpKWZvcihsZXQgZT0wO2U8aS5sZW5ndGg7KytlKXtsZXQgdD1pW2VdLG49Zyh0KSYmdC5uYW1lO2lmKG49PT1gQm9vbGVhbmApe2E9ITA7YnJlYWt9bj09PWBTdHJpbmdgJiYobz0hMSl9ZWxzZSBhPWcoaSkmJmkubmFtZT09PWBCb29sZWFuYDtyWzBdPWEsclsxXT1vLChhfHx1KHIsYGRlZmF1bHRgKSkmJmYucHVzaCh0KX19bGV0IG09W2wsZl07cmV0dXJuIHkoZSkmJmEuc2V0KGUsbSksbX1mdW5jdGlvbiB2byhlKXtyZXR1cm4gZVswXSE9PWAkYCYmIUUoZSl9dmFyIHlvPWU9PmU9PT1gX2B8fGU9PT1gX2N0eGB8fGU9PT1gJHN0YWJsZWAsYm89ZT0+ZChlKT9lLm1hcChicyk6W2JzKGUpXSx4bz0oZSx0LG4pPT57aWYodC5fbilyZXR1cm4gdDtsZXQgcj1pcigoLi4uZSk9PmJvKHQoLi4uZSkpLG4pO3JldHVybiByLl9jPSExLHJ9LFNvPShlLHQsbik9PntsZXQgcj1lLl9jdHg7Zm9yKGxldCBuIGluIGUpe2lmKHlvKG4pKWNvbnRpbnVlO2xldCBpPWVbbl07aWYoZyhpKSl0W25dPXhvKG4saSxyKTtlbHNlIGlmKGkhPW51bGwpe2xldCBlPWJvKGkpO3Rbbl09KCk9PmV9fX0sQ289KGUsdCk9PntsZXQgbj1ibyh0KTtlLnNsb3RzLmRlZmF1bHQ9KCk9Pm59LHdvPShlLHQsbik9Pntmb3IobGV0IHIgaW4gdCkobnx8IXlvKHIpKSYmKGVbcl09dFtyXSl9LFRvPShlLHQsbik9PntsZXQgcj1lLnNsb3RzPWxvKCk7aWYoZS52bm9kZS5zaGFwZUZsYWcmMzIpe2xldCBlPXQuXztlPyh3byhyLHQsbiksbiYmTihyLGBfYCxlLCEwKSk6U28odCxyKX1lbHNlIHQmJkNvKGUsdCl9LEVvPShlLG4scik9PntsZXR7dm5vZGU6aSxzbG90czphfT1lLG89ITAscz10O2lmKGkuc2hhcGVGbGFnJjMyKXtsZXQgZT1uLl87ZT9yJiZlPT09MT9vPSExOndvKGEsbixyKToobz0hbi4kc3RhYmxlLFNvKG4sYSkpLHM9bn1lbHNlIG4mJihDbyhlLG4pLHM9e2RlZmF1bHQ6MX0pO2lmKG8pZm9yKGxldCBlIGluIGEpIXlvKGUpJiZzW2VdPT1udWxsJiZkZWxldGUgYVtlXX0sVz1KbztmdW5jdGlvbiBEbyhlKXtyZXR1cm4ga28oZSl9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIGtvKGUsY2kpfWZ1bmN0aW9uIGtvKGUsaSl7bGV0IGE9b2UoKTthLl9fVlVFX189ITA7bGV0e2luc2VydDpvLHJlbW92ZTpzLHBhdGNoUHJvcDpjLGNyZWF0ZUVsZW1lbnQ6bCxjcmVhdGVUZXh0OnUsY3JlYXRlQ29tbWVudDpkLHNldFRleHQ6ZixzZXRFbGVtZW50VGV4dDpwLHBhcmVudE5vZGU6bSxuZXh0U2libGluZzpoLHNldFNjb3BlSWQ6Zz1yLGluc2VydFN0YXRpY0NvbnRlbnQ6X309ZSx2PShlLHQsbixyPW51bGwsaT1udWxsLGE9bnVsbCxvPXZvaWQgMCxzPW51bGwsYz0hIXQuZHluYW1pY0NoaWxkcmVuKT0+e2lmKGU9PT10KXJldHVybjtlJiYhbHMoZSx0KSYmKHI9ZGUoZSksY2UoZSxpLGEsITApLGU9bnVsbCksdC5wYXRjaEZsYWc9PT0tMiYmKGM9ITEsdC5keW5hbWljQ2hpbGRyZW49bnVsbCk7bGV0e3R5cGU6bCxyZWY6dSxzaGFwZUZsYWc6ZH09dDtzd2l0Y2gobCl7Y2FzZSBabzp5KGUsdCxuLHIpO2JyZWFrO2Nhc2UgSzpiKGUsdCxuLHIpO2JyZWFrO2Nhc2UgUW86ZT8/eCh0LG4scixvKTticmVhaztjYXNlIEc6QShlLHQsbixyLGksYSxvLHMsYyk7YnJlYWs7ZGVmYXVsdDpkJjE/dyhlLHQsbixyLGksYSxvLHMsYyk6ZCY2P25lKGUsdCxuLHIsaSxhLG8scyxjKTooZCY2NHx8ZCYxMjgpJiZsLnByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbWUpfXUhPW51bGwmJmk/ZWkodSxlJiZlLnJlZixhLHR8fGUsIXQpOnU9PW51bGwmJmUmJmUucmVmIT1udWxsJiZlaShlLnJlZixudWxsLGEsZSwhMCl9LHk9KGUsdCxuLHIpPT57aWYoZT09bnVsbClvKHQuZWw9dSh0LmNoaWxkcmVuKSxuLHIpO2Vsc2V7bGV0IG49dC5lbD1lLmVsO3QuY2hpbGRyZW4hPT1lLmNoaWxkcmVuJiZmKG4sdC5jaGlsZHJlbil9fSxiPShlLHQsbixyKT0+e2U9PW51bGw/byh0LmVsPWQodC5jaGlsZHJlbnx8YGApLG4scik6dC5lbD1lLmVsfSx4PShlLHQsbixyKT0+e1tlLmVsLGUuYW5jaG9yXT1fKGUuY2hpbGRyZW4sdCxuLHIsZS5lbCxlLmFuY2hvcil9LFM9KHtlbDplLGFuY2hvcjp0fSxuLHIpPT57bGV0IGk7Zm9yKDtlJiZlIT09dDspaT1oKGUpLG8oZSxuLHIpLGU9aTtvKHQsbixyKX0sQz0oe2VsOmUsYW5jaG9yOnR9KT0+e2xldCBuO2Zvcig7ZSYmZSE9PXQ7KW49aChlKSxzKGUpLGU9bjtzKHQpfSx3PShlLHQsbixyLGksYSxvLHMsYyk9PntpZih0LnR5cGU9PT1gc3ZnYD9vPWBzdmdgOnQudHlwZT09PWBtYXRoYCYmKG89YG1hdGhtbGApLGU9PW51bGwpVCh0LG4scixpLGEsbyxzLGMpO2Vsc2V7bGV0IG49ZS5lbCYmZS5lbC5faXNWdWVDRT9lLmVsOm51bGw7dHJ5e24mJm4uX2JlZ2luUGF0Y2goKSxPKGUsdCxpLGEsbyxzLGMpfWZpbmFsbHl7biYmbi5fZW5kUGF0Y2goKX19fSxUPShlLHQsbixyLGksYSxzLHUpPT57bGV0IGQsZix7cHJvcHM6bSxzaGFwZUZsYWc6aCx0cmFuc2l0aW9uOmcsZGlyczpffT1lO2lmKGQ9ZS5lbD1sKGUudHlwZSxhLG0mJm0uaXMsbSksaCY4P3AoZCxlLmNoaWxkcmVuKTpoJjE2JiZlZShlLmNoaWxkcmVuLGQsbnVsbCxyLGksQW8oZSxhKSxzLHUpLF8mJm9yKGUsbnVsbCxyLGBjcmVhdGVkYCksRChkLGUsZS5zY29wZUlkLHMsciksbSl7Zm9yKGxldCBlIGluIG0pZSE9PWB2YWx1ZWAmJiFFKGUpJiZjKGQsZSxudWxsLG1bZV0sYSxyKTtgdmFsdWVgaW4gbSYmYyhkLGB2YWx1ZWAsbnVsbCxtLnZhbHVlLGEpLChmPW0ub25Wbm9kZUJlZm9yZU1vdW50KSYmd3MoZixyLGUpfV8mJm9yKGUsbnVsbCxyLGBiZWZvcmVNb3VudGApO2xldCB2PU1vKGksZyk7diYmZy5iZWZvcmVFbnRlcihkKSxvKGQsdCxuKSwoKGY9bSYmbS5vblZub2RlTW91bnRlZCl8fHZ8fF8pJiZXKCgpPT57dHJ5e2YmJndzKGYscixlKSx2JiZnLmVudGVyKGQpLF8mJm9yKGUsbnVsbCxyLGBtb3VudGVkYCl9ZmluYWxseXt9fSxpKX0sRD0oZSx0LG4scixpKT0+e2lmKG4mJmcoZSxuKSxyKWZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKWcoZSxyW3RdKTtpZihpKXtsZXQgbj1pLnN1YlRyZWU7aWYodD09PW58fFJvKG4udHlwZSkmJihuLnNzQ29udGVudD09PXR8fG4uc3NGYWxsYmFjaz09PXQpKXtsZXQgdD1pLnZub2RlO0QoZSx0LHQuc2NvcGVJZCx0LnNsb3RTY29wZUlkcyxpLnBhcmVudCl9fX0sZWU9KGUsdCxuLHIsaSxhLG8scyxjPTApPT57Zm9yKGxldCBsPWM7bDxlLmxlbmd0aDtsKyspe2xldCBjPWVbbF09cz94cyhlW2xdKTpicyhlW2xdKTt2KG51bGwsYyx0LG4scixpLGEsbyxzKX19LE89KGUsbixyLGksYSxvLHMpPT57bGV0IGw9bi5lbD1lLmVsLHtwYXRjaEZsYWc6dSxkeW5hbWljQ2hpbGRyZW46ZCxkaXJzOmZ9PW47dXw9ZS5wYXRjaEZsYWcmMTY7bGV0IG09ZS5wcm9wc3x8dCxoPW4ucHJvcHN8fHQsZztpZihyJiZqbyhyLCExKSwoZz1oLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ3cyhnLHIsbixlKSxmJiZvcihuLGUscixgYmVmb3JlVXBkYXRlYCksciYmam8ociwhMCksZCYmKCFlLmR5bmFtaWNDaGlsZHJlbnx8ZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoIT09ZC5sZW5ndGgpJiYodT0wLHM9ITEsZD1udWxsKSwobS5pbm5lckhUTUwmJmguaW5uZXJIVE1MPT1udWxsfHxtLnRleHRDb250ZW50JiZoLnRleHRDb250ZW50PT1udWxsKSYmcChsLGBgKSxkP3RlKGUuZHluYW1pY0NoaWxkcmVuLGQsbCxyLGksQW8obixhKSxvKTpzfHxhZShlLG4sbCxudWxsLHIsaSxBbyhuLGEpLG8sITEpLHU+MCl7aWYodSYxNilrKGwsbSxoLHIsYSk7ZWxzZSBpZih1JjImJm0uY2xhc3MhPT1oLmNsYXNzJiZjKGwsYGNsYXNzYCxudWxsLGguY2xhc3MsYSksdSY0JiZjKGwsYHN0eWxlYCxtLnN0eWxlLGguc3R5bGUsYSksdSY4KXtsZXQgZT1uLmR5bmFtaWNQcm9wcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49ZVt0XSxpPW1bbl0sbz1oW25dOyhvIT09aXx8bj09PWB2YWx1ZWApJiZjKGwsbixpLG8sYSxyKX19dSYxJiZlLmNoaWxkcmVuIT09bi5jaGlsZHJlbiYmcChsLG4uY2hpbGRyZW4pfWVsc2UhcyYmZD09bnVsbCYmayhsLG0saCxyLGEpOygoZz1oLm9uVm5vZGVVcGRhdGVkKXx8ZikmJlcoKCk9PntnJiZ3cyhnLHIsbixlKSxmJiZvcihuLGUscixgdXBkYXRlZGApfSxpKX0sdGU9KGUsdCxuLHIsaSxhLG8pPT57Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBjPWVbc10sbD10W3NdLHU9Yy5lbCYmKGMudHlwZT09PUd8fCFscyhjLGwpfHxjLnNoYXBlRmxhZyYxOTgpP20oYy5lbCk6bjt2KGMsbCx1LG51bGwscixpLGEsbywhMCl9fSxrPShlLG4scixpLGEpPT57aWYobiE9PXIpe2lmKG4hPT10KWZvcihsZXQgdCBpbiBuKSFFKHQpJiYhKHQgaW4gcikmJmMoZSx0LG5bdF0sbnVsbCxhLGkpO2ZvcihsZXQgdCBpbiByKXtpZihFKHQpKWNvbnRpbnVlO2xldCBvPXJbdF0scz1uW3RdO28hPT1zJiZ0IT09YHZhbHVlYCYmYyhlLHQscyxvLGEsaSl9YHZhbHVlYGluIHImJmMoZSxgdmFsdWVgLG4udmFsdWUsci52YWx1ZSxhKX19LEE9KGUsdCxuLHIsaSxhLHMsYyxsKT0+e2xldCBkPXQuZWw9ZT9lLmVsOnUoYGApLGY9dC5hbmNob3I9ZT9lLmFuY2hvcjp1KGBgKSx7cGF0Y2hGbGFnOnAsZHluYW1pY0NoaWxkcmVuOm0sc2xvdFNjb3BlSWRzOmh9PXQ7aCYmKGM9Yz9jLmNvbmNhdChoKTpoKSxlPT1udWxsPyhvKGQsbixyKSxvKGYsbixyKSxlZSh0LmNoaWxkcmVufHxbXSxuLGYsaSxhLHMsYyxsKSk6cD4wJiZwJjY0JiZtJiZlLmR5bmFtaWNDaGlsZHJlbiYmZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoPT09bS5sZW5ndGg/KHRlKGUuZHluYW1pY0NoaWxkcmVuLG0sbixpLGEscyxjKSwodC5rZXkhPW51bGx8fGkmJnQ9PT1pLnN1YlRyZWUpJiZObyhlLHQsITApKTphZShlLHQsbixmLGksYSxzLGMsbCl9LG5lPShlLHQsbixyLGksYSxvLHMsYyk9Pnt0LnNsb3RTY29wZUlkcz1zLGU9PW51bGw/dC5zaGFwZUZsYWcmNTEyP2kuY3R4LmFjdGl2YXRlKHQsbixyLG8sYyk6aih0LG4scixpLGEsbyxjKTpOKGUsdCxjKX0saj0oZSx0LG4scixpLGEsbyk9PntsZXQgcz1lLmNvbXBvbmVudD1EcyhlLHIsaSk7aWYoa2koZSkmJihzLmN0eC5yZW5kZXJlcj1tZSksUHMocywhMSxvKSxzLmFzeW5jRGVwKXtpZihpJiZpLnJlZ2lzdGVyRGVwKHMscmUsbyksIWUuZWwpe2xldCByPXMuc3ViVHJlZT1xKEspO2IobnVsbCxyLHQsbiksZS5wbGFjZWhvbGRlcj1yLmVsfX1lbHNlIHJlKHMsZSx0LG4saSxhLG8pfSxOPShlLHQsbik9PntsZXQgcj10LmNvbXBvbmVudD1lLmNvbXBvbmVudDtpZihpbyhlLHQsbikpe2lmKHIuYXN5bmNEZXAmJiFyLmFzeW5jUmVzb2x2ZWQpe2llKHIsdCxuKTtyZXR1cm59ci5uZXh0PXQsci51cGRhdGUoKX1lbHNlIHQuZWw9ZS5lbCxyLnZub2RlPXR9LHJlPShlLHQsbixyLGksYSxvKT0+e2xldCBzPSgpPT57aWYoZS5pc01vdW50ZWQpe2xldHtuZXh0OnQsYnU6bix1OnIscGFyZW50OnMsdm5vZGU6Y309ZTt7bGV0IG49Rm8oZSk7aWYobil7dCYmKHQuZWw9Yy5lbCxpZShlLHQsbykpLG4uYXN5bmNEZXAudGhlbigoKT0+e1coKCk9PntlLmlzVW5tb3VudGVkfHxsKCl9LGkpfSk7cmV0dXJufX1sZXQgdT10LGQ7am8oZSwhMSksdD8odC5lbD1jLmVsLGllKGUsdCxvKSk6dD1jLG4mJk0obiksKGQ9dC5wcm9wcyYmdC5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSYmd3MoZCxzLHQsYyksam8oZSwhMCk7bGV0IGY9ZW8oZSkscD1lLnN1YlRyZWU7ZS5zdWJUcmVlPWYsdihwLGYsbShwLmVsKSxkZShwKSxlLGksYSksdC5lbD1mLmVsLHU9PT1udWxsJiZzbyhlLGYuZWwpLHImJlcocixpKSwoZD10LnByb3BzJiZ0LnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmVygoKT0+d3MoZCxzLHQsYyksaSl9ZWxzZXtsZXQgbyx7ZWw6cyxwcm9wczpjfT10LHtibTpsLG06dSxwYXJlbnQ6ZCxyb290OmYsdHlwZTpwfT1lLG09RWkodCk7aWYoam8oZSwhMSksbCYmTShsKSwhbSYmKG89YyYmYy5vblZub2RlQmVmb3JlTW91bnQpJiZ3cyhvLGQsdCksam8oZSwhMCkscyYmZ2Upe2xldCB0PSgpPT57ZS5zdWJUcmVlPWVvKGUpLGdlKHMsZS5zdWJUcmVlLGUsaSxudWxsKX07bSYmcC5fX2FzeW5jSHlkcmF0ZT9wLl9fYXN5bmNIeWRyYXRlKHMsZSx0KTp0KCl9ZWxzZXtmLmNlJiZmLmNlLl9oYXNTaGFkb3dSb290KCkmJmYuY2UuX2luamVjdENoaWxkU3R5bGUocCxlLnBhcmVudD9lLnBhcmVudC50eXBlOnZvaWQgMCk7bGV0IG89ZS5zdWJUcmVlPWVvKGUpO3YobnVsbCxvLG4scixlLGksYSksdC5lbD1vLmVsfWlmKHUmJlcodSxpKSwhbSYmKG89YyYmYy5vblZub2RlTW91bnRlZCkpe2xldCBlPXQ7VygoKT0+d3MobyxkLGUpLGkpfSh0LnNoYXBlRmxhZyYyNTZ8fGQmJkVpKGQudm5vZGUpJiZkLnZub2RlLnNoYXBlRmxhZyYyNTYpJiZlLmEmJlcoZS5hLGkpLGUuaXNNb3VudGVkPSEwLHQ9bj1yPW51bGx9fTtlLnNjb3BlLm9uKCk7bGV0IGM9ZS5lZmZlY3Q9bmV3IERlKHMpO2Uuc2NvcGUub2ZmKCk7bGV0IGw9ZS51cGRhdGU9Yy5ydW4uYmluZChjKSx1PWUuam9iPWMucnVuSWZEaXJ0eS5iaW5kKGMpO3UuaT1lLHUuaWQ9ZS51aWQsYy5zY2hlZHVsZXI9KCk9PlVuKHUpLGpvKGUsITApLGwoKX0saWU9KGUsdCxuKT0+e3QuY29tcG9uZW50PWU7bGV0IHI9ZS52bm9kZS5wcm9wcztlLnZub2RlPXQsZS5uZXh0PW51bGwscG8oZSx0LnByb3BzLHIsbiksRW8oZSx0LmNoaWxkcmVuLG4pLFdlKCksS24oZSksR2UoKX0sYWU9KGUsdCxuLHIsaSxhLG8scyxjPSExKT0+e2xldCBsPWUmJmUuY2hpbGRyZW4sdT1lP2Uuc2hhcGVGbGFnOjAsZD10LmNoaWxkcmVuLHtwYXRjaEZsYWc6ZixzaGFwZUZsYWc6bX09dDtpZihmPjApe2lmKGYmMTI4KXtGKGwsZCxuLHIsaSxhLG8scyxjKTtyZXR1cm59aWYoZiYyNTYpe1AobCxkLG4scixpLGEsbyxzLGMpO3JldHVybn19bSY4Pyh1JjE2JiZ1ZShsLGksYSksZCE9PWwmJnAobixkKSk6dSYxNj9tJjE2P0YobCxkLG4scixpLGEsbyxzLGMpOnVlKGwsaSxhLCEwKToodSY4JiZwKG4sYGApLG0mMTYmJmVlKGQsbixyLGksYSxvLHMsYykpfSxQPShlLHQscixpLGEsbyxzLGMsbCk9PntlfHw9bix0fHw9bjtsZXQgdT1lLmxlbmd0aCxkPXQubGVuZ3RoLGY9TWF0aC5taW4odSxkKSxwO2ZvcihwPTA7cDxmO3ArKyl7bGV0IG49dFtwXT1sP3hzKHRbcF0pOmJzKHRbcF0pO3YoZVtwXSxuLHIsbnVsbCxhLG8scyxjLGwpfXU+ZD91ZShlLGEsbywhMCwhMSxmKTplZSh0LHIsaSxhLG8scyxjLGwsZil9LEY9KGUsdCxyLGksYSxvLHMsYyxsKT0+e2xldCB1PTAsZD10Lmxlbmd0aCxmPWUubGVuZ3RoLTEscD1kLTE7Zm9yKDt1PD1mJiZ1PD1wOyl7bGV0IG49ZVt1XSxpPXRbdV09bD94cyh0W3VdKTpicyh0W3VdKTtpZihscyhuLGkpKXYobixpLHIsbnVsbCxhLG8scyxjLGwpO2Vsc2UgYnJlYWs7dSsrfWZvcig7dTw9ZiYmdTw9cDspe2xldCBuPWVbZl0saT10W3BdPWw/eHModFtwXSk6YnModFtwXSk7aWYobHMobixpKSl2KG4saSxyLG51bGwsYSxvLHMsYyxsKTtlbHNlIGJyZWFrO2YtLSxwLS19aWYodT5mKXtpZih1PD1wKXtsZXQgZT1wKzEsbj1lPGQ/dFtlXS5lbDppO2Zvcig7dTw9cDspdihudWxsLHRbdV09bD94cyh0W3VdKTpicyh0W3VdKSxyLG4sYSxvLHMsYyxsKSx1Kyt9fWVsc2UgaWYodT5wKWZvcig7dTw9ZjspY2UoZVt1XSxhLG8sITApLHUrKztlbHNle2xldCBtPXUsaD11LGc9bmV3IE1hcDtmb3IodT1oO3U8PXA7dSsrKXtsZXQgZT10W3VdPWw/eHModFt1XSk6YnModFt1XSk7ZS5rZXkhPW51bGwmJmcuc2V0KGUua2V5LHUpfWxldCBfLHk9MCxiPXAtaCsxLHg9ITEsUz0wLEM9QXJyYXkoYik7Zm9yKHU9MDt1PGI7dSsrKUNbdV09MDtmb3IodT1tO3U8PWY7dSsrKXtsZXQgbj1lW3VdO2lmKHk+PWIpe2NlKG4sYSxvLCEwKTtjb250aW51ZX1sZXQgaTtpZihuLmtleSE9bnVsbClpPWcuZ2V0KG4ua2V5KTtlbHNlIGZvcihfPWg7Xzw9cDtfKyspaWYoQ1tfLWhdPT09MCYmbHMobix0W19dKSl7aT1fO2JyZWFrfWk9PT12b2lkIDA/Y2UobixhLG8sITApOihDW2ktaF09dSsxLGk+PVM/Uz1pOng9ITAsdihuLHRbaV0scixudWxsLGEsbyxzLGMsbCkseSsrKX1sZXQgdz14P1BvKEMpOm47Zm9yKF89dy5sZW5ndGgtMSx1PWItMTt1Pj0wO3UtLSl7bGV0IGU9aCt1LG49dFtlXSxmPXRbZSsxXSxwPWUrMTxkP2YuZWx8fExvKGYpOmk7Q1t1XT09PTA/dihudWxsLG4scixwLGEsbyxzLGMsbCk6eCYmKF88MHx8dSE9PXdbX10/c2UobixyLHAsMik6Xy0tKX19fSxzZT0oZSx0LG4scixpPW51bGwpPT57bGV0e2VsOmEsdHlwZTpjLHRyYW5zaXRpb246bCxjaGlsZHJlbjp1LHNoYXBlRmxhZzpkfT1lO2lmKGQmNil7c2UoZS5jb21wb25lbnQuc3ViVHJlZSx0LG4scik7cmV0dXJufWlmKGQmMTI4KXtlLnN1c3BlbnNlLm1vdmUodCxuLHIpO3JldHVybn1pZihkJjY0KXtjLm1vdmUoZSx0LG4sbWUpO3JldHVybn1pZihjPT09Ryl7byhhLHQsbik7Zm9yKGxldCBlPTA7ZTx1Lmxlbmd0aDtlKyspc2UodVtlXSx0LG4scik7byhlLmFuY2hvcix0LG4pO3JldHVybn1pZihjPT09UW8pe1MoZSx0LG4pO3JldHVybn1pZihyIT09MiYmZCYxJiZsKXtpZihyPT09MClsLnBlcnNpc3RlZCYmIWFbTnJdP28oYSx0LG4pOihsLmJlZm9yZUVudGVyKGEpLG8oYSx0LG4pLFcoKCk9PmwuZW50ZXIoYSksaSkpO2Vsc2V7bGV0e2xlYXZlOnIsZGVsYXlMZWF2ZTppLGFmdGVyTGVhdmU6Y309bCx1PSgpPT57ZS5jdHguaXNVbm1vdW50ZWQ/cyhhKTpvKGEsdCxuKX0sZD0oKT0+e2xldCBlPWEuX2lzTGVhdmluZ3x8ISFhW05yXTthLl9pc0xlYXZpbmcmJmFbTnJdKCEwKSxsLnBlcnNpc3RlZCYmIWU/dSgpOnIoYSwoKT0+e3UoKSxjJiZjKCl9KX07aT9pKGEsdSxkKTpkKCl9fWVsc2UgbyhhLHQsbil9LGNlPShlLHQsbixyPSExLGk9ITEpPT57bGV0e3R5cGU6YSxwcm9wczpvLHJlZjpzLGNoaWxkcmVuOmMsZHluYW1pY0NoaWxkcmVuOmwsc2hhcGVGbGFnOnUscGF0Y2hGbGFnOmQsZGlyczpmLGNhY2hlSW5kZXg6cCxtZW1vOm19PWU7aWYoZD09PS0yJiYoaT0hMSkscyE9bnVsbCYmKFdlKCksZWkocyxudWxsLG4sZSwhMCksR2UoKSkscCE9bnVsbCYmKHQucmVuZGVyQ2FjaGVbcF09dm9pZCAwKSx1JjI1Nil7dC5jdHguZGVhY3RpdmF0ZShlKTtyZXR1cm59bGV0IGg9dSYxJiZmLGc9IUVpKGUpLF87aWYoZyYmKF89byYmby5vblZub2RlQmVmb3JlVW5tb3VudCkmJndzKF8sdCxlKSx1JjYpTChlLmNvbXBvbmVudCxuLHIpO2Vsc2V7aWYodSYxMjgpe2Uuc3VzcGVuc2UudW5tb3VudChuLHIpO3JldHVybn1oJiZvcihlLG51bGwsdCxgYmVmb3JlVW5tb3VudGApLHUmNjQ/ZS50eXBlLnJlbW92ZShlLHQsbixtZSxyKTpsJiYhbC5oYXNPbmNlJiYoYSE9PUd8fGQ+MCYmZCY2NCk/dWUobCx0LG4sITEsITApOihhPT09RyYmZCYzODR8fCFpJiZ1JjE2KSYmdWUoYyx0LG4pLHImJkkoZSl9bGV0IHY9bSE9bnVsbCYmcD09bnVsbDsoZyYmKF89byYmby5vblZub2RlVW5tb3VudGVkKXx8aHx8dikmJlcoKCk9PntfJiZ3cyhfLHQsZSksaCYmb3IoZSxudWxsLHQsYHVubW91bnRlZGApLHYmJihlLmVsPW51bGwpfSxuKX0sST1lPT57bGV0e3R5cGU6dCxlbDpuLGFuY2hvcjpyLHRyYW5zaXRpb246aX09ZTtpZih0PT09Ryl7bGUobixyKTtyZXR1cm59aWYodD09PVFvKXtDKGUpO3JldHVybn1sZXQgYT0oKT0+e3MobiksaSYmIWkucGVyc2lzdGVkJiZpLmFmdGVyTGVhdmUmJmkuYWZ0ZXJMZWF2ZSgpfTtpZihlLnNoYXBlRmxhZyYxJiZpJiYhaS5wZXJzaXN0ZWQpe2xldHtsZWF2ZTp0LGRlbGF5TGVhdmU6cn09aSxvPSgpPT50KG4sYSk7cj9yKGUuZWwsYSxvKTpvKCl9ZWxzZSBhKCl9LGxlPShlLHQpPT57bGV0IG47Zm9yKDtlIT09dDspbj1oKGUpLHMoZSksZT1uO3ModCl9LEw9KGUsdCxuKT0+e2xldHtidW06cixzY29wZTppLGpvYjphLHN1YlRyZWU6byx1bTpzLG06YyxhOmx9PWU7SW8oYyksSW8obCksciYmTShyKSxpLnN0b3AoKSxhJiYoYS5mbGFnc3w9OCxjZShvLGUsdCxuKSkscyYmVyhzLHQpLFcoKCk9PntlLmlzVW5tb3VudGVkPSEwfSx0KX0sdWU9KGUsdCxuLHI9ITEsaT0hMSxhPTApPT57Zm9yKGxldCBvPWE7bzxlLmxlbmd0aDtvKyspY2UoZVtvXSx0LG4scixpKX0sZGU9ZT0+e2lmKGUuc2hhcGVGbGFnJjYpcmV0dXJuIGRlKGUuY29tcG9uZW50LnN1YlRyZWUpO2lmKGUuc2hhcGVGbGFnJjEyOClyZXR1cm4gZS5zdXNwZW5zZS5uZXh0KCk7bGV0IHQ9aChlLmFuY2hvcnx8ZS5lbCksbj10JiZ0W2JyXTtyZXR1cm4gbj9oKG4pOnR9LGZlPSExLHBlPShlLHQsbik9PntsZXQgcjtlPT1udWxsP3QuX3Zub2RlJiYoY2UodC5fdm5vZGUsbnVsbCxudWxsLCEwKSxyPXQuX3Zub2RlLmNvbXBvbmVudCk6dih0Ll92bm9kZXx8bnVsbCxlLHQsbnVsbCxudWxsLG51bGwsbiksdC5fdm5vZGU9ZSxmZXx8PShmZT0hMCxLbihyKSxxbigpLCExKX0sbWU9e3A6dix1bTpjZSxtOnNlLHI6SSxtdDpqLG1jOmVlLHBjOmFlLHBiYzp0ZSxuOmRlLG86ZX0saGUsZ2U7cmV0dXJuIGkmJihbaGUsZ2VdPWkobWUpKSx7cmVuZGVyOnBlLGh5ZHJhdGU6aGUsY3JlYXRlQXBwOkthKHBlLGhlKX19ZnVuY3Rpb24gQW8oe3R5cGU6ZSxwcm9wczp0fSxuKXtyZXR1cm4gbj09PWBzdmdgJiZlPT09YGZvcmVpZ25PYmplY3RgfHxuPT09YG1hdGhtbGAmJmU9PT1gYW5ub3RhdGlvbi14bWxgJiZ0JiZ0LmVuY29kaW5nJiZ0LmVuY29kaW5nLmluY2x1ZGVzKGBodG1sYCk/dm9pZCAwOm59ZnVuY3Rpb24gam8oe2VmZmVjdDplLGpvYjp0fSxuKXtuPyhlLmZsYWdzfD0zMix0LmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdW5jdGlvbiBNbyhlLHQpe3JldHVybighZXx8ZSYmIWUucGVuZGluZ0JyYW5jaCkmJnQmJiF0LnBlcnNpc3RlZH1mdW5jdGlvbiBObyhlLHQsbj0hMSl7bGV0IHI9ZS5jaGlsZHJlbixpPXQuY2hpbGRyZW47aWYoZChyKSYmZChpKSlmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyl7bGV0IHQ9cltlXSxhPWlbZV07YS5zaGFwZUZsYWcmMSYmIWEuZHluYW1pY0NoaWxkcmVuJiYoKGEucGF0Y2hGbGFnPD0wfHxhLnBhdGNoRmxhZz09PTMyKSYmKGE9aVtlXT14cyhpW2VdKSxhLmVsPXQuZWwpLCFuJiZhLnBhdGNoRmxhZyE9PS0yJiZObyh0LGEpKSxhLnR5cGU9PT1abyYmKGEucGF0Y2hGbGFnPT09LTEmJihhPWlbZV09eHMoYSkpLGEuZWw9dC5lbCksYS50eXBlPT09SyYmIWEuZWwmJihhLmVsPXQuZWwpfX1mdW5jdGlvbiBQbyhlKXtsZXQgdD1lLnNsaWNlKCksbj1bMF0scixpLGEsbyxzLGM9ZS5sZW5ndGg7Zm9yKHI9MDtyPGM7cisrKXtsZXQgYz1lW3JdO2lmKGMhPT0wKXtpZihpPW5bbi5sZW5ndGgtMV0sZVtpXTxjKXt0W3JdPWksbi5wdXNoKHIpO2NvbnRpbnVlfWZvcihhPTAsbz1uLmxlbmd0aC0xO2E8bzspcz1hK28+PjEsZVtuW3NdXTxjP2E9cysxOm89cztjPGVbblthXV0mJihhPjAmJih0W3JdPW5bYS0xXSksblthXT1yKX19Zm9yKGE9bi5sZW5ndGgsbz1uW2EtMV07YS0tPjA7KW5bYV09byxvPXRbb107cmV0dXJuIG59ZnVuY3Rpb24gRm8oZSl7bGV0IHQ9ZS5zdWJUcmVlLmNvbXBvbmVudDtpZih0KXJldHVybiB0LmFzeW5jRGVwJiYhdC5hc3luY1Jlc29sdmVkP3Q6Rm8odCl9ZnVuY3Rpb24gSW8oZSl7aWYoZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmZsYWdzfD04fWZ1bmN0aW9uIExvKGUpe2lmKGUucGxhY2Vob2xkZXIpcmV0dXJuIGUucGxhY2Vob2xkZXI7bGV0IHQ9ZS5jb21wb25lbnQ7cmV0dXJuIHQ/TG8odC5zdWJUcmVlKTpudWxsfXZhciBSbz1lPT5lLl9faXNTdXNwZW5zZSx6bz0wLEJvPXtuYW1lOmBTdXNwZW5zZWAsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbCl7aWYoZT09bnVsbClIbyh0LG4scixpLGEsbyxzLGMsbCk7ZWxzZXtpZihhJiZhLmRlcHM+MCYmIWUuc3VzcGVuc2UuaXNJbkZhbGxiYWNrKXt0LnN1c3BlbnNlPWUuc3VzcGVuc2UsdC5zdXNwZW5zZS52bm9kZT10LHQuZWw9ZS5lbDtyZXR1cm59VW8oZSx0LG4scixpLG8scyxjLGwpfX0saHlkcmF0ZTpHbyxub3JtYWxpemU6S299O2Z1bmN0aW9uIFZvKGUsdCl7bGV0IG49ZS5wcm9wcyYmZS5wcm9wc1t0XTtnKG4pJiZuKCl9ZnVuY3Rpb24gSG8oZSx0LG4scixpLGEsbyxzLGMpe2xldHtwOmwsbzp7Y3JlYXRlRWxlbWVudDp1fX09YyxkPXUoYGRpdmApLGY9ZS5zdXNwZW5zZT1XbyhlLGkscix0LGQsbixhLG8scyxjKTtsKG51bGwsZi5wZW5kaW5nQnJhbmNoPWUuc3NDb250ZW50LGQsbnVsbCxyLGYsYSxvKSxmLmRlcHM+MD8oVm8oZSxgb25QZW5kaW5nYCksVm8oZSxgb25GYWxsYmFja2ApLGwobnVsbCxlLnNzRmFsbGJhY2ssdCxuLHIsbnVsbCxhLG8pLFlvKGYsZS5zc0ZhbGxiYWNrKSk6Zi5yZXNvbHZlKCExLCEwKX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxvLHMse3A6Yyx1bTpsLG86e2NyZWF0ZUVsZW1lbnQ6dX19KXtsZXQgZD10LnN1c3BlbnNlPWUuc3VzcGVuc2U7ZC52bm9kZT10LHQuZWw9ZS5lbDtsZXQgZj10LnNzQ29udGVudCxwPXQuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOm0scGVuZGluZ0JyYW5jaDpoLGlzSW5GYWxsYmFjazpnLGlzSHlkcmF0aW5nOl99PWQ7aWYoaClkLnBlbmRpbmdCcmFuY2g9ZixscyhoLGYpPyhjKGgsZixkLmhpZGRlbkNvbnRhaW5lcixudWxsLGksZCxhLG8scyksZC5kZXBzPD0wP2QucmVzb2x2ZSgpOmcmJihffHwoYyhtLHAsbixyLGksbnVsbCxhLG8scyksWW8oZCxwKSkpKTooZC5wZW5kaW5nSWQ9em8rKyxfPyhkLmlzSHlkcmF0aW5nPSExLGQuYWN0aXZlQnJhbmNoPWgpOmwoaCxpLGQpLGQuZGVwcz0wLGQuZWZmZWN0cy5sZW5ndGg9MCxkLmhpZGRlbkNvbnRhaW5lcj11KGBkaXZgKSxnPyhjKG51bGwsZixkLmhpZGRlbkNvbnRhaW5lcixudWxsLGksZCxhLG8scyksZC5kZXBzPD0wP2QucmVzb2x2ZSgpOihjKG0scCxuLHIsaSxudWxsLGEsbyxzKSxZbyhkLHApKSk6bSYmbHMobSxmKT8oYyhtLGYsbixyLGksZCxhLG8scyksZC5yZXNvbHZlKCEwKSk6KGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTAmJmQucmVzb2x2ZSgpKSk7ZWxzZSBpZihtJiZscyhtLGYpKWMobSxmLG4scixpLGQsYSxvLHMpLFlvKGQsZik7ZWxzZSBpZihWbyh0LGBvblBlbmRpbmdgKSxkLnBlbmRpbmdCcmFuY2g9ZixkLnBlbmRpbmdJZD1mLnNoYXBlRmxhZyY1MTI/Zi5jb21wb25lbnQuc3VzcGVuc2VJZDp6bysrLGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTApZC5yZXNvbHZlKCk7ZWxzZXtsZXR7dGltZW91dDplLHBlbmRpbmdJZDp0fT1kO2U+MD9zZXRUaW1lb3V0KCgpPT57ZC5wZW5kaW5nSWQ9PT10JiZkLmZhbGxiYWNrKHApfSxlKTplPT09MCYmZC5mYWxsYmFjayhwKX19ZnVuY3Rpb24gV28oZSx0LG4scixpLGEsbyxzLGMsbCx1PSExKXtsZXR7cDpkLG06Zix1bTpwLG46bSxvOntwYXJlbnROb2RlOmgscmVtb3ZlOmd9fT1sLF8sdj1YbyhlKTt2JiZ0JiZ0LnBlbmRpbmdCcmFuY2gmJihfPXQucGVuZGluZ0lkLHQuZGVwcysrKTtsZXQgeT1lLnByb3BzP2llKGUucHJvcHMudGltZW91dCk6dm9pZCAwLGI9YSx4PXt2bm9kZTplLHBhcmVudDp0LHBhcmVudENvbXBvbmVudDpuLG5hbWVzcGFjZTpvLGNvbnRhaW5lcjpyLGhpZGRlbkNvbnRhaW5lcjppLGRlcHM6MCxwZW5kaW5nSWQ6em8rKyx0aW1lb3V0OnR5cGVvZiB5PT1gbnVtYmVyYD95Oi0xLGFjdGl2ZUJyYW5jaDpudWxsLGlzRmFsbGJhY2tNb3VudFBlbmRpbmc6ITEscGVuZGluZ0JyYW5jaDpudWxsLGlzSW5GYWxsYmFjazohdSxpc0h5ZHJhdGluZzp1LGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZShlPSExLG49ITEpe2xldHt2bm9kZTpyLGFjdGl2ZUJyYW5jaDppLHBlbmRpbmdCcmFuY2g6byxwZW5kaW5nSWQ6cyxlZmZlY3RzOmMscGFyZW50Q29tcG9uZW50OmwsY29udGFpbmVyOnUsaXNJbkZhbGxiYWNrOmR9PXgsZz0hMTtpZih4LmlzSHlkcmF0aW5nKXguaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZighZSl7Zz1pJiZvLnRyYW5zaXRpb24mJm8udHJhbnNpdGlvbi5tb2RlPT09YG91dC1pbmA7bGV0IGU9ITE7ZyYmKGkudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57cz09PXgucGVuZGluZ0lkJiYoZihvLHUsYT09PWImJiFlP20oaSk6YSwwKSxHbihjKSxkJiZyLnNzRmFsbGJhY2smJihyLnNzRmFsbGJhY2suZWw9bnVsbCkpfSksaSYmIXguaXNGYWxsYmFja01vdW50UGVuZGluZyYmKGgoaS5lbCk9PT11JiYoYT1tKGkpLGU9ITApLHAoaSxsLHgsITApLCFnJiZkJiZyLnNzRmFsbGJhY2smJlcoKCk9PnIuc3NGYWxsYmFjay5lbD1udWxsLHgpKSxnfHxmKG8sdSxhLDApfXguaXNGYWxsYmFja01vdW50UGVuZGluZz0hMSxZbyh4LG8pLHgucGVuZGluZ0JyYW5jaD1udWxsLHguaXNJbkZhbGxiYWNrPSExO2xldCB5PXgucGFyZW50LFM9ITE7Zm9yKDt5Oyl7aWYoeS5wZW5kaW5nQnJhbmNoKXtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl5LmVmZmVjdHMucHVzaChjW2VdKTtTPSEwO2JyZWFrfXk9eS5wYXJlbnR9IVMmJiFnJiZHbihjKSx4LmVmZmVjdHM9W10sdiYmdCYmdC5wZW5kaW5nQnJhbmNoJiZfPT09dC5wZW5kaW5nSWQmJih0LmRlcHMtLSx0LmRlcHM9PT0wJiYhbiYmdC5yZXNvbHZlKCkpLFZvKHIsYG9uUmVzb2x2ZWApfSxmYWxsYmFjayhlKXtpZigheC5wZW5kaW5nQnJhbmNoKXJldHVybjtsZXR7dm5vZGU6dCxhY3RpdmVCcmFuY2g6bixwYXJlbnRDb21wb25lbnQ6cixjb250YWluZXI6aSxuYW1lc3BhY2U6YX09eDtWbyh0LGBvbkZhbGxiYWNrYCk7bGV0IG89bShuKSxsPSgpPT57eC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nPSExLHguaXNJbkZhbGxiYWNrJiYoZChudWxsLGUsaSxvLHIsbnVsbCxhLHMsYyksWW8oeCxlKSl9LHU9ZS50cmFuc2l0aW9uJiZlLnRyYW5zaXRpb24ubW9kZT09PWBvdXQtaW5gO3UmJih4LmlzRmFsbGJhY2tNb3VudFBlbmRpbmc9ITAsbi50cmFuc2l0aW9uLmFmdGVyTGVhdmU9bCkseC5pc0luRmFsbGJhY2s9ITAscChuLHIsbnVsbCwhMCksdXx8bCgpfSxtb3ZlKGUsdCxuKXt4LmFjdGl2ZUJyYW5jaCYmZih4LmFjdGl2ZUJyYW5jaCxlLHQsbikseC5jb250YWluZXI9ZX0sbmV4dCgpe3JldHVybiB4LmFjdGl2ZUJyYW5jaCYmbSh4LmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKGUsdCxuKXtsZXQgcj0hIXgucGVuZGluZ0JyYW5jaDtyJiZ4LmRlcHMrKztsZXQgaT1lLnZub2RlLmVsO2UuYXN5bmNEZXAuY2F0Y2godD0+e01uKHQsZSwwKX0pLnRoZW4oYT0+e2lmKGUuaXNVbm1vdW50ZWR8fHguaXNVbm1vdW50ZWR8fHgucGVuZGluZ0lkIT09ZS5zdXNwZW5zZUlkKXJldHVybjtqcygpLGUuYXN5bmNSZXNvbHZlZD0hMDtsZXR7dm5vZGU6c309ZTtJcyhlLGEsITEpLGkmJihzLmVsPWkpO2xldCBjPSFpJiZlLnN1YlRyZWUuZWw7dChlLHMsaChpfHxlLnN1YlRyZWUuZWwpLGk/bnVsbDptKGUuc3ViVHJlZSkseCxvLG4pLGMmJihzLnBsYWNlaG9sZGVyPW51bGwsZyhjKSksc28oZSxzLmVsKSxyJiYtLXguZGVwcz09PTAmJngucmVzb2x2ZSgpfSl9LHVubW91bnQoZSx0KXt4LmlzVW5tb3VudGVkPSEwLHguYWN0aXZlQnJhbmNoJiZwKHguYWN0aXZlQnJhbmNoLG4sZSx0KSx4LnBlbmRpbmdCcmFuY2gmJnAoeC5wZW5kaW5nQnJhbmNoLG4sZSx0KX19O3JldHVybiB4fWZ1bmN0aW9uIEdvKGUsdCxuLHIsaSxhLG8scyxjKXtsZXQgbD10LnN1c3BlbnNlPVdvKHQscixuLGUucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSxudWxsLGksYSxvLHMsITApLHU9YyhlLGwucGVuZGluZ0JyYW5jaD10LnNzQ29udGVudCxuLGwsYSxvKTtyZXR1cm4gbC5kZXBzPT09MCYmbC5yZXNvbHZlKCExLCEwKSx1fWZ1bmN0aW9uIEtvKGUpe2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lLHI9dCYzMjtlLnNzQ29udGVudD1xbyhyP24uZGVmYXVsdDpuKSxlLnNzRmFsbGJhY2s9cj9xbyhuLmZhbGxiYWNrKTpxKEspfWZ1bmN0aW9uIHFvKGUpe2xldCB0O2lmKGcoZSkpe2xldCBuPXJzJiZlLl9jO24mJihlLl9kPSExLHRzKCkpLGU9ZSgpLG4mJihlLl9kPSEwLHQ9ZXMsbnMoKSl9cmV0dXJuIGQoZSkmJihlPXRvKGUpKSxlPWJzKGUpLHQmJiFlLmR5bmFtaWNDaGlsZHJlbiYmKGUuZHluYW1pY0NoaWxkcmVuPXQuZmlsdGVyKHQ9PnQhPT1lKSksZX1mdW5jdGlvbiBKbyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9kKGUpP3QuZWZmZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOkduKGUpfWZ1bmN0aW9uIFlvKGUsdCl7ZS5hY3RpdmVCcmFuY2g9dDtsZXR7dm5vZGU6bixwYXJlbnRDb21wb25lbnQ6cn09ZSxpPXQuZWw7Zm9yKDshaSYmdC5jb21wb25lbnQ7KXQ9dC5jb21wb25lbnQuc3ViVHJlZSxpPXQuZWw7bi5lbD1pLHImJnIuc3ViVHJlZT09PW4mJihyLnZub2RlLmVsPWksc28ocixpKSl9ZnVuY3Rpb24gWG8oZSl7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5zdXNwZW5zaWJsZTtyZXR1cm4gdCE9bnVsbCYmdCE9PSExfXZhciBHPVN5bWJvbC5mb3IoYHYtZmd0YCksWm89U3ltYm9sLmZvcihgdi10eHRgKSxLPVN5bWJvbC5mb3IoYHYtY210YCksUW89U3ltYm9sLmZvcihgdi1zdGNgKSwkbz1bXSxlcz1udWxsO2Z1bmN0aW9uIHRzKGU9ITEpeyRvLnB1c2goZXM9ZT9udWxsOltdKX1mdW5jdGlvbiBucygpeyRvLnBvcCgpLGVzPSRvWyRvLmxlbmd0aC0xXXx8bnVsbH12YXIgcnM9MTtmdW5jdGlvbiBpcyhlLHQ9ITEpe3JzKz1lLGU8MCYmZXMmJnQmJihlcy5oYXNPbmNlPSEwKX1mdW5jdGlvbiBhcyhlKXtyZXR1cm4gZS5keW5hbWljQ2hpbGRyZW49cnM+MD9lc3x8bjpudWxsLG5zKCkscnM+MCYmZXMmJmVzLnB1c2goZSksZX1mdW5jdGlvbiBvcyhlLHQsbixyLGksYSl7cmV0dXJuIGFzKHBzKGUsdCxuLHIsaSxhLCEwKSl9ZnVuY3Rpb24gc3MoZSx0LG4scixpKXtyZXR1cm4gYXMocShlLHQsbixyLGksITApKX1mdW5jdGlvbiBjcyhlKXtyZXR1cm4gZT9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gbHMoZSx0KXtyZXR1cm4gZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fWZ1bmN0aW9uIHVzKGUpe312YXIgZHM9KHtrZXk6ZX0pPT5lPz9udWxsLGZzPSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwZW9mIGU9PWBudW1iZXJgJiYoZT1gYCtlKSxlPT1udWxsP251bGw6XyhlKXx8SChlKXx8ZyhlKT97aTpVLHI6ZSxrOnQsZjohIW59OmUpO2Z1bmN0aW9uIHBzKGUsdD1udWxsLG49bnVsbCxyPTAsaT1udWxsLGE9ZT09PUc/MDoxLG89ITEscz0hMSl7bGV0IGM9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZSxwcm9wczp0LGtleTp0JiZkcyh0KSxyZWY6dCYmZnModCksc2NvcGVJZDokbixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOmEscGF0Y2hGbGFnOnIsZHluYW1pY1Byb3BzOmksZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDpVfTtyZXR1cm4gcz8oU3MoYyxuKSxhJjEyOCYmZS5ub3JtYWxpemUoYykpOm4mJihjLnNoYXBlRmxhZ3w9XyhuKT84OjE2KSxycz4wJiYhbyYmZXMmJihjLnBhdGNoRmxhZz4wfHxhJjYpJiZjLnBhdGNoRmxhZyE9PTMyJiZlcy5wdXNoKGMpLGN9dmFyIHE9bXM7ZnVuY3Rpb24gbXMoZSx0PW51bGwsbj1udWxsLHI9MCxpPW51bGwsYT0hMSl7aWYoKCFlfHxlPT09JGkpJiYoZT1LKSxjcyhlKSl7bGV0IHI9Z3MoZSx0LCEwKTtyZXR1cm4gbiYmU3MocixuKSxycz4wJiYhYSYmZXMmJihyLnNoYXBlRmxhZyY2P2VzW2VzLmluZGV4T2YoZSldPXI6ZXMucHVzaChyKSksci5wYXRjaEZsYWc9LTIscn1pZihLcyhlKSYmKGU9ZS5fX3ZjY09wdHMpLHQpe3Q9aHModCk7bGV0e2NsYXNzOmUsc3R5bGU6bn09dDtlJiYhXyhlKSYmKHQuY2xhc3M9TChlKSkseShuKSYmKEt0KG4pJiYhZChuKSYmKG49cyh7fSxuKSksdC5zdHlsZT1GKG4pKX1sZXQgbz1fKGUpPzE6Um8oZSk/MTI4OnhyKGUpPzY0OnkoZSk/NDpnKGUpPzI6MDtyZXR1cm4gcHMoZSx0LG4scixpLG8sYSwhMCl9ZnVuY3Rpb24gaHMoZSl7cmV0dXJuIGU/S3QoZSl8fHVvKGUpP3Moe30sZSk6ZTpudWxsfWZ1bmN0aW9uIGdzKGUsdCxuPSExLHI9ITEpe2xldHtwcm9wczppLHJlZjphLHBhdGNoRmxhZzpvLGNoaWxkcmVuOnMsdHJhbnNpdGlvbjpjfT1lLGw9dD9DcyhpfHx7fSx0KTppLHU9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZS50eXBlLHByb3BzOmwsa2V5OmwmJmRzKGwpLHJlZjp0JiZ0LnJlZj9uJiZhP2QoYSk/YS5jb25jYXQoZnModCkpOlthLGZzKHQpXTpmcyh0KTphLHNjb3BlSWQ6ZS5zY29wZUlkLHNsb3RTY29wZUlkczplLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpzLHRhcmdldDplLnRhcmdldCx0YXJnZXRTdGFydDplLnRhcmdldFN0YXJ0LHRhcmdldEFuY2hvcjplLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDplLnN0YXRpY0NvdW50LHNoYXBlRmxhZzplLnNoYXBlRmxhZyxwYXRjaEZsYWc6dCYmZS50eXBlIT09Rz9vPT09LTE/MTY6b3wxNjpvLGR5bmFtaWNQcm9wczplLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46ZS5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDplLmFwcENvbnRleHQsZGlyczplLmRpcnMsdHJhbnNpdGlvbjpjLGNvbXBvbmVudDplLmNvbXBvbmVudCxzdXNwZW5zZTplLnN1c3BlbnNlLHNzQ29udGVudDplLnNzQ29udGVudCYmZ3MoZS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6ZS5zc0ZhbGxiYWNrJiZncyhlLnNzRmFsbGJhY2spLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsZWw6ZS5lbCxhbmNob3I6ZS5hbmNob3IsY3R4OmUuY3R4LGNlOmUuY2V9O3JldHVybiBjJiZyJiZLcih1LGMuY2xvbmUodSkpLHV9ZnVuY3Rpb24gX3MoZT1gIGAsdD0wKXtyZXR1cm4gcShabyxudWxsLGUsdCl9ZnVuY3Rpb24gdnMoZSx0KXtsZXQgbj1xKFFvLG51bGwsZSk7cmV0dXJuIG4uc3RhdGljQ291bnQ9dCxufWZ1bmN0aW9uIHlzKGU9YGAsdD0hMSl7cmV0dXJuIHQ/KHRzKCksc3MoSyxudWxsLGUpKTpxKEssbnVsbCxlKX1mdW5jdGlvbiBicyhlKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PWBib29sZWFuYD9xKEspOmQoZSk/cShHLG51bGwsZS5zbGljZSgpKTpjcyhlKT94cyhlKTpxKFpvLG51bGwsU3RyaW5nKGUpKX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4gZS5lbD09PW51bGwmJmUucGF0Y2hGbGFnIT09LTF8fGUubWVtbz9lOmdzKGUpfWZ1bmN0aW9uIFNzKGUsdCl7bGV0IG49MCx7c2hhcGVGbGFnOnJ9PWU7aWYodD09bnVsbCl0PW51bGw7ZWxzZSBpZihkKHQpKW49MTY7ZWxzZSBpZih0eXBlb2YgdD09YG9iamVjdGApe2lmKHImNjUpe2xldCBuPXQuZGVmYXVsdDtuJiYobi5fYyYmKG4uX2Q9ITEpLFNzKGUsbigpKSxuLl9jJiYobi5fZD0hMCkpO3JldHVybn17bj0zMjtsZXQgcj10Ll87IXImJiF1byh0KT90Ll9jdHg9VTpyPT09MyYmVSYmKFUuc2xvdHMuXz09PTE/dC5fPTE6KHQuXz0yLGUucGF0Y2hGbGFnfD0xMDI0KSl9fWVsc2UgaWYoZyh0KSl7aWYociY2NSl7U3MoZSx7ZGVmYXVsdDp0fSk7cmV0dXJufXQ9e2RlZmF1bHQ6dCxfY3R4OlV9LG49MzJ9ZWxzZSB0PVN0cmluZyh0KSxyJjY0PyhuPTE2LHQ9W19zKHQpXSk6bj04O2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bn1mdW5jdGlvbiBDcyguLi5lKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXTtmb3IobGV0IGUgaW4gcilpZihlPT09YGNsYXNzYCl0LmNsYXNzIT09ci5jbGFzcyYmKHQuY2xhc3M9TChbdC5jbGFzcyxyLmNsYXNzXSkpO2Vsc2UgaWYoZT09PWBzdHlsZWApdC5zdHlsZT1GKFt0LnN0eWxlLHIuc3R5bGVdKTtlbHNlIGlmKGEoZSkpe2xldCBuPXRbZV0saT1yW2VdO2kmJm4hPT1pJiYhKGQobikmJm4uaW5jbHVkZXMoaSkpP3RbZV09bj9bXS5jb25jYXQobixpKTppOmk9PW51bGwmJm49PW51bGwmJiFvKGUpJiYodFtlXT1pKX1lbHNlIGUhPT1gYCYmKHRbZV09cltlXSl9cmV0dXJuIHR9ZnVuY3Rpb24gd3MoZSx0LG4scj1udWxsKXtqbihlLHQsNyxbbixyXSl9dmFyIFRzPVdhKCksRXM9MDtmdW5jdGlvbiBEcyhlLG4scil7bGV0IGk9ZS50eXBlLGE9KG4/bi5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fFRzLG89e3VpZDpFcysrLHZub2RlOmUsdHlwZTppLHBhcmVudDpuLGFwcENvbnRleHQ6YSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqb2I6bnVsbCxzY29wZTpuZXcgU2UoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6bj9uLnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoYS5wcm92aWRlcyksaWRzOm4/bi5pZHM6W2BgLDAsMF0sYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpfbyhpLGEpLGVtaXRzT3B0aW9uczpRYShpLGEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czp0LGluaGVyaXRBdHRyczppLmluaGVyaXRBdHRycyxjdHg6dCxkYXRhOnQscHJvcHM6dCxhdHRyczp0LHNsb3RzOnQscmVmczp0LHNldHVwU3RhdGU6dCxzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpyLHN1c3BlbnNlSWQ6cj9yLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIG8uY3R4PXtfOm99LG8ucm9vdD1uP24ucm9vdDpvLG8uZW1pdD1YYS5iaW5kKG51bGwsbyksZS5jZSYmZS5jZShvKSxvfXZhciBKPW51bGwsWT0oKT0+Snx8VSxPcyxrczt7bGV0IGU9b2UoKSx0PSh0LG4pPT57bGV0IHI7cmV0dXJuKHI9ZVt0XSl8fChyPWVbdF09W10pLHIucHVzaChuKSxlPT57ci5sZW5ndGg+MT9yLmZvckVhY2godD0+dChlKSk6clswXShlKX19O09zPXQoYF9fVlVFX0lOU1RBTkNFX1NFVFRFUlNfX2AsZT0+Sj1lKSxrcz10KGBfX1ZVRV9TU1JfU0VUVEVSU19fYCxlPT5Ocz1lKX12YXIgQXM9ZT0+e2xldCB0PUo7cmV0dXJuIE9zKGUpLGUuc2NvcGUub24oKSwoKT0+e2Uuc2NvcGUub2ZmKCksT3ModCl9fSxqcz0oKT0+e0omJkouc2NvcGUub2ZmKCksT3MobnVsbCl9O2Z1bmN0aW9uIE1zKGUpe3JldHVybiBlLnZub2RlLnNoYXBlRmxhZyY0fXZhciBOcz0hMTtmdW5jdGlvbiBQcyhlLHQ9ITEsbj0hMSl7dCYma3ModCk7bGV0e3Byb3BzOnIsY2hpbGRyZW46aX09ZS52bm9kZSxhPU1zKGUpO2ZvKGUscixhLHQpLFRvKGUsaSxufHx0KTtsZXQgbz1hP0ZzKGUsdCk6dm9pZCAwO3JldHVybiB0JiZrcyghMSksb31mdW5jdGlvbiBGcyhlLHQpe2xldCBuPWUudHlwZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcm94eT1uZXcgUHJveHkoZS5jdHgsZmEpO2xldHtzZXR1cDpyfT1uO2lmKHIpe1dlKCk7bGV0IG49ZS5zZXR1cENvbnRleHQ9ci5sZW5ndGg+MT9VcyhlKTpudWxsLGk9QXMoZSksYT1BbihyLGUsMCxbZS5wcm9wcyxuXSksbz1iKGEpO2lmKEdlKCksaSgpLChvfHxlLnNwKSYmIUVpKGUpJiZYcihlKSxvKXtpZihhLnRoZW4oanMsanMpLHQpcmV0dXJuIGEudGhlbihuPT57a3MoITApO3RyeXtJcyhlLG4sdCl9ZmluYWxseXtrcyghMSl9fSkuY2F0Y2godD0+e01uKHQsZSwwKX0pO2UuYXN5bmNEZXA9YX1lbHNlIElzKGUsYSx0KX1lbHNlIFZzKGUsdCl9ZnVuY3Rpb24gSXMoZSx0LG4pe2codCk/ZS50eXBlLl9fc3NySW5saW5lUmVuZGVyP2Uuc3NyUmVuZGVyPXQ6ZS5yZW5kZXI9dDp5KHQpJiYoZS5zZXR1cFN0YXRlPWFuKHQpKSxWcyhlLG4pfXZhciBMcyxScztmdW5jdGlvbiB6cyhlKXtMcz1lLFJzPWU9PntlLnJlbmRlci5fcmMmJihlLndpdGhQcm94eT1uZXcgUHJveHkoZS5jdHgscGEpKX19dmFyIEJzPSgpPT4hTHM7ZnVuY3Rpb24gVnMoZSx0LG4pe2xldCBpPWUudHlwZTtpZighZS5yZW5kZXIpe2lmKCF0JiZMcyYmIWkucmVuZGVyKXtsZXQgdD1pLnRlbXBsYXRlfHxQYShlKS50ZW1wbGF0ZTtpZih0KXtsZXR7aXNDdXN0b21FbGVtZW50Om4sY29tcGlsZXJPcHRpb25zOnJ9PWUuYXBwQ29udGV4dC5jb25maWcse2RlbGltaXRlcnM6YSxjb21waWxlck9wdGlvbnM6b309aSxjPXMocyh7aXNDdXN0b21FbGVtZW50Om4sZGVsaW1pdGVyczphfSxyKSxvKTtpLnJlbmRlcj1Mcyh0LGMpfX1lLnJlbmRlcj1pLnJlbmRlcnx8cixScyYmUnMoZSl9e2xldCB0PUFzKGUpO1dlKCk7dHJ5e0FhKGUpfWZpbmFsbHl7R2UoKSx0KCl9fX12YXIgSHM9e2dldChlLHQpe3JldHVybiBCKGUsYGdldGAsYGApLGVbdF19fTtmdW5jdGlvbiBVcyhlKXtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsSHMpLHNsb3RzOmUuc2xvdHMsZW1pdDplLmVtaXQsZXhwb3NlOnQ9PntlLmV4cG9zZWQ9dHx8e319fX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5leHBvc2VkP2UuZXhwb3NlUHJveHl8fD1uZXcgUHJveHkoYW4ocXQoZS5leHBvc2VkKSkse2dldCh0LG4pe2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIHVhKXJldHVybiB1YVtuXShlKX0saGFzKGUsdCl7cmV0dXJuIHQgaW4gZXx8dCBpbiB1YX19KTplLnByb3h5fWZ1bmN0aW9uIEdzKGUsdD0hMCl7cmV0dXJuIGcoZSk/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOmUubmFtZXx8dCYmZS5fX25hbWV9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIGcoZSkmJmBfX3ZjY09wdHNgaW4gZX12YXIgcXM9KGUsdCk9Pm1uKGUsdCxOcyk7ZnVuY3Rpb24gSnMoZSx0LG4pe3RyeXtpcygtMSk7bGV0IHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj09PTI/eSh0KSYmIWQodCk/Y3ModCk/cShlLG51bGwsW3RdKTpxKGUsdCk6cShlLG51bGwsdCk6KHI+Mz9uPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTpyPT09MyYmY3MobikmJihuPVtuXSkscShlLHQsbikpfWZpbmFsbHl7aXMoMSl9fWZ1bmN0aW9uIFlzKCl7fWZ1bmN0aW9uIFhzKGUsdCxuLHIpe2xldCBpPW5bcl07aWYoaSYmWnMoaSxlKSlyZXR1cm4gaTtsZXQgYT10KCk7cmV0dXJuIGEubWVtbz1lLnNsaWNlKCksYS5jYWNoZUluZGV4PXIsbltyXT1hfWZ1bmN0aW9uIFpzKGUsdCl7bGV0IG49ZS5tZW1vO2lmKG4ubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihqKG5bZV0sdFtlXSkpcmV0dXJuITE7cmV0dXJuIHJzPjAmJmVzJiZlcy5wdXNoKGUpLCEwfXZhciBRcz1gMy41LjQxYCwkcz1yLGVjPWtuLHRjPVhuLG5jPVFuLHJjPXtjcmVhdGVDb21wb25lbnRJbnN0YW5jZTpEcyxzZXR1cENvbXBvbmVudDpQcyxyZW5kZXJDb21wb25lbnRSb290OmVvLHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTplcixpc1ZOb2RlOmNzLG5vcm1hbGl6ZVZOb2RlOmJzLGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlOldzLGVuc3VyZVZhbGlkVk5vZGU6c2EscHVzaFdhcm5pbmdDb250ZXh0OlRuLHBvcFdhcm5pbmdDb250ZXh0OkVufSxpYz12b2lkIDAsYWM9dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdy50cnVzdGVkVHlwZXM7aWYoYWMpdHJ5e2ljPWFjLmNyZWF0ZVBvbGljeShgdnVlYCx7Y3JlYXRlSFRNTDplPT5lfSl9Y2F0Y2h7fXZhciBvYz1pYz9lPT5pYy5jcmVhdGVIVE1MKGUpOmU9PmUsc2M9YGh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnYCxjYz1gaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTGAsbGM9dHlwZW9mIGRvY3VtZW50PGB1YD9kb2N1bWVudDpudWxsLHVjPWxjJiZsYy5jcmVhdGVFbGVtZW50KGB0ZW1wbGF0ZWApLGRjPXtpbnNlcnQ6KGUsdCxuKT0+e3QuaW5zZXJ0QmVmb3JlKGUsbnx8bnVsbCl9LHJlbW92ZTplPT57bGV0IHQ9ZS5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQoZSl9LGNyZWF0ZUVsZW1lbnQ6KGUsdCxuLHIpPT57bGV0IGk9dD09PWBzdmdgP2xjLmNyZWF0ZUVsZW1lbnROUyhzYyxlKTp0PT09YG1hdGhtbGA/bGMuY3JlYXRlRWxlbWVudE5TKGNjLGUpOm4/bGMuY3JlYXRlRWxlbWVudChlLHtpczpufSk6bGMuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZT09PWBzZWxlY3RgJiZyJiZyLm11bHRpcGxlIT1udWxsJiZpLnNldEF0dHJpYnV0ZShgbXVsdGlwbGVgLHIubXVsdGlwbGUpLGl9LGNyZWF0ZVRleHQ6ZT0+bGMuY3JlYXRlVGV4dE5vZGUoZSksY3JlYXRlQ29tbWVudDplPT5sYy5jcmVhdGVDb21tZW50KGUpLHNldFRleHQ6KGUsdCk9PntlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbnRlbnQ9dH0scGFyZW50Tm9kZTplPT5lLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6ZT0+ZS5uZXh0U2libGluZyxxdWVyeVNlbGVjdG9yOmU9PmxjLnF1ZXJ5U2VsZWN0b3IoZSksc2V0U2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsYGApfSxpbnNlcnRTdGF0aWNDb250ZW50KGUsdCxuLHIsaSxhKXtsZXQgbz1uP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkO2lmKGkmJihpPT09YXx8aS5uZXh0U2libGluZykpZm9yKDt0Lmluc2VydEJlZm9yZShpLmNsb25lTm9kZSghMCksbiksIShpPT09YXx8IShpPWkubmV4dFNpYmxpbmcpKTspO2Vsc2V7dWMuaW5uZXJIVE1MPW9jKHI9PT1gc3ZnYD9gPHN2Zz4ke2V9PC9zdmc+YDpyPT09YG1hdGhtbGA/YDxtYXRoPiR7ZX08L21hdGg+YDplKTtsZXQgaT11Yy5jb250ZW50O2lmKHI9PT1gc3ZnYHx8cj09PWBtYXRobWxgKXtsZXQgZT1pLmZpcnN0Q2hpbGQ7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWkuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtpLnJlbW92ZUNoaWxkKGUpfXQuaW5zZXJ0QmVmb3JlKGksbil9cmV0dXJuW28/by5uZXh0U2libGluZzp0LmZpcnN0Q2hpbGQsbj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZF19fSxmYz1gdHJhbnNpdGlvbmAscGM9YGFuaW1hdGlvbmAsbWM9U3ltYm9sKGBfdnRjYCksaGM9e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LGdjPXMoe30sTHIsaGMpLF9jPShlPT4oZS5kaXNwbGF5TmFtZT1gVHJhbnNpdGlvbmAsZS5wcm9wcz1nYyxlKSkoKGUse3Nsb3RzOnR9KT0+SnMoVnIsYmMoZSksdCkpLHZjPShlLHQ9W10pPT57ZChlKT9lLmZvckVhY2goZT0+ZSguLi50KSk6ZSYmZSguLi50KX0seWM9ZT0+ZT9kKGUpP2Uuc29tZShlPT5lLmxlbmd0aD4xKTplLmxlbmd0aD4xOiExO2Z1bmN0aW9uIGJjKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKW4gaW4gaGN8fCh0W25dPWVbbl0pO2lmKGUuY3NzPT09ITEpcmV0dXJuIHQ7bGV0e25hbWU6bj1gdmAsdHlwZTpyLGR1cmF0aW9uOmksZW50ZXJGcm9tQ2xhc3M6YT1gJHtufS1lbnRlci1mcm9tYCxlbnRlckFjdGl2ZUNsYXNzOm89YCR7bn0tZW50ZXItYWN0aXZlYCxlbnRlclRvQ2xhc3M6Yz1gJHtufS1lbnRlci10b2AsYXBwZWFyRnJvbUNsYXNzOmw9YSxhcHBlYXJBY3RpdmVDbGFzczp1PW8sYXBwZWFyVG9DbGFzczpkPWMsbGVhdmVGcm9tQ2xhc3M6Zj1gJHtufS1sZWF2ZS1mcm9tYCxsZWF2ZUFjdGl2ZUNsYXNzOnA9YCR7bn0tbGVhdmUtYWN0aXZlYCxsZWF2ZVRvQ2xhc3M6bT1gJHtufS1sZWF2ZS10b2B9PWUsaD14YyhpKSxnPWgmJmhbMF0sXz1oJiZoWzFdLHtvbkJlZm9yZUVudGVyOnYsb25FbnRlcjp5LG9uRW50ZXJDYW5jZWxsZWQ6YixvbkxlYXZlOngsb25MZWF2ZUNhbmNlbGxlZDpTLG9uQmVmb3JlQXBwZWFyOkM9dixvbkFwcGVhcjp3PXksb25BcHBlYXJDYW5jZWxsZWQ6VD1ifT10LEU9KGUsdCxuLHIpPT57ZS5fZW50ZXJDYW5jZWxsZWQ9cix3YyhlLHQ/ZDpjKSx3YyhlLHQ/dTpvKSxuJiZuKCl9LEQ9KGUsdCk9PntlLl9pc0xlYXZpbmc9ITEsd2MoZSxmKSx3YyhlLG0pLHdjKGUscCksdCYmdCgpfSxlZT1lPT4odCxuKT0+e2xldCBpPWU/dzp5LG89KCk9PkUodCxlLG4pO3ZjKGksW3Qsb10pLFRjKCgpPT57d2ModCxlP2w6YSksQ2ModCxlP2Q6YykseWMoaSl8fERjKHQscixnLG8pfSl9O3JldHVybiBzKHQse29uQmVmb3JlRW50ZXIoZSl7dmModixbZV0pLENjKGUsYSksQ2MoZSxvKX0sb25CZWZvcmVBcHBlYXIoZSl7dmMoQyxbZV0pLENjKGUsbCksQ2MoZSx1KX0sb25FbnRlcjplZSghMSksb25BcHBlYXI6ZWUoITApLG9uTGVhdmUoZSx0KXtlLl9pc0xlYXZpbmc9ITA7bGV0IG49KCk9PkQoZSx0KTtDYyhlLGYpLGUuX2VudGVyQ2FuY2VsbGVkPyhDYyhlLHApLGpjKGUpKTooamMoZSksQ2MoZSxwKSksVGMoKCk9PntlLl9pc0xlYXZpbmcmJih3YyhlLGYpLENjKGUsbSkseWMoeCl8fERjKGUscixfLG4pKX0pLHZjKHgsW2Usbl0pfSxvbkVudGVyQ2FuY2VsbGVkKGUpe0UoZSwhMSx2b2lkIDAsITApLHZjKGIsW2VdKX0sb25BcHBlYXJDYW5jZWxsZWQoZSl7RShlLCEwLHZvaWQgMCwhMCksdmMoVCxbZV0pfSxvbkxlYXZlQ2FuY2VsbGVkKGUpe0QoZSksdmMoUyxbZV0pfX0pfWZ1bmN0aW9uIHhjKGUpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoeShlKSlyZXR1cm5bU2MoZS5lbnRlciksU2MoZS5sZWF2ZSldO3tsZXQgdD1TYyhlKTtyZXR1cm5bdCx0XX19ZnVuY3Rpb24gU2MoZSl7cmV0dXJuIGllKGUpfWZ1bmN0aW9uIENjKGUsdCl7dC5zcGxpdCgvXHMrLykuZm9yRWFjaCh0PT50JiZlLmNsYXNzTGlzdC5hZGQodCkpLChlW21jXXx8KGVbbWNdPW5ldyBTZXQpKS5hZGQodCl9ZnVuY3Rpb24gd2MoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LnJlbW92ZSh0KSk7bGV0IG49ZVttY107biYmKG4uZGVsZXRlKHQpLG4uc2l6ZXx8KGVbbWNdPXZvaWQgMCkpfWZ1bmN0aW9uIFRjKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX0pfXZhciBFYz0wO2Z1bmN0aW9uIERjKGUsdCxuLHIpe2xldCBpPWUuX2VuZElkPSsrRWMsYT0oKT0+e2k9PT1lLl9lbmRJZCYmcigpfTtpZihuIT1udWxsKXJldHVybiBzZXRUaW1lb3V0KGEsbik7bGV0e3R5cGU6byx0aW1lb3V0OnMscHJvcENvdW50OmN9PU9jKGUsdCk7aWYoIW8pcmV0dXJuIHIoKTtsZXQgbD1vK2BlbmRgLHU9MCxkPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGwsZiksYSgpfSxmPXQ9Pnt0LnRhcmdldD09PWUmJisrdT49YyYmZCgpfTtzZXRUaW1lb3V0KCgpPT57dTxjJiZkKCl9LHMrMSksZS5hZGRFdmVudExpc3RlbmVyKGwsZil9ZnVuY3Rpb24gT2MoZSx0KXtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxyPWU9PihuW2VdfHxgYCkuc3BsaXQoYCwgYCksaT1yKGAke2ZjfURlbGF5YCksYT1yKGAke2ZjfUR1cmF0aW9uYCksbz1rYyhpLGEpLHM9cihgJHtwY31EZWxheWApLGM9cihgJHtwY31EdXJhdGlvbmApLGw9a2MocyxjKSx1PW51bGwsZD0wLGY9MDt0PT09ZmM/bz4wJiYodT1mYyxkPW8sZj1hLmxlbmd0aCk6dD09PXBjP2w+MCYmKHU9cGMsZD1sLGY9Yy5sZW5ndGgpOihkPU1hdGgubWF4KG8sbCksdT1kPjA/bz5sP2ZjOnBjOm51bGwsZj11P3U9PT1mYz9hLmxlbmd0aDpjLmxlbmd0aDowKTtsZXQgcD11PT09ZmMmJi9cYig/OnRyYW5zZm9ybXxhbGwpKD86LHwkKS8udGVzdChyKGAke2ZjfVByb3BlcnR5YCkudG9TdHJpbmcoKSk7cmV0dXJue3R5cGU6dSx0aW1lb3V0OmQscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOnB9fWZ1bmN0aW9uIGtjKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXgoLi4udC5tYXAoKHQsbik9PkFjKHQpK0FjKGVbbl0pKSl9ZnVuY3Rpb24gQWMoZSl7cmV0dXJuIGU9PT1gYXV0b2A/MDpOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKGAsYCxgLmApKSoxZTN9ZnVuY3Rpb24gamMoZSl7cmV0dXJuKGU/ZS5vd25lckRvY3VtZW50OmRvY3VtZW50KS5ib2R5Lm9mZnNldEhlaWdodH1mdW5jdGlvbiBNYyhlLHQsbil7bGV0IHI9ZVttY107ciYmKHQ9KHQ/W3QsLi4ucl06Wy4uLnJdKS5qb2luKGAgYCkpLHQ9PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6bj9lLnNldEF0dHJpYnV0ZShgY2xhc3NgLHQpOmUuY2xhc3NOYW1lPXR9dmFyIE5jPVN5bWJvbChgX3ZvZGApLFBjPVN5bWJvbChgX3ZzaGApLEZjPXtuYW1lOmBzaG93YCxiZWZvcmVNb3VudChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7ZVtOY109ZS5zdHlsZS5kaXNwbGF5PT09YG5vbmVgP2BgOmUuc3R5bGUuZGlzcGxheSxuJiZ0P24uYmVmb3JlRW50ZXIoZSk6SWMoZSx0KX0sbW91bnRlZChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7biYmdCYmbi5lbnRlcihlKX0sdXBkYXRlZChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHt0cmFuc2l0aW9uOnJ9KXshdCE9IW4mJihyP3Q/KHIuYmVmb3JlRW50ZXIoZSksSWMoZSwhMCksci5lbnRlcihlKSk6ci5sZWF2ZShlLCgpPT57SWMoZSwhMSl9KTpJYyhlLHQpKX0sYmVmb3JlVW5tb3VudChlLHt2YWx1ZTp0fSl7SWMoZSx0KX19O2Z1bmN0aW9uIEljKGUsdCl7ZS5zdHlsZS5kaXNwbGF5PXQ/ZVtOY106YG5vbmVgLGVbUGNdPSF0fWZ1bmN0aW9uIExjKCl7RmMuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSk9PntpZighZSlyZXR1cm57c3R5bGU6e2Rpc3BsYXk6YG5vbmVgfX19fXZhciBSYz1TeW1ib2woYGApO2Z1bmN0aW9uIHpjKGUpe2xldCB0PVkoKTtpZighdClyZXR1cm47bGV0IG49dC51dD0obj1lKHQucHJveHkpKT0+e0FycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj0iJHt0LnVpZH0iXWApKS5mb3JFYWNoKGU9PlZjKGUsbikpfSxpPSgpPT57bGV0IHI9ZSh0LnByb3h5KTt0LmNlP1ZjKHQuY2Uscik6QmModC5zdWJUcmVlLHIpLG4ocil9O0hpKCgpPT57R24oaSl9KSxWaSgoKT0+e2hyKGkscix7Zmx1c2g6YHBvc3RgfSk7bGV0IGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoaSk7ZS5vYnNlcnZlKHQuc3ViVHJlZS5lbC5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSxHaSgoKT0+ZS5kaXNjb25uZWN0KCkpfSl9ZnVuY3Rpb24gQmMoZSx0KXtpZihlLnNoYXBlRmxhZyYxMjgpe2xldCBuPWUuc3VzcGVuc2U7ZT1uLmFjdGl2ZUJyYW5jaCxuLnBlbmRpbmdCcmFuY2gmJiFuLmlzSHlkcmF0aW5nJiZuLmVmZmVjdHMucHVzaCgoKT0+e0JjKG4uYWN0aXZlQnJhbmNoLHQpfSl9Zm9yKDtlLmNvbXBvbmVudDspZT1lLmNvbXBvbmVudC5zdWJUcmVlO2lmKGUuc2hhcGVGbGFnJjEmJmUuZWwpVmMoZS5lbCx0KTtlbHNlIGlmKGUudHlwZT09PUcpZS5jaGlsZHJlbi5mb3JFYWNoKGU9PkJjKGUsdCkpO2Vsc2UgaWYoZS50eXBlPT09UW8pe2xldHtlbDpuLGFuY2hvcjpyfT1lO2Zvcig7biYmKFZjKG4sdCksbiE9PXIpOyluPW4ubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIFZjKGUsdCl7aWYoZS5ub2RlVHlwZT09PTEpe2xldCBuPWUuc3R5bGUscj1gYDtmb3IobGV0IGUgaW4gdCl7bGV0IGk9eGUodFtlXSk7bi5zZXRQcm9wZXJ0eShgLS0ke2V9YCxpKSxyKz1gLS0ke2V9OiAke2l9O2B9bltSY109cn19dmFyIEhjPS8oPzpefDspXHMqZGlzcGxheVxzKjovO2Z1bmN0aW9uIFVjKGUsdCxuKXtsZXQgcj1lLnN0eWxlLGk9XyhuKSxhPSExO2lmKG4mJiFpKXtpZih0KXtpZihfKHQpKWZvcihsZXQgZSBvZiB0LnNwbGl0KGA7YCkpe2xldCB0PWUuc2xpY2UoMCxlLmluZGV4T2YoYDpgKSkudHJpbSgpO25bdF0/P0djKHIsdCxgYCl9ZWxzZSBmb3IobGV0IGUgaW4gdCluW2VdPz9HYyhyLGUsYGApfWZvcihsZXQgaSBpbiBuKXtpPT09YGRpc3BsYXlgJiYoYT0hMCk7bGV0IG89bltpXTtvPT1udWxsP0djKHIsaSxgYCk6WWMoZSxpLCFfKHQpJiZ0P3RbaV06dm9pZCAwLG8pfHxHYyhyLGksbyl9fWVsc2UgaWYoaSl7aWYodCE9PW4pe2xldCBlPXJbUmNdO2UmJihuKz1gO2ArZSksci5jc3NUZXh0PW4sYT1IYy50ZXN0KG4pfX1lbHNlIHQmJmUucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApO05jIGluIGUmJihlW05jXT1hP3IuZGlzcGxheTpgYCxlW1BjXSYmKHIuZGlzcGxheT1gbm9uZWApKX12YXIgV2M9L1xzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBHYyhlLHQsbil7aWYoZChuKSluLmZvckVhY2gobj0+R2MoZSx0LG4pKTtlbHNlIGlmKG4/Pz1gYCx0LnN0YXJ0c1dpdGgoYC0tYCkpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7bGV0IHI9SmMoZSx0KTtXYy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkoayhyKSxuLnJlcGxhY2UoV2MsYGApLGBpbXBvcnRhbnRgKTplW3JdPW59fXZhciBLYz1bYFdlYmtpdGAsYE1vemAsYG1zYF0scWM9e307ZnVuY3Rpb24gSmMoZSx0KXtsZXQgbj1xY1t0XTtpZihuKXJldHVybiBuO2xldCByPU8odCk7aWYociE9PWBmaWx0ZXJgJiZyIGluIGUpcmV0dXJuIHFjW3RdPXI7cj1BKHIpO2ZvcihsZXQgbj0wO248S2MubGVuZ3RoO24rKyl7bGV0IGk9S2Nbbl0rcjtpZihpIGluIGUpcmV0dXJuIHFjW3RdPWl9cmV0dXJuIHR9ZnVuY3Rpb24gWWMoZSx0LG4scil7cmV0dXJuIGUudGFnTmFtZT09PWBURVhUQVJFQWAmJih0PT09YHdpZHRoYHx8dD09PWBoZWlnaHRgKSYmXyhyKSYmbj09PXJ9dmFyIFhjPWBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYDtmdW5jdGlvbiBaYyhlLHQsbixyLGksYT1mZSh0KSl7ciYmdC5zdGFydHNXaXRoKGB4bGluazpgKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMoWGMsdC5zbGljZSg2LHQubGVuZ3RoKSk6ZS5zZXRBdHRyaWJ1dGVOUyhYYyx0LG4pOm49PW51bGx8fGEmJiFwZShuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LGE/YGA6dihuKT9TdHJpbmcobik6bil9ZnVuY3Rpb24gUWMoZSx0LG4scixpKXtpZih0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgKXtuIT1udWxsJiYoZVt0XT10PT09YGlubmVySFRNTGA/b2Mobik6bik7cmV0dXJufWxldCBhPWUudGFnTmFtZTtpZih0PT09YHZhbHVlYCYmYSE9PWBQUk9HUkVTU2AmJiFhLmluY2x1ZGVzKGAtYCkpe2xldCByPWE9PT1gT1BUSU9OYD9lLmdldEF0dHJpYnV0ZShgdmFsdWVgKXx8YGA6ZS52YWx1ZSxpPW49PW51bGw/ZS50eXBlPT09YGNoZWNrYm94YD9gb25gOmBgOlN0cmluZyhuKTsociE9PWl8fCEoYF92YWx1ZWBpbiBlKSkmJihlLnZhbHVlPWkpLG4/P2UucmVtb3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT1gYHx8bj09bnVsbCl7bGV0IHI9dHlwZW9mIGVbdF07cj09PWBib29sZWFuYD9uPXBlKG4pOm49PW51bGwmJnI9PT1gc3RyaW5nYD8obj1gYCxvPSEwKTpyPT09YG51bWJlcmAmJihuPTAsbz0hMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUoaXx8dCl9ZnVuY3Rpb24gJGMoZSx0LG4scil7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKX1mdW5jdGlvbiBlbChlLHQsbixyKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfXZhciB0bD1TeW1ib2woYF92ZWlgKTtmdW5jdGlvbiBubChlLHQsbixyLGk9bnVsbCl7bGV0IGE9ZVt0bF18fChlW3RsXT17fSksbz1hW3RdO2lmKHImJm8pby52YWx1ZT1yO2Vsc2V7bGV0W24sc109YWwodCk7cj8kYyhlLG4sYVt0XT1sbChyLGkpLHMpOm8mJihlbChlLG4sbyxzKSxhW3RdPXZvaWQgMCl9fXZhciBybD0vKE9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvLGlsPS9eb246Pyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIGFsKGUpe2xldCB0LG47Zm9yKDsobj1lLm1hdGNoKHJsKSkmJiFpbC50ZXN0KGUpOyl0fHw9e30sZT1lLnNsaWNlKDAsZS5sZW5ndGgtblsxXS5sZW5ndGgpLHRbblsxXS50b0xvd2VyQ2FzZSgpXT0hMDtyZXR1cm5bZVsyXT09PWA6YD9lLnNsaWNlKDMpOmsoZS5zbGljZSgyKSksdF19dmFyIG9sPTAsc2w9UHJvbWlzZS5yZXNvbHZlKCksY2w9KCk9Pm9sfHw9KHNsLnRoZW4oKCk9Pm9sPTApLERhdGUubm93KCkpO2Z1bmN0aW9uIGxsKGUsdCl7bGV0IG49ZT0+e2lmKCFlLl92dHMpZS5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihlLl92dHM8PW4uYXR0YWNoZWQpcmV0dXJuO2xldCByPW4udmFsdWU7aWYoZChyKSl7bGV0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH07bGV0IGk9ci5zbGljZSgpLGE9W2VdO2ZvcihsZXQgbj0wO248aS5sZW5ndGgmJiFlLl9zdG9wcGVkO24rKyl7bGV0IGU9aVtuXTtlJiZqbihlLHQsNSxhKX19ZWxzZSBqbihyLHQsNSxbZV0pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0YWNoZWQ9Y2woKSxufXZhciB1bD1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8MTIzLGRsPShlLHQsbixyLGkscyk9PntsZXQgYz1pPT09YHN2Z2A7dD09PWBjbGFzc2A/TWMoZSxyLGMpOnQ9PT1gc3R5bGVgP1VjKGUsbixyKTphKHQpP28odCl8fG5sKGUsdCxuLHIscyk6KHRbMF09PT1gLmA/KHQ9dC5zbGljZSgxKSwhMCk6dFswXT09PWBeYD8odD10LnNsaWNlKDEpLCExKTpmbChlLHQscixjKSk/KFFjKGUsdCxyKSwhZS50YWdOYW1lLmluY2x1ZGVzKGAtYCkmJih0PT09YHZhbHVlYHx8dD09PWBjaGVja2VkYHx8dD09PWBzZWxlY3RlZGApJiZaYyhlLHQscixjLHMsdCE9PWB2YWx1ZWApKTplLl9pc1Z1ZUNFJiYocGwoZSx0KXx8ZS5fZGVmLl9fYXN5bmNMb2FkZXImJigvW0EtWl0vLnRlc3QodCl8fCFfKHIpKSk/UWMoZSxPKHQpLHIscyx0KToodD09PWB0cnVlLXZhbHVlYD9lLl90cnVlVmFsdWU9cjp0PT09YGZhbHNlLXZhbHVlYCYmKGUuX2ZhbHNlVmFsdWU9ciksWmMoZSx0LHIsYykpfTtmdW5jdGlvbiBmbChlLHQsbixyKXtpZihyKXJldHVybiEhKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGB8fHQgaW4gZSYmdWwodCkmJmcobikpO2lmKHQ9PT1gc3BlbGxjaGVja2B8fHQ9PT1gZHJhZ2dhYmxlYHx8dD09PWB0cmFuc2xhdGVgfHx0PT09YGF1dG9jb3JyZWN0YHx8dD09PWBzYW5kYm94YCYmZS50YWdOYW1lPT09YElGUkFNRWB8fHQ9PT1gZm9ybWB8fHQ9PT1gbGlzdGAmJmUudGFnTmFtZT09PWBJTlBVVGB8fHQ9PT1gdHlwZWAmJmUudGFnTmFtZT09PWBURVhUQVJFQWApcmV0dXJuITE7aWYodD09PWB3aWR0aGB8fHQ9PT1gaGVpZ2h0YCl7bGV0IHQ9ZS50YWdOYW1lO2lmKHQ9PT1gSU1HYHx8dD09PWBWSURFT2B8fHQ9PT1gQ0FOVkFTYHx8dD09PWBTT1VSQ0VgKXJldHVybiExfXJldHVybiB1bCh0KSYmXyhuKT8hMTp0IGluIGV9ZnVuY3Rpb24gcGwoZSx0KXtsZXQgbj1lLl9kZWYucHJvcHM7aWYoIW4pcmV0dXJuITE7bGV0IHI9Tyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLnNvbWUoZT0+TyhlKT09PXIpOk9iamVjdC5rZXlzKG4pLnNvbWUoZT0+TyhlKT09PXIpfXZhciBtbD17fTtmdW5jdGlvbiBobChlLHQsbil7bGV0IHI9SnIoZSx0KTt3KHIpJiYocj1zKHt9LHIsdCkpO2NsYXNzIGkgZXh0ZW5kcyB2bHtjb25zdHJ1Y3RvcihlKXtzdXBlcihyLGUsbil9fXJldHVybiBpLmRlZj1yLGl9dmFyIGdsPSgoZSx0KT0+aGwoZSx0LGx1KSksX2w9dHlwZW9mIEhUTUxFbGVtZW50PGB1YD9IVE1MRWxlbWVudDpjbGFzc3t9LHZsPWNsYXNzIGUgZXh0ZW5kcyBfbHtjb25zdHJ1Y3RvcihlLHQ9e30sbj1jdSl7c3VwZXIoKSx0aGlzLl9kZWY9ZSx0aGlzLl9wcm9wcz10LHRoaXMuX2NyZWF0ZUFwcD1uLHRoaXMuX2lzVnVlQ0U9ITAsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9hcHA9bnVsbCx0aGlzLl9ub25jZT10aGlzLl9kZWYubm9uY2UsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3Jlc29sdmVkPSExLHRoaXMuX3BhdGNoaW5nPSExLHRoaXMuX2RpcnR5PSExLHRoaXMuX251bWJlclByb3BzPW51bGwsdGhpcy5fc3R5bGVDaGlsZHJlbj1uZXcgV2Vha1NldCx0aGlzLl9zdHlsZUFuY2hvcnM9bmV3IFdlYWtNYXAsdGhpcy5fb2I9bnVsbCx0aGlzLnNoYWRvd1Jvb3QmJm4hPT1jdT90aGlzLl9yb290PXRoaXMuc2hhZG93Um9vdDplLnNoYWRvd1Jvb3Q9PT0hMT90aGlzLl9yb290PXRoaXM6KHRoaXMuYXR0YWNoU2hhZG93KHMoe30sZS5zaGFkb3dSb290T3B0aW9ucyx7bW9kZTpgb3BlbmB9KSksdGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3QpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoIXRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuOyF0aGlzLnNoYWRvd1Jvb3QmJiF0aGlzLl9yZXNvbHZlZCYmdGhpcy5fcGFyc2VTbG90cygpLHRoaXMuX2Nvbm5lY3RlZD0hMDtsZXQgdD10aGlzO2Zvcig7dCYmPXQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGV8fHQuaG9zdDspaWYodCBpbnN0YW5jZW9mIGUpe3RoaXMuX3BhcmVudD10O2JyZWFrfXRoaXMuX2luc3RhbmNlfHwodGhpcy5fcmVzb2x2ZWQ/dGhpcy5fbW91bnQodGhpcy5fZGVmKTp0JiZ0Ll9wZW5kaW5nUmVzb2x2ZT90aGlzLl9wZW5kaW5nUmVzb2x2ZT10Ll9wZW5kaW5nUmVzb2x2ZS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ1Jlc29sdmU9dm9pZCAwLHRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuIHRoaXMuX3Jlc29sdmVEZWYoKX0pOnRoaXMuX3Jlc29sdmVEZWYoKSl9X3NldFBhcmVudChlPXRoaXMuX3BhcmVudCl7ZSYmKHRoaXMuX2luc3RhbmNlLnBhcmVudD1lLl9pbnN0YW5jZSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dChlKSl9X2luaGVyaXRQYXJlbnRDb250ZXh0KGU9dGhpcy5fcGFyZW50KXtlJiZ0aGlzLl9hcHAmJk9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLl9hcHAuX2NvbnRleHQucHJvdmlkZXMsZS5faW5zdGFuY2UucHJvdmlkZXMpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fY29ubmVjdGVkPSExLFZuKCgpPT57dGhpcy5fY29ubmVjdGVkfHwodGhpcy5fb2ImJj0odGhpcy5fb2IuZGlzY29ubmVjdCgpLG51bGwpLHRoaXMuX2FwcCYmdGhpcy5fYXBwLnVubW91bnQoKSx0aGlzLl9pbnN0YW5jZSYmKHRoaXMuX2luc3RhbmNlLmNlPXZvaWQgMCksdGhpcy5fYXBwPXRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fdGVsZXBvcnRUYXJnZXRzJiY9KHRoaXMuX3RlbGVwb3J0VGFyZ2V0cy5jbGVhcigpLHZvaWQgMCkpfSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7Zm9yKGxldCB0IG9mIGUpdGhpcy5fc2V0QXR0cih0LmF0dHJpYnV0ZU5hbWUpfV9yZXNvbHZlRGVmKCl7aWYodGhpcy5fcGVuZGluZ1Jlc29sdmUpcmV0dXJuIHRoaXMuX3BlbmRpbmdSZXNvbHZlO2ZvcihsZXQgZT0wO2U8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtlKyspdGhpcy5fc2V0QXR0cih0aGlzLmF0dHJpYnV0ZXNbZV0ubmFtZSk7dGhpcy5fb2I9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fcHJvY2Vzc011dGF0aW9ucy5iaW5kKHRoaXMpKSx0aGlzLl9vYi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KTtsZXQgZT0oZSx0PSExKT0+e3RoaXMuX3Jlc29sdmVkPSEwLHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMDtsZXR7cHJvcHM6bixzdHlsZXM6cn09ZSxpO2lmKG4mJiFkKG4pKWZvcihsZXQgZSBpbiBuKXtsZXQgdD1uW2VdOyh0PT09TnVtYmVyfHx0JiZ0LnR5cGU9PT1OdW1iZXIpJiYoZSBpbiB0aGlzLl9wcm9wcyYmKHRoaXMuX3Byb3BzW2VdPWllKHRoaXMuX3Byb3BzW2VdKSksKGl8fD1PYmplY3QuY3JlYXRlKG51bGwpKVtPKGUpXT0hMCl9dGhpcy5fbnVtYmVyUHJvcHM9aSx0aGlzLl9yZXNvbHZlUHJvcHMoZSksdGhpcy5zaGFkb3dSb290JiZ0aGlzLl9hcHBseVN0eWxlcyhyKSx0aGlzLl9tb3VudChlKX0sdD10aGlzLl9kZWYuX19hc3luY0xvYWRlcjtpZih0KXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZT10KCkudGhlbih0PT57dC5jb25maWd1cmVBcHA9dGhpcy5fZGVmLmNvbmZpZ3VyZUFwcCxlKHRoaXMuX2RlZj10LCEwKX0pLHRoaXMuX3BlbmRpbmdSZXNvbHZlO2UodGhpcy5fZGVmKX1fbW91bnQoZSl7dGhpcy5fYXBwPXRoaXMuX2NyZWF0ZUFwcChlKSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dCgpLGUuY29uZmlndXJlQXBwJiZlLmNvbmZpZ3VyZUFwcCh0aGlzLl9hcHApLHRoaXMuX2FwcC5fY2VWTm9kZT10aGlzLl9jcmVhdGVWTm9kZSgpLHRoaXMuX2FwcC5tb3VudCh0aGlzLl9yb290KTtsZXQgdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuZXhwb3NlZDtpZih0KWZvcihsZXQgZSBpbiB0KXUodGhpcyxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0OigpPT50bih0W2VdKX0pfV9yZXNvbHZlUHJvcHMoZSl7bGV0e3Byb3BzOnR9PWUsbj1kKHQpP3Q6T2JqZWN0LmtleXModHx8e30pO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0aGlzKSllWzBdIT09YF9gJiZuLmluY2x1ZGVzKGUpJiZ0aGlzLl9zZXRQcm9wKGUsdGhpc1tlXSk7Zm9yKGxldCBlIG9mIG4ubWFwKE8pKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldCgpe3JldHVybiB0aGlzLl9nZXRQcm9wKGUpfSxzZXQodCl7dGhpcy5fc2V0UHJvcChlLHQsITAsIXRoaXMuX3BhdGNoaW5nKX19KX1fc2V0QXR0cihlKXtpZihlLnN0YXJ0c1dpdGgoYGRhdGEtdi1gKSlyZXR1cm47bGV0IHQ9dGhpcy5oYXNBdHRyaWJ1dGUoZSksbj10P3RoaXMuZ2V0QXR0cmlidXRlKGUpOm1sLHI9TyhlKTt0JiZ0aGlzLl9udW1iZXJQcm9wcyYmdGhpcy5fbnVtYmVyUHJvcHNbcl0mJihuPWllKG4pKSx0aGlzLl9zZXRQcm9wKHIsbiwhMSwhMCl9X2dldFByb3AoZSl7cmV0dXJuIHRoaXMuX3Byb3BzW2VdfV9zZXRQcm9wKGUsdCxuPSEwLHI9ITEpe2lmKHQhPT10aGlzLl9wcm9wc1tlXSYmKHRoaXMuX2RpcnR5PSEwLHQ9PT1tbD9kZWxldGUgdGhpcy5fcHJvcHNbZV06KHRoaXMuX3Byb3BzW2VdPXQsZT09PWBrZXlgJiZ0aGlzLl9hcHAmJih0aGlzLl9hcHAuX2NlVk5vZGUua2V5PXQpKSxyJiZ0aGlzLl9pbnN0YW5jZSYmdGhpcy5fdXBkYXRlKCksbikpe2xldCBuPXRoaXMuX29iO24mJih0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG4udGFrZVJlY29yZHMoKSksbi5kaXNjb25uZWN0KCkpLHQ9PT0hMD90aGlzLnNldEF0dHJpYnV0ZShrKGUpLGBgKTp0eXBlb2YgdD09YHN0cmluZ2B8fHR5cGVvZiB0PT1gbnVtYmVyYD90aGlzLnNldEF0dHJpYnV0ZShrKGUpLHQrYGApOnR8fHRoaXMucmVtb3ZlQXR0cmlidXRlKGsoZSkpLG4mJm4ub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSl9fV91cGRhdGUoKXtsZXQgZT10aGlzLl9jcmVhdGVWTm9kZSgpO3RoaXMuX2FwcCYmKGUuYXBwQ29udGV4dD10aGlzLl9hcHAuX2NvbnRleHQpLG91KGUsdGhpcy5fcm9vdCl9X2NyZWF0ZVZOb2RlKCl7bGV0IGU9e307dGhpcy5zaGFkb3dSb290fHwoZS5vblZub2RlTW91bnRlZD1lLm9uVm5vZGVVcGRhdGVkPXRoaXMuX3JlbmRlclNsb3RzLmJpbmQodGhpcykpO2xldCB0PXEodGhpcy5fZGVmLHMoZSx0aGlzLl9wcm9wcykpO3JldHVybiB0aGlzLl9pbnN0YW5jZXx8KHQuY2U9ZT0+e3RoaXMuX2luc3RhbmNlPWUsZS5jZT10aGlzLGUuaXNDRT0hMDtsZXQgdD0oZSx0KT0+e3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZSx3KHRbMF0pP3Moe2RldGFpbDp0fSx0WzBdKTp7ZGV0YWlsOnR9KSl9O2UuZW1pdD0oZSwuLi5uKT0+e3QoZSxuKSxrKGUpIT09ZSYmdChrKGUpLG4pfSx0aGlzLl9zZXRQYXJlbnQoKX0pLHR9X2FwcGx5U3R5bGVzKGUsdCxuKXtpZighZSlyZXR1cm47aWYodCl7aWYodD09PXRoaXMuX2RlZnx8dGhpcy5fc3R5bGVDaGlsZHJlbi5oYXModCkpcmV0dXJuO3RoaXMuX3N0eWxlQ2hpbGRyZW4uYWRkKHQpfWxldCByPXRoaXMuX25vbmNlLGk9dGhpcy5zaGFkb3dSb290LGE9bj90aGlzLl9nZXRTdHlsZUFuY2hvcihuKXx8dGhpcy5fZ2V0U3R5bGVBbmNob3IodGhpcy5fZGVmKTp0aGlzLl9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoaSksbz1udWxsO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3ImJmMuc2V0QXR0cmlidXRlKGBub25jZWAsciksYy50ZXh0Q29udGVudD1lW3NdLGkuaW5zZXJ0QmVmb3JlKGMsb3x8YSksbz1jLHM9PT0wJiYobnx8dGhpcy5fc3R5bGVBbmNob3JzLnNldCh0aGlzLl9kZWYsYyksdCYmdGhpcy5fc3R5bGVBbmNob3JzLnNldCh0LGMpKX19X2dldFN0eWxlQW5jaG9yKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PXRoaXMuX3N0eWxlQW5jaG9ycy5nZXQoZSk7cmV0dXJuIHQmJnQucGFyZW50Tm9kZT09PXRoaXMuc2hhZG93Um9vdD90Oih0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuZGVsZXRlKGUpLG51bGwpfV9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoZSl7Zm9yKGxldCB0PTA7dDxlLmNoaWxkTm9kZXMubGVuZ3RoO3QrKyl7bGV0IG49ZS5jaGlsZE5vZGVzW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpKXJldHVybiBufXJldHVybiBudWxsfV9wYXJzZVNsb3RzKCl7bGV0IGU9dGhpcy5fc2xvdHM9e30sdDtmb3IoO3Q9dGhpcy5maXJzdENoaWxkOyl7bGV0IG49dC5ub2RlVHlwZT09PTEmJnQuZ2V0QXR0cmlidXRlKGBzbG90YCl8fGBkZWZhdWx0YDsoZVtuXXx8KGVbbl09W10pKS5wdXNoKHQpLHRoaXMucmVtb3ZlQ2hpbGQodCl9fV9yZW5kZXJTbG90cygpe2xldCBlPXRoaXMuX2dldFNsb3RzKCksdD10aGlzLl9pbnN0YW5jZS50eXBlLl9fc2NvcGVJZDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPXIuZ2V0QXR0cmlidXRlKGBuYW1lYCl8fGBkZWZhdWx0YCxhPXRoaXMuX3Nsb3RzW2ldLG89ci5wYXJlbnROb2RlO2lmKGEpZm9yKGxldCBlIG9mIGEpe2lmKHQmJmUubm9kZVR5cGU9PT0xKXtsZXQgbj10K2Atc2Ascj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsMSk7ZS5zZXRBdHRyaWJ1dGUobixgYCk7bGV0IGk7Zm9yKDtpPXIubmV4dE5vZGUoKTspaS5zZXRBdHRyaWJ1dGUobixgYCl9by5pbnNlcnRCZWZvcmUoZSxyKX1lbHNlIGZvcig7ci5maXJzdENoaWxkOylvLmluc2VydEJlZm9yZShyLmZpcnN0Q2hpbGQscik7by5yZW1vdmVDaGlsZChyKX19X2dldFNsb3RzKCl7bGV0IGU9W3RoaXNdO3RoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmZS5wdXNoKC4uLnRoaXMuX3RlbGVwb3J0VGFyZ2V0cyk7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSl7bGV0IGU9bi5xdWVyeVNlbGVjdG9yQWxsKGBzbG90YCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5hZGQoZVtuXSl9cmV0dXJuIEFycmF5LmZyb20odCl9X2luamVjdENoaWxkU3R5bGUoZSx0KXt0aGlzLl9hcHBseVN0eWxlcyhlLnN0eWxlcyxlLHQpfV9iZWdpblBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITAsdGhpcy5fZGlydHk9ITF9X2VuZFBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITEsdGhpcy5fZGlydHkmJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKX1faGFzU2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9kZWYuc2hhZG93Um9vdCE9PSExfV9yZW1vdmVDaGlsZFN0eWxlKGUpe319O2Z1bmN0aW9uIHlsKGUpe2xldCB0PVkoKTtyZXR1cm4gdCYmdC5jZXx8bnVsbH1mdW5jdGlvbiBibCgpe2xldCBlPXlsKCk7cmV0dXJuIGUmJmUuc2hhZG93Um9vdH1mdW5jdGlvbiB4bChlPWAkc3R5bGVgKXt7bGV0IG49WSgpO2lmKCFuKXJldHVybiB0O2xldCByPW4udHlwZS5fX2Nzc01vZHVsZXM7cmV0dXJuIHImJnJbZV18fHR9fXZhciBTbD1uZXcgV2Vha01hcCxDbD1uZXcgV2Vha01hcCx3bD1TeW1ib2woYF9tb3ZlQ2JgKSxUbD1TeW1ib2woYF9lbnRlckNiYCksRWw9KGU9PihkZWxldGUgZS5wcm9wcy5tb2RlLGUpKSh7bmFtZTpgVHJhbnNpdGlvbkdyb3VwYCxwcm9wczpzKHt9LGdjLHt0YWc6U3RyaW5nLG1vdmVDbGFzczpTdHJpbmd9KSxzZXR1cChlLHtzbG90czp0fSl7bGV0IG49WSgpLHI9RnIoKSxpLGE7cmV0dXJuIFVpKCgpPT57aWYoIWkubGVuZ3RoKXJldHVybjtsZXQgdD1lLm1vdmVDbGFzc3x8YCR7ZS5uYW1lfHxgdmB9LW1vdmVgO2lmKCFqbChpWzBdLmVsLG4udm5vZGUuZWwsdCkpe2k9W107cmV0dXJufWkuZm9yRWFjaChEbCksaS5mb3JFYWNoKE9sKTtsZXQgcj1pLmZpbHRlcihrbCk7amMobi52bm9kZS5lbCksci5mb3JFYWNoKGU9PntsZXQgbj1lLmVsLHI9bi5zdHlsZTtDYyhuLHQpLHIudHJhbnNmb3JtPXIud2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPWBgO2xldCBpPW5bd2xdPWU9PntlJiZlLnRhcmdldCE9PW58fCghZXx8ZS5wcm9wZXJ0eU5hbWUuZW5kc1dpdGgoYHRyYW5zZm9ybWApKSYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdHJhbnNpdGlvbmVuZGAsaSksblt3bF09bnVsbCx3YyhuLHQpKX07bi5hZGRFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKX0pLGk9W119KSwoKT0+e2xldCBvPVYoZSkscz1iYyhvKSxjPW8udGFnfHxHO2lmKGk9W10sYSlmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrKyl7bGV0IHQ9YVtlXTt0LmVsJiZ0LmVsIGluc3RhbmNlb2YgRWxlbWVudCYmIXQuZWxbUGNdJiYoaS5wdXNoKHQpLEtyKHQsVXIodCxzLHIsbikpLFNsLnNldCh0LEFsKHQuZWwpKSl9YT10LmRlZmF1bHQ/cXIodC5kZWZhdWx0KCkpOltdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3Qua2V5IT1udWxsJiZLcih0LFVyKHQscyxyLG4pKX1yZXR1cm4gcShjLG51bGwsYSl9fX0pO2Z1bmN0aW9uIERsKGUpe2xldCB0PWUuZWw7dFt3bF0mJnRbd2xdKCksdFtUbF0mJnRbVGxdKCl9ZnVuY3Rpb24gT2woZSl7Q2wuc2V0KGUsQWwoZS5lbCkpfWZ1bmN0aW9uIGtsKGUpe2xldCB0PVNsLmdldChlKSxuPUNsLmdldChlKSxyPXQubGVmdC1uLmxlZnQsaT10LnRvcC1uLnRvcDtpZihyfHxpKXtsZXQgdD1lLmVsLG49dC5zdHlsZSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLHM9MTtyZXR1cm4gdC5vZmZzZXRXaWR0aCYmKG89YS53aWR0aC90Lm9mZnNldFdpZHRoKSx0Lm9mZnNldEhlaWdodCYmKHM9YS5oZWlnaHQvdC5vZmZzZXRIZWlnaHQpLCghTnVtYmVyLmlzRmluaXRlKG8pfHxvPT09MCkmJihvPTEpLCghTnVtYmVyLmlzRmluaXRlKHMpfHxzPT09MCkmJihzPTEpLE1hdGguYWJzKG8tMSk8LjAxJiYobz0xKSxNYXRoLmFicyhzLTEpPC4wMSYmKHM9MSksbi50cmFuc2Zvcm09bi53ZWJraXRUcmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Ivb31weCwke2kvc31weClgLG4udHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZX19ZnVuY3Rpb24gQWwoZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDp0LmxlZnQsdG9wOnQudG9wfX1mdW5jdGlvbiBqbChlLHQsbil7bGV0IHI9ZS5jbG9uZU5vZGUoKSxpPWVbbWNdO2kmJmkuZm9yRWFjaChlPT57ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5yZW1vdmUoZSkpfSksbi5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5hZGQoZSkpLHIuc3R5bGUuZGlzcGxheT1gbm9uZWA7bGV0IGE9dC5ub2RlVHlwZT09PTE/dDp0LnBhcmVudE5vZGU7YS5hcHBlbmRDaGlsZChyKTtsZXR7aGFzVHJhbnNmb3JtOm99PU9jKHIpO3JldHVybiBhLnJlbW92ZUNoaWxkKHIpLG99dmFyIE1sPWU9PntsZXQgdD1lLnByb3BzW2BvblVwZGF0ZTptb2RlbFZhbHVlYF18fCExO3JldHVybiBkKHQpP2U9Pk0odCxlKTp0fTtmdW5jdGlvbiBObChlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gUGwoZSl7bGV0IHQ9ZS50YXJnZXQ7dC5jb21wb3NpbmcmJih0LmNvbXBvc2luZz0hMSx0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGBpbnB1dGApKSl9dmFyIEZsPVN5bWJvbChgX2Fzc2lnbmApLElsPVN5bWJvbChgX2luaXRpYWxWYWx1ZWApO2Z1bmN0aW9uIExsKGUsdCxuKXtyZXR1cm4gdCYmKGU9ZS50cmltKCkpLG4mJihlPXJlKGUpKSxlfXZhciBSbD17Y3JlYXRlZChlLHttb2RpZmllcnM6e2xhenk6dCx0cmltOm4sbnVtYmVyOnJ9fSxpKXtlLnBhcmVudE5vZGUmJihlLnR5cGU9PT1gdGV4dGA/ZVtJbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvW1xyXG5dL2csYGApOmUudHlwZT09PWB0ZXh0YXJlYWAmJihlW0lsXT1lLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC9cclxuPy9nLGAKYCkpKSxlW0ZsXT1NbChpKTtsZXQgYT1yfHxpLnByb3BzJiZpLnByb3BzLnR5cGU9PT1gbnVtYmVyYDskYyhlLHQ/YGNoYW5nZWA6YGlucHV0YCx0PT57dC50YXJnZXQuY29tcG9zaW5nfHxlW0ZsXShMbChlLnZhbHVlLG4sYSkpfSksKG58fGEpJiYkYyhlLGBjaGFuZ2VgLCgpPT57ZS52YWx1ZT1MbChlLnZhbHVlLG4sYSl9KSx0fHwoJGMoZSxgY29tcG9zaXRpb25zdGFydGAsTmwpLCRjKGUsYGNvbXBvc2l0aW9uZW5kYCxQbCksJGMoZSxgY2hhbmdlYCxQbCkpfSxtb3VudGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOnt0cmltOm4sbnVtYmVyOnJ9fSl7bGV0IGk9dD8/YGAsYT1lW0lsXTtkZWxldGUgZVtJbF0sYSE9PXZvaWQgMCYmKGUudHlwZT09PWB0ZXh0YHx8ZS50eXBlPT09YHRleHRhcmVhYCkmJmUudmFsdWUhPT1hP2VbRmxdKExsKGUudmFsdWUsbixyKSk6ZS52YWx1ZT1pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpuLG1vZGlmaWVyczp7bGF6eTpyLHRyaW06aSxudW1iZXI6YX19LG8pe2lmKGVbRmxdPU1sKG8pLGUuY29tcG9zaW5nKXJldHVybjtsZXQgcz0oYXx8ZS50eXBlPT09YG51bWJlcmApJiYhL14wXGQvLnRlc3QoZS52YWx1ZSk/cmUoZS52YWx1ZSk6ZS52YWx1ZSxjPXQ/P2BgO2lmKHM9PT1jKXJldHVybjtsZXQgbD1lLmdldFJvb3ROb2RlKCk7KGwgaW5zdGFuY2VvZiBEb2N1bWVudHx8bCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpJiZsLmFjdGl2ZUVsZW1lbnQ9PT1lJiZlLnR5cGUhPT1gcmFuZ2VgJiYociYmdD09PW58fGkmJmUudmFsdWUudHJpbSgpPT09Yyl8fChlLnZhbHVlPWMpfX0semw9e2RlZXA6ITAsY3JlYXRlZChlLHQsbil7ZVtGbF09TWwobiksJGMoZSxgY2hhbmdlYCwoKT0+e2xldCB0PWUuX21vZGVsVmFsdWUsbj1XbChlKSxyPWUuY2hlY2tlZCxpPWVbRmxdO2lmKGQodCkpe2xldCBlPWdlKHQsbiksYT1lIT09LTE7aWYociYmIWEpaSh0LmNvbmNhdChuKSk7ZWxzZSBpZighciYmYSl7bGV0IG49Wy4uLnRdO24uc3BsaWNlKGUsMSksaShuKX19ZWxzZSBpZihwKHQpKXtsZXQgZT1uZXcgU2V0KHQpO3I/ZS5hZGQobik6ZS5kZWxldGUobiksaShlKX1lbHNlIGkoR2woZSxyKSl9KX0sbW91bnRlZDpCbCxiZWZvcmVVcGRhdGUoZSx0LG4pe2VbRmxdPU1sKG4pLEJsKGUsdCxuKX19O2Z1bmN0aW9uIEJsKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZS5fbW9kZWxWYWx1ZT10O2xldCBpO2lmKGQodCkpaT1nZSh0LHIucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYocCh0KSlpPXQuaGFzKHIucHJvcHMudmFsdWUpO2Vsc2V7aWYodD09PW4pcmV0dXJuO2k9aGUodCxHbChlLCEwKSl9ZS5jaGVja2VkIT09aSYmKGUuY2hlY2tlZD1pKX12YXIgVmw9e2NyZWF0ZWQoZSx7dmFsdWU6dH0sbil7ZS5jaGVja2VkPWhlKHQsbi5wcm9wcy52YWx1ZSksZVtGbF09TWwobiksJGMoZSxgY2hhbmdlYCwoKT0+e2VbRmxdKFdsKGUpKX0pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpufSxyKXtlW0ZsXT1NbChyKSx0IT09biYmKGUuY2hlY2tlZD1oZSh0LHIucHJvcHMudmFsdWUpKX19LEhsPXtkZWVwOiEwLGNyZWF0ZWQoZSx7dmFsdWU6dCxtb2RpZmllcnM6e251bWJlcjpufX0scil7ZS5fbW9kZWxWYWx1ZT10LCRjKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZS5vcHRpb25zLGU9PmUuc2VsZWN0ZWQpLm1hcChlPT5uP3JlKFdsKGUpKTpXbChlKSk7ZVtGbF0oZS5tdWx0aXBsZT9wKGUuX21vZGVsVmFsdWUpP25ldyBTZXQodCk6dDp0WzBdKSxlLl9hc3NpZ25pbmc9ITAsVm4oKCk9PntlLl9hc3NpZ25pbmc9ITF9KX0pLGVbRmxdPU1sKHIpfSxtb3VudGVkKGUse3ZhbHVlOnR9KXtVbChlLHQpfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dH0sbil7ZS5fbW9kZWxWYWx1ZT10LGVbRmxdPU1sKG4pfSx1cGRhdGVkKGUse3ZhbHVlOnR9KXtlLl9hc3NpZ25pbmd8fFVsKGUsdCl9fTtmdW5jdGlvbiBVbChlLHQpe2xldCBuPWUubXVsdGlwbGUscj1kKHQpO2lmKCEobiYmIXImJiFwKHQpKSl7Zm9yKGxldCBpPTAsYT1lLm9wdGlvbnMubGVuZ3RoO2k8YTtpKyspe2xldCBhPWUub3B0aW9uc1tpXSxvPVdsKGEpO2lmKG4pe2lmKHIpe2xldCBlPXR5cGVvZiBvO2Euc2VsZWN0ZWQ9ZT09PWBzdHJpbmdgfHxlPT09YG51bWJlcmA/dC5zb21lKGU9PlN0cmluZyhlKT09PVN0cmluZyhvKSk6Z2UodCxvKT4tMX1lbHNlIGEuc2VsZWN0ZWQ9dC5oYXMobyl9ZWxzZSBpZihoZShXbChhKSx0KSl7ZS5zZWxlY3RlZEluZGV4IT09aSYmKGUuc2VsZWN0ZWRJbmRleD1pKTtyZXR1cm59fSFuJiZlLnNlbGVjdGVkSW5kZXghPT0tMSYmKGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIFdsKGUpe3JldHVybmBfdmFsdWVgaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIEdsKGUsdCl7bGV0IG49dD9gX3RydWVWYWx1ZWA6YF9mYWxzZVZhbHVlYDtyZXR1cm4gbiBpbiBlP2Vbbl06dH12YXIgS2w9e2NyZWF0ZWQoZSx0LG4pe0psKGUsdCxuLG51bGwsYGNyZWF0ZWRgKX0sbW91bnRlZChlLHQsbil7SmwoZSx0LG4sbnVsbCxgbW91bnRlZGApfSxiZWZvcmVVcGRhdGUoZSx0LG4scil7SmwoZSx0LG4scixgYmVmb3JlVXBkYXRlYCl9LHVwZGF0ZWQoZSx0LG4scil7SmwoZSx0LG4scixgdXBkYXRlZGApfX07ZnVuY3Rpb24gcWwoZSx0KXtzd2l0Y2goZSl7Y2FzZWBTRUxFQ1RgOnJldHVybiBIbDtjYXNlYFRFWFRBUkVBYDpyZXR1cm4gUmw7ZGVmYXVsdDpzd2l0Y2godCl7Y2FzZWBjaGVja2JveGA6cmV0dXJuIHpsO2Nhc2VgcmFkaW9gOnJldHVybiBWbDtkZWZhdWx0OnJldHVybiBSbH19fWZ1bmN0aW9uIEpsKGUsdCxuLHIsaSl7bGV0IGE9cWwoZS50YWdOYW1lLG4ucHJvcHMmJm4ucHJvcHMudHlwZSlbaV07YSYmYShlLHQsbixyKX1mdW5jdGlvbiBZbCgpe1JsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0pPT4oe3ZhbHVlOmV9KSxWbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYodC5wcm9wcyYmaGUodC5wcm9wcy52YWx1ZSxlKSlyZXR1cm57Y2hlY2tlZDohMH19LHpsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0sdCk9PntpZihkKGUpKXtpZih0LnByb3BzJiZnZShlLHQucHJvcHMudmFsdWUpPi0xKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKHAoZSkpe2lmKHQucHJvcHMmJmUuaGFzKHQucHJvcHMudmFsdWUpKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGUpcmV0dXJue2NoZWNrZWQ6ITB9fSxLbC5nZXRTU1JQcm9wcz0oZSx0KT0+e2lmKHR5cGVvZiB0LnR5cGUhPWBzdHJpbmdgKXJldHVybjtsZXQgbj1xbCh0LnR5cGUudG9VcHBlckNhc2UoKSx0LnByb3BzJiZ0LnByb3BzLnR5cGUpO2lmKG4uZ2V0U1NSUHJvcHMpcmV0dXJuIG4uZ2V0U1NSUHJvcHMoZSx0KX19dmFyIFhsPVtgY3RybGAsYHNoaWZ0YCxgYWx0YCxgbWV0YWBdLFpsPXtzdG9wOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDplPT5lLnByZXZlbnREZWZhdWx0KCksc2VsZjplPT5lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldCxjdHJsOmU9PiFlLmN0cmxLZXksc2hpZnQ6ZT0+IWUuc2hpZnRLZXksYWx0OmU9PiFlLmFsdEtleSxtZXRhOmU9PiFlLm1ldGFLZXksbGVmdDplPT5gYnV0dG9uYGluIGUmJmUuYnV0dG9uIT09MCxtaWRkbGU6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTEscmlnaHQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTIsZXhhY3Q6KGUsdCk9PlhsLnNvbWUobj0+ZVtgJHtufUtleWBdJiYhdC5pbmNsdWRlcyhuKSl9LFFsPShlLHQpPT57aWYoIWUpcmV0dXJuIGU7bGV0IG49ZS5fd2l0aE1vZHN8fD17fSxyPXQuam9pbihgLmApO3JldHVybiBuW3JdfHwobltyXT0oKG4sLi4ucik9Pntmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9WmxbdFtlXV07aWYociYmcihuLHQpKXJldHVybn1yZXR1cm4gZShuLC4uLnIpfSkpfSwkbD17ZXNjOmBlc2NhcGVgLHNwYWNlOmAgYCx1cDpgYXJyb3ctdXBgLGxlZnQ6YGFycm93LWxlZnRgLHJpZ2h0OmBhcnJvdy1yaWdodGAsZG93bjpgYXJyb3ctZG93bmAsZGVsZXRlOmBiYWNrc3BhY2VgfSxldT0oZSx0KT0+e2xldCBuPWUuX3dpdGhLZXlzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KG49PntpZighKGBrZXlgaW4gbikpcmV0dXJuO2xldCByPWsobi5rZXkpO2lmKHQuc29tZShlPT5lPT09cnx8JGxbZV09PT1yKSlyZXR1cm4gZShuKX0pKX0sdHU9cyh7cGF0Y2hQcm9wOmRsfSxkYyksbnUscnU9ITE7ZnVuY3Rpb24gaXUoKXtyZXR1cm4gbnV8fD1Ebyh0dSl9ZnVuY3Rpb24gYXUoKXtyZXR1cm4gbnU9cnU/bnU6T28odHUpLHJ1PSEwLG51fXZhciBvdT0oKC4uLmUpPT57aXUoKS5yZW5kZXIoLi4uZSl9KSxzdT0oKC4uLmUpPT57YXUoKS5oeWRyYXRlKC4uLmUpfSksY3U9KCguLi5lKT0+e2xldCB0PWl1KCkuY3JlYXRlQXBwKC4uLmUpLHttb3VudDpufT10O3JldHVybiB0Lm1vdW50PWU9PntsZXQgcj1kdShlKTtpZighcilyZXR1cm47bGV0IGk9dC5fY29tcG9uZW50OyFnKGkpJiYhaS5yZW5kZXImJiFpLnRlbXBsYXRlJiYoaS50ZW1wbGF0ZT1yLmlubmVySFRNTCksci5ub2RlVHlwZT09PTEmJihyLnRleHRDb250ZW50PWBgKTtsZXQgYT1uKHIsITEsdXUocikpO3JldHVybiByIGluc3RhbmNlb2YgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKGB2LWNsb2FrYCksci5zZXRBdHRyaWJ1dGUoYGRhdGEtdi1hcHBgLGBgKSksYX0sdH0pLGx1PSgoLi4uZSk9PntsZXQgdD1hdSgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gdC5tb3VudD1lPT57bGV0IHQ9ZHUoZSk7aWYodClyZXR1cm4gbih0LCEwLHV1KHQpKX0sdH0pO2Z1bmN0aW9uIHV1KGUpe2lmKGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KXJldHVybmBzdmdgO2lmKHR5cGVvZiBNYXRoTUxFbGVtZW50PT1gZnVuY3Rpb25gJiZlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClyZXR1cm5gbWF0aG1sYH1mdW5jdGlvbiBkdShlKXtyZXR1cm4gXyhlKT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmV9dmFyIGZ1PSExLHB1PSgpPT57ZnV8fChmdT0hMCxZbCgpLExjKCkpfSxtdT10eXBlb2Ygd2luZG93PGB1YCxodSxndT1lPT5odT1lLF91PVN5bWJvbCgpO2Z1bmN0aW9uIHZ1KGUpe3JldHVybiBlJiZ0eXBlb2YgZT09YG9iamVjdGAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gJiZ0eXBlb2YgZS50b0pTT04hPWBmdW5jdGlvbmB9dmFyIHl1PXR5cGVvZiB3aW5kb3c9PWBvYmplY3RgJiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzp0eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjp0eXBlb2YgZ2xvYmFsPT1gb2JqZWN0YCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dHlwZW9mIGdsb2JhbFRoaXM9PWBvYmplY3RgP2dsb2JhbFRoaXM6e0hUTUxFbGVtZW50Om51bGx9O2Z1bmN0aW9uIGJ1KGUse2F1dG9Cb206dD0hMX09e30pe3JldHVybiB0JiYvXlxzKig/OnRleHRcL1xTKnxhcHBsaWNhdGlvblwveG1sfFxTKlwvXFMqXCt4bWwpXHMqOy4qY2hhcnNldFxzKj1ccyp1dGYtOC9pLnRlc3QoZS50eXBlKT9uZXcgQmxvYihbYO+7v2AsZV0se3R5cGU6ZS50eXBlfSk6ZX1mdW5jdGlvbiB4dShlLHQsbil7bGV0IHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3Iub3BlbihgR0VUYCxlKSxyLnJlc3BvbnNlVHlwZT1gYmxvYmAsci5vbmxvYWQ9ZnVuY3Rpb24oKXtFdShyLnJlc3BvbnNlLHQsbil9LHIub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoYGNvdWxkIG5vdCBkb3dubG9hZCBmaWxlYCl9LHIuc2VuZCgpfWZ1bmN0aW9uIFN1KGUpe2xldCB0PW5ldyBYTUxIdHRwUmVxdWVzdDt0Lm9wZW4oYEhFQURgLGUsITEpO3RyeXt0LnNlbmQoKX1jYXRjaHt9cmV0dXJuIHQuc3RhdHVzPj0yMDAmJnQuc3RhdHVzPD0yOTl9ZnVuY3Rpb24gQ3UoZSl7dHJ5e2UuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChgY2xpY2tgKSl9Y2F0Y2h7bGV0IHQ9bmV3IE1vdXNlRXZlbnQoYGNsaWNrYCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLHZpZXc6d2luZG93LGRldGFpbDowLHNjcmVlblg6ODAsc2NyZWVuWToyMCxjbGllbnRYOjgwLGNsaWVudFk6MjAsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0Om51bGx9KTtlLmRpc3BhdGNoRXZlbnQodCl9fXZhciB3dT10eXBlb2YgbmF2aWdhdG9yPT1gb2JqZWN0YD9uYXZpZ2F0b3I6e3VzZXJBZ2VudDpgYH0sVHU9L01hY2ludG9zaC8udGVzdCh3dS51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3Qod3UudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3Qod3UudXNlckFnZW50KSxFdT1tdT90eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQ8YHVgJiZgZG93bmxvYWRgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhVHU/RHU6YG1zU2F2ZU9yT3BlbkJsb2JgaW4gd3U/T3U6a3U6KCk9Pnt9O2Z1bmN0aW9uIER1KGUsdD1gZG93bmxvYWRgLG4pe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyLmRvd25sb2FkPXQsci5yZWw9YG5vb3BlbmVyYCx0eXBlb2YgZT09YHN0cmluZ2A/KHIuaHJlZj1lLHIub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP0N1KHIpOlN1KHIuaHJlZik/eHUoZSx0LG4pOihyLnRhcmdldD1gX2JsYW5rYCxDdShyKSkpOihyLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChyLmhyZWYpfSw0ZTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDdShyKX0sMCkpfWZ1bmN0aW9uIE91KGUsdD1gZG93bmxvYWRgLG4pe2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoU3UoZSkpeHUoZSx0LG4pO2Vsc2V7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3QuaHJlZj1lLHQudGFyZ2V0PWBfYmxhbmtgLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDdSh0KX0pfX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJ1KGUsbiksdCl9ZnVuY3Rpb24ga3UoZSx0LG4scil7aWYocnx8PW9wZW4oYGAsYF9ibGFua2ApLHImJihyLmRvY3VtZW50LnRpdGxlPXIuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9YGRvd25sb2FkaW5nLi4uYCksdHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiB4dShlLHQsbik7bGV0IGk9ZS50eXBlPT09YGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAsYT0vY29uc3RydWN0b3IvaS50ZXN0KFN0cmluZyh5dS5IVE1MRWxlbWVudCkpfHxgc2FmYXJpYGluIHl1LG89L0NyaU9TXC9bXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigob3x8aSYmYXx8VHUpJiZ0eXBlb2YgRmlsZVJlYWRlcjxgdWApe2xldCB0PW5ldyBGaWxlUmVhZGVyO3Qub25sb2FkZW5kPWZ1bmN0aW9uKCl7bGV0IGU9dC5yZXN1bHQ7aWYodHlwZW9mIGUhPWBzdHJpbmdgKXRocm93IHI9bnVsbCxFcnJvcihgV3JvbmcgcmVhZGVyLnJlc3VsdCB0eXBlYCk7ZT1vP2U6ZS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLGBkYXRhOmF0dGFjaG1lbnQvZmlsZTtgKSxyP3IubG9jYXRpb24uaHJlZj1lOmxvY2F0aW9uLmFzc2lnbihlKSxyPW51bGx9LHQucmVhZEFzRGF0YVVSTChlKX1lbHNle2xldCB0PVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cj9yLmxvY2F0aW9uLmFzc2lnbih0KTpsb2NhdGlvbi5ocmVmPXQscj1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHQpfSw0ZTQpfX12YXJ7YXNzaWduOkF1fT1PYmplY3Q7ZnVuY3Rpb24ganUoKXtsZXQgZT1DZSghMCksdD1lLnJ1bigoKT0+WHQoe30pKSxuPVtdLHI9W10saT1xdCh7aW5zdGFsbChlKXtndShpKSxpLl9hPWUsZS5wcm92aWRlKF91LGkpLGUuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJHBpbmlhPWksci5mb3JFYWNoKGU9Pm4ucHVzaChlKSkscj1bXX0sdXNlKGUpe3JldHVybiB0aGlzLl9hP24ucHVzaChlKTpyLnB1c2goZSksdGhpc30sX3A6bixfYTpudWxsLF9lOmUsX3M6bmV3IE1hcCxzdGF0ZTp0fSk7cmV0dXJuIGl9dmFyIE11PSgpPT57fTtmdW5jdGlvbiBOdShlLHQsbixyPU11KXtlLmFkZCh0KTtsZXQgaT0oKT0+e2UuZGVsZXRlKHQpJiZyKCl9O3JldHVybiFuJiZ3ZSgpJiZUZShpKSxpfWZ1bmN0aW9uIFB1KGUsLi4udCl7ZS5mb3JFYWNoKGU9PntlKC4uLnQpfSl9dmFyIEZ1PWU9PmUoKSxJdT1TeW1ib2woKSxMdT1TeW1ib2woKTtmdW5jdGlvbiBSdShlLHQpe2UgaW5zdGFuY2VvZiBNYXAmJnQgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKCh0LG4pPT5lLnNldChuLHQpKTplIGluc3RhbmNlb2YgU2V0JiZ0IGluc3RhbmNlb2YgU2V0JiZ0LmZvckVhY2goZS5hZGQsZSk7Zm9yKGxldCBuIGluIHQpe2lmKCFPYmplY3QuaGFzT3duKHQsbikpY29udGludWU7bGV0IHI9dFtuXSxpPWVbbl07ZVtuXT12dShpKSYmdnUocikmJk9iamVjdC5oYXNPd24oZSxuKSYmIUgocikmJiFVdChyKT9SdShpLHIpOnJ9cmV0dXJuIGV9dmFyIHp1PVN5bWJvbCgpO2Z1bmN0aW9uIEJ1KGUpe3JldHVybiFlfHx0eXBlb2YgZSE9YG9iamVjdGB8fCFPYmplY3QuaGFzT3duKGUsenUpfXZhcnthc3NpZ246VnV9PU9iamVjdDtmdW5jdGlvbiBIdShlKXtyZXR1cm4hIShIKGUpJiZlLmVmZmVjdCl9ZnVuY3Rpb24gVXUoZSx0LG4scil7bGV0e3N0YXRlOmksYWN0aW9uczphLGdldHRlcnM6b309dCxzPW4uc3RhdGUudmFsdWVbZV0sYztmdW5jdGlvbiBsKCl7cmV0dXJuIHN8fChuLnN0YXRlLnZhbHVlW2VdPWk/aSgpOnt9KSxWdShjbihuLnN0YXRlLnZhbHVlW2VdKSxhLE9iamVjdC5rZXlzKG98fHt9KS5yZWR1Y2UoKHQscik9Pih0W3JdPXF0KHFzKCgpPT57Z3Uobik7bGV0IHQ9bi5fcy5nZXQoZSk7cmV0dXJuIG9bcl0uY2FsbCh0LHQpfSkpLHQpLHt9KSl9cmV0dXJuIGM9V3UoZSxsLHQsbixyLCEwKSxjfWZ1bmN0aW9uIFd1KGUsdCxuPXt9LHIsaSxhKXtsZXQgbyxzPVZ1KHthY3Rpb25zOnt9fSxuKSxjPXtkZWVwOiEwfSxsLHUsZD1uZXcgU2V0LGY9bmV3IFNldCxwLG09ci5zdGF0ZS52YWx1ZVtlXTshYSYmIW0mJihyLnN0YXRlLnZhbHVlW2VdPXt9KTtsZXQgaDtmdW5jdGlvbiBnKHQpe2xldCBuO2w9dT0hMSx0eXBlb2YgdD09YGZ1bmN0aW9uYD8odChyLnN0YXRlLnZhbHVlW2VdKSxuPXt0eXBlOmBwYXRjaCBmdW5jdGlvbmAsc3RvcmVJZDplLGV2ZW50czpwfSk6KFJ1KHIuc3RhdGUudmFsdWVbZV0sdCksbj17dHlwZTpgcGF0Y2ggb2JqZWN0YCxwYXlsb2FkOnQsc3RvcmVJZDplLGV2ZW50czpwfSk7bGV0IGk9aD1TeW1ib2woKTtWbigpLnRoZW4oKCk9PntoPT09aSYmKGw9ITApfSksdT0hMCxQdShkLG4sci5zdGF0ZS52YWx1ZVtlXSl9bGV0IF89YT9mdW5jdGlvbigpe2xldHtzdGF0ZTplfT1uLHQ9ZT9lKCk6e307dGhpcy4kcGF0Y2goZT0+e1Z1KGUsdCl9KX06TXU7ZnVuY3Rpb24gdigpe28uc3RvcCgpLGQuY2xlYXIoKSxmLmNsZWFyKCksci5fcy5kZWxldGUoZSl9bGV0IHk9KHQsbj1gYCk9PntpZihJdSBpbiB0KXJldHVybiB0W0x1XT1uLHQ7bGV0IGk9ZnVuY3Rpb24oKXtndShyKTtsZXQgbj1BcnJheS5mcm9tKGFyZ3VtZW50cyksYT1uZXcgU2V0LG89bmV3IFNldDtmdW5jdGlvbiBzKGUpe2EuYWRkKGUpfWZ1bmN0aW9uIGMoZSl7by5hZGQoZSl9UHUoZix7YXJnczpuLG5hbWU6aVtMdV0sc3RvcmU6YixhZnRlcjpzLG9uRXJyb3I6Y30pO2xldCBsO3RyeXtsPXQuYXBwbHkodGhpcyYmdGhpcy4kaWQ9PT1lP3RoaXM6YixuKX1jYXRjaChlKXt0aHJvdyBQdShvLGUpLGV9cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihlPT4oUHUoYSxlKSxlKSkuY2F0Y2goZT0+KFB1KG8sZSksUHJvbWlzZS5yZWplY3QoZSkpKTooUHUoYSxsKSxsKX07cmV0dXJuIGlbSXVdPSEwLGlbTHVdPW4saX0sYj1SdCh7X3A6ciwkaWQ6ZSwkb25BY3Rpb246TnUuYmluZChudWxsLGYpLCRwYXRjaDpnLCRyZXNldDpfLCRzdWJzY3JpYmUodCxuPXt9KXtpZihkLmhhcyh0KSlyZXR1cm4gTXU7bGV0IGk9TnUoZCx0LG4uZGV0YWNoZWQsKCk9PmEoKSksYT1vLnJ1bigoKT0+aHIoKCk9PnIuc3RhdGUudmFsdWVbZV0scj0+eyhuLmZsdXNoPT09YHN5bmNgP3U6bCkmJnQoe3N0b3JlSWQ6ZSx0eXBlOmBkaXJlY3RgLGV2ZW50czpwfSxyKX0sVnUoe30sYyxuKSkpO3JldHVybiBpfSwkZGlzcG9zZTp2fSk7ci5fcy5zZXQoZSxiKTtsZXQgeD0oci5fYSYmci5fYS5ydW5XaXRoQ29udGV4dHx8RnUpKCgpPT5yLl9lLnJ1bigoKT0+KG89Q2UoKSkucnVuKCgpPT50KHthY3Rpb246eX0pKSkpO2ZvcihsZXQgdCBpbiB4KXtsZXQgbj14W3RdO0gobikmJiFIdShuKXx8VXQobik/YXx8KG0mJkJ1KG4pJiYoSChuKT9uLnZhbHVlPW1bdF06KChuIGluc3RhbmNlb2YgU2V0fHxuIGluc3RhbmNlb2YgTWFwKSYmbi5jbGVhcigpLFJ1KG4sbVt0XSkpKSxyLnN0YXRlLnZhbHVlW2VdW3RdPW4pOnR5cGVvZiBuPT1gZnVuY3Rpb25gJiYoeFt0XT15KG4sdCkscy5hY3Rpb25zW3RdPW4pfXJldHVybiBWdShiLHgpLFZ1KFYoYikseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIiRzdGF0ZSIse2dldDooKT0+ci5zdGF0ZS52YWx1ZVtlXSxzZXQ6ZT0+e2codD0+e1Z1KHQsZSl9KX19KSxyLl9wLmZvckVhY2goZT0+e2xldCB0PW8ucnVuKCgpPT5lKHtzdG9yZTpiLGFwcDpyLl9hLHBpbmlhOnIsb3B0aW9uczpzfSkpO1Z1KGIsdCl9KSxtJiZhJiZuLmh5ZHJhdGUmJm4uaHlkcmF0ZShiLiRzdGF0ZSxtKSxsPSEwLHU9ITAsYn1mdW5jdGlvbiBHdShlLHQsbil7bGV0IHIsaT10eXBlb2YgdD09YGZ1bmN0aW9uYDtyPWk/bjp0O2Z1bmN0aW9uIGEobixhKXtsZXQgbz1scigpO3JldHVybiBufHw9bz9jcihfdSxudWxsKTpudWxsLG4mJmd1KG4pLG49aHUsbi5fcy5oYXMoZSl8fChpP1d1KGUsdCxyLG4pOlV1KGUscixuKSksbi5fcy5nZXQoZSl9cmV0dXJuIGEuJGlkPWUsYX1mdW5jdGlvbiBLdShlKXtsZXQgdD1WKGUpLG49e307Zm9yKGxldCByIGluIHQpe2xldCBpPXRbcl07aT8uZWZmZWN0P25bcl09cXMoe2dldDooKT0+ZVtyXSxzZXQodCl7ZVtyXT10fX0pOihIKGkpfHxVdChpKSkmJihuW3JdPWRuKGUscikpfXJldHVybiBufXZhciBxdT17cHJlZml4OmBmYXNgLGljb25OYW1lOmBtYWduaWZ5aW5nLWdsYXNzYCxpY29uOls1MTIsNTEyLFsxMjgyNjksYHNlYXJjaGBdLGBmMDAyYCxgTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6YF19LEp1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGtleWAsaWNvbjpbNTEyLDUxMixbMTI4MjczXSxgZjA4NGAsYE0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwemBdfSxZdT17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0LXVwYCxpY29uOlszODQsNTEyLFtgc29ydC1hc2NgXSxgZjBkZWAsYE0zMiAyMjRjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTc4LjUgOS40IDE2OS40bDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzNjQuOSAyMjQgMzUyIDIyNEwzMiAyMjR6YF19LFh1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGV5ZWAsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSxgZjA2ZWAsYE0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6YF19LFp1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoZXZyb24tdXBgLGljb246WzQ0OCw1MTIsW10sYGYwNzdgLGBNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnpgXX0sUXU9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1yaWdodGAsaWNvbjpbMzIwLDUxMixbOTAwMl0sYGYwNTRgLGBNMzExLjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0My4yIDI1NiA3My45IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MnpgXX0sJHU9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgdXNlcnNgLGljb246WzY0MCw1MTIsW10sYGYwYzBgLGBNMzIwIDE2YTEwNCAxMDQgMCAxIDEgMCAyMDggMTA0IDEwNCAwIDEgMSAwLTIwOHpNOTYgODhhNzIgNzIgMCAxIDEgMCAxNDQgNzIgNzIgMCAxIDEgMC0xNDR6TTAgNDE2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDEyLjggMCAyNS4yIDEuOSAzNi45IDUuNC0zMi45IDM2LjgtNTIuOSA4NS40LTUyLjkgMTM4LjZsMCAxNmMwIDExLjQgMi40IDIyLjIgNi43IDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMnptNTIxLjMgNjRjNC4zLTkuOCA2LjctMjAuNiA2LjctMzJsMC0xNmMwLTUzLjItMjAtMTAxLjgtNTIuOS0xMzguNiAxMS43LTMuNSAyNC4xLTUuNCAzNi45LTUuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC04Ni43IDB6TTQ3MiAxNjBhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwek0xNjAgNDMyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6YF19LGVkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGhlYXJ0LXB1bHNlYCxpY29uOls1MTIsNTEyLFtgaGVhcnRiZWF0YF0sYGYyMWVgLGBNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4emBdfSx0ZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUteG1hcmtgLGljb246WzUxMiw1MTIsWzYxNTMyLGB0aW1lcy1jaXJjbGVgLGB4bWFyay1jaXJjbGVgXSxgZjA1N2AsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpgXX0sbmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFtgZXhjbGFtYXRpb24tY2lyY2xlYF0sYGYwNmFgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtMTkyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNiAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3pgXX0scmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hlY2tgLGljb246WzQ0OCw1MTIsWzEwMDAzLDEwMDA0XSxgZjAwY2AsYE00MzQuOCA3MC4xYzE0LjMgMTAuNCAxNy41IDMwLjQgNy4xIDQ0LjdsLTI1NiAzNTJjLTUuNSA3LjYtMTQgMTIuMy0yMy40IDEzLjFzLTE4LjUtMi43LTI1LjEtOS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDEwMS41IDEwMS41IDIzNC0zMjEuN2MxMC40LTE0LjMgMzAuNC0xNy41IDQ0LjctNy4xemBdfSxpZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBob3VzZWAsaWNvbjpbNTEyLDUxMixbMTI3OTY4LDYzNDk4LDYzNTAwLGBob21lYCxgaG9tZS1hbHRgLGBob21lLWxnLWFsdGBdLGBmMDE1YCxgTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6YF19LGFkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNsaWRlcnNgLGljb246WzUxMiw1MTIsW2BzbGlkZXJzLWhgXSxgZjFkZWAsYE0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0emBdfSxvZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0YCxpY29uOlszODQsNTEyLFtgdW5zb3J0ZWRgXSxgZjBkY2AsYE0yLjQgMjA0LjJjNSAxMiAxNi42IDE5LjggMjkuNiAxOS44bDMyMCAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXptMCAxMDMuNWMtNSAxMi0yLjIgMjUuNyA2LjkgMzQuOWwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44emBdfSxzZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmB4bWFya2AsaWNvbjpbMzg0LDUxMixbMTI4NDczLDEwMDA1LDEwMDA2LDEwMDYwLDIxNSxgY2xvc2VgLGBtdWx0aXBseWAsYHJlbW92ZWAsYHRpbWVzYF0sYGYwMGRgLGBNNTUuMSA3My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wxNDcuMiAyNTYgOS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5Mi41IDMwMS4zIDMyOS45IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjM3LjggMjU2IDM3NS4xIDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5Mi41IDIxMC43IDU1LjEgNzMuNHpgXX0sY2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLWNoZWNrYCxpY29uOls1MTIsNTEyLFs2MTUzMyxgY2hlY2stY2lyY2xlYF0sYGYwNThgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6TTM3NCAxNDUuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMjIxLjEgMzE1LjIgMTY5IDI2My4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS44IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzc5LjMgMTc5LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6YF19LGxkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGN1YmVzYCxpY29uOls1MTIsNTEyLFtdLGBmMWIzYCxgTTI4NC0xLjNjLTE3LjMtMTAtMzguNy0xMC01NiAwTDE0My44IDQ3LjNjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgMTAxLjktODguMyA1MWMtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCA5Ny4zYzAgMjAgMTAuNyAzOC41IDI4IDQ4LjVsODQuMyA0OC42YzE3LjMgMTAgMzguNyAxMCA1NiAwbDg4LjMtNTEgODguMyA1MWMxNy4zIDEwIDM4LjcgMTAgNTYgMEw0ODQuNSA0NDNjMTcuMy0xMCAyOC0yOC41IDI4LTQ4LjVsMC05Ny4zYzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVsLTg4LjMtNTEgMC0xMDEuOWMwLTIwLTEwLjctMzguNS0yOC00OC41TDI4NC0xLjN6TTIzMiAyOTIuNmwwIDEwNi41LTg4LjMgNTFjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTIuMy01My4zem0yMzEuNCAuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNGwwIDk3LjNjMCAyLjktMS41IDUuNS00IDYuOWwtODQuMyA0OC42Yy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkxLjItNTIuNnpNMzQ4LjMgOTUuOGwwIDEwMS45LTkyLjMgNTMuMyAwLTEwNi41IDkxLjItNTIuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNHpgXX0sdWQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1kb3duYCxpY29uOls0NDgsNTEyLFtdLGBmMDc4YCxgTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6YF19LGRkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHBsdWdgLGljb246WzQ0OCw1MTIsWzEyODI2OF0sYGYxZTZgLGBNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDY0YzAgOTUuMS02OS4yIDE3NC4xLTE2MCAxODkuM2wwIDY2LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzEwMS4yIDM5OC4xIDMyIDMxOS4xIDMyIDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpgXX0sZmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgaW5ib3hgLGljb246WzUxMiw1MTIsW10sYGYwMWNgLGBNOTEuOCAzMkM1OS45IDMyIDMyLjkgNTUuNCAyOC40IDg2LjlMLjYgMjgxLjJjLS40IDMtLjYgNi0uNiA5LjFMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMjUuN2MwLTMtLjItNi4xLS42LTkuMUw0ODMuNiA4Ni45QzQ3OS4xIDU1LjQgNDUyLjEgMzIgNDIwLjIgMzJMOTEuOCAzMnptMCA2NGwzMjguNSAwIDI3LjQgMTkyLTU5LjkgMGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtMTQuMyAyOC42Yy01LjQgMTAuOC0xNi41IDE3LjctMjguNiAxNy43bC0xMjAuNCAwYy0xMi4xIDAtMjMuMi02LjgtMjguNi0xNy43bC0xNC4zLTI4LjZjLTUuNC0xMC44LTE2LjUtMTcuNy0yOC42LTE3LjdMNjQuMyAyODggOTEuOCA5NnpgXX0scGQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgZmlsZS1jc3ZgLGljb246WzU3Niw1MTIsW10sYGY2ZGRgLGBNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI2NCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLThjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwxNiAwYzIuMiAwIDQgMS44IDQgNGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0xMzYgMGMtMjguNyAwLTUyIDIzLjMtNTIgNTJzMjMuMyA1MiA1MiA1MmM2LjYgMCAxMiA1LjQgMTIgMTJzLTUuNCAxMi0xMiAxMmwtMzIgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MnMtMjMuMy01Mi01Mi01MmMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwyNCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMjQgMHptOTYgMGMtMTEgMC0yMCA5LTIwIDIwbDAgMzEuNmMwIDM1LjUgMTAuNSA3MC4zIDMwLjIgOTkuOGw1LjEgNy43YzMuNyA1LjYgMTAgOC45IDE2LjYgOC45czEyLjktMy4zIDE2LjYtOC45bDUuMS03LjdjMTkuNy0yOS42IDMwLjItNjQuMyAzMC4yLTk5LjhsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDMxLjZjMCAxOS42LTQuMSAzOC45LTEyIDU2LjctNy45LTE3LjgtMTItMzcuMS0xMi01Ni43bDAtMzEuNmMwLTExLTktMjAtMjAtMjB6YF19LG1kPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHRyaWFuZ2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFs5ODg4LGBleGNsYW1hdGlvbi10cmlhbmdsZWAsYHdhcm5pbmdgXSxgZjA3MWAsYE0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxoZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBhcnJvdy1yaWdodC1hcnJvdy1sZWZ0YCxpY29uOls1MTIsNTEyLFs4NjQ0LGBleGNoYW5nZWBdLGBmMGVjYCxgTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwemBdfSxnZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBhcnJvdy1sZWZ0YCxpY29uOls1MTIsNTEyLFs4NTkyXSxgZjA2MGAsYE05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyODggNDgwIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzcwLjcgMCAxMDUuNC0xMDUuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHpgXX0sX2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY29weWAsaWNvbjpbNDQ4LDUxMixbXSxgZjBjNWAsYE0xOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMDAuNmMwLTE3LjQtNy4xLTM0LjEtMTkuNy00Ni4yTDM3MC42IDE3LjhDMzU4LjcgNi40IDM0Mi44IDAgMzI2LjMgMEwxOTIgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTY0IDAgMCAxNi0xOTIgMCAwLTI1NiAxNiAwIDAtNjQtMTYgMHpgXX0sdmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgYXJyb3ctcm90YXRlLXJpZ2h0YCxpY29uOls1MTIsNTEyLFs4NjM1LGBhcnJvdy1yaWdodC1yb3RhdGVgLGBhcnJvdy1yb3RhdGUtZm9yd2FyZGAsYHJlZG9gXSxgZjAxZWAsYE00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3pgXX0seWQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgZXllLXNsYXNoYCxpY29uOls1NzYsNTEyLFtdLGBmMDcwYCxgTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6YF19LGJkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGFycm93LXVwLXJpZ2h0LWZyb20tc3F1YXJlYCxpY29uOls1MTIsNTEyLFtgZXh0ZXJuYWwtbGlua2BdLGBmMDhlYCxgTTMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDgyLjcgMC0yMDEuNCAyMDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0NDggMTA5LjMgNDQ4IDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyMCAwek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZMMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNkw4MCA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsODAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA5NnpgXX0seGQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY29pbnNgLGljb246WzUxMiw1MTIsW10sYGY1MWVgLGBNMTI4IDk2bDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODBsMCAxNmMwIDMwLjYtNDEuMyA1Ny4yLTEwMiA3MC43LTIuNC0yLjgtNC45LTUuNS03LjQtOC0xNS41LTE1LjMtMzUuNS0yNi45LTU2LjQtMzUuNS00MS45LTE3LjUtOTYuNS0yNy4xLTE1NC4yLTI3LjEtMjEuOSAwLTQzLjMgMS40LTYzLjggNC4xLS4yLTEuMy0uMi0yLjctLjItNC4xek00MzIgMzUzbDAtNDYuMmMxNS4xLTMuOSAyOS4zLTguNSA0Mi4yLTEzLjkgMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXptMC05NmwwLTMzYzAtNC41LS40LTguOC0xLTEzIDE1LjUtMy45IDMwLTguNiA0My4yLTE0LjJzMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXpNMCAyNDBsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwczE5MiAzNS44IDE5MiA4MGwwIDE2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAyODQuMiAwIDI0MHptMzg0IDk2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAzODAuMiAwIDMzNmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjR6bTAgODAuNmwwIDE1LjRjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDQ3Ni4yIDAgNDMybDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zemBdfSxTZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtaW5mb2AsaWNvbjpbNTEyLDUxMixbYGluZm8tY2lyY2xlYF0sYGYwNWFgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjQtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpgXX0sQ2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC1kb3duYCxpY29uOlszODQsNTEyLFtgc29ydC1kZXNjYF0sYGYwZGRgLGBNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4emBdfTtmdW5jdGlvbiB3ZChlKXt2YXIgdCxuLHI9YGA7aWYodHlwZW9mIGU9PWBzdHJpbmdgfHx0eXBlb2YgZT09YG51bWJlcmApcis9ZTtlbHNlIGlmKHR5cGVvZiBlPT1gb2JqZWN0YCl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKWVbdF0mJihuPXdkKGVbdF0pKSYmKHImJihyKz1gIGApLHIrPW4pfWVsc2UgZm9yKG4gaW4gZSllW25dJiYociYmKHIrPWAgYCkscis9bil9cmV0dXJuIHJ9ZnVuY3Rpb24gVGQoKXtmb3IodmFyIGUsdCxuPTAscj1gYCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKykoZT1hcmd1bWVudHNbbl0pJiYodD13ZChlKSkmJihyJiYocis9YCBgKSxyKz10KTtyZXR1cm4gcn12YXIgRWQ9ZT0+dHlwZW9mIGU9PWBib29sZWFuYD9gJHtlfWA6ZT09PTA/YDBgOmUsRGQ9VGQsT2Q9KGUsdCk9Pm49PntpZih0Py52YXJpYW50cz09bnVsbClyZXR1cm4gRGQoZSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpO2xldHt2YXJpYW50czpyLGRlZmF1bHRWYXJpYW50czppfT10LGE9T2JqZWN0LmtleXMocikubWFwKGU9PntsZXQgdD1uPy5bZV0sYT1pPy5bZV07aWYodD09PW51bGwpcmV0dXJuIG51bGw7bGV0IG89RWQodCl8fEVkKGEpO3JldHVybiByW2VdW29dfSksbz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiByPT09dm9pZCAwfHwoZVtuXT1yKSxlfSx7fSk7cmV0dXJuIERkKGUsYSx0Py5jb21wb3VuZFZhcmlhbnRzPy5yZWR1Y2UoKGUsdCk9PntsZXR7Y2xhc3M6bixjbGFzc05hbWU6ciwuLi5hfT10O3JldHVybiBPYmplY3QuZW50cmllcyhhKS5ldmVyeShlPT57bGV0W3Qsbl09ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHsuLi5pLC4uLm99W3RdKTp7Li4uaSwuLi5vfVt0XT09PW59KT9bLi4uZSxuLHJdOmV9LFtdKSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpfSxrZD0oZSx0KT0+e2xldCBuPUFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbltlLmxlbmd0aCtyXT10W3JdO3JldHVybiBufSxBZD0oZSx0KT0+KHtjbGFzc0dyb3VwSWQ6ZSx2YWxpZGF0b3I6dH0pLGpkPShlPW5ldyBNYXAsdD1udWxsLG4pPT4oe25leHRQYXJ0OmUsdmFsaWRhdG9yczp0LGNsYXNzR3JvdXBJZDpufSksTWQ9YC1gLE5kPVtdLFBkPWBhcmJpdHJhcnkuLmAsRmQ9ZT0+e2xldCB0PVJkKGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnJ9PWU7cmV0dXJue2dldENsYXNzR3JvdXBJZDplPT57aWYoZS5zdGFydHNXaXRoKGBbYCkmJmUuZW5kc1dpdGgoYF1gKSlyZXR1cm4gTGQoZSk7bGV0IG49ZS5zcGxpdChNZCk7cmV0dXJuIElkKG4sKyhuWzBdPT09YGAmJm4ubGVuZ3RoPjEpLHQpfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGUsdCk9PntpZih0KXtsZXQgdD1yW2VdLGk9bltlXTtyZXR1cm4gdD9pP2tkKGksdCk6dDppfHxOZH1yZXR1cm4gbltlXXx8TmR9fX0sSWQ9KGUsdCxuKT0+e2lmKGUubGVuZ3RoLXQ9PT0wKXJldHVybiBuLmNsYXNzR3JvdXBJZDtsZXQgcj1lW3RdLGk9bi5uZXh0UGFydC5nZXQocik7aWYoaSl7bGV0IG49SWQoZSx0KzEsaSk7aWYobilyZXR1cm4gbn1sZXQgYT1uLnZhbGlkYXRvcnM7aWYoYT09PW51bGwpcmV0dXJuO2xldCBvPXQ9PT0wP2Uuam9pbihNZCk6ZS5zbGljZSh0KS5qb2luKE1kKSxzPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cztlKyspe2xldCB0PWFbZV07aWYodC52YWxpZGF0b3IobykpcmV0dXJuIHQuY2xhc3NHcm91cElkfX0sTGQ9ZT0+ZS5zbGljZSgxLC0xKS5pbmRleE9mKGA6YCk9PT0tMT92b2lkIDA6KCgpPT57bGV0IHQ9ZS5zbGljZSgxLC0xKSxuPXQuaW5kZXhPZihgOmApLHI9dC5zbGljZSgwLG4pO3JldHVybiByP1BkK3I6dm9pZCAwfSkoKSxSZD1lPT57bGV0e3RoZW1lOnQsY2xhc3NHcm91cHM6bn09ZTtyZXR1cm4gemQobix0KX0semQ9KGUsdCk9PntsZXQgbj1qZCgpO2ZvcihsZXQgciBpbiBlKXtsZXQgaT1lW3JdO0JkKGksbixyLHQpfXJldHVybiBufSxCZD0oZSx0LG4scik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgaT1lW2FdO1ZkKGksdCxuLHIpfX0sVmQ9KGUsdCxuLHIpPT57aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtIZChlLHQsbik7cmV0dXJufWlmKHR5cGVvZiBlPT1gZnVuY3Rpb25gKXtVZChlLHQsbixyKTtyZXR1cm59V2QoZSx0LG4scil9LEhkPShlLHQsbik9PntsZXQgcj1lPT09YGA/dDpHZCh0LGUpO3IuY2xhc3NHcm91cElkPW59LFVkPShlLHQsbixyKT0+e2lmKEtkKGUpKXtCZChlKHIpLHQsbixyKTtyZXR1cm59dC52YWxpZGF0b3JzPT09bnVsbCYmKHQudmFsaWRhdG9ycz1bXSksdC52YWxpZGF0b3JzLnB1c2goQWQobixlKSl9LFdkPShlLHQsbixyKT0+e2xldCBpPU9iamVjdC5lbnRyaWVzKGUpLGE9aS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7bGV0W2Esb109aVtlXTtCZChvLEdkKHQsYSksbixyKX19LEdkPShlLHQpPT57bGV0IG49ZSxyPXQuc3BsaXQoTWQpLGk9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bGV0IHQ9cltlXSxpPW4ubmV4dFBhcnQuZ2V0KHQpO2l8fChpPWpkKCksbi5uZXh0UGFydC5zZXQodCxpKSksbj1pfXJldHVybiBufSxLZD1lPT5gaXNUaGVtZUdldHRlcmBpbiBlJiZlLmlzVGhlbWVHZXR0ZXI9PT0hMCxxZD1lPT57aWYoZTwxKXJldHVybntnZXQ6KCk9PnZvaWQgMCxzZXQ6KCk9Pnt9fTtsZXQgdD0wLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksaT0oaSxhKT0+e25baV09YSx0KyssdD5lJiYodD0wLHI9bixuPU9iamVjdC5jcmVhdGUobnVsbCkpfTtyZXR1cm57Z2V0KGUpe2xldCB0PW5bZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdDtpZigodD1yW2VdKSE9PXZvaWQgMClyZXR1cm4gaShlLHQpLHR9LHNldChlLHQpe2UgaW4gbj9uW2VdPXQ6aShlLHQpfX19LEpkPWAhYCxZZD1gOmAsWGQ9W10sWmQ9KGUsdCxuLHIsaSk9Pih7bW9kaWZpZXJzOmUsaGFzSW1wb3J0YW50TW9kaWZpZXI6dCxiYXNlQ2xhc3NOYW1lOm4sbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpyLGlzRXh0ZXJuYWw6aX0pLFFkPWU9PntsZXR7cHJlZml4OnQsZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6bn09ZSxyPWU9PntsZXQgdD1bXSxuPTAscj0wLGk9MCxhLG89ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IG89ZVtzXTtpZihuPT09MCYmcj09PTApe2lmKG89PT1ZZCl7dC5wdXNoKGUuc2xpY2UoaSxzKSksaT1zKzE7Y29udGludWV9aWYobz09PWAvYCl7YT1zO2NvbnRpbnVlfX1vPT09YFtgP24rKzpvPT09YF1gP24tLTpvPT09YChgP3IrKzpvPT09YClgJiZyLS19bGV0IHM9dC5sZW5ndGg9PT0wP2U6ZS5zbGljZShpKSxjPXMsbD0hMTtzLmVuZHNXaXRoKEpkKT8oYz1zLnNsaWNlKDAsLTEpLGw9ITApOnMuc3RhcnRzV2l0aChKZCkmJihjPXMuc2xpY2UoMSksbD0hMCk7bGV0IHU9YSYmYT5pP2EtaTp2b2lkIDA7cmV0dXJuIFpkKHQsbCxjLHUpfTtpZih0KXtsZXQgZT10K1lkLG49cjtyPXQ9PnQuc3RhcnRzV2l0aChlKT9uKHQuc2xpY2UoZS5sZW5ndGgpKTpaZChYZCwhMSx0LHZvaWQgMCwhMCl9aWYobil7bGV0IGU9cjtyPXQ9Pm4oe2NsYXNzTmFtZTp0LHBhcnNlQ2xhc3NOYW1lOmV9KX1yZXR1cm4gcn0sJGQ9ZT0+e2xldCB0PW5ldyBNYXA7cmV0dXJuIGUub3JkZXJTZW5zaXRpdmVNb2RpZmllcnMuZm9yRWFjaCgoZSxuKT0+e3Quc2V0KGUsMWU2K24pfSksZT0+e2xldCBuPVtdLHI9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV0sbz1hWzBdPT09YFtgLHM9dC5oYXMoYSk7b3x8cz8oci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSxyPVtdKSxuLnB1c2goYSkpOnIucHVzaChhKX1yZXR1cm4gci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSksbn19LGVmPWU9Pih7Y2FjaGU6cWQoZS5jYWNoZVNpemUpLHBhcnNlQ2xhc3NOYW1lOlFkKGUpLHNvcnRNb2RpZmllcnM6JGQoZSkscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6dGYoZSksLi4uRmQoZSl9KSx0Zj1lPT57bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKG4pZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdFtuW2VdXT0hMDtyZXR1cm4gdH0sbmY9L1xzKy8scmY9KGUsdCk9PntsZXR7cGFyc2VDbGFzc05hbWU6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aSxzb3J0TW9kaWZpZXJzOmEscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6b309dCxzPVtdLGM9ZS50cmltKCkuc3BsaXQobmYpLGw9YGA7Zm9yKGxldCBlPWMubGVuZ3RoLTE7ZT49MDstLWUpe2xldCB0PWNbZV0se2lzRXh0ZXJuYWw6dSxtb2RpZmllcnM6ZCxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6cCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOm19PW4odCk7aWYodSl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWxldCBoPSEhbSxnO2lmKGgpe2c9cihwLnN1YnN0cmluZygwLG0pKTtsZXQgZT1nJiZvW2ddP3IocCk6dm9pZCAwO2UmJmUhPT1nJiYoZz1lLGg9ITEpfWVsc2UgZz1yKHApO2lmKCFnKXtpZighaCl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWlmKGc9cihwKSwhZyl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWg9ITF9bGV0IF89ZC5sZW5ndGg9PT0wP2BgOmQubGVuZ3RoPT09MT9kWzBdOmEoZCkuam9pbihgOmApLHY9Zj9fK0pkOl8seT12K2c7aWYocy5pbmRleE9mKHkpPi0xKWNvbnRpbnVlO3MucHVzaCh5KTtsZXQgYj1pKGcsaCk7Zm9yKGxldCBlPTA7ZTxiLmxlbmd0aDsrK2Upe2xldCB0PWJbZV07cy5wdXNoKHYrdCl9bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpfXJldHVybiBsfSxhZj0oLi4uZSk9PntsZXQgdD0wLG4scixpPWBgO2Zvcig7dDxlLmxlbmd0aDspKG49ZVt0KytdKSYmKHI9b2YobikpJiYoaSYmKGkrPWAgYCksaSs9cik7cmV0dXJuIGl9LG9mPWU9PntpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7bGV0IHQsbj1gYDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYodD1vZihlW3JdKSkmJihuJiYobis9YCBgKSxuKz10KTtyZXR1cm4gbn0sc2Y9KGUsLi4udCk9PntsZXQgbixyLGksYSxvPW89PihuPWVmKHQucmVkdWNlKChlLHQpPT50KGUpLGUoKSkpLHI9bi5jYWNoZS5nZXQsaT1uLmNhY2hlLnNldCxhPXMscyhvKSkscz1lPT57bGV0IHQ9cihlKTtpZih0KXJldHVybiB0O2xldCBhPXJmKGUsbik7cmV0dXJuIGkoZSxhKSxhfTtyZXR1cm4gYT1vLCguLi5lKT0+YShhZiguLi5lKSl9LGNmPVtdLFg9ZT0+e2xldCB0PXQ9PnRbZV18fGNmO3JldHVybiB0LmlzVGhlbWVHZXR0ZXI9ITAsdH0sbGY9L15cWyg/Oihcd1tcdy1dKik6KT8oLispXF0kL2ksdWY9L15cKCg/Oihcd1tcdy1dKik6KT8oLispXCkkL2ksZGY9L15cZCsoPzpcLlxkKyk/XC9cZCsoPzpcLlxkKyk/JC8sZmY9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxwZj0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sbWY9L14ocmdiYT98aHNsYT98aHdifChvayk/KGxhYnxsY2gpfGNvbG9yLW1peClcKC4rXCkkLyxoZj0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxnZj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLF9mPWU9PmRmLnRlc3QoZSksWj1lPT4hIWUmJiFOdW1iZXIuaXNOYU4oTnVtYmVyKGUpKSx2Zj1lPT4hIWUmJk51bWJlci5pc0ludGVnZXIoTnVtYmVyKGUpKSx5Zj1lPT5lLmVuZHNXaXRoKGAlYCkmJlooZS5zbGljZSgwLC0xKSksYmY9ZT0+ZmYudGVzdChlKSx4Zj0oKT0+ITAsU2Y9ZT0+cGYudGVzdChlKSYmIW1mLnRlc3QoZSksQ2Y9KCk9PiExLHdmPWU9PmhmLnRlc3QoZSksVGY9ZT0+Z2YudGVzdChlKSxFZj1lPT4hUShlKSYmISQoZSksRGY9ZT0+ZS5zdGFydHNXaXRoKGBAY29udGFpbmVyYCkmJihlWzEwXT09PWAvYCYmZVsxMV0hPT12b2lkIDB8fGVbMTFdPT09YHNgJiZlWzE2XSE9PXZvaWQgMCYmZS5zdGFydHNXaXRoKGAtc2l6ZS9gLDEwKXx8ZVsxMV09PT1gbmAmJmVbMThdIT09dm9pZCAwJiZlLnN0YXJ0c1dpdGgoYC1ub3JtYWwvYCwxMCkpLE9mPWU9PlVmKGUscWYsQ2YpLFE9ZT0+bGYudGVzdChlKSxrZj1lPT5VZihlLEpmLFNmKSxBZj1lPT5VZihlLFlmLFopLGpmPWU9PlVmKGUsWmYseGYpLE1mPWU9PlVmKGUsWGYsQ2YpLE5mPWU9PlVmKGUsR2YsQ2YpLFBmPWU9PlVmKGUsS2YsVGYpLEZmPWU9PlVmKGUsUWYsd2YpLCQ9ZT0+dWYudGVzdChlKSxJZj1lPT5XZihlLEpmKSxMZj1lPT5XZihlLFhmKSxSZj1lPT5XZihlLEdmKSx6Zj1lPT5XZihlLHFmKSxCZj1lPT5XZihlLEtmKSxWZj1lPT5XZihlLFFmLCEwKSxIZj1lPT5XZihlLFpmLCEwKSxVZj0oZSx0LG4pPT57bGV0IHI9bGYuZXhlYyhlKTtyZXR1cm4gcj9yWzFdP3QoclsxXSk6bihyWzJdKTohMX0sV2Y9KGUsdCxuPSExKT0+e2xldCByPXVmLmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90KHJbMV0pOm46ITF9LEdmPWU9PmU9PT1gcG9zaXRpb25gfHxlPT09YHBlcmNlbnRhZ2VgLEtmPWU9PmU9PT1gaW1hZ2VgfHxlPT09YHVybGAscWY9ZT0+ZT09PWBsZW5ndGhgfHxlPT09YHNpemVgfHxlPT09YGJnLXNpemVgLEpmPWU9PmU9PT1gbGVuZ3RoYCxZZj1lPT5lPT09YG51bWJlcmAsWGY9ZT0+ZT09PWBmYW1pbHktbmFtZWAsWmY9ZT0+ZT09PWBudW1iZXJgfHxlPT09YHdlaWdodGAsUWY9ZT0+ZT09PWBzaGFkb3dgLCRmPXNmKCgpPT57bGV0IGU9WChgY29sb3JgKSx0PVgoYGZvbnRgKSxuPVgoYHRleHRgKSxyPVgoYGZvbnQtd2VpZ2h0YCksaT1YKGB0cmFja2luZ2ApLGE9WChgbGVhZGluZ2ApLG89WChgYnJlYWtwb2ludGApLHM9WChgY29udGFpbmVyYCksYz1YKGBzcGFjaW5nYCksbD1YKGByYWRpdXNgKSx1PVgoYHNoYWRvd2ApLGQ9WChgaW5zZXQtc2hhZG93YCksZj1YKGB0ZXh0LXNoYWRvd2ApLHA9WChgZHJvcC1zaGFkb3dgKSxtPVgoYGJsdXJgKSxoPVgoYHBlcnNwZWN0aXZlYCksZz1YKGBhc3BlY3RgKSxfPVgoYGVhc2VgKSx2PVgoYGFuaW1hdGVgKSx5PSgpPT5bYGF1dG9gLGBhdm9pZGAsYGFsbGAsYGF2b2lkLXBhZ2VgLGBwYWdlYCxgbGVmdGAsYHJpZ2h0YCxgY29sdW1uYF0sYj0oKT0+W2BjZW50ZXJgLGB0b3BgLGBib3R0b21gLGBsZWZ0YCxgcmlnaHRgLGB0b3AtbGVmdGAsYGxlZnQtdG9wYCxgdG9wLXJpZ2h0YCxgcmlnaHQtdG9wYCxgYm90dG9tLXJpZ2h0YCxgcmlnaHQtYm90dG9tYCxgYm90dG9tLWxlZnRgLGBsZWZ0LWJvdHRvbWBdLHg9KCk9PlsuLi5iKCksJCxRXSxTPSgpPT5bYGF1dG9gLGBoaWRkZW5gLGBjbGlwYCxgdmlzaWJsZWAsYHNjcm9sbGBdLEM9KCk9PltgYXV0b2AsYGNvbnRhaW5gLGBub25lYF0sdz0oKT0+WyQsUSxjXSxUPSgpPT5bX2YsYGZ1bGxgLGBhdXRvYCwuLi53KCldLEU9KCk9Plt2Zixgbm9uZWAsYHN1YmdyaWRgLCQsUV0sRD0oKT0+W2BhdXRvYCx7c3BhbjpbYGZ1bGxgLHZmLCQsUV19LHZmLCQsUV0sZWU9KCk9Plt2ZixgYXV0b2AsJCxRXSxPPSgpPT5bYGF1dG9gLGBtaW5gLGBtYXhgLGBmcmAsJCxRXSx0ZT0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGJldHdlZW5gLGBhcm91bmRgLGBldmVubHlgLGBzdHJldGNoYCxgYmFzZWxpbmVgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0saz0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYHN0cmV0Y2hgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0sQT0oKT0+W2BhdXRvYCwuLi53KCldLG5lPSgpPT5bX2YsYGF1dG9gLGBmdWxsYCxgZHZ3YCxgZHZoYCxgbHZ3YCxgbHZoYCxgc3Z3YCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLGo9KCk9PltfZixgc2NyZWVuYCxgZnVsbGAsYGR2d2AsYGx2d2AsYHN2d2AsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxNPSgpPT5bX2YsYHNjcmVlbmAsYGZ1bGxgLGBsaGAsYGR2aGAsYGx2aGAsYHN2aGAsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxOPSgpPT5bZSwkLFFdLHJlPSgpPT5bLi4uYigpLFJmLE5mLHtwb3NpdGlvbjpbJCxRXX1dLGllPSgpPT5bYG5vLXJlcGVhdGAse3JlcGVhdDpbYGAsYHhgLGB5YCxgc3BhY2VgLGByb3VuZGBdfV0sYWU9KCk9PltgYXV0b2AsYGNvdmVyYCxgY29udGFpbmAsemYsT2Yse3NpemU6WyQsUV19XSxvZT0oKT0+W3lmLElmLGtmXSxQPSgpPT5bYGAsYG5vbmVgLGBmdWxsYCxsLCQsUV0sRj0oKT0+W2BgLFosSWYsa2ZdLHNlPSgpPT5bYHNvbGlkYCxgZGFzaGVkYCxgZG90dGVkYCxgZG91YmxlYF0sY2U9KCk9Pltgbm9ybWFsYCxgbXVsdGlwbHlgLGBzY3JlZW5gLGBvdmVybGF5YCxgZGFya2VuYCxgbGlnaHRlbmAsYGNvbG9yLWRvZGdlYCxgY29sb3ItYnVybmAsYGhhcmQtbGlnaHRgLGBzb2Z0LWxpZ2h0YCxgZGlmZmVyZW5jZWAsYGV4Y2x1c2lvbmAsYGh1ZWAsYHNhdHVyYXRpb25gLGBjb2xvcmAsYGx1bWlub3NpdHlgXSxJPSgpPT5bWix5ZixSZixOZl0sbGU9KCk9PltgYCxgbm9uZWAsbSwkLFFdLEw9KCk9Pltgbm9uZWAsWiwkLFFdLHVlPSgpPT5bYG5vbmVgLFosJCxRXSxkZT0oKT0+W1osJCxRXSxmZT0oKT0+W19mLGBmdWxsYCwuLi53KCldO3JldHVybntjYWNoZVNpemU6NTAwLHRoZW1lOnthbmltYXRlOltgc3BpbmAsYHBpbmdgLGBwdWxzZWAsYGJvdW5jZWBdLGFzcGVjdDpbYHZpZGVvYF0sYmx1cjpbYmZdLGJyZWFrcG9pbnQ6W2JmXSxjb2xvcjpbeGZdLGNvbnRhaW5lcjpbYmZdLCJkcm9wLXNoYWRvdyI6W2JmXSxlYXNlOltgaW5gLGBvdXRgLGBpbi1vdXRgXSxmb250OltFZl0sImZvbnQtd2VpZ2h0IjpbYHRoaW5gLGBleHRyYWxpZ2h0YCxgbGlnaHRgLGBub3JtYWxgLGBtZWRpdW1gLGBzZW1pYm9sZGAsYGJvbGRgLGBleHRyYWJvbGRgLGBibGFja2BdLCJpbnNldC1zaGFkb3ciOltiZl0sbGVhZGluZzpbYG5vbmVgLGB0aWdodGAsYHNudWdgLGBub3JtYWxgLGByZWxheGVkYCxgbG9vc2VgXSxwZXJzcGVjdGl2ZTpbYGRyYW1hdGljYCxgbmVhcmAsYG5vcm1hbGAsYG1pZHJhbmdlYCxgZGlzdGFudGAsYG5vbmVgXSxyYWRpdXM6W2JmXSxzaGFkb3c6W2JmXSxzcGFjaW5nOltgcHhgLFpdLHRleHQ6W2JmXSwidGV4dC1zaGFkb3ciOltiZl0sdHJhY2tpbmc6W2B0aWdodGVyYCxgdGlnaHRgLGBub3JtYWxgLGB3aWRlYCxgd2lkZXJgLGB3aWRlc3RgXX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbYGF1dG9gLGBzcXVhcmVgLF9mLFEsJCxnXX1dLGNvbnRhaW5lcjpbYGNvbnRhaW5lcmBdLCJjb250YWluZXItdHlwZSI6W3siQGNvbnRhaW5lciI6W2BgLGBub3JtYWxgLGBzaXplYCwkLFFdfV0sImNvbnRhaW5lci1uYW1lZCI6W0RmXSxjb2x1bW5zOlt7Y29sdW1uczpbWixRLCQsc119XSwiYnJlYWstYWZ0ZXIiOlt7ImJyZWFrLWFmdGVyIjp5KCl9XSwiYnJlYWstYmVmb3JlIjpbeyJicmVhay1iZWZvcmUiOnkoKX1dLCJicmVhay1pbnNpZGUiOlt7ImJyZWFrLWluc2lkZSI6W2BhdXRvYCxgYXZvaWRgLGBhdm9pZC1wYWdlYCxgYXZvaWQtY29sdW1uYF19XSwiYm94LWRlY29yYXRpb24iOlt7ImJveC1kZWNvcmF0aW9uIjpbYHNsaWNlYCxgY2xvbmVgXX1dLGJveDpbe2JveDpbYGJvcmRlcmAsYGNvbnRlbnRgXX1dLGRpc3BsYXk6W2BibG9ja2AsYGlubGluZS1ibG9ja2AsYGlubGluZWAsYGZsZXhgLGBpbmxpbmUtZmxleGAsYHRhYmxlYCxgaW5saW5lLXRhYmxlYCxgdGFibGUtY2FwdGlvbmAsYHRhYmxlLWNlbGxgLGB0YWJsZS1jb2x1bW5gLGB0YWJsZS1jb2x1bW4tZ3JvdXBgLGB0YWJsZS1mb290ZXItZ3JvdXBgLGB0YWJsZS1oZWFkZXItZ3JvdXBgLGB0YWJsZS1yb3ctZ3JvdXBgLGB0YWJsZS1yb3dgLGBmbG93LXJvb3RgLGBncmlkYCxgaW5saW5lLWdyaWRgLGBjb250ZW50c2AsYGxpc3QtaXRlbWAsYGhpZGRlbmBdLHNyOltgc3Itb25seWAsYG5vdC1zci1vbmx5YF0sZmxvYXQ6W3tmbG9hdDpbYHJpZ2h0YCxgbGVmdGAsYG5vbmVgLGBzdGFydGAsYGVuZGBdfV0sY2xlYXI6W3tjbGVhcjpbYGxlZnRgLGByaWdodGAsYGJvdGhgLGBub25lYCxgc3RhcnRgLGBlbmRgXX1dLGlzb2xhdGlvbjpbYGlzb2xhdGVgLGBpc29sYXRpb24tYXV0b2BdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbYGNvbnRhaW5gLGBjb3ZlcmAsYGZpbGxgLGBub25lYCxgc2NhbGUtZG93bmBdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6eCgpfV0sb3ZlcmZsb3c6W3tvdmVyZmxvdzpTKCl9XSwib3ZlcmZsb3cteCI6W3sib3ZlcmZsb3cteCI6UygpfV0sIm92ZXJmbG93LXkiOlt7Im92ZXJmbG93LXkiOlMoKX1dLG92ZXJzY3JvbGw6W3tvdmVyc2Nyb2xsOkMoKX1dLCJvdmVyc2Nyb2xsLXgiOlt7Im92ZXJzY3JvbGwteCI6QygpfV0sIm92ZXJzY3JvbGwteSI6W3sib3ZlcnNjcm9sbC15IjpDKCl9XSxwb3NpdGlvbjpbYHN0YXRpY2AsYGZpeGVkYCxgYWJzb2x1dGVgLGByZWxhdGl2ZWAsYHN0aWNreWBdLGluc2V0Olt7aW5zZXQ6VCgpfV0sImluc2V0LXgiOlt7Imluc2V0LXgiOlQoKX1dLCJpbnNldC15IjpbeyJpbnNldC15IjpUKCl9XSxzdGFydDpbeyJpbnNldC1zIjpUKCksc3RhcnQ6VCgpfV0sZW5kOlt7Imluc2V0LWUiOlQoKSxlbmQ6VCgpfV0sImluc2V0LWJzIjpbeyJpbnNldC1icyI6VCgpfV0sImluc2V0LWJlIjpbeyJpbnNldC1iZSI6VCgpfV0sdG9wOlt7dG9wOlQoKX1dLHJpZ2h0Olt7cmlnaHQ6VCgpfV0sYm90dG9tOlt7Ym90dG9tOlQoKX1dLGxlZnQ6W3tsZWZ0OlQoKX1dLHZpc2liaWxpdHk6W2B2aXNpYmxlYCxgaW52aXNpYmxlYCxgY29sbGFwc2VgXSx6Olt7ejpbdmYsYGF1dG9gLCQsUV19XSxiYXNpczpbe2Jhc2lzOltfZixgZnVsbGAsYGF1dG9gLHMsLi4udygpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Oltgcm93YCxgcm93LXJldmVyc2VgLGBjb2xgLGBjb2wtcmV2ZXJzZWBdfV0sImZsZXgtd3JhcCI6W3tmbGV4Oltgbm93cmFwYCxgd3JhcGAsYHdyYXAtcmV2ZXJzZWBdfV0sZmxleDpbe2ZsZXg6W1osX2YsYGF1dG9gLGBpbml0aWFsYCxgbm9uZWAsUV19XSxncm93Olt7Z3JvdzpbYGAsWiwkLFFdfV0sc2hyaW5rOlt7c2hyaW5rOltgYCxaLCQsUV19XSxvcmRlcjpbe29yZGVyOlt2ZixgZmlyc3RgLGBsYXN0YCxgbm9uZWAsJCxRXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6RSgpfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOkQoKX1dLCJjb2wtc3RhcnQiOlt7ImNvbC1zdGFydCI6ZWUoKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjplZSgpfV0sImdyaWQtcm93cyI6W3siZ3JpZC1yb3dzIjpFKCl9XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6RCgpfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjplZSgpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOmVlKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOltgcm93YCxgY29sYCxgZGVuc2VgLGByb3ctZGVuc2VgLGBjb2wtZGVuc2VgXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6TygpfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpPKCl9XSxnYXA6W3tnYXA6dygpfV0sImdhcC14IjpbeyJnYXAteCI6dygpfV0sImdhcC15IjpbeyJnYXAteSI6dygpfV0sImp1c3RpZnktY29udGVudCI6W3tqdXN0aWZ5OlsuLi50ZSgpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbLi4uaygpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6W2BhdXRvYCwuLi5rKCldfV0sImFsaWduLWNvbnRlbnQiOlt7Y29udGVudDpbYG5vcm1hbGAsLi4udGUoKV19XSwiYWxpZ24taXRlbXMiOlt7aXRlbXM6Wy4uLmsoKSx7YmFzZWxpbmU6W2BgLGBsYXN0YF19XX1dLCJhbGlnbi1zZWxmIjpbe3NlbGY6W2BhdXRvYCwuLi5rKCkse2Jhc2VsaW5lOltgYCxgbGFzdGBdfV19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6dGUoKX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsuLi5rKCksYGJhc2VsaW5lYF19XSwicGxhY2Utc2VsZiI6W3sicGxhY2Utc2VsZiI6W2BhdXRvYCwuLi5rKCldfV0scDpbe3A6dygpfV0scHg6W3tweDp3KCl9XSxweTpbe3B5OncoKX1dLHBzOlt7cHM6dygpfV0scGU6W3twZTp3KCl9XSxwYnM6W3twYnM6dygpfV0scGJlOlt7cGJlOncoKX1dLHB0Olt7cHQ6dygpfV0scHI6W3twcjp3KCl9XSxwYjpbe3BiOncoKX1dLHBsOlt7cGw6dygpfV0sbTpbe206QSgpfV0sbXg6W3tteDpBKCl9XSxteTpbe215OkEoKX1dLG1zOlt7bXM6QSgpfV0sbWU6W3ttZTpBKCl9XSxtYnM6W3ttYnM6QSgpfV0sbWJlOlt7bWJlOkEoKX1dLG10Olt7bXQ6QSgpfV0sbXI6W3ttcjpBKCl9XSxtYjpbe21iOkEoKX1dLG1sOlt7bWw6QSgpfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOncoKX1dLCJzcGFjZS14LXJldmVyc2UiOltgc3BhY2UteC1yZXZlcnNlYF0sInNwYWNlLXkiOlt7InNwYWNlLXkiOncoKX1dLCJzcGFjZS15LXJldmVyc2UiOltgc3BhY2UteS1yZXZlcnNlYF0sc2l6ZTpbe3NpemU6bmUoKX1dLCJpbmxpbmUtc2l6ZSI6W3tpbmxpbmU6W2BhdXRvYCwuLi5qKCldfV0sIm1pbi1pbmxpbmUtc2l6ZSI6W3sibWluLWlubGluZSI6W2BhdXRvYCwuLi5qKCldfV0sIm1heC1pbmxpbmUtc2l6ZSI6W3sibWF4LWlubGluZSI6W2Bub25lYCwuLi5qKCldfV0sImJsb2NrLXNpemUiOlt7YmxvY2s6W2BhdXRvYCwuLi5NKCldfV0sIm1pbi1ibG9jay1zaXplIjpbeyJtaW4tYmxvY2siOltgYXV0b2AsLi4uTSgpXX1dLCJtYXgtYmxvY2stc2l6ZSI6W3sibWF4LWJsb2NrIjpbYG5vbmVgLC4uLk0oKV19XSx3Olt7dzpbcyxgc2NyZWVuYCwuLi5uZSgpXX1dLCJtaW4tdyI6W3sibWluLXciOltzLGBzY3JlZW5gLGBub25lYCwuLi5uZSgpXX1dLCJtYXgtdyI6W3sibWF4LXciOltzLGBzY3JlZW5gLGBub25lYCxgcHJvc2VgLHtzY3JlZW46W29dfSwuLi5uZSgpXX1dLGg6W3toOltgc2NyZWVuYCxgbGhgLC4uLm5lKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6W2BzY3JlZW5gLGBsaGAsYG5vbmVgLC4uLm5lKCldfV0sIm1heC1oIjpbeyJtYXgtaCI6W2BzY3JlZW5gLGBsaGAsLi4ubmUoKV19XSwiZm9udC1zaXplIjpbe3RleHQ6W2BiYXNlYCxuLElmLGtmXX1dLCJmb250LXNtb290aGluZyI6W2BhbnRpYWxpYXNlZGAsYHN1YnBpeGVsLWFudGlhbGlhc2VkYF0sImZvbnQtc3R5bGUiOltgaXRhbGljYCxgbm90LWl0YWxpY2BdLCJmb250LXdlaWdodCI6W3tmb250OltyLEhmLGpmXX1dLCJmb250LXN0cmV0Y2giOlt7ImZvbnQtc3RyZXRjaCI6W2B1bHRyYS1jb25kZW5zZWRgLGBleHRyYS1jb25kZW5zZWRgLGBjb25kZW5zZWRgLGBzZW1pLWNvbmRlbnNlZGAsYG5vcm1hbGAsYHNlbWktZXhwYW5kZWRgLGBleHBhbmRlZGAsYGV4dHJhLWV4cGFuZGVkYCxgdWx0cmEtZXhwYW5kZWRgLHlmLFFdfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W0xmLE1mLHRdfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltRXX1dLCJmdm4tbm9ybWFsIjpbYG5vcm1hbC1udW1zYF0sImZ2bi1vcmRpbmFsIjpbYG9yZGluYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2BzbGFzaGVkLXplcm9gXSwiZnZuLWZpZ3VyZSI6W2BsaW5pbmctbnVtc2AsYG9sZHN0eWxlLW51bXNgXSwiZnZuLXNwYWNpbmciOltgcHJvcG9ydGlvbmFsLW51bXNgLGB0YWJ1bGFyLW51bXNgXSwiZnZuLWZyYWN0aW9uIjpbYGRpYWdvbmFsLWZyYWN0aW9uc2AsYHN0YWNrZWQtZnJhY3Rpb25zYF0sdHJhY2tpbmc6W3t0cmFja2luZzpbaSwkLFFdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltaLGBub25lYCwkLEFmXX1dLGxlYWRpbmc6W3tsZWFkaW5nOlthLC4uLncoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6W2Bub25lYCwkLFFdfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbYGluc2lkZWAsYG91dHNpZGVgXX1dLCJsaXN0LXN0eWxlLXR5cGUiOlt7bGlzdDpbYGRpc2NgLGBkZWNpbWFsYCxgbm9uZWAsJCxRXX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OltgbGVmdGAsYGNlbnRlcmAsYHJpZ2h0YCxganVzdGlmeWAsYHN0YXJ0YCxgZW5kYF19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6TigpfV0sInRleHQtY29sb3IiOlt7dGV4dDpOKCl9XSwidGV4dC1kZWNvcmF0aW9uIjpbYHVuZGVybGluZWAsYG92ZXJsaW5lYCxgbGluZS10aHJvdWdoYCxgbm8tdW5kZXJsaW5lYF0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5zZSgpLGB3YXZ5YF19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOltaLGBmcm9tLWZvbnRgLGBhdXRvYCwkLGtmXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpOKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W1osYGF1dG9gLCQsUV19XSwidGV4dC10cmFuc2Zvcm0iOltgdXBwZXJjYXNlYCxgbG93ZXJjYXNlYCxgY2FwaXRhbGl6ZWAsYG5vcm1hbC1jYXNlYF0sInRleHQtb3ZlcmZsb3ciOltgdHJ1bmNhdGVgLGB0ZXh0LWVsbGlwc2lzYCxgdGV4dC1jbGlwYF0sInRleHQtd3JhcCI6W3t0ZXh0Oltgd3JhcGAsYG5vd3JhcGAsYGJhbGFuY2VgLGBwcmV0dHlgXX1dLGluZGVudDpbe2luZGVudDp3KCl9XSwidGFiLXNpemUiOlt7dGFiOlt2ZiwkLFFdfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOltgYmFzZWxpbmVgLGB0b3BgLGBtaWRkbGVgLGBib3R0b21gLGB0ZXh0LXRvcGAsYHRleHQtYm90dG9tYCxgc3ViYCxgc3VwZXJgLCQsUV19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbYG5vcm1hbGAsYG5vd3JhcGAsYHByZWAsYHByZS1saW5lYCxgcHJlLXdyYXBgLGBicmVhay1zcGFjZXNgXX1dLGJyZWFrOlt7YnJlYWs6W2Bub3JtYWxgLGB3b3Jkc2AsYGFsbGAsYGtlZXBgXX1dLHdyYXA6W3t3cmFwOltgYnJlYWstd29yZGAsYGFueXdoZXJlYCxgbm9ybWFsYF19XSxoeXBoZW5zOlt7aHlwaGVuczpbYG5vbmVgLGBtYW51YWxgLGBhdXRvYF19XSxjb250ZW50Olt7Y29udGVudDpbYG5vbmVgLCQsUV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbYGZpeGVkYCxgbG9jYWxgLGBzY3JvbGxgXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgdGV4dGBdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YF19XSwiYmctcG9zaXRpb24iOlt7Ymc6cmUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6aWUoKX1dLCJiZy1zaXplIjpbe2JnOmFlKCl9XSwiYmctaW1hZ2UiOlt7Ymc6W2Bub25lYCx7bGluZWFyOlt7dG86W2B0YCxgdHJgLGByYCxgYnJgLGBiYCxgYmxgLGBsYCxgdGxgXX0sdmYsJCxRXSxyYWRpYWw6W2BgLCQsUV0sY29uaWM6W3ZmLCQsUV19LEJmLFBmXX1dLCJiZy1jb2xvciI6W3tiZzpOKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpvZSgpfV0sImdyYWRpZW50LXZpYS1wb3MiOlt7dmlhOm9lKCl9XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOm9lKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOk4oKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOk4oKX1dLCJncmFkaWVudC10byI6W3t0bzpOKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpQKCl9XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOlAoKX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6UCgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpQKCl9XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOlAoKX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6UCgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpQKCl9XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6UCgpfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOlAoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpQKCl9XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6UCgpfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOlAoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpQKCl9XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6UCgpfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOlAoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6RigpfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjpGKCl9XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOkYoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6RigpfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpGKCl9XSwiYm9yZGVyLXctYnMiOlt7ImJvcmRlci1icyI6RigpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOkYoKX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6RigpfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpGKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOkYoKX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6RigpfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6RigpfV0sImRpdmlkZS14LXJldmVyc2UiOltgZGl2aWRlLXgtcmV2ZXJzZWBdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOkYoKX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbYGRpdmlkZS15LXJldmVyc2VgXSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uc2UoKSxgaGlkZGVuYCxgbm9uZWBdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6Wy4uLnNlKCksYGhpZGRlbmAsYG5vbmVgXX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOk4oKX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOk4oKX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOk4oKX1dLCJib3JkZXItY29sb3ItcyI6W3siYm9yZGVyLXMiOk4oKX1dLCJib3JkZXItY29sb3ItZSI6W3siYm9yZGVyLWUiOk4oKX1dLCJib3JkZXItY29sb3ItYnMiOlt7ImJvcmRlci1icyI6TigpfV0sImJvcmRlci1jb2xvci1iZSI6W3siYm9yZGVyLWJlIjpOKCl9XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpOKCl9XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpOKCl9XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpOKCl9XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpOKCl9XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpOKCl9XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsuLi5zZSgpLGBub25lYCxgaGlkZGVuYF19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbWiwkLFFdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltgYCxaLElmLGtmXX1dLCJvdXRsaW5lLWNvbG9yIjpbe291dGxpbmU6TigpfV0sc2hhZG93Olt7c2hhZG93OltgYCxgbm9uZWAsdSxWZixGZl19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpOKCl9XSwiaW5zZXQtc2hhZG93IjpbeyJpbnNldC1zaGFkb3ciOltgbm9uZWAsZCxWZixGZl19XSwiaW5zZXQtc2hhZG93LWNvbG9yIjpbeyJpbnNldC1zaGFkb3ciOk4oKX1dLCJyaW5nLXciOlt7cmluZzpGKCl9XSwicmluZy13LWluc2V0IjpbYHJpbmctaW5zZXRgXSwicmluZy1jb2xvciI6W3tyaW5nOk4oKX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W1osa2ZdfV0sInJpbmctb2Zmc2V0LWNvbG9yIjpbeyJyaW5nLW9mZnNldCI6TigpfV0sImluc2V0LXJpbmctdyI6W3siaW5zZXQtcmluZyI6RigpfV0sImluc2V0LXJpbmctY29sb3IiOlt7Imluc2V0LXJpbmciOk4oKX1dLCJ0ZXh0LXNoYWRvdyI6W3sidGV4dC1zaGFkb3ciOltgbm9uZWAsZixWZixGZl19XSwidGV4dC1zaGFkb3ctY29sb3IiOlt7InRleHQtc2hhZG93IjpOKCl9XSxvcGFjaXR5Olt7b3BhY2l0eTpbWiwkLFFdfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjpbLi4uY2UoKSxgcGx1cy1kYXJrZXJgLGBwbHVzLWxpZ2h0ZXJgXX1dLCJiZy1ibGVuZCI6W3siYmctYmxlbmQiOmNlKCl9XSwibWFzay1jbGlwIjpbeyJtYXNrLWNsaXAiOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGBmaWxsYCxgc3Ryb2tlYCxgdmlld2BdfSxgbWFzay1uby1jbGlwYF0sIm1hc2stY29tcG9zaXRlIjpbe21hc2s6W2BhZGRgLGBzdWJ0cmFjdGAsYGludGVyc2VjdGAsYGV4Y2x1ZGVgXX1dLCJtYXNrLWltYWdlLWxpbmVhci1wb3MiOlt7Im1hc2stbGluZWFyIjpbWl19XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1wb3MiOlt7Im1hc2stbGluZWFyLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1wb3MiOlt7Im1hc2stbGluZWFyLXRvIjpJKCl9XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1jb2xvciI6W3sibWFzay1saW5lYXItZnJvbSI6TigpfV0sIm1hc2staW1hZ2UtbGluZWFyLXRvLWNvbG9yIjpbeyJtYXNrLWxpbmVhci10byI6TigpfV0sIm1hc2staW1hZ2UtdC1mcm9tLXBvcyI6W3sibWFzay10LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXQtdG8tcG9zIjpbeyJtYXNrLXQtdG8iOkkoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1jb2xvciI6W3sibWFzay10LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXQtdG8tY29sb3IiOlt7Im1hc2stdC10byI6TigpfV0sIm1hc2staW1hZ2Utci1mcm9tLXBvcyI6W3sibWFzay1yLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXItdG8tcG9zIjpbeyJtYXNrLXItdG8iOkkoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1jb2xvciI6W3sibWFzay1yLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXItdG8tY29sb3IiOlt7Im1hc2stci10byI6TigpfV0sIm1hc2staW1hZ2UtYi1mcm9tLXBvcyI6W3sibWFzay1iLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWItdG8tcG9zIjpbeyJtYXNrLWItdG8iOkkoKX1dLCJtYXNrLWltYWdlLWItZnJvbS1jb2xvciI6W3sibWFzay1iLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWItdG8tY29sb3IiOlt7Im1hc2stYi10byI6TigpfV0sIm1hc2staW1hZ2UtbC1mcm9tLXBvcyI6W3sibWFzay1sLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWwtdG8tcG9zIjpbeyJtYXNrLWwtdG8iOkkoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1jb2xvciI6W3sibWFzay1sLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWwtdG8tY29sb3IiOlt7Im1hc2stbC10byI6TigpfV0sIm1hc2staW1hZ2UteC1mcm9tLXBvcyI6W3sibWFzay14LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXgtdG8tcG9zIjpbeyJtYXNrLXgtdG8iOkkoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1jb2xvciI6W3sibWFzay14LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXgtdG8tY29sb3IiOlt7Im1hc2steC10byI6TigpfV0sIm1hc2staW1hZ2UteS1mcm9tLXBvcyI6W3sibWFzay15LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXktdG8tcG9zIjpbeyJtYXNrLXktdG8iOkkoKX1dLCJtYXNrLWltYWdlLXktZnJvbS1jb2xvciI6W3sibWFzay15LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXktdG8tY29sb3IiOlt7Im1hc2steS10byI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsIjpbeyJtYXNrLXJhZGlhbCI6WyQsUV19XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1wb3MiOlt7Im1hc2stcmFkaWFsLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1wb3MiOlt7Im1hc2stcmFkaWFsLXRvIjpJKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1jb2xvciI6W3sibWFzay1yYWRpYWwtZnJvbSI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXRvLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC10byI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXNoYXBlIjpbeyJtYXNrLXJhZGlhbCI6W2BjaXJjbGVgLGBlbGxpcHNlYF19XSwibWFzay1pbWFnZS1yYWRpYWwtc2l6ZSI6W3sibWFzay1yYWRpYWwiOlt7Y2xvc2VzdDpbYHNpZGVgLGBjb3JuZXJgXSxmYXJ0aGVzdDpbYHNpZGVgLGBjb3JuZXJgXX1dfV0sIm1hc2staW1hZ2UtcmFkaWFsLXBvcyI6W3sibWFzay1yYWRpYWwtYXQiOmIoKX1dLCJtYXNrLWltYWdlLWNvbmljLXBvcyI6W3sibWFzay1jb25pYyI6W1pdfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1wb3MiOlt7Im1hc2stY29uaWMtZnJvbSI6SSgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tcG9zIjpbeyJtYXNrLWNvbmljLXRvIjpJKCl9XSwibWFzay1pbWFnZS1jb25pYy1mcm9tLWNvbG9yIjpbeyJtYXNrLWNvbmljLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLWNvbG9yIjpbeyJtYXNrLWNvbmljLXRvIjpOKCl9XSwibWFzay1tb2RlIjpbe21hc2s6W2BhbHBoYWAsYGx1bWluYW5jZWAsYG1hdGNoYF19XSwibWFzay1vcmlnaW4iOlt7Im1hc2stb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgZmlsbGAsYHN0cm9rZWAsYHZpZXdgXX1dLCJtYXNrLXBvc2l0aW9uIjpbe21hc2s6cmUoKX1dLCJtYXNrLXJlcGVhdCI6W3ttYXNrOmllKCl9XSwibWFzay1zaXplIjpbe21hc2s6YWUoKX1dLCJtYXNrLXR5cGUiOlt7Im1hc2stdHlwZSI6W2BhbHBoYWAsYGx1bWluYW5jZWBdfV0sIm1hc2staW1hZ2UiOlt7bWFzazpbYG5vbmVgLCQsUV19XSxmaWx0ZXI6W3tmaWx0ZXI6W2BgLGBub25lYCwkLFFdfV0sYmx1cjpbe2JsdXI6bGUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltaLCQsUV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltaLCQsUV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbYGAsYG5vbmVgLHAsVmYsRmZdfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6TigpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOltgYCxaLCQsUV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W1osJCxRXX1dLGludmVydDpbe2ludmVydDpbYGAsWiwkLFFdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbWiwkLFFdfV0sc2VwaWE6W3tzZXBpYTpbYGAsWiwkLFFdfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbYGAsYG5vbmVgLCQsUV19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6bGUoKX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbWiwkLFFdfV0sImJhY2tkcm9wLWNvbnRyYXN0IjpbeyJiYWNrZHJvcC1jb250cmFzdCI6W1osJCxRXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W2BgLFosJCxRXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbWiwkLFFdfV0sImJhY2tkcm9wLWludmVydCI6W3siYmFja2Ryb3AtaW52ZXJ0IjpbYGAsWiwkLFFdfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOltaLCQsUV19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbWiwkLFFdfV0sImJhY2tkcm9wLXNlcGlhIjpbeyJiYWNrZHJvcC1zZXBpYSI6W2BgLFosJCxRXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOltgY29sbGFwc2VgLGBzZXBhcmF0ZWBdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6dygpfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOncoKX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15Ijp3KCl9XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOltgYXV0b2AsYGZpeGVkYF19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbYHRvcGAsYGJvdHRvbWBdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246W2BgLGBhbGxgLGBjb2xvcnNgLGBvcGFjaXR5YCxgc2hhZG93YCxgdHJhbnNmb3JtYCxgbm9uZWAsJCxRXX1dLCJ0cmFuc2l0aW9uLWJlaGF2aW9yIjpbe3RyYW5zaXRpb246W2Bub3JtYWxgLGBkaXNjcmV0ZWBdfV0sZHVyYXRpb246W3tkdXJhdGlvbjpbWixgaW5pdGlhbGAsJCxRXX1dLGVhc2U6W3tlYXNlOltgbGluZWFyYCxgaW5pdGlhbGAsXywkLFFdfV0sZGVsYXk6W3tkZWxheTpbWiwkLFFdfV0sYW5pbWF0ZTpbe2FuaW1hdGU6W2Bub25lYCx2LCQsUV19XSxiYWNrZmFjZTpbe2JhY2tmYWNlOltgaGlkZGVuYCxgdmlzaWJsZWBdfV0scGVyc3BlY3RpdmU6W3twZXJzcGVjdGl2ZTpbaCwkLFFdfV0sInBlcnNwZWN0aXZlLW9yaWdpbiI6W3sicGVyc3BlY3RpdmUtb3JpZ2luIjp4KCl9XSxyb3RhdGU6W3tyb3RhdGU6TCgpfV0sInJvdGF0ZS14IjpbeyJyb3RhdGUteCI6TCgpfV0sInJvdGF0ZS15IjpbeyJyb3RhdGUteSI6TCgpfV0sInJvdGF0ZS16IjpbeyJyb3RhdGUteiI6TCgpfV0sc2NhbGU6W3tzY2FsZTp1ZSgpfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOnVlKCl9XSwic2NhbGUteSI6W3sic2NhbGUteSI6dWUoKX1dLCJzY2FsZS16IjpbeyJzY2FsZS16Ijp1ZSgpfV0sInNjYWxlLTNkIjpbYHNjYWxlLTNkYF0sc2tldzpbe3NrZXc6ZGUoKX1dLCJza2V3LXgiOlt7InNrZXcteCI6ZGUoKX1dLCJza2V3LXkiOlt7InNrZXcteSI6ZGUoKX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbJCxRLGBgLGBub25lYCxgZ3B1YCxgY3B1YF19XSwidHJhbnNmb3JtLW9yaWdpbiI6W3tvcmlnaW46eCgpfV0sInRyYW5zZm9ybS1zdHlsZSI6W3t0cmFuc2Zvcm06W2AzZGAsYGZsYXRgXX1dLHRyYW5zbGF0ZTpbe3RyYW5zbGF0ZTpmZSgpfV0sInRyYW5zbGF0ZS14IjpbeyJ0cmFuc2xhdGUteCI6ZmUoKX1dLCJ0cmFuc2xhdGUteSI6W3sidHJhbnNsYXRlLXkiOmZlKCl9XSwidHJhbnNsYXRlLXoiOlt7InRyYW5zbGF0ZS16IjpmZSgpfV0sInRyYW5zbGF0ZS1ub25lIjpbYHRyYW5zbGF0ZS1ub25lYF0sem9vbTpbe3pvb206W3ZmLCQsUV19XSxhY2NlbnQ6W3thY2NlbnQ6TigpfV0sYXBwZWFyYW5jZTpbe2FwcGVhcmFuY2U6W2Bub25lYCxgYXV0b2BdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0Ok4oKX1dLCJjb2xvci1zY2hlbWUiOlt7c2NoZW1lOltgbm9ybWFsYCxgZGFya2AsYGxpZ2h0YCxgbGlnaHQtZGFya2AsYG9ubHktZGFya2AsYG9ubHktbGlnaHRgXX1dLGN1cnNvcjpbe2N1cnNvcjpbYGF1dG9gLGBkZWZhdWx0YCxgcG9pbnRlcmAsYHdhaXRgLGB0ZXh0YCxgbW92ZWAsYGhlbHBgLGBub3QtYWxsb3dlZGAsYG5vbmVgLGBjb250ZXh0LW1lbnVgLGBwcm9ncmVzc2AsYGNlbGxgLGBjcm9zc2hhaXJgLGB2ZXJ0aWNhbC10ZXh0YCxgYWxpYXNgLGBjb3B5YCxgbm8tZHJvcGAsYGdyYWJgLGBncmFiYmluZ2AsYGFsbC1zY3JvbGxgLGBjb2wtcmVzaXplYCxgcm93LXJlc2l6ZWAsYG4tcmVzaXplYCxgZS1yZXNpemVgLGBzLXJlc2l6ZWAsYHctcmVzaXplYCxgbmUtcmVzaXplYCxgbnctcmVzaXplYCxgc2UtcmVzaXplYCxgc3ctcmVzaXplYCxgZXctcmVzaXplYCxgbnMtcmVzaXplYCxgbmVzdy1yZXNpemVgLGBud3NlLXJlc2l6ZWAsYHpvb20taW5gLGB6b29tLW91dGAsJCxRXX1dLCJmaWVsZC1zaXppbmciOlt7ImZpZWxkLXNpemluZyI6W2BmaXhlZGAsYGNvbnRlbnRgXX1dLCJwb2ludGVyLWV2ZW50cyI6W3sicG9pbnRlci1ldmVudHMiOltgYXV0b2AsYG5vbmVgXX1dLHJlc2l6ZTpbe3Jlc2l6ZTpbYG5vbmVgLGBgLGB5YCxgeGBdfV0sInNjcm9sbC1iZWhhdmlvciI6W3tzY3JvbGw6W2BhdXRvYCxgc21vb3RoYF19XSwic2Nyb2xsYmFyLXRodW1iLWNvbG9yIjpbeyJzY3JvbGxiYXItdGh1bWIiOk4oKX1dLCJzY3JvbGxiYXItdHJhY2stY29sb3IiOlt7InNjcm9sbGJhci10cmFjayI6TigpfV0sInNjcm9sbGJhci1ndXR0ZXIiOlt7InNjcm9sbGJhci1ndXR0ZXIiOltgYXV0b2AsYHN0YWJsZWAsYGJvdGhgXX1dLCJzY3JvbGxiYXItdyI6W3tzY3JvbGxiYXI6W2BhdXRvYCxgdGhpbmAsYG5vbmVgXX1dLCJzY3JvbGwtbSI6W3sic2Nyb2xsLW0iOncoKX1dLCJzY3JvbGwtbXgiOlt7InNjcm9sbC1teCI6dygpfV0sInNjcm9sbC1teSI6W3sic2Nyb2xsLW15Ijp3KCl9XSwic2Nyb2xsLW1zIjpbeyJzY3JvbGwtbXMiOncoKX1dLCJzY3JvbGwtbWUiOlt7InNjcm9sbC1tZSI6dygpfV0sInNjcm9sbC1tYnMiOlt7InNjcm9sbC1tYnMiOncoKX1dLCJzY3JvbGwtbWJlIjpbeyJzY3JvbGwtbWJlIjp3KCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOncoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6dygpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjp3KCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOncoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOncoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6dygpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5Ijp3KCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOncoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6dygpfV0sInNjcm9sbC1wYnMiOlt7InNjcm9sbC1wYnMiOncoKX1dLCJzY3JvbGwtcGJlIjpbeyJzY3JvbGwtcGJlIjp3KCl9XSwic2Nyb2xsLXB0IjpbeyJzY3JvbGwtcHQiOncoKX1dLCJzY3JvbGwtcHIiOlt7InNjcm9sbC1wciI6dygpfV0sInNjcm9sbC1wYiI6W3sic2Nyb2xsLXBiIjp3KCl9XSwic2Nyb2xsLXBsIjpbeyJzY3JvbGwtcGwiOncoKX1dLCJzbmFwLWFsaWduIjpbe3NuYXA6W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGFsaWduLW5vbmVgXX1dLCJzbmFwLXN0b3AiOlt7c25hcDpbYG5vcm1hbGAsYGFsd2F5c2BdfV0sInNuYXAtdHlwZSI6W3tzbmFwOltgbm9uZWAsYHhgLGB5YCxgYm90aGBdfV0sInNuYXAtc3RyaWN0bmVzcyI6W3tzbmFwOltgbWFuZGF0b3J5YCxgcHJveGltaXR5YF19XSx0b3VjaDpbe3RvdWNoOltgYXV0b2AsYG5vbmVgLGBtYW5pcHVsYXRpb25gXX1dLCJ0b3VjaC14IjpbeyJ0b3VjaC1wYW4iOltgeGAsYGxlZnRgLGByaWdodGBdfV0sInRvdWNoLXkiOlt7InRvdWNoLXBhbiI6W2B5YCxgdXBgLGBkb3duYF19XSwidG91Y2gtcHoiOltgdG91Y2gtcGluY2gtem9vbWBdLHNlbGVjdDpbe3NlbGVjdDpbYG5vbmVgLGB0ZXh0YCxgYWxsYCxgYXV0b2BdfV0sIndpbGwtY2hhbmdlIjpbeyJ3aWxsLWNoYW5nZSI6W2BhdXRvYCxgc2Nyb2xsYCxgY29udGVudHNgLGB0cmFuc2Zvcm1gLCQsUV19XSxmaWxsOlt7ZmlsbDpbYG5vbmVgLC4uLk4oKV19XSwic3Ryb2tlLXciOlt7c3Ryb2tlOltaLElmLGtmLEFmXX1dLHN0cm9rZTpbe3N0cm9rZTpbYG5vbmVgLC4uLk4oKV19XSwiZm9yY2VkLWNvbG9yLWFkanVzdCI6W3siZm9yY2VkLWNvbG9yLWFkanVzdCI6W2BhdXRvYCxgbm9uZWBdfV19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cHM6eyJjb250YWluZXItbmFtZWQiOltgY29udGFpbmVyLXR5cGVgXSxvdmVyZmxvdzpbYG92ZXJmbG93LXhgLGBvdmVyZmxvdy15YF0sb3ZlcnNjcm9sbDpbYG92ZXJzY3JvbGwteGAsYG92ZXJzY3JvbGwteWBdLGluc2V0OltgaW5zZXQteGAsYGluc2V0LXlgLGBpbnNldC1ic2AsYGluc2V0LWJlYCxgc3RhcnRgLGBlbmRgLGB0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXSwiaW5zZXQteCI6W2ByaWdodGAsYGxlZnRgXSwiaW5zZXQteSI6W2B0b3BgLGBib3R0b21gXSxmbGV4OltgYmFzaXNgLGBncm93YCxgc2hyaW5rYF0sZ2FwOltgZ2FwLXhgLGBnYXAteWBdLHA6W2BweGAsYHB5YCxgcHNgLGBwZWAsYHBic2AsYHBiZWAsYHB0YCxgcHJgLGBwYmAsYHBsYF0scHg6W2BwcmAsYHBsYF0scHk6W2BwdGAsYHBiYF0sbTpbYG14YCxgbXlgLGBtc2AsYG1lYCxgbWJzYCxgbWJlYCxgbXRgLGBtcmAsYG1iYCxgbWxgXSxteDpbYG1yYCxgbWxgXSxteTpbYG10YCxgbWJgXSxzaXplOltgd2AsYGhgXSwiZm9udC1zaXplIjpbYGxlYWRpbmdgXSwiZnZuLW5vcm1hbCI6W2Bmdm4tb3JkaW5hbGAsYGZ2bi1zbGFzaGVkLXplcm9gLGBmdm4tZmlndXJlYCxgZnZuLXNwYWNpbmdgLGBmdm4tZnJhY3Rpb25gXSwiZnZuLW9yZGluYWwiOltgZnZuLW5vcm1hbGBdLCJmdm4tc2xhc2hlZC16ZXJvIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZpZ3VyZSI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1zcGFjaW5nIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZyYWN0aW9uIjpbYGZ2bi1ub3JtYWxgXSwibGluZS1jbGFtcCI6W2BkaXNwbGF5YCxgb3ZlcmZsb3dgXSxyb3VuZGVkOltgcm91bmRlZC1zYCxgcm91bmRlZC1lYCxgcm91bmRlZC10YCxgcm91bmRlZC1yYCxgcm91bmRlZC1iYCxgcm91bmRlZC1sYCxgcm91bmRlZC1zc2AsYHJvdW5kZWQtc2VgLGByb3VuZGVkLWVlYCxgcm91bmRlZC1lc2AsYHJvdW5kZWQtdGxgLGByb3VuZGVkLXRyYCxgcm91bmRlZC1icmAsYHJvdW5kZWQtYmxgXSwicm91bmRlZC1zIjpbYHJvdW5kZWQtc3NgLGByb3VuZGVkLWVzYF0sInJvdW5kZWQtZSI6W2Byb3VuZGVkLXNlYCxgcm91bmRlZC1lZWBdLCJyb3VuZGVkLXQiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtdHJgXSwicm91bmRlZC1yIjpbYHJvdW5kZWQtdHJgLGByb3VuZGVkLWJyYF0sInJvdW5kZWQtYiI6W2Byb3VuZGVkLWJyYCxgcm91bmRlZC1ibGBdLCJyb3VuZGVkLWwiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtYmxgXSwiYm9yZGVyLXNwYWNpbmciOltgYm9yZGVyLXNwYWNpbmcteGAsYGJvcmRlci1zcGFjaW5nLXlgXSwiYm9yZGVyLXciOltgYm9yZGVyLXcteGAsYGJvcmRlci13LXlgLGBib3JkZXItdy1zYCxgYm9yZGVyLXctZWAsYGJvcmRlci13LWJzYCxgYm9yZGVyLXctYmVgLGBib3JkZXItdy10YCxgYm9yZGVyLXctcmAsYGJvcmRlci13LWJgLGBib3JkZXItdy1sYF0sImJvcmRlci13LXgiOltgYm9yZGVyLXctcmAsYGJvcmRlci13LWxgXSwiYm9yZGVyLXcteSI6W2Bib3JkZXItdy10YCxgYm9yZGVyLXctYmBdLCJib3JkZXItY29sb3IiOltgYm9yZGVyLWNvbG9yLXhgLGBib3JkZXItY29sb3IteWAsYGJvcmRlci1jb2xvci1zYCxgYm9yZGVyLWNvbG9yLWVgLGBib3JkZXItY29sb3ItYnNgLGBib3JkZXItY29sb3ItYmVgLGBib3JkZXItY29sb3ItdGAsYGJvcmRlci1jb2xvci1yYCxgYm9yZGVyLWNvbG9yLWJgLGBib3JkZXItY29sb3ItbGBdLCJib3JkZXItY29sb3IteCI6W2Bib3JkZXItY29sb3ItcmAsYGJvcmRlci1jb2xvci1sYF0sImJvcmRlci1jb2xvci15IjpbYGJvcmRlci1jb2xvci10YCxgYm9yZGVyLWNvbG9yLWJgXSx0cmFuc2xhdGU6W2B0cmFuc2xhdGUteGAsYHRyYW5zbGF0ZS15YCxgdHJhbnNsYXRlLW5vbmVgXSwidHJhbnNsYXRlLW5vbmUiOltgdHJhbnNsYXRlYCxgdHJhbnNsYXRlLXhgLGB0cmFuc2xhdGUteWAsYHRyYW5zbGF0ZS16YF0sInNjcm9sbC1tIjpbYHNjcm9sbC1teGAsYHNjcm9sbC1teWAsYHNjcm9sbC1tc2AsYHNjcm9sbC1tZWAsYHNjcm9sbC1tYnNgLGBzY3JvbGwtbWJlYCxgc2Nyb2xsLW10YCxgc2Nyb2xsLW1yYCxgc2Nyb2xsLW1iYCxgc2Nyb2xsLW1sYF0sInNjcm9sbC1teCI6W2BzY3JvbGwtbXJgLGBzY3JvbGwtbWxgXSwic2Nyb2xsLW15IjpbYHNjcm9sbC1tdGAsYHNjcm9sbC1tYmBdLCJzY3JvbGwtcCI6W2BzY3JvbGwtcHhgLGBzY3JvbGwtcHlgLGBzY3JvbGwtcHNgLGBzY3JvbGwtcGVgLGBzY3JvbGwtcGJzYCxgc2Nyb2xsLXBiZWAsYHNjcm9sbC1wdGAsYHNjcm9sbC1wcmAsYHNjcm9sbC1wYmAsYHNjcm9sbC1wbGBdLCJzY3JvbGwtcHgiOltgc2Nyb2xsLXByYCxgc2Nyb2xsLXBsYF0sInNjcm9sbC1weSI6W2BzY3JvbGwtcHRgLGBzY3JvbGwtcGJgXSx0b3VjaDpbYHRvdWNoLXhgLGB0b3VjaC15YCxgdG91Y2gtcHpgXSwidG91Y2gteCI6W2B0b3VjaGBdLCJ0b3VjaC15IjpbYHRvdWNoYF0sInRvdWNoLXB6IjpbYHRvdWNoYF19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczp7ImZvbnQtc2l6ZSI6W2BsZWFkaW5nYF19LHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwczpbYGNvbnRhaW5lci10eXBlYF0sb3JkZXJTZW5zaXRpdmVNb2RpZmllcnM6W2AqYCxgKipgLGBhZnRlcmAsYGJhY2tkcm9wYCxgYmVmb3JlYCxgZGV0YWlscy1jb250ZW50YCxgZmlsZWAsYGZpcnN0LWxldHRlcmAsYGZpcnN0LWxpbmVgLGBtYXJrZXJgLGBwbGFjZWhvbGRlcmAsYHNlbGVjdGlvbmBdfX0pO2Z1bmN0aW9uIGVwKC4uLmUpe3JldHVybiAkZihUZChlKSl9ZnVuY3Rpb24gdHAoZSx0KXtyZXR1cm4gd2UoKT8oVGUoZSx0KSwhMCk6ITF9ZnVuY3Rpb24gbnAoZSl7bGV0IHQ9ITEsbixyPUNlKCEwKTtyZXR1cm4oKC4uLmkpPT4odHx8PShuPXIucnVuKCgpPT5lKC4uLmkpKSwhMCksbikpfXZhciBycD10eXBlb2Ygd2luZG93PGB1YCYmdHlwZW9mIGRvY3VtZW50PGB1YDt0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8YHVgJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7dmFyIGlwPWU9PmUhPT12b2lkIDAsYXA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvcD1lPT5hcC5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWAsc3A9Y3AoKTtmdW5jdGlvbiBjcCgpe3ZhciBlLHQ7cmV0dXJuIHJwJiYhISgoZT13aW5kb3cpIT1udWxsJiYoZT1lLm5hdmlnYXRvcikhPW51bGwmJmUudXNlckFnZW50KSYmKC9pUCg/OmFkfGhvbmV8b2QpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KXx8KCh0PXdpbmRvdyk9PW51bGx8fCh0PXQubmF2aWdhdG9yKT09bnVsbD92b2lkIDA6dC5tYXhUb3VjaFBvaW50cyk+MiYmL2lQYWR8TWFjaW50b3NoLy50ZXN0KHdpbmRvdz8ubmF2aWdhdG9yLnVzZXJBZ2VudCkpfWZ1bmN0aW9uIGxwKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIHVwKGUpe3JldHVybiBlfHxZKCl9ZnVuY3Rpb24gZHAoZSl7aWYoIXJwKXJldHVybiBlO2xldCB0PTAsbixyLGk9KCk9PnstLXQsciYmdDw9MCYmKHIuc3RvcCgpLG49dm9pZCAwLHI9dm9pZCAwKX07cmV0dXJuKCguLi5hKT0+KHQrPTEscnx8KHI9Q2UoITApLG49ci5ydW4oKCk9PmUoLi4uYSkpKSx0cChpKSxuKSl9ZnVuY3Rpb24gZnAoZSl7cmV0dXJuIFJ0KEgoZSk/bmV3IFByb3h5KHt9LHtnZXQodCxuLHIpe3JldHVybiB0bihSZWZsZWN0LmdldChlLnZhbHVlLG4scikpfSxzZXQodCxuLHIpe3JldHVybiBIKGUudmFsdWVbbl0pJiYhSChyKT9lLnZhbHVlW25dLnZhbHVlPXI6ZS52YWx1ZVtuXT1yLCEwfSxkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGUudmFsdWUsbil9LGhhcyh0LG4pe3JldHVybiBSZWZsZWN0LmhhcyhlLnZhbHVlLG4pfSxvd25LZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKGUudmFsdWUpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKXtyZXR1cm57ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0pOmUpfWZ1bmN0aW9uIHBwKGUpe3JldHVybiBmcChxcyhlKSl9ZnVuY3Rpb24gbXAoZSwuLi50KXtsZXQgbj10LmZsYXQoKSxyPW5bMF07cmV0dXJuIHBwKCgpPT5PYmplY3QuZnJvbUVudHJpZXModHlwZW9mIHI9PWBmdW5jdGlvbmA/T2JqZWN0LmVudHJpZXMoY24oZSkpLmZpbHRlcigoW2UsdF0pPT4hcihubih0KSxlKSk6T2JqZWN0LmVudHJpZXMoY24oZSkpLmZpbHRlcihlPT4hbi5pbmNsdWRlcyhlWzBdKSkpKX1mdW5jdGlvbiBocChlLHQ9MWU0KXtyZXR1cm4gc24oKG4scik9PntsZXQgaT1ubihlKSxhLG89KCk9PnNldFRpbWVvdXQoKCk9PntpPW5uKGUpLHIoKX0sbm4odCkpO3JldHVybiB0cCgoKT0+e2NsZWFyVGltZW91dChhKX0pLHtnZXQoKXtyZXR1cm4gbigpLGl9LHNldChlKXtpPWUscigpLGNsZWFyVGltZW91dChhKSxhPW8oKX19fSl9ZnVuY3Rpb24gZ3AoZSx0KXt1cCh0KSYmV2koZSx0KX1mdW5jdGlvbiBfcChlLHQsbil7cmV0dXJuIGhyKGUsdCx7Li4ubixpbW1lZGlhdGU6ITB9KX12YXIgdnA9cnA/d2luZG93OnZvaWQgMDtycCYmd2luZG93LmRvY3VtZW50LHJwJiZ3aW5kb3cubmF2aWdhdG9yLHJwJiZ3aW5kb3cubG9jYXRpb247ZnVuY3Rpb24geXAoZSl7bGV0IHQ9bm4oZSk7cmV0dXJuIHQ/LiRlbD8/dH1mdW5jdGlvbiBicCguLi5lKXtsZXQgdD0oZSx0LG4scik9PihlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpKSxuPXFzKCgpPT57bGV0IHQ9bHAobm4oZVswXSkpLmZpbHRlcihlPT5lIT1udWxsKTtyZXR1cm4gdC5ldmVyeShlPT50eXBlb2YgZSE9YHN0cmluZ2ApP3Q6dm9pZCAwfSk7cmV0dXJuIF9wKCgpPT5bbi52YWx1ZT8ubWFwKGU9PnlwKGUpKT8/W3ZwXS5maWx0ZXIoZT0+ZSE9bnVsbCksbHAobm4obi52YWx1ZT9lWzFdOmVbMF0pKSxscCh0bihuLnZhbHVlP2VbMl06ZVsxXSkpLG5uKG4udmFsdWU/ZVszXTplWzJdKV0sKFtlLG4scixpXSxhLG8pPT57aWYoIWU/Lmxlbmd0aHx8IW4/Lmxlbmd0aHx8IXI/Lmxlbmd0aClyZXR1cm47bGV0IHM9b3AoaSk/ey4uLml9OmksYz1lLmZsYXRNYXAoZT0+bi5mbGF0TWFwKG49PnIubWFwKHI9PnQoZSxuLHIscykpKSk7bygoKT0+e2MuZm9yRWFjaChlPT5lKCkpfSl9LHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiB4cCgpe2xldCBlPVp0KCExKSx0PVkoKTtyZXR1cm4gdCYmVmkoKCk9PntlLnZhbHVlPSEwfSx0KSxlfWZ1bmN0aW9uIFNwKGUpe2xldCB0PXhwKCk7cmV0dXJuIHFzKCgpPT4odC52YWx1ZSwhIWUoKSkpfWZ1bmN0aW9uIENwKGUpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnR5cGVvZiBlPT1gc3RyaW5nYD90PT50LmtleT09PWU6QXJyYXkuaXNBcnJheShlKT90PT5lLmluY2x1ZGVzKHQua2V5KTooKT0+ITB9ZnVuY3Rpb24gd3AoLi4uZSl7bGV0IHQsbixyPXt9O2UubGVuZ3RoPT09Mz8odD1lWzBdLG49ZVsxXSxyPWVbMl0pOmUubGVuZ3RoPT09Mj90eXBlb2YgZVsxXT09YG9iamVjdGA/KHQ9ITAsbj1lWzBdLHI9ZVsxXSk6KHQ9ZVswXSxuPWVbMV0pOih0PSEwLG49ZVswXSk7bGV0e3RhcmdldDppPXZwLGV2ZW50TmFtZTphPWBrZXlkb3duYCxwYXNzaXZlOm89ITEsZGVkdXBlOnM9ITF9PXIsYz1DcCh0KTtyZXR1cm4gYnAoaSxhLGU9PntlLnJlcGVhdCYmbm4ocyl8fGMoZSkmJm4oZSl9LG8pfWZ1bmN0aW9uIFRwKGUpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBFcChlLHQsbj17fSl7bGV0e3dpbmRvdzpyPXZwLC4uLml9PW4sYSxvPVNwKCgpPT5yJiZgUmVzaXplT2JzZXJ2ZXJgaW4gcikscz0oKT0+e2EmJj0oYS5kaXNjb25uZWN0KCksdm9pZCAwKX0sYz1ocihxcygoKT0+e2xldCB0PW5uKGUpO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGU9PnlwKGUpKTpbeXAodCldfSksZT0+e2lmKHMoKSxvLnZhbHVlJiZyKXthPW5ldyBSZXNpemVPYnNlcnZlcih0KTtmb3IobGV0IHQgb2YgZSl0JiZhLm9ic2VydmUodCxpKX19LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHBvc3RgfSksbD0oKT0+e3MoKSxjKCl9O3JldHVybiB0cChsKSx7aXNTdXBwb3J0ZWQ6byxzdG9wOmx9fWZ1bmN0aW9uIERwKGUsdCxuLHI9e30pe3ZhciBpLGE7bGV0e2Nsb25lOm89ITEscGFzc2l2ZTpzPSExLGV2ZW50TmFtZTpjLGRlZXA6bD0hMSxkZWZhdWx0VmFsdWU6dSxzaG91bGRFbWl0OmR9PXIsZj1ZKCkscD1ufHxmPy5lbWl0fHwoZj09bnVsbHx8KGk9Zi4kZW1pdCk9PW51bGw/dm9pZCAwOmkuYmluZChmKSl8fChmPT1udWxsfHwoYT1mLnByb3h5KT09bnVsbHx8KGE9YS4kZW1pdCk9PW51bGw/dm9pZCAwOmEuYmluZChmPy5wcm94eSkpLG09Yzt0fHw9YG1vZGVsVmFsdWVgLG18fD1gdXBkYXRlOiR7dC50b1N0cmluZygpfWA7bGV0IGg9ZT0+bz90eXBlb2Ygbz09YGZ1bmN0aW9uYD9vKGUpOlRwKGUpOmUsZz0oKT0+aXAoZVt0XSk/aChlW3RdKTp1LF89ZT0+e2Q/ZChlKSYmcChtLGUpOnAobSxlKX07aWYocyl7bGV0IG49WHQoZygpKSxyPSExO3JldHVybiBocigoKT0+ZVt0XSxlPT57cnx8KHI9ITAsbi52YWx1ZT1oKGUpLFZuKCgpPT5yPSExKSl9KSxocihuLG49PnshciYmKG4hPT1lW3RdfHxsKSYmXyhuKX0se2RlZXA6bH0pLG59cmV0dXJuIHFzKHtnZXQoKXtyZXR1cm4gZygpfSxzZXQoZSl7XyhlKX19KX1mdW5jdGlvbiBPcChlKXtyZXR1cm4gZT9lLmZsYXRNYXAoZT0+ZS50eXBlPT09Rz9PcChlLmNoaWxkcmVuKTpbZV0pOltdfXZhciBrcD1Kcih7bmFtZTpgUHJpbWl0aXZlU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe3JldHVybigpPT57aWYoIW4uZGVmYXVsdClyZXR1cm4gbnVsbDtsZXQgZT1PcChuLmRlZmF1bHQoKSkscj1lLmZpbmRJbmRleChlPT5lLnR5cGUhPT1LKTtpZihyPT09LTEpcmV0dXJuIGU7bGV0IGk9ZVtyXTtkZWxldGUgaS5wcm9wcz8ucmVmO2xldCBhPWkucHJvcHM/Q3ModCxpLnByb3BzKTp0LG89Z3Moey4uLmkscHJvcHM6e319LGEpO3JldHVybiBlLmxlbmd0aD09PTE/bzooZVtyXT1vLGUpfX19KSxBcD1bYGFyZWFgLGBpbWdgLGBpbnB1dGBdLGpwPUpyKHtuYW1lOmBQcmltaXRpdmVgLGluaGVyaXRBdHRyczohMSxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFzOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0OmBkaXZgfX0sc2V0dXAoZSx7YXR0cnM6dCxzbG90czpufSl7bGV0IHI9ZS5hc0NoaWxkP2B0ZW1wbGF0ZWA6ZS5hcztyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgJiZBcC5pbmNsdWRlcyhyKT8oKT0+SnMocix0KTpyPT09YHRlbXBsYXRlYD8oKT0+SnMoa3AsdCx7ZGVmYXVsdDpuLmRlZmF1bHR9KTooKT0+SnMoZS5hcyx0LHtkZWZhdWx0Om4uZGVmYXVsdH0pfX0pLE1wPUpyKHtfX25hbWU6YEJ1dHRvbmAscHJvcHM6e3ZhcmlhbnQ6e30sc2l6ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOntkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KHRzKCksc3ModG4oanApLHsiZGF0YS1zbG90IjpgYnV0dG9uYCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnQsImRhdGEtc2l6ZSI6ZS5zaXplLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsY2xhc3M6TCh0bihlcCkodG4oTnApKHt2YXJpYW50OmUudmFyaWFudCxzaXplOmUuc2l6ZX0pLHQuY2xhc3MpKX0se2RlZmF1bHQ6aXIoKCk9PltvYShuLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgZGF0YS12YXJpYW50YCxgZGF0YS1zaXplYCxgYXNgLGBhcy1jaGlsZGAsYGNsYXNzYF0pKX19KSxOcD1PZChgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBiZy1jbGlwLXBhZGRpbmcgdGV4dC1zbSBmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIGFjdGl2ZTpub3QtYXJpYS1baGFzcG9wdXBdOnRyYW5zbGF0ZS15LXB4IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZ3JvdXAvYnV0dG9uIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgc2VsZWN0LW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLG91dGxpbmU6YGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwIGFyaWEtZXhwYW5kZWQ6Ymctc2Vjb25kYXJ5IGFyaWEtZXhwYW5kZWQ6dGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLGRlc3RydWN0aXZlOmBiZy1kZXN0cnVjdGl2ZS8xMCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMCB0ZXh0LWRlc3RydWN0aXZlIGZvY3VzLXZpc2libGU6Ym9yZGVyLWRlc3RydWN0aXZlLzQwIGRhcms6aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMzBgLGxpbms6YHRleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lYH0sc2l6ZTp7ZGVmYXVsdDpgaC04IGdhcC0xLjUgcHgtMi41IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTIgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0yYCx4czpgaC02IGdhcC0xIHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSBweC0yIHRleHQteHMgaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLHNtOmBoLTcgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIHB4LTIuNSB0ZXh0LVswLjhyZW1dIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEuNSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS0zLjVgLGxnOmBoLTkgZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLGljb246YHNpemUtOGAsImljb24teHMiOmBzaXplLTYgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLCJpY29uLXNtIjpgc2l6ZS03IHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEycHgpXSBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZ2AsImljb24tbGciOmBzaXplLTlgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YCxzaXplOmBkZWZhdWx0YH19KSxQcD1bYGRhdGEtc2l6ZWBdLEZwPUpyKHtfX25hbWU6YENhcmRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxzaXplOntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZGAsImRhdGEtc2l6ZSI6ZS5zaXplLGNsYXNzOkwodG4oZXApKGByaW5nLWZvcmVncm91bmQvMTAgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZCBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBweS00IHRleHQtc20gcmluZy0xIGhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wIGhhcy1bPmltZzpmaXJzdC1jaGlsZF06cHQtMCBkYXRhLVtzaXplPXNtXTpnYXAtMyBkYXRhLVtzaXplPXNtXTpweS0zIGRhdGEtW3NpemU9c21dOmhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wICo6W2ltZzpmaXJzdC1jaGlsZF06cm91bmRlZC10LXhsICo6W2ltZzpsYXN0LWNoaWxkXTpyb3VuZGVkLWIteGwgZ3JvdXAvY2FyZCBmbGV4IGZsZXgtY29sYCx0LmNsYXNzKSl9LFtvYShuLiRzbG90cyxgZGVmYXVsdGApXSwxMCxQcCkpfX0pLElwPUpyKHtfX25hbWU6YENhcmRDb250ZW50YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1jb250ZW50YCxjbGFzczpMKHRuKGVwKShgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTNgLHQuY2xhc3MpKX0sW29hKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxMcD1Kcih7X19uYW1lOmBDYXJkSGVhZGVyYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1oZWFkZXJgLGNsYXNzOkwodG4oZXApKGBnYXAtMSByb3VuZGVkLXQteGwgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTMgWy5ib3JkZXItYl06cGItNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOlsuYm9yZGVyLWJdOnBiLTMgZ3JvdXAvY2FyZC1oZWFkZXIgQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gaXRlbXMtc3RhcnQgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dIGhhcy1kYXRhLVtzbG90PWNhcmQtZGVzY3JpcHRpb25dOmdyaWQtcm93cy1bYXV0b19hdXRvXWAsdC5jbGFzcykpfSxbb2EoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFJwPUpyKHtfX25hbWU6YENhcmRUaXRsZWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4odHMoKSxvcyhgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtdGl0bGVgLGNsYXNzOkwodG4oZXApKGB0ZXh0LWJhc2UgbGVhZGluZy1zbnVnIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6dGV4dC1zbSBmb250LWhlYWRpbmdgLHQuY2xhc3MpKX0sW29hKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSx6cD1gbGxtZ3dBZG1pbktleWA7ZnVuY3Rpb24gQnAoKXt0cnl7cmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oenApPz9gYH1jYXRjaHtyZXR1cm5gYH19ZnVuY3Rpb24gVnAoZSl7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oenAsZSl9Y2F0Y2h7fX1mdW5jdGlvbiBIcCgpe3RyeXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHpwKX1jYXRjaHt9fXZhciBVcD1HdShgYXV0aGAse3N0YXRlOigpPT4oe2FwaUtleTpCcCgpLGVycm9yOmBgfSksZ2V0dGVyczp7aXNBdXRoZW50aWNhdGVkOmU9PmUuYXBpS2V5IT09YGB9LGFjdGlvbnM6e3N1Ym1pdChlKXtlJiYodGhpcy5hcGlLZXk9ZSx0aGlzLmVycm9yPWBgLFZwKGUpKX0scmVqZWN0KGUpe3RoaXMuYXBpS2V5PWBgLHRoaXMuZXJyb3I9ZSxIcCgpfX19KSxXcD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXR1cztjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLHRoaXMubmFtZT1gQWRtaW5BcGlFcnJvcmAsdGhpcy5zdGF0dXM9dH19O2FzeW5jIGZ1bmN0aW9uIEdwKGUsdCl7bGV0IG49YCR7dH06IEhUVFAgJHtlLnN0YXR1c31gO3RyeXtyZXR1cm4oYXdhaXQgZS5qc29uKCkpLmVycm9yPy5tZXNzYWdlfHxufWNhdGNoe3JldHVybiBufX1hc3luYyBmdW5jdGlvbiBLcChlKXtsZXQgdD1VcCgpLG49dC5hcGlLZXkscj1hd2FpdCBmZXRjaChlLHtjcmVkZW50aWFsczpgc2FtZS1vcmlnaW5gLGhlYWRlcnM6bj97IngtYXBpLWtleSI6bn06e319KTtpZighci5vayl7bGV0IGk9YXdhaXQgR3AocixlKTt0aHJvdyhyLnN0YXR1cz09PTQwMXx8ci5zdGF0dXM9PT00MDMpJiZ0LmFwaUtleT09PW4mJnQucmVqZWN0KGBpbnZhbGlkIGtleSwgb3Igbm90IGFuIGFkbWluYCksbmV3IFdwKGksci5zdGF0dXMpfXJldHVybiBhd2FpdCByLmpzb24oKX1mdW5jdGlvbiBxcChlKXtyZXR1cm4gZXx8KHR5cGVvZiBkb2N1bWVudD5gdWA/dm9pZCAwOmRvY3VtZW50KX1mdW5jdGlvbiBKcCh7aW50ZXJ2YWxNczplLHRpY2s6dCxkb2M6bn0pe2xldCByPXFwKG4pLGksYT0hMTtmdW5jdGlvbiBvKCl7aSE9PXZvaWQgMCYmKGNsZWFySW50ZXJ2YWwoaSksaT12b2lkIDApfWZ1bmN0aW9uIHMoKXtvKCksaT1zZXRJbnRlcnZhbCh0LGUpfWZ1bmN0aW9uIGMoKXtyJiYoci5oaWRkZW4/bygpOih0KCkscygpKSl9ZnVuY3Rpb24gbCgpe2F8fChhPSEwLHI/LmhpZGRlbnx8KHQoKSxzKCkpLHI/LmFkZEV2ZW50TGlzdGVuZXIoYHZpc2liaWxpdHljaGFuZ2VgLGMpKX1mdW5jdGlvbiB1KCl7YT0hMSxvKCkscj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdmlzaWJpbGl0eWNoYW5nZWAsYyl9cmV0dXJue3N0YXJ0Omwsc3RvcDp1fX12YXIgWXA9e3N1Y2Nlc3M6M2UzLGluZm86M2UzLGVycm9yOjZlM30sWHA9R3UoYHRvYXN0c2Ase3N0YXRlOigpPT4oe3RvYXN0czpbXSxuZXh0SWQ6MSx0aW1lcnM6e319KSxhY3Rpb25zOntwdXNoKHtraW5kOmUsbWVzc2FnZTp0LHRpbWVvdXRNczpufSl7bGV0IHI9dGhpcy50b2FzdHNbdGhpcy50b2FzdHMubGVuZ3RoLTFdO2lmKHImJnIua2luZD09PWUmJnIubWVzc2FnZT09PXQpcmV0dXJuO2xldCBpPXRoaXMubmV4dElkKyssYT17aWQ6aSxraW5kOmUsbWVzc2FnZTp0LHRpbWVvdXRNczpuPz9ZcFtlXX07aWYodGhpcy50b2FzdHMucHVzaChhKSx0aGlzLnRvYXN0cy5sZW5ndGg+Myl7bGV0IGU9dGhpcy50b2FzdHMuc2hpZnQoKTtlJiZ0aGlzLmNsZWFyVGltZXIoZS5pZCl9dGhpcy50aW1lcnNbaV09c2V0VGltZW91dCgoKT0+dGhpcy5kaXNtaXNzKGkpLGEudGltZW91dE1zKX0sZGlzbWlzcyhlKXt0aGlzLmNsZWFyVGltZXIoZSksdGhpcy50b2FzdHM9dGhpcy50b2FzdHMuZmlsdGVyKHQ9PnQuaWQhPT1lKX0sY2xlYXJUaW1lcihlKXtsZXQgdD10aGlzLnRpbWVyc1tlXTt0IT09dm9pZCAwJiYoY2xlYXJUaW1lb3V0KHQpLGRlbGV0ZSB0aGlzLnRpbWVyc1tlXSl9fX0pLFpwPTVlMyxRcD1HdShgZGFzaGJvYXJkYCx7c3RhdGU6KCk9Pih7b3ZlcnZpZXc6bnVsbCx1c2FnZTpudWxsLHRhcmdldHM6bnVsbCxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLHBvbGxlcjp2b2lkIDAscmVmcmVzaGluZzohMSx0b2FzdGVkRm9yRmFpbHVyZTohMX0pLGFjdGlvbnM6e2FzeW5jIHJlZnJlc2goKXtpZihVcCgpLmlzQXV0aGVudGljYXRlZCYmIXRoaXMucmVmcmVzaGluZyl7dGhpcy5yZWZyZXNoaW5nPSEwO3RyeXthd2FpdCB0aGlzLmRvUmVmcmVzaCgpfWZpbmFsbHl7dGhpcy5yZWZyZXNoaW5nPSExfX19LGFzeW5jIGRvUmVmcmVzaCgpe2xldCBlPXRoaXMub3ZlcnZpZXchPT1udWxsfHx0aGlzLnVzYWdlIT09bnVsbHx8dGhpcy50YXJnZXRzIT09bnVsbCxbdCxuLHJdPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbS3AoYC9hZG1pbi9hcGkvb3ZlcnZpZXdgKSxLcChgL2FkbWluL2FwaS91c2FnZWApLEtwKGAvYWRtaW4vYXBpL3RhcmdldHNgKV0pO3Quc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLm92ZXJ2aWV3PXQudmFsdWUpLG4uc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLnVzYWdlPW4udmFsdWUpLHIuc3RhdHVzPT09YGZ1bGZpbGxlZGAmJih0aGlzLnRhcmdldHM9ci52YWx1ZSk7bGV0IGk9W107aWYodC5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpLnB1c2goe2xhYmVsOmBvdmVydmlld2AscmVhc29uOnQucmVhc29ufSksbi5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpLnB1c2goe2xhYmVsOmB1c2FnZWAscmVhc29uOm4ucmVhc29ufSksci5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpLnB1c2goe2xhYmVsOmB0YXJnZXRzYCxyZWFzb246ci5yZWFzb259KSxpLmxlbmd0aD09PTApe3RoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUsdGhpcy5lcnJvcj1gYCx0aGlzLnRvYXN0ZWRGb3JGYWlsdXJlPSExO3JldHVybn1pLnNvbWUoKHtyZWFzb246ZX0pPT5lIGluc3RhbmNlb2YgV3AmJihlLnN0YXR1cz09PTQwMXx8ZS5zdGF0dXM9PT00MDMpKXx8KGkubGVuZ3RoPDMmJih0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlKSx0aGlzLmVycm9yPWkubWFwKCh7bGFiZWw6ZSxyZWFzb246dH0pPT5gJHtlfTogJHt0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOlN0cmluZyh0KX1gKS5qb2luKGA7IGApLGUmJiF0aGlzLnRvYXN0ZWRGb3JGYWlsdXJlJiZYcCgpLnB1c2goe2tpbmQ6YGVycm9yYCxtZXNzYWdlOmBEYXNoYm9hcmQgcmVmcmVzaCBmYWlsZWQ6ICR7dGhpcy5lcnJvcn1gfSksdGhpcy50b2FzdGVkRm9yRmFpbHVyZT0hMCl9LHN0YXJ0UG9sbGluZygpe3RoaXMucG9sbGVyfHwodGhpcy5wb2xsZXI9SnAoe2ludGVydmFsTXM6WnAsdGljazooKT0+dm9pZCB0aGlzLnJlZnJlc2goKX0pLHRoaXMucG9sbGVyLnN0YXJ0KCkpfX19KSwkcD1bYGhvbWVgLGBzcGVuZGAsYGNvbnN1bWVyc2AsYG1vZGVsc2AsYHJlbGlhYmlsaXR5YCxgY29uZmlnYCxgdGFyZ2V0c2BdLGVtPWBob21lYCx0bT1be2lkOmBob21lYCxsYWJlbDpgSG9tZWAsaWNvbjppZH0se2lkOmBzcGVuZGAsbGFiZWw6YFNwZW5kYCxpY29uOnhkfSx7aWQ6YGNvbnN1bWVyc2AsbGFiZWw6YENvbnN1bWVyc2AsaWNvbjokdX0se2lkOmBtb2RlbHNgLGxhYmVsOmBNb2RlbHNgLGljb246bGR9LHtpZDpgcmVsaWFiaWxpdHlgLGxhYmVsOmBSZWxpYWJpbGl0eWAsaWNvbjplZH0se2lkOmBjb25maWdgLGxhYmVsOmBDb25maWdgLGljb246YWR9LHtpZDpgdGFyZ2V0c2AsbGFiZWw6YE1DUCAmIEFnZW50c2AsaWNvbjpkZH1dO2Z1bmN0aW9uIG5tKGUpe3JldHVybiAkcC5pbmNsdWRlcyhlKX12YXIgcm09W2AyNGhgLGA0OGhgLGA3ZGAsYDE0ZGAsYDMwZGAsYDNtb2AsYDZtb2AsYDEybW9gXSxpbT17IjI0aCI6e3dpbmRvdzpgaG91cmAsc3BhbjoyNH0sIjQ4aCI6e3dpbmRvdzpgaG91cmAsc3Bhbjo0OH0sIjdkIjp7d2luZG93OmBkYXlgLHNwYW46N30sIjE0ZCI6e3dpbmRvdzpgZGF5YCxzcGFuOjE0fSwiMzBkIjp7d2luZG93OmBkYXlgLHNwYW46MzB9LCIzbW8iOnt3aW5kb3c6YG1vbnRoYCxzcGFuOjN9LCI2bW8iOnt3aW5kb3c6YG1vbnRoYCxzcGFuOjZ9LCIxMm1vIjp7d2luZG93OmBtb250aGAsc3BhbjoxMn19LGFtPXtob3VyOjQ4LGRheTozNSxtb250aDoxM30sb209W2Bub25lYCxgcHJldmBdLHNtPWBub25lYDtmdW5jdGlvbiBjbShlKXtsZXR7d2luZG93OnQsc3BhbjpufT1pbVtlXSxyPWFtW3RdO3JldHVybiAyKm4+cj97YXZhaWxhYmxlOiExLG9mZnNldDpuLHJlYXNvbjpgcmV0ZW50aW9uIGxpbWl0YH06e2F2YWlsYWJsZTohMCxvZmZzZXQ6bn19ZnVuY3Rpb24gbG0oZSx0KXtyZXR1cm4gZT09PWBtb250aGA/e3dpbmRvdzpgbW9udGhgLHNwYW46dH06ZT09PWBkYXlgP3t3aW5kb3c6YGRheWAsc3Bhbjp0fTp7d2luZG93OmBkYXlgLHNwYW46N319ZnVuY3Rpb24gdW0oZSx0KXtyZXR1cm4gZT09PWBob3VyYD9gU2hvd2luZyBsYXN0ICR7bG0oZSx0KS5zcGFufSBkYXlzIOKAlCBwZXItaG91ciBkYXRhIGlzIG5vdCBrZXB0IGZvciB0aGlzIHZpZXcuYDpudWxsfWZ1bmN0aW9uIGRtKGUpe3JldHVybiBybS5pbmNsdWRlcyhlKX1mdW5jdGlvbiBmbShlKXtyZXR1cm4gb20uaW5jbHVkZXMoZSl9ZnVuY3Rpb24gcG0oZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0IG4gb2YgZS5zY29wZSl0LmFwcGVuZChgc2NvcGVgLG4pO3JldHVybiB0LnNldChgbWV0cmljYCxlLm1ldHJpYyksdC5zZXQoYHdpbmRvd2AsZS53aW5kb3cpLHQuc2V0KGBzcGFuYCxTdHJpbmcoZS5zcGFuKSksZS5vZmZzZXQmJnQuc2V0KGBvZmZzZXRgLFN0cmluZyhlLm9mZnNldCkpLGAvYWRtaW4vYXBpL3VzYWdlL3Nlcmllcz8ke3QudG9TdHJpbmcoKX1gfWZ1bmN0aW9uIG1tKGUpe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIHQuc2V0KGBraW5kYCxlLmtpbmQpLGUud2luZG93JiZ0LnNldChgd2luZG93YCxlLndpbmRvdyksZS5zcGFuIT09dm9pZCAwJiZ0LnNldChgc3BhbmAsU3RyaW5nKGUuc3BhbikpLGUub2Zmc2V0JiZ0LnNldChgb2Zmc2V0YCxTdHJpbmcoZS5vZmZzZXQpKSxlLm1ldHJpY3MmJmUubWV0cmljcy5sZW5ndGg+MCYmdC5zZXQoYG1ldHJpY3NgLGUubWV0cmljcy5qb2luKGAsYCkpLGUubGltaXQhPT12b2lkIDAmJnQuc2V0KGBsaW1pdGAsU3RyaW5nKGUubGltaXQpKSxlLmdyb3VwJiZ0LnNldChgZ3JvdXBgLGUuZ3JvdXApLGUudXNlciYmdC5zZXQoYHVzZXJgLGUudXNlciksZS5tb2RlbCYmdC5zZXQoYG1vZGVsYCxlLm1vZGVsKSxlLnRhcmdldCYmdC5zZXQoYHRhcmdldGAsZS50YXJnZXQpLGAvYWRtaW4vYXBpL3VzYWdlL3RvdGFscz8ke3QudG9TdHJpbmcoKX1gfXZhciBobT1HdShgbmF2YCx7c3RhdGU6KCk9Pih7cGFnZTplbSxwYXJhbXM6e319KSxhY3Rpb25zOntnb1RvKGUsdD17fSl7dGhpcy5wYWdlPWUsdGhpcy5wYXJhbXM9dH19fSksZ209SnIoe19fbmFtZTpgU2tlbGV0b25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHRzKCksb3MoYGRpdmAseyJkYXRhLXNsb3QiOmBza2VsZXRvbmAsY2xhc3M6TCh0bihlcCkoYGFuaW1hdGUtcHVsc2Ugcm91bmRlZC1tZCBiZy1tdXRlZCBtb3Rpb24tcmVkdWNlOmFuaW1hdGUtbm9uZWAsdC5jbGFzcykpfSxudWxsLDIpKX19KTtleHBvcnR7WnUgYXMgJCxLaSBhcyAkbixHdCBhcyAkcixabyBhcyAkdCx2cCBhcyBBLGxyIGFzIEFuLGhyIGFzIEFyLG91IGFzIEF0LHNwIGFzIEIsVGEgYXMgQm4sU2UgYXMgQnIsRmMgYXMgQnQsTHAgYXMgQyxuZSBhcyBDaSx2YSBhcyBDbixKYSBhcyBDcixsdSBhcyBDdCxqcCBhcyBELGhzIGFzIERuLEZyIGFzIERyLHB1IGFzIER0LE1wIGFzIEUscXIgYXMgRW4sWnIgYXMgRXIsc3UgYXMgRXQsRXAgYXMgRixZcyBhcyBGbixpciBhcyBGcix6bCBhcyBGdCxPZCBhcyBHLEJpIGFzIEduLEJlIGFzIEdyLEsgYXMgR3QsaHAgYXMgSCxDcyBhcyBIbixobiBhcyBIcixRbCBhcyBIdCxEcCBhcyBJLGNyIGFzIEluLGJhIGFzIElyLEtsIGFzIEl0LHZkIGFzIEosTmkgYXMgSm4sYm4gYXMgSnIsRyBhcyBKdCxnZCBhcyBLLFdpIGFzIEtuLENlIGFzIEtyLE9uIGFzIEt0LG5wIGFzIEwsWnMgYXMgTG4sYXIgYXMgTHIsVmwgYXMgTHQseXAgYXMgTSx3aSBhcyBNbixwciBhcyBNcix6YyBhcyBNdCxicCBhcyBOLENpIGFzIE5uLG1yIGFzIE5yLHlsIGFzIE50LGtwIGFzIE8sSnMgYXMgT24sUXMgYXMgT3IsZGMgYXMgT3QseHAgYXMgUCxTaSBhcyBQbixPYSBhcyBQcixibCBhcyBQdCxRdSBhcyBRLHFpIGFzIFFuLEggYXMgUXIsQXIgYXMgUXQsZHAgYXMgUixCcyBhcyBSbixYcyBhcyBScixIbCBhcyBSdCxScCBhcyBTLHZlIGFzIFNpLG1hIGFzIFNuLFlyIGFzIFNyLGN1IGFzIFN0LEZwIGFzIFQsWSBhcyBUbix4YSBhcyBUcixnbCBhcyBUdCxncCBhcyBVLFZuIGFzIFVuLGduIGFzIFVyLFZyIGFzIFV0LG1wIGFzIFYsRWEgYXMgVm4sRGUgYXMgVnIsZXUgYXMgVnQsZXAgYXMgVyxNaSBhcyBXbixzbiBhcyBXcixMciBhcyBXdCxyZCBhcyBYLFZpIGFzIFhuLFV0IGFzIFhyLFFvIGFzIFh0LGJkIGFzIFksWWkgYXMgWW4sS3QgYXMgWXIsQWkgYXMgWXQsdWQgYXMgWixKaSBhcyBabixXdCBhcyBacixCbyBhcyBadCxYcCBhcyBfLE8gYXMgX2ksSnIgYXMgX24sdXIgYXMgX3IsR3UgYXMgX3QsaW0gYXMgYSxCdCBhcyBhaSxwcyBhcyBhbix0ciBhcyBhcixYdSBhcyBhdCxLcCBhcyBiLHVlIGFzIGJpLHlhIGFzIGJuLHVzIGFzIGJyLEVsIGFzIGJ0LGxtIGFzIGMsVnQgYXMgY2ksb3MgYXMgY24saWEgYXMgY3IsZmQgYXMgY3QscG0gYXMgZCxWIGFzIGRpLERvIGFzIGRuLHRhIGFzIGRyLG9kIGFzIGR0LHF0IGFzIGVpLERuIGFzIGVuLEdpIGFzIGVyLGNkIGFzIGV0LG1tIGFzIGYsZG4gYXMgZmksYWEgYXMgZm4sZWEgYXMgZnIsQ2QgYXMgZnQsUXAgYXMgZyx0biBhcyBnaSxEaSBhcyBnbixLciBhcyBncixqdSBhcyBndCxubSBhcyBoLGVuIGFzIGhpLHEgYXMgaG4sbmMgYXMgaHIsc2QgYXMgaHQscm0gYXMgaSxSdCBhcyBpaSxxcyBhcyBpbixzciBhcyBpcixfZCBhcyBpdCx3cCBhcyBqLGJpIGFzIGpuLGZyIGFzIGpyLHhsIGFzIGp0LE9wIGFzIGssTW4gYXMga24sJHMgYXMga3IsZGwgYXMga3QsZm0gYXMgbCxadCBhcyBsaSxPbyBhcyBsbixvYSBhcyBscixKdSBhcyBsdCx0bSBhcyBtLG5uIGFzIG1pLF9zIGFzIG1uLGlzIGFzIG1yLG1kIGFzIG10LGhtIGFzIG4seG4gYXMgbmksQW4gYXMgbm4sdHMgYXMgbnIsU2QgYXMgbnQsY20gYXMgbyxYdCBhcyBvaSxzcyBhcyBvbixHbiBhcyBvcix5ZCBhcyBvdCxlbSBhcyBwLGNuIGFzIHBpLHZzIGFzIHBuLFVyIGFzIHByLFl1IGFzIHB0LGhkIGFzIHEsSGkgYXMgcW4sd2UgYXMgcXIsZWMgYXMgcXQsc20gYXMgcixhbiBhcyByaSxncyBhcyBybixuciBhcyBycix0ZCBhcyBydCx1bSBhcyBzLHp0IGFzIHNpLHlzIGFzIHNuLHpzIGFzIHNyLHBkIGFzIHN0LGdtIGFzIHQsVGUgYXMgdGksam4gYXMgdG4sVWkgYXMgdHIsbmQgYXMgdHQsZG0gYXMgdSxWZSBhcyB1aSxEYSBhcyB1bixRaSBhcyB1cixxdSBhcyB1dCxKcCBhcyB2LEEgYXMgdmksaGEgYXMgdm4scmMgYXMgdnIsS3UgYXMgdnQsSXAgYXMgdyx0YyBhcyB3bixkciBhcyB3cixobCBhcyB3dCxVcCBhcyB4LEYgYXMgeGksX2EgYXMgeG4sU2EgYXMgeHIsdmwgYXMgeHQsV3AgYXMgeSxMIGFzIHlpLGdhIGFzIHluLGNhIGFzIHlyLF9jIGFzIHl0LHJwIGFzIHosY3MgYXMgem4scnIgYXMgenIsUmwgYXMgenR9Ow==", + "ZnVuY3Rpb24gZShlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbiBvZiBlLnNwbGl0KGAsYCkpdFtuXT0xO3JldHVybiBlPT5lIGluIHR9dmFyIHQ9e30sbj1bXSxyPSgpPT57fSxpPSgpPT4hMSxhPWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZUF0KDEpPT09MTEwJiYoZS5jaGFyQ29kZUF0KDIpPjEyMnx8ZS5jaGFyQ29kZUF0KDIpPDk3KSxvPWU9PmUuc3RhcnRzV2l0aChgb25VcGRhdGU6YCkscz1PYmplY3QuYXNzaWduLGM9KGUsdCk9PntsZXQgbj1lLmluZGV4T2YodCk7bj4tMSYmZS5zcGxpY2UobiwxKX0sbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHU9KGUsdCk9PmwuY2FsbChlLHQpLGQ9QXJyYXkuaXNBcnJheSxmPWU9PlMoZSk9PT1gW29iamVjdCBNYXBdYCxwPWU9PlMoZSk9PT1gW29iamVjdCBTZXRdYCxtPWU9PlMoZSk9PT1gW29iamVjdCBEYXRlXWAsaD1lPT5TKGUpPT09YFtvYmplY3QgUmVnRXhwXWAsZz1lPT50eXBlb2YgZT09YGZ1bmN0aW9uYCxfPWU9PnR5cGVvZiBlPT1gc3RyaW5nYCx2PWU9PnR5cGVvZiBlPT1gc3ltYm9sYCx5PWU9PnR5cGVvZiBlPT1gb2JqZWN0YCYmISFlLGI9ZT0+KHkoZSl8fGcoZSkpJiZnKGUudGhlbikmJmcoZS5jYXRjaCkseD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFM9ZT0+eC5jYWxsKGUpLEM9ZT0+UyhlKS5zbGljZSg4LC0xKSx3PWU9PlMoZSk9PT1gW29iamVjdCBPYmplY3RdYCxUPWU9Pl8oZSkmJmUhPT1gTmFOYCYmZVswXSE9PWAtYCYmYGArcGFyc2VJbnQoZSwxMCk9PT1lLEU9ZShgLGtleSxyZWYscmVmX2ZvcixyZWZfa2V5LG9uVm5vZGVCZWZvcmVNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZGVVcGRhdGVkLG9uVm5vZGVCZWZvcmVVbm1vdW50LG9uVm5vZGVVbm1vdW50ZWRgKSxEPWU9PntsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybihuPT50W25dfHwodFtuXT1lKG4pKSl9LGVlPS8tXHcvZyxPPUQoZT0+ZS5yZXBsYWNlKGVlLGU9PmUuc2xpY2UoMSkudG9VcHBlckNhc2UoKSkpLHRlPS9cQihbQS1aXSkvZyxrPUQoZT0+ZS5yZXBsYWNlKHRlLGAtJDFgKS50b0xvd2VyQ2FzZSgpKSxBPUQoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKSxuZT1EKGU9PmU/YG9uJHtBKGUpfWA6YGApLGo9KGUsdCk9PiFPYmplY3QuaXMoZSx0KSxNPShlLC4uLnQpPT57Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSguLi50KX0sTj0oZSx0LG4scj0hMSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTpyLHZhbHVlOm59KX0scmU9ZT0+e2xldCB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHQpP2U6dH0saWU9ZT0+e2xldCB0PV8oZSk/TnVtYmVyKGUpOk5hTjtyZXR1cm4gaXNOYU4odCk/ZTp0fSxhZSxvZT0oKT0+YWV8fD10eXBlb2YgZ2xvYmFsVGhpczxgdWA/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjxgdWA/c2VsZjp0eXBlb2Ygd2luZG93PGB1YD93aW5kb3c6dHlwZW9mIGdsb2JhbDxgdWA/Z2xvYmFsOnt9LFA9ZShgSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IsU3ltYm9sYCk7ZnVuY3Rpb24gRihlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPV8ocik/bGUocik6RihyKTtpZihpKWZvcihsZXQgZSBpbiBpKXRbZV09aVtlXX1yZXR1cm4gdH1pZihfKGUpfHx5KGUpKXJldHVybiBlfXZhciBzZT0vOyg/IVteKF0qXCkpL2csY2U9LzooW15dKykvLEk9L1wvXCpbXl0qP1wqXC8vZztmdW5jdGlvbiBsZShlKXtsZXQgdD17fTtyZXR1cm4gZS5yZXBsYWNlKEksYGApLnNwbGl0KHNlKS5mb3JFYWNoKGU9PntpZihlKXtsZXQgbj1lLnNwbGl0KGNlKTtuLmxlbmd0aD4xJiYodFtuWzBdLnRyaW0oKV09blsxXS50cmltKCkpfX0pLHR9ZnVuY3Rpb24gTChlKXtsZXQgdD1gYDtpZihfKGUpKXQ9ZTtlbHNlIGlmKGQoZSkpZm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPUwoZVtuXSk7ciYmKHQrPXIrYCBgKX1lbHNlIGlmKHkoZSkpZm9yKGxldCBuIGluIGUpZVtuXSYmKHQrPW4rYCBgKTtyZXR1cm4gdC50cmltKCl9ZnVuY3Rpb24gdWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0e2NsYXNzOnQsc3R5bGU6bn09ZTtyZXR1cm4gdCYmIV8odCkmJihlLmNsYXNzPUwodCkpLG4mJihlLnN0eWxlPUYobikpLGV9dmFyIGRlPWBpdGVtc2NvcGUsYWxsb3dmdWxsc2NyZWVuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscmVhZG9ubHlgLGZlPWUoZGUpO2RlK2BgO2Z1bmN0aW9uIHBlKGUpe3JldHVybiEhZXx8ZT09PWBgfWZ1bmN0aW9uIG1lKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtsZXQgbj0hMDtmb3IobGV0IHI9MDtuJiZyPGUubGVuZ3RoO3IrKyluPWhlKGVbcl0sdFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gaGUoZSx0KXtpZihlPT09dClyZXR1cm4hMDtsZXQgbj1tKGUpLHI9bSh0KTtpZihufHxyKXJldHVybiBuJiZyP2UuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk6ITE7aWYobj12KGUpLHI9dih0KSxufHxyKXJldHVybiBlPT09dDtpZihuPWQoZSkscj1kKHQpLG58fHIpcmV0dXJuIG4mJnI/bWUoZSx0KTohMTtpZihuPXkoZSkscj15KHQpLG58fHIpe2lmKCFufHwhcnx8T2JqZWN0LmtleXMoZSkubGVuZ3RoIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lLmhhc093blByb3BlcnR5KG4pLGk9dC5oYXNPd25Qcm9wZXJ0eShuKTtpZihyJiYhaXx8IXImJml8fCFoZShlW25dLHRbbl0pKXJldHVybiExfX1yZXR1cm4gU3RyaW5nKGUpPT09U3RyaW5nKHQpfWZ1bmN0aW9uIGdlKGUsdCl7cmV0dXJuIGUuZmluZEluZGV4KGU9PmhlKGUsdCkpfXZhciBfZT1lPT4hIShlJiZlLl9fdl9pc1JlZj09PSEwKSx2ZT1lPT5fKGUpP2U6ZT09bnVsbD9gYDpkKGUpfHx5KGUpJiYoZS50b1N0cmluZz09PXh8fCFnKGUudG9TdHJpbmcpKT9fZShlKT92ZShlLnZhbHVlKTpKU09OLnN0cmluZ2lmeShlLHllLDIpOlN0cmluZyhlKSx5ZT0oZSx0KT0+X2UodCk/eWUoZSx0LnZhbHVlKTpmKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cmllcygpXS5yZWR1Y2UoKGUsW3Qsbl0scik9PihlW2JlKHQscikrYCA9PmBdPW4sZSkse30pfTpwKHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChlPT5iZShlKSl9OnYodCk/YmUodCk6eSh0KSYmIWQodCkmJiF3KHQpP1N0cmluZyh0KTp0LGJlPShlLHQ9YGApPT52KGUpP2BTeW1ib2woJHtlLmRlc2NyaXB0aW9uPz90fSlgOmU7ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGU9PW51bGw/YGluaXRpYWxgOnR5cGVvZiBlPT1gc3RyaW5nYD9lPT09YGA/YCBgOmU6U3RyaW5nKGUpfXZhciBSLFNlPWNsYXNze2NvbnN0cnVjdG9yKGU9ITEpe3RoaXMuZGV0YWNoZWQ9ZSx0aGlzLl9hY3RpdmU9ITAsdGhpcy5fb249MCx0aGlzLmVmZmVjdHM9W10sdGhpcy5jbGVhbnVwcz1bXSx0aGlzLl9pc1BhdXNlZD0hMSx0aGlzLl93YXJuT25SdW49ITAsdGhpcy5fX3Zfc2tpcD0hMCwhZSYmUiYmKFIuYWN0aXZlPyh0aGlzLnBhcmVudD1SLHRoaXMuaW5kZXg9KFIuc2NvcGVzfHwoUi5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpOih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fd2Fybk9uUnVuPSExKSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9cGF1c2UoKXtpZih0aGlzLl9hY3RpdmUpe3RoaXMuX2lzUGF1c2VkPSEwO2xldCBlLHQ7aWYodGhpcy5zY29wZXMpe2xldCBuPXRoaXMuc2NvcGVzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5wYXVzZSgpfWZvcihlPTAsdD10aGlzLmVmZmVjdHMubGVuZ3RoO2U8dDtlKyspdGhpcy5lZmZlY3RzW2VdLnBhdXNlKCl9fXJlc3VtZSgpe2lmKHRoaXMuX2FjdGl2ZSYmdGhpcy5faXNQYXVzZWQpe3RoaXMuX2lzUGF1c2VkPSExO2xldCBlLHQ7aWYodGhpcy5zY29wZXMpe2xldCBuPXRoaXMuc2NvcGVzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5yZXN1bWUoKX1sZXQgbj10aGlzLmVmZmVjdHMuc2xpY2UoKTtmb3IoZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyluW2VdLnJlc3VtZSgpfX1ydW4oZSl7aWYodGhpcy5fYWN0aXZlKXtsZXQgdD1SO3RyeXtyZXR1cm4gUj10aGlzLGUoKX1maW5hbGx5e1I9dH19fW9uKCl7Kyt0aGlzLl9vbj09PTEmJih0aGlzLnByZXZTY29wZT1SLFI9dGhpcyl9b2ZmKCl7aWYodGhpcy5fb24+MCYmLS10aGlzLl9vbj09PTApe2lmKFI9PT10aGlzKVI9dGhpcy5wcmV2U2NvcGU7ZWxzZXtsZXQgZT1SO2Zvcig7ZTspe2lmKGUucHJldlNjb3BlPT09dGhpcyl7ZS5wcmV2U2NvcGU9dGhpcy5wcmV2U2NvcGU7YnJlYWt9ZT1lLnByZXZTY29wZX19dGhpcy5wcmV2U2NvcGU9dm9pZCAwfX1zdG9wKGUpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5fYWN0aXZlPSExO2xldCB0LG47Zm9yKHQ9MCxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjdHMubGVuZ3RoPTAsdD0wLG49dGhpcy5jbGVhbnVwcy5sZW5ndGg7dDxuO3QrKyl0aGlzLmNsZWFudXBzW3RdKCk7aWYodGhpcy5jbGVhbnVwcy5sZW5ndGg9MCx0aGlzLnNjb3Blcyl7bGV0IGU9dGhpcy5zY29wZXMuc2xpY2UoKTtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aGlzLnBhcmVudCYmIWUpe2xldCBlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtlJiZlIT09dGhpcyYmKHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XT1lLGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwfX19O2Z1bmN0aW9uIENlKGUpe3JldHVybiBuZXcgU2UoZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gUn1mdW5jdGlvbiBUZShlLHQ9ITEpe1ImJlIuY2xlYW51cHMucHVzaChlKX12YXIgeixFZT1uZXcgV2Vha1NldCxEZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZuPWUsdGhpcy5kZXBzPXZvaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmNsZWFudXA9dm9pZCAwLHRoaXMuc2NoZWR1bGVyPXZvaWQgMCxSJiYoUi5hY3RpdmU/Ui5lZmZlY3RzLnB1c2godGhpcyk6dGhpcy5mbGFncyY9LTIpfXBhdXNlKCl7dGhpcy5mbGFnc3w9NjR9cmVzdW1lKCl7dGhpcy5mbGFncyY2NCYmKHRoaXMuZmxhZ3MmPS02NSxFZS5oYXModGhpcykmJihFZS5kZWxldGUodGhpcyksdGhpcy50cmlnZ2VyKCkpKX1ub3RpZnkoKXt0aGlzLmZsYWdzJjImJiEodGhpcy5mbGFncyYzMil8fHRoaXMuZmxhZ3MmOHx8amUodGhpcyl9cnVuKCl7aWYoISh0aGlzLmZsYWdzJjEpKXJldHVybiB0aGlzLmZuKCk7dGhpcy5mbGFnc3w9MixLZSh0aGlzKSxQZSh0aGlzKTtsZXQgZT16LHQ9SGU7ej10aGlzLEhlPSEwO3RyeXtyZXR1cm4gdGhpcy5mbigpfWZpbmFsbHl7RmUodGhpcyksej1lLEhlPXQsdGhpcy5mbGFncyY9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWdzJjEpe2ZvcihsZXQgZT10aGlzLmRlcHM7ZTtlPWUubmV4dERlcClSZShlKTt0aGlzLmRlcHM9dGhpcy5kZXBzVGFpbD12b2lkIDAsS2UodGhpcyksdGhpcy5vblN0b3AmJnRoaXMub25TdG9wKCksdGhpcy5mbGFncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P0VlLmFkZCh0aGlzKTp0aGlzLnNjaGVkdWxlcj90aGlzLnNjaGVkdWxlcigpOnRoaXMucnVuSWZEaXJ0eSgpfXJ1bklmRGlydHkoKXtJZSh0aGlzKSYmdGhpcy5ydW4oKX1nZXQgZGlydHkoKXtyZXR1cm4gSWUodGhpcyl9fSxPZT0wLGtlLEFlO2Z1bmN0aW9uIGplKGUsdD0hMSl7aWYoZS5mbGFnc3w9OCx0KXtlLm5leHQ9QWUsQWU9ZTtyZXR1cm59ZS5uZXh0PWtlLGtlPWV9ZnVuY3Rpb24gTWUoKXtPZSsrfWZ1bmN0aW9uIE5lKCl7aWYoLS1PZT4wKXJldHVybjtpZihBZSl7bGV0IGU9QWU7Zm9yKEFlPXZvaWQgMDtlOyl7bGV0IHQ9ZS5uZXh0O2UubmV4dD12b2lkIDAsZS5mbGFncyY9LTksZT10fX1sZXQgZTtmb3IoO2tlOyl7bGV0IHQ9a2U7Zm9yKGtlPXZvaWQgMDt0Oyl7bGV0IG49dC5uZXh0O2lmKHQubmV4dD12b2lkIDAsdC5mbGFncyY9LTksdC5mbGFncyYxKXRyeXt0LnRyaWdnZXIoKX1jYXRjaCh0KXtlfHw9dH10PW59fWlmKGUpdGhyb3cgZX1mdW5jdGlvbiBQZShlKXtmb3IobGV0IHQ9ZS5kZXBzO3Q7dD10Lm5leHREZXApdC52ZXJzaW9uPS0xLHQucHJldkFjdGl2ZUxpbms9dC5kZXAuYWN0aXZlTGluayx0LmRlcC5hY3RpdmVMaW5rPXR9ZnVuY3Rpb24gRmUoZSl7bGV0IHQsbj1lLmRlcHNUYWlsLHI9bjtmb3IoO3I7KXtsZXQgZT1yLnByZXZEZXA7ci52ZXJzaW9uPT09LTE/KHI9PT1uJiYobj1lKSxSZShyKSx6ZShyKSk6dD1yLHIuZGVwLmFjdGl2ZUxpbms9ci5wcmV2QWN0aXZlTGluayxyLnByZXZBY3RpdmVMaW5rPXZvaWQgMCxyPWV9ZS5kZXBzPXQsZS5kZXBzVGFpbD1ufWZ1bmN0aW9uIEllKGUpe2ZvcihsZXQgdD1lLmRlcHM7dDt0PXQubmV4dERlcClpZih0LmRlcC52ZXJzaW9uIT09dC52ZXJzaW9ufHx0LmRlcC5jb21wdXRlZCYmKExlKHQuZGVwLmNvbXB1dGVkKXx8dC5kZXAudmVyc2lvbiE9PXQudmVyc2lvbikpcmV0dXJuITA7cmV0dXJuISFlLl9kaXJ0eX1mdW5jdGlvbiBMZShlKXtpZihlLmZsYWdzJjQmJiEoZS5mbGFncyYxNil8fChlLmZsYWdzJj0tMTcsZS5nbG9iYWxWZXJzaW9uPT09cWUpfHwoZS5nbG9iYWxWZXJzaW9uPXFlLCFlLmlzU1NSJiZlLmZsYWdzJjEyOCYmKCFlLmRlcHMmJiFlLl9kaXJ0eXx8IUllKGUpKSkpcmV0dXJuO2UuZmxhZ3N8PTI7bGV0IHQ9ZS5kZXAsbj16LHI9SGU7ej1lLEhlPSEwO3RyeXtQZShlKTtsZXQgbj1lLmZuKGUuX3ZhbHVlKTsodC52ZXJzaW9uPT09MHx8aihuLGUuX3ZhbHVlKSkmJihlLmZsYWdzfD0xMjgsZS5fdmFsdWU9bix0LnZlcnNpb24rKyl9Y2F0Y2goZSl7dGhyb3cgdC52ZXJzaW9uKyssZX1maW5hbGx5e3o9bixIZT1yLEZlKGUpLGUuZmxhZ3MmPS0zfX1mdW5jdGlvbiBSZShlLHQ9ITEpe2xldHtkZXA6bixwcmV2U3ViOnIsbmV4dFN1YjppfT1lO2lmKHImJihyLm5leHRTdWI9aSxlLnByZXZTdWI9dm9pZCAwKSxpJiYoaS5wcmV2U3ViPXIsZS5uZXh0U3ViPXZvaWQgMCksbi5zdWJzPT09ZSYmKG4uc3Vicz1yLCFyJiZuLmNvbXB1dGVkKSl7bi5jb21wdXRlZC5mbGFncyY9LTU7Zm9yKGxldCBlPW4uY29tcHV0ZWQuZGVwcztlO2U9ZS5uZXh0RGVwKVJlKGUsITApfSF0JiYhLS1uLnNjJiZuLm1hcCYmbi5tYXAuZGVsZXRlKG4ua2V5KX1mdW5jdGlvbiB6ZShlKXtsZXR7cHJldkRlcDp0LG5leHREZXA6bn09ZTt0JiYodC5uZXh0RGVwPW4sZS5wcmV2RGVwPXZvaWQgMCksbiYmKG4ucHJldkRlcD10LGUubmV4dERlcD12b2lkIDApfWZ1bmN0aW9uIEJlKGUsdCl7ZS5lZmZlY3QgaW5zdGFuY2VvZiBEZSYmKGU9ZS5lZmZlY3QuZm4pO2xldCBuPW5ldyBEZShlKTt0JiZzKG4sdCk7dHJ5e24ucnVuKCl9Y2F0Y2goZSl7dGhyb3cgbi5zdG9wKCksZX1sZXQgcj1uLnJ1bi5iaW5kKG4pO3JldHVybiByLmVmZmVjdD1uLHJ9ZnVuY3Rpb24gVmUoZSl7ZS5lZmZlY3Quc3RvcCgpfXZhciBIZT0hMCxVZT1bXTtmdW5jdGlvbiBXZSgpe1VlLnB1c2goSGUpLEhlPSExfWZ1bmN0aW9uIEdlKCl7bGV0IGU9VWUucG9wKCk7SGU9ZT09PXZvaWQgMHx8ZX1mdW5jdGlvbiBLZShlKXtsZXR7Y2xlYW51cDp0fT1lO2lmKGUuY2xlYW51cD12b2lkIDAsdCl7bGV0IGU9ejt6PXZvaWQgMDt0cnl7dCgpfWZpbmFsbHl7ej1lfX19dmFyIHFlPTAsSmU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN1Yj1lLHRoaXMuZGVwPXQsdGhpcy52ZXJzaW9uPXQudmVyc2lvbix0aGlzLm5leHREZXA9dGhpcy5wcmV2RGVwPXRoaXMubmV4dFN1Yj10aGlzLnByZXZTdWI9dGhpcy5wcmV2QWN0aXZlTGluaz12b2lkIDB9fSxZZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXB1dGVkPWUsdGhpcy52ZXJzaW9uPTAsdGhpcy5hY3RpdmVMaW5rPXZvaWQgMCx0aGlzLnN1YnM9dm9pZCAwLHRoaXMubWFwPXZvaWQgMCx0aGlzLmtleT12b2lkIDAsdGhpcy5zYz0wLHRoaXMuX192X3NraXA9ITB9dHJhY2soZSl7aWYoIXp8fCFIZXx8ej09PXRoaXMuY29tcHV0ZWQpcmV0dXJuO2xldCB0PXRoaXMuYWN0aXZlTGluaztpZih0PT09dm9pZCAwfHx0LnN1YiE9PXopdD10aGlzLmFjdGl2ZUxpbms9bmV3IEplKHosdGhpcyksei5kZXBzPyh0LnByZXZEZXA9ei5kZXBzVGFpbCx6LmRlcHNUYWlsLm5leHREZXA9dCx6LmRlcHNUYWlsPXQpOnouZGVwcz16LmRlcHNUYWlsPXQsWGUodCk7ZWxzZSBpZih0LnZlcnNpb249PT0tMSYmKHQudmVyc2lvbj10aGlzLnZlcnNpb24sdC5uZXh0RGVwKSl7bGV0IGU9dC5uZXh0RGVwO2UucHJldkRlcD10LnByZXZEZXAsdC5wcmV2RGVwJiYodC5wcmV2RGVwLm5leHREZXA9ZSksdC5wcmV2RGVwPXouZGVwc1RhaWwsdC5uZXh0RGVwPXZvaWQgMCx6LmRlcHNUYWlsLm5leHREZXA9dCx6LmRlcHNUYWlsPXQsei5kZXBzPT09dCYmKHouZGVwcz1lKX1yZXR1cm4gdH10cmlnZ2VyKGUpe3RoaXMudmVyc2lvbisrLHFlKyssdGhpcy5ub3RpZnkoZSl9bm90aWZ5KGUpe01lKCk7dHJ5e2ZvcihsZXQgZT10aGlzLnN1YnM7ZTtlPWUucHJldlN1YillLnN1Yi5ub3RpZnkoKSYmZS5zdWIuZGVwLm5vdGlmeSgpfWZpbmFsbHl7TmUoKX19fTtmdW5jdGlvbiBYZShlKXtpZihlLmRlcC5zYysrLGUuc3ViLmZsYWdzJjQpe2xldCB0PWUuZGVwLmNvbXB1dGVkO2lmKHQmJiFlLmRlcC5zdWJzKXt0LmZsYWdzfD0yMDtmb3IobGV0IGU9dC5kZXBzO2U7ZT1lLm5leHREZXApWGUoZSl9bGV0IG49ZS5kZXAuc3VicztuIT09ZSYmKGUucHJldlN1Yj1uLG4mJihuLm5leHRTdWI9ZSkpLGUuZGVwLnN1YnM9ZX19dmFyIFplPW5ldyBXZWFrTWFwLFFlPVN5bWJvbChgYCksJGU9U3ltYm9sKGBgKSxldD1TeW1ib2woYGApO2Z1bmN0aW9uIEIoZSx0LG4pe2lmKEhlJiZ6KXtsZXQgdD1aZS5nZXQoZSk7dHx8WmUuc2V0KGUsdD1uZXcgTWFwKTtsZXQgcj10LmdldChuKTtyfHwodC5zZXQobixyPW5ldyBZZSksci5tYXA9dCxyLmtleT1uKSxyLnRyYWNrKCl9fWZ1bmN0aW9uIHR0KGUsdCxuLHIsaSxhKXtsZXQgbz1aZS5nZXQoZSk7aWYoIW8pe3FlKys7cmV0dXJufWxldCBzPWU9PntlJiZlLnRyaWdnZXIoKX07aWYoTWUoKSx0PT09YGNsZWFyYClvLmZvckVhY2gocyk7ZWxzZXtsZXQgaT1kKGUpLGE9aSYmVChuKTtpZihpJiZuPT09YGxlbmd0aGApe2xldCBlPU51bWJlcihyKTtvLmZvckVhY2goKHQsbik9Pnsobj09PWBsZW5ndGhgfHxuPT09ZXR8fCF2KG4pJiZuPj1lKSYmcyh0KX0pfWVsc2Ugc3dpdGNoKChuIT09dm9pZCAwfHxvLmhhcyh2b2lkIDApKSYmcyhvLmdldChuKSksYSYmcyhvLmdldChldCkpLHQpe2Nhc2VgYWRkYDppP2EmJnMoby5nZXQoYGxlbmd0aGApKToocyhvLmdldChRZSkpLGYoZSkmJnMoby5nZXQoJGUpKSk7YnJlYWs7Y2FzZWBkZWxldGVgOml8fChzKG8uZ2V0KFFlKSksZihlKSYmcyhvLmdldCgkZSkpKTticmVhaztjYXNlYHNldGA6ZihlKSYmcyhvLmdldChRZSkpfX1OZSgpfWZ1bmN0aW9uIG50KGUsdCl7bGV0IG49WmUuZ2V0KGUpO3JldHVybiBuJiZuLmdldCh0KX1mdW5jdGlvbiBydChlKXtsZXQgdD1WKGUpO3JldHVybiB0PT09ZT90OihCKHQsYGl0ZXJhdGVgLGV0KSxHdChlKT90OnQubWFwKEp0KSl9ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIEIoZT1WKGUpLGBpdGVyYXRlYCxldCksZX1mdW5jdGlvbiBhdChlLHQpe3JldHVybiBXdChlKT9ZdChVdChlKT9KdCh0KTp0KTpKdCh0KX12YXIgb3Q9e19fcHJvdG9fXzpudWxsLFtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHN0KHRoaXMsU3ltYm9sLml0ZXJhdG9yLGU9PmF0KHRoaXMsZSkpfSxjb25jYXQoLi4uZSl7cmV0dXJuIHJ0KHRoaXMpLmNvbmNhdCguLi5lLm1hcChlPT5kKGUpP3J0KGUpOmUpKX0sZW50cmllcygpe3JldHVybiBzdCh0aGlzLGBlbnRyaWVzYCxlPT4oZVsxXT1hdCh0aGlzLGVbMV0pLGUpKX0sZXZlcnkoZSx0KXtyZXR1cm4gbHQodGhpcyxgZXZlcnlgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZmlsdGVyKGUsdCl7cmV0dXJuIGx0KHRoaXMsYGZpbHRlcmAsZSx0LGU9PmUubWFwKGU9PmF0KHRoaXMsZSkpLGFyZ3VtZW50cyl9LGZpbmQoZSx0KXtyZXR1cm4gbHQodGhpcyxgZmluZGAsZSx0LGU9PmF0KHRoaXMsZSksYXJndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7cmV0dXJuIGx0KHRoaXMsYGZpbmRJbmRleGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmaW5kTGFzdChlLHQpe3JldHVybiBsdCh0aGlzLGBmaW5kTGFzdGAsZSx0LGU9PmF0KHRoaXMsZSksYXJndW1lbnRzKX0sZmluZExhc3RJbmRleChlLHQpe3JldHVybiBsdCh0aGlzLGBmaW5kTGFzdEluZGV4YCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZvckVhY2goZSx0KXtyZXR1cm4gbHQodGhpcyxgZm9yRWFjaGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gZHQodGhpcyxgaW5jbHVkZXNgLGUpfSxpbmRleE9mKC4uLmUpe3JldHVybiBkdCh0aGlzLGBpbmRleE9mYCxlKX0sam9pbihlKXtyZXR1cm4gcnQodGhpcykuam9pbihlKX0sbGFzdEluZGV4T2YoLi4uZSl7cmV0dXJuIGR0KHRoaXMsYGxhc3RJbmRleE9mYCxlKX0sbWFwKGUsdCl7cmV0dXJuIGx0KHRoaXMsYG1hcGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxwb3AoKXtyZXR1cm4gZnQodGhpcyxgcG9wYCl9LHB1c2goLi4uZSl7cmV0dXJuIGZ0KHRoaXMsYHB1c2hgLGUpfSxyZWR1Y2UoZSwuLi50KXtyZXR1cm4gdXQodGhpcyxgcmVkdWNlYCxlLHQpfSxyZWR1Y2VSaWdodChlLC4uLnQpe3JldHVybiB1dCh0aGlzLGByZWR1Y2VSaWdodGAsZSx0KX0sc2hpZnQoKXtyZXR1cm4gZnQodGhpcyxgc2hpZnRgKX0sc29tZShlLHQpe3JldHVybiBsdCh0aGlzLGBzb21lYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LHNwbGljZSguLi5lKXtyZXR1cm4gZnQodGhpcyxgc3BsaWNlYCxlKX0sdG9SZXZlcnNlZCgpe3JldHVybiBydCh0aGlzKS50b1JldmVyc2VkKCl9LHRvU29ydGVkKGUpe3JldHVybiBydCh0aGlzKS50b1NvcnRlZChlKX0sdG9TcGxpY2VkKC4uLmUpe3JldHVybiBydCh0aGlzKS50b1NwbGljZWQoLi4uZSl9LHVuc2hpZnQoLi4uZSl7cmV0dXJuIGZ0KHRoaXMsYHVuc2hpZnRgLGUpfSx2YWx1ZXMoKXtyZXR1cm4gc3QodGhpcyxgdmFsdWVzYCxlPT5hdCh0aGlzLGUpKX19O2Z1bmN0aW9uIHN0KGUsdCxuKXtsZXQgcj1pdChlKSxpPXJbdF0oKTtyZXR1cm4gciE9PWUmJiFHdChlKSYmKGkuX25leHQ9aS5uZXh0LGkubmV4dD0oKT0+e2xldCBlPWkuX25leHQoKTtyZXR1cm4gZS5kb25lfHwoZS52YWx1ZT1uKGUudmFsdWUpKSxlfSksaX12YXIgY3Q9QXJyYXkucHJvdG90eXBlO2Z1bmN0aW9uIGx0KGUsdCxuLHIsaSxhKXtsZXQgbz1pdChlKSxzPW8hPT1lJiYhR3QoZSksYz1vW3RdO2lmKGMhPT1jdFt0XSl7bGV0IHQ9Yy5hcHBseShlLGEpO3JldHVybiBzP0p0KHQpOnR9bGV0IGw9bjtvIT09ZSYmKHM/bD1mdW5jdGlvbih0LHIpe3JldHVybiBuLmNhbGwodGhpcyxhdChlLHQpLHIsZSl9Om4ubGVuZ3RoPjImJihsPWZ1bmN0aW9uKHQscil7cmV0dXJuIG4uY2FsbCh0aGlzLHQscixlKX0pKTtsZXQgdT1jLmNhbGwobyxsLHIpO3JldHVybiBzJiZpP2kodSk6dX1mdW5jdGlvbiB1dChlLHQsbixyKXtsZXQgaT1pdChlKSxhPWkhPT1lJiYhR3QoZSksbz1uLHM9ITE7aSE9PWUmJihhPyhzPXIubGVuZ3RoPT09MCxvPWZ1bmN0aW9uKHQscixpKXtyZXR1cm4gcyYmKHM9ITEsdD1hdChlLHQpKSxuLmNhbGwodGhpcyx0LGF0KGUsciksaSxlKX0pOm4ubGVuZ3RoPjMmJihvPWZ1bmN0aW9uKHQscixpKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxyLGksZSl9KSk7bGV0IGM9aVt0XShvLC4uLnIpO3JldHVybiBzP2F0KGUsYyk6Y31mdW5jdGlvbiBkdChlLHQsbil7bGV0IHI9VihlKTtCKHIsYGl0ZXJhdGVgLGV0KTtsZXQgaT1yW3RdKC4uLm4pO3JldHVybihpPT09LTF8fGk9PT0hMSkmJkt0KG5bMF0pPyhuWzBdPVYoblswXSksclt0XSguLi5uKSk6aX1mdW5jdGlvbiBmdChlLHQsbj1bXSl7V2UoKSxNZSgpO2xldCByPVYoZSlbdF0uYXBwbHkoZSxuKTtyZXR1cm4gTmUoKSxHZSgpLHJ9dmFyIHB0PWUoYF9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZWApLG10PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoZT0+ZSE9PWBhcmd1bWVudHNgJiZlIT09YGNhbGxlcmApLm1hcChlPT5TeW1ib2xbZV0pLmZpbHRlcih2KSk7ZnVuY3Rpb24gaHQoZSl7dihlKXx8KGU9U3RyaW5nKGUpKTtsZXQgdD1WKHRoaXMpO3JldHVybiBCKHQsYGhhc2AsZSksdC5oYXNPd25Qcm9wZXJ0eShlKX12YXIgZ3Q9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSx0PSExKXt0aGlzLl9pc1JlYWRvbmx5PWUsdGhpcy5faXNTaGFsbG93PXR9Z2V0KGUsdCxuKXtpZih0PT09YF9fdl9za2lwYClyZXR1cm4gZS5fX3Zfc2tpcDtsZXQgcj10aGlzLl9pc1JlYWRvbmx5LGk9dGhpcy5faXNTaGFsbG93O2lmKHQ9PT1gX192X2lzUmVhY3RpdmVgKXJldHVybiFyO2lmKHQ9PT1gX192X2lzUmVhZG9ubHlgKXJldHVybiByO2lmKHQ9PT1gX192X2lzU2hhbGxvd2ApcmV0dXJuIGk7aWYodD09PWBfX3ZfcmF3YClyZXR1cm4gbj09PShyP2k/SXQ6RnQ6aT9QdDpOdCkuZ2V0KGUpfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik/ZTp2b2lkIDA7bGV0IGE9ZChlKTtpZighcil7bGV0IGU7aWYoYSYmKGU9b3RbdF0pKXJldHVybiBlO2lmKHQ9PT1gaGFzT3duUHJvcGVydHlgKXJldHVybiBodH1sZXQgbz1SZWZsZWN0LmdldChlLHQsSChlKT9lOm4pO2lmKCh2KHQpP210Lmhhcyh0KTpwdCh0KSl8fChyfHxCKGUsYGdldGAsdCksaSkpcmV0dXJuIG87aWYoSChvKSl7bGV0IGU9YSYmVCh0KT9vOm8udmFsdWU7cmV0dXJuIHImJnkoZSk/QnQoZSk6ZX1yZXR1cm4geShvKT9yP0J0KG8pOlJ0KG8pOm99fSxfdD1jbGFzcyBleHRlbmRzIGd0e2NvbnN0cnVjdG9yKGU9ITEpe3N1cGVyKCExLGUpfXNldChlLHQsbixyKXtsZXQgaT1lW3RdLGE9ZChlKSYmVCh0KTtpZighdGhpcy5faXNTaGFsbG93KXtsZXQgZT1XdChpKTtpZighR3QobikmJiFXdChuKSYmKGk9VihpKSxuPVYobikpLCFhJiZIKGkpJiYhSChuKSlyZXR1cm4gZXx8KGkudmFsdWU9biksITB9bGV0IG89YT9OdW1iZXIodCk8ZS5sZW5ndGg6dShlLHQpLHM9UmVmbGVjdC5zZXQoZSx0LG4sSChlKT9lOnIpO3JldHVybiBlPT09VihyKSYmcyYmKG8/aihuLGkpJiZ0dChlLGBzZXRgLHQsbixpKTp0dChlLGBhZGRgLHQsbikpLHN9ZGVsZXRlUHJvcGVydHkoZSx0KXtsZXQgbj11KGUsdCkscj1lW3RdLGk9UmVmbGVjdC5kZWxldGVQcm9wZXJ0eShlLHQpO3JldHVybiBpJiZuJiZ0dChlLGBkZWxldGVgLHQsdm9pZCAwLHIpLGl9aGFzKGUsdCl7bGV0IG49UmVmbGVjdC5oYXMoZSx0KTtyZXR1cm4oIXYodCl8fCFtdC5oYXModCkpJiZCKGUsYGhhc2AsdCksbn1vd25LZXlzKGUpe3JldHVybiBCKGUsYGl0ZXJhdGVgLGQoZSk/YGxlbmd0aGA6UWUpLFJlZmxlY3Qub3duS2V5cyhlKX19LHZ0PWNsYXNzIGV4dGVuZHMgZ3R7Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoITAsZSl9c2V0KGUsdCl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkoZSx0KXtyZXR1cm4hMH19LHl0PW5ldyBfdCxidD1uZXcgdnQseHQ9bmV3IF90KCEwKSxTdD1uZXcgdnQoITApLEN0PWU9PmUsd3Q9ZT0+UmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKTtmdW5jdGlvbiBUdChlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe2xldCBpPXRoaXMuX192X3JhdyxhPVYoaSksbz1mKGEpLGM9ZT09PWBlbnRyaWVzYHx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbyxsPWU9PT1ga2V5c2AmJm8sdT1pW2VdKC4uLnIpLGQ9bj9DdDp0P1l0Okp0O3JldHVybiF0JiZCKGEsYGl0ZXJhdGVgLGw/JGU6UWUpLHMoT2JqZWN0LmNyZWF0ZSh1KSx7bmV4dCgpe2xldHt2YWx1ZTplLGRvbmU6dH09dS5uZXh0KCk7cmV0dXJuIHQ/e3ZhbHVlOmUsZG9uZTp0fTp7dmFsdWU6Yz9bZChlWzBdKSxkKGVbMV0pXTpkKGUpLGRvbmU6dH19fSl9fWZ1bmN0aW9uIEV0KGUpe3JldHVybiBmdW5jdGlvbiguLi50KXtyZXR1cm4gZT09PWBkZWxldGVgPyExOmU9PT1gY2xlYXJgP3ZvaWQgMDp0aGlzfX1mdW5jdGlvbiBEdChlLHQpe2xldCBuPXtnZXQobil7bGV0IHI9dGhpcy5fX3ZfcmF3LGk9VihyKSxhPVYobik7ZXx8KGoobixhKSYmQihpLGBnZXRgLG4pLEIoaSxgZ2V0YCxhKSk7bGV0e2hhczpvfT13dChpKSxzPXQ/Q3Q6ZT9ZdDpKdDtpZihvLmNhbGwoaSxuKSlyZXR1cm4gcyhyLmdldChuKSk7aWYoby5jYWxsKGksYSkpcmV0dXJuIHMoci5nZXQoYSkpO3IhPT1pJiZyLmdldChuKX0sZ2V0IHNpemUoKXtsZXQgdD10aGlzLl9fdl9yYXc7cmV0dXJuIWUmJkIoVih0KSxgaXRlcmF0ZWAsUWUpLHQuc2l6ZX0saGFzKHQpe2xldCBuPXRoaXMuX192X3JhdyxyPVYobiksaT1WKHQpO3JldHVybiBlfHwoaih0LGkpJiZCKHIsYGhhc2AsdCksQihyLGBoYXNgLGkpKSx0PT09aT9uLmhhcyh0KTpuLmhhcyh0KXx8bi5oYXMoaSl9LGZvckVhY2gobixyKXtsZXQgaT10aGlzLGE9aS5fX3ZfcmF3LG89VihhKSxzPXQ/Q3Q6ZT9ZdDpKdDtyZXR1cm4hZSYmQihvLGBpdGVyYXRlYCxRZSksYS5mb3JFYWNoKChlLHQpPT5uLmNhbGwocixzKGUpLHModCksaSkpfX07cmV0dXJuIHMobixlP3thZGQ6RXQoYGFkZGApLHNldDpFdChgc2V0YCksZGVsZXRlOkV0KGBkZWxldGVgKSxjbGVhcjpFdChgY2xlYXJgKX06e2FkZChlKXtsZXQgbj1WKHRoaXMpLHI9d3QobiksaT1WKGUpLGE9IXQmJiFHdChlKSYmIVd0KGUpP2k6ZTtyZXR1cm4gci5oYXMuY2FsbChuLGEpfHxqKGUsYSkmJnIuaGFzLmNhbGwobixlKXx8aihpLGEpJiZyLmhhcy5jYWxsKG4saSl8fChuLmFkZChhKSx0dChuLGBhZGRgLGEsYSkpLHRoaXN9LHNldChlLG4peyF0JiYhR3QobikmJiFXdChuKSYmKG49VihuKSk7bGV0IHI9Vih0aGlzKSx7aGFzOmksZ2V0OmF9PXd0KHIpLG89aS5jYWxsKHIsZSk7b3x8PShlPVYoZSksaS5jYWxsKHIsZSkpO2xldCBzPWEuY2FsbChyLGUpO3JldHVybiByLnNldChlLG4pLG8/aihuLHMpJiZ0dChyLGBzZXRgLGUsbixzKTp0dChyLGBhZGRgLGUsbiksdGhpc30sZGVsZXRlKGUpe2xldCB0PVYodGhpcykse2hhczpuLGdldDpyfT13dCh0KSxpPW4uY2FsbCh0LGUpO2l8fD0oZT1WKGUpLG4uY2FsbCh0LGUpKTtsZXQgYT1yP3IuY2FsbCh0LGUpOnZvaWQgMCxvPXQuZGVsZXRlKGUpO3JldHVybiBpJiZ0dCh0LGBkZWxldGVgLGUsdm9pZCAwLGEpLG99LGNsZWFyKCl7bGV0IGU9Vih0aGlzKSx0PWUuc2l6ZSE9PTAsbj1lLmNsZWFyKCk7cmV0dXJuIHQmJnR0KGUsYGNsZWFyYCx2b2lkIDAsdm9pZCAwLHZvaWQgMCksbn19KSxbYGtleXNgLGB2YWx1ZXNgLGBlbnRyaWVzYCxTeW1ib2wuaXRlcmF0b3JdLmZvckVhY2gocj0+e25bcl09VHQocixlLHQpfSksbn1mdW5jdGlvbiBPdChlLHQpe2xldCBuPUR0KGUsdCk7cmV0dXJuKHQscixpKT0+cj09PWBfX3ZfaXNSZWFjdGl2ZWA/IWU6cj09PWBfX3ZfaXNSZWFkb25seWA/ZTpyPT09YF9fdl9yYXdgP3Q6UmVmbGVjdC5nZXQodShuLHIpJiZyIGluIHQ/bjp0LHIsaSl9dmFyIGt0PXtnZXQ6T3QoITEsITEpfSxBdD17Z2V0Ok90KCExLCEwKX0sanQ9e2dldDpPdCghMCwhMSl9LE10PXtnZXQ6T3QoITAsITApfSxOdD1uZXcgV2Vha01hcCxQdD1uZXcgV2Vha01hcCxGdD1uZXcgV2Vha01hcCxJdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBMdChlKXtzd2l0Y2goZSl7Y2FzZWBPYmplY3RgOmNhc2VgQXJyYXlgOnJldHVybiAxO2Nhc2VgTWFwYDpjYXNlYFNldGA6Y2FzZWBXZWFrTWFwYDpjYXNlYFdlYWtTZXRgOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFJ0KGUpe3JldHVybiBXdChlKT9lOkh0KGUsITEseXQsa3QsTnQpfWZ1bmN0aW9uIHp0KGUpe3JldHVybiBIdChlLCExLHh0LEF0LFB0KX1mdW5jdGlvbiBCdChlKXtyZXR1cm4gSHQoZSwhMCxidCxqdCxGdCl9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIEh0KGUsITAsU3QsTXQsSXQpfWZ1bmN0aW9uIEh0KGUsdCxuLHIsaSl7aWYoIXkoZSl8fGUuX192X3JhdyYmISh0JiZlLl9fdl9pc1JlYWN0aXZlKXx8ZS5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoZSkpcmV0dXJuIGU7bGV0IGE9aS5nZXQoZSk7aWYoYSlyZXR1cm4gYTtsZXQgbz1MdChDKGUpKTtpZihvPT09MClyZXR1cm4gZTtsZXQgcz1uZXcgUHJveHkoZSxvPT09Mj9yOm4pO3JldHVybiBpLnNldChlLHMpLHN9ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIFd0KGUpP1V0KGUuX192X3Jhdyk6ISEoZSYmZS5fX3ZfaXNSZWFjdGl2ZSl9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNSZWFkb25seSl9ZnVuY3Rpb24gR3QoZSl7cmV0dXJuISEoZSYmZS5fX3ZfaXNTaGFsbG93KX1mdW5jdGlvbiBLdChlKXtyZXR1cm4gZT8hIWUuX192X3JhdzohMX1mdW5jdGlvbiBWKGUpe2xldCB0PWUmJmUuX192X3JhdztyZXR1cm4gdD9WKHQpOmV9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIXUoZSxgX192X3NraXBgKSYmT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSYmTihlLGBfX3Zfc2tpcGAsITApLGV9dmFyIEp0PWU9PnkoZSk/UnQoZSk6ZSxZdD1lPT55KGUpP0J0KGUpOmU7ZnVuY3Rpb24gSChlKXtyZXR1cm4gZT9lLl9fdl9pc1JlZj09PSEwOiExfWZ1bmN0aW9uIFh0KGUpe3JldHVybiBRdChlLCExKX1mdW5jdGlvbiBadChlKXtyZXR1cm4gUXQoZSwhMCl9ZnVuY3Rpb24gUXQoZSx0KXtyZXR1cm4gSChlKT9lOm5ldyAkdChlLHQpfXZhciAkdD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGVwPW5ldyBZZSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1NoYWxsb3c9ITEsdGhpcy5fcmF3VmFsdWU9dD9lOlYoZSksdGhpcy5fdmFsdWU9dD9lOkp0KGUpLHRoaXMuX192X2lzU2hhbGxvdz10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmRlcC50cmFjaygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXtsZXQgdD10aGlzLl9yYXdWYWx1ZSxuPXRoaXMuX192X2lzU2hhbGxvd3x8R3QoZSl8fFd0KGUpO2U9bj9lOlYoZSksaihlLHQpJiYodGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl92YWx1ZT1uP2U6SnQoZSksdGhpcy5kZXAudHJpZ2dlcigpKX19O2Z1bmN0aW9uIGVuKGUpe2UuZGVwJiZlLmRlcC50cmlnZ2VyKCl9ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIEgoZSk/ZS52YWx1ZTplfWZ1bmN0aW9uIG5uKGUpe3JldHVybiBnKGUpP2UoKTp0bihlKX12YXIgcm49e2dldDooZSx0LG4pPT50PT09YF9fdl9yYXdgP2U6dG4oUmVmbGVjdC5nZXQoZSx0LG4pKSxzZXQ6KGUsdCxuLHIpPT57bGV0IGk9ZVt0XTtyZXR1cm4gSChpKSYmIUgobik/KGkudmFsdWU9biwhMCk6UmVmbGVjdC5zZXQoZSx0LG4scil9fTtmdW5jdGlvbiBhbihlKXtyZXR1cm4gVXQoZSk/ZTpuZXcgUHJveHkoZSxybil9dmFyIG9uPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMDtsZXQgdD10aGlzLmRlcD1uZXcgWWUse2dldDpuLHNldDpyfT1lKHQudHJhY2suYmluZCh0KSx0LnRyaWdnZXIuYmluZCh0KSk7dGhpcy5fZ2V0PW4sdGhpcy5fc2V0PXJ9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlPXRoaXMuX2dldCgpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXQoZSl9fTtmdW5jdGlvbiBzbihlKXtyZXR1cm4gbmV3IG9uKGUpfWZ1bmN0aW9uIGNuKGUpe2xldCB0PWQoZSk/QXJyYXkoZS5sZW5ndGgpOnt9O2ZvcihsZXQgbiBpbiBlKXRbbl09Zm4oZSxuKTtyZXR1cm4gdH12YXIgbG49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuX29iamVjdD1lLHRoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLl9rZXk9dih0KT90OlN0cmluZyh0KSx0aGlzLl9yYXc9VihlKTtsZXQgcj0hMCxpPWU7aWYoIWQoZSl8fHYodGhpcy5fa2V5KXx8IVQodGhpcy5fa2V5KSlkbyByPSFLdChpKXx8R3QoaSk7d2hpbGUociYmKGk9aS5fX3ZfcmF3KSk7dGhpcy5fc2hhbGxvdz1yfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX29iamVjdFt0aGlzLl9rZXldO3JldHVybiB0aGlzLl9zaGFsbG93JiYoZT10bihlKSksdGhpcy5fdmFsdWU9ZT09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6ZX1zZXQgdmFsdWUoZSl7aWYodGhpcy5fc2hhbGxvdyYmSCh0aGlzLl9yYXdbdGhpcy5fa2V5XSkpe2xldCB0PXRoaXMuX29iamVjdFt0aGlzLl9rZXldO2lmKEgodCkpe3QudmFsdWU9ZTtyZXR1cm59fXRoaXMuX29iamVjdFt0aGlzLl9rZXldPWV9Z2V0IGRlcCgpe3JldHVybiBudCh0aGlzLl9yYXcsdGhpcy5fa2V5KX19LHVuPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuX2dldHRlcj1lLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX192X2lzUmVhZG9ubHk9ITAsdGhpcy5fdmFsdWU9dm9pZCAwfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZT10aGlzLl9nZXR0ZXIoKX19O2Z1bmN0aW9uIGRuKGUsdCxuKXtyZXR1cm4gSChlKT9lOmcoZSk/bmV3IHVuKGUpOnkoZSkmJmFyZ3VtZW50cy5sZW5ndGg+MT9mbihlLHQsbik6WHQoZSl9ZnVuY3Rpb24gZm4oZSx0LG4pe3JldHVybiBuZXcgbG4oZSx0LG4pfXZhciBwbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5mbj1lLHRoaXMuc2V0dGVyPXQsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuZGVwPW5ldyBZZSh0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm9pZCAwLHRoaXMuZGVwc1RhaWw9dm9pZCAwLHRoaXMuZmxhZ3M9MTYsdGhpcy5nbG9iYWxWZXJzaW9uPXFlLTEsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmVmZmVjdD10aGlzLHRoaXMuX192X2lzUmVhZG9ubHk9IXQsdGhpcy5pc1NTUj1ufW5vdGlmeSgpe2lmKHRoaXMuZmxhZ3N8PTE2LCEodGhpcy5mbGFncyY4KSYmeiE9PXRoaXMpcmV0dXJuIGplKHRoaXMsITApLCEwfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuZGVwLnRyYWNrKCk7cmV0dXJuIExlKHRoaXMpLGUmJihlLnZlcnNpb249dGhpcy5kZXAudmVyc2lvbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMuc2V0dGVyJiZ0aGlzLnNldHRlcihlKX19O2Z1bmN0aW9uIG1uKGUsdCxuPSExKXtsZXQgcixpO3JldHVybiBnKGUpP3I9ZToocj1lLmdldCxpPWUuc2V0KSxuZXcgcG4ocixpLG4pfXZhciBobj17R0VUOmBnZXRgLEhBUzpgaGFzYCxJVEVSQVRFOmBpdGVyYXRlYH0sZ249e1NFVDpgc2V0YCxBREQ6YGFkZGAsREVMRVRFOmBkZWxldGVgLENMRUFSOmBjbGVhcmB9LF9uPXt9LHZuPW5ldyBXZWFrTWFwLHluPXZvaWQgMDtmdW5jdGlvbiBibigpe3JldHVybiB5bn1mdW5jdGlvbiB4bihlLHQ9ITEsbj15bil7aWYobil7bGV0IHQ9dm4uZ2V0KG4pO3R8fHZuLnNldChuLHQ9W10pLHQucHVzaChlKX19ZnVuY3Rpb24gU24oZSxuLGk9dCl7bGV0e2ltbWVkaWF0ZTphLGRlZXA6byxvbmNlOnMsc2NoZWR1bGVyOmwsYXVnbWVudEpvYjp1LGNhbGw6Zn09aSxwPWU9Pm8/ZTpHdChlKXx8bz09PSExfHxvPT09MD9DbihlLDEpOkNuKGUpLG0saCxfLHYseT0hMSxiPSExO2lmKEgoZSk/KGg9KCk9PmUudmFsdWUseT1HdChlKSk6VXQoZSk/KGg9KCk9PnAoZSkseT0hMCk6ZChlKT8oYj0hMCx5PWUuc29tZShlPT5VdChlKXx8R3QoZSkpLGg9KCk9PmUubWFwKGU9PntpZihIKGUpKXJldHVybiBlLnZhbHVlO2lmKFV0KGUpKXJldHVybiBwKGUpO2lmKGcoZSkpcmV0dXJuIGY/ZihlLDIpOmUoKX0pKTpoPWcoZSk/bj9mPygpPT5mKGUsMik6ZTooKT0+e2lmKF8pe1dlKCk7dHJ5e18oKX1maW5hbGx5e0dlKCl9fWxldCB0PXluO3luPW07dHJ5e3JldHVybiBmP2YoZSwzLFt2XSk6ZSh2KX1maW5hbGx5e3luPXR9fTpyLG4mJm8pe2xldCBlPWgsdD1vPT09ITA/MS8wOm87aD0oKT0+Q24oZSgpLHQpfWxldCB4PXdlKCksUz0oKT0+e20uc3RvcCgpLHgmJnguYWN0aXZlJiZjKHguZWZmZWN0cyxtKX07aWYocyYmbil7bGV0IGU9bjtuPSguLi50KT0+e2xldCBuPWUoLi4udCk7cmV0dXJuIFMoKSxufX1sZXQgQz1iP0FycmF5KGUubGVuZ3RoKS5maWxsKF9uKTpfbix3PWU9PntpZighKCEobS5mbGFncyYxKXx8IW0uZGlydHkmJiFlKSl7aWYobil7bGV0IHQ9bS5ydW4oKTtpZihlfHxvfHx5fHwoYj90LnNvbWUoKGUsdCk9PmooZSxDW3RdKSk6aih0LEMpKSl7XyYmXygpO2xldCBlPXluO3luPW07dHJ5e2xldCBlPVt0LEM9PT1fbj92b2lkIDA6YiYmQ1swXT09PV9uP1tdOkMsdl07Qz10LGY/ZihuLDMsZSk6biguLi5lKX1maW5hbGx5e3luPWV9fX1lbHNlIG0ucnVuKCl9fTtyZXR1cm4gdSYmdSh3KSxtPW5ldyBEZShoKSxtLnNjaGVkdWxlcj1sPygpPT5sKHcsITEpOncsdj1lPT54bihlLCExLG0pLF89bS5vblN0b3A9KCk9PntsZXQgZT12bi5nZXQobSk7aWYoZSl7aWYoZilmKGUsNCk7ZWxzZSBmb3IobGV0IHQgb2YgZSl0KCk7dm4uZGVsZXRlKG0pfX0sbj9hP3coITApOkM9bS5ydW4oKTpsP2wody5iaW5kKG51bGwsITApLCEwKTptLnJ1bigpLFMucGF1c2U9bS5wYXVzZS5iaW5kKG0pLFMucmVzdW1lPW0ucmVzdW1lLmJpbmQobSksUy5zdG9wPVMsU31mdW5jdGlvbiBDbihlLHQ9MS8wLG4pe2lmKHQ8PTB8fCF5KGUpfHxlLl9fdl9za2lwfHwobnx8PW5ldyBNYXAsKG4uZ2V0KGUpfHwwKT49dCkpcmV0dXJuIGU7aWYobi5zZXQoZSx0KSx0LS0sSChlKSlDbihlLnZhbHVlLHQsbik7ZWxzZSBpZihkKGUpKWZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKUNuKGVbcl0sdCxuKTtlbHNlIGlmKHAoZSl8fGYoZSkpZS5mb3JFYWNoKGU9PntDbihlLHQsbil9KTtlbHNlIGlmKHcoZSkpe2ZvcihsZXQgciBpbiBlKUNuKGVbcl0sdCxuKTtmb3IobGV0IHIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSlPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmQ24oZVtyXSx0LG4pfXJldHVybiBlfXZhciB3bj1bXTtmdW5jdGlvbiBUbihlKXt3bi5wdXNoKGUpfWZ1bmN0aW9uIEVuKCl7d24ucG9wKCl9ZnVuY3Rpb24gRG4oZSx0KXt9dmFyIE9uPXtTRVRVUF9GVU5DVElPTjowLDA6YFNFVFVQX0ZVTkNUSU9OYCxSRU5ERVJfRlVOQ1RJT046MSwxOmBSRU5ERVJfRlVOQ1RJT05gLE5BVElWRV9FVkVOVF9IQU5ETEVSOjUsNTpgTkFUSVZFX0VWRU5UX0hBTkRMRVJgLENPTVBPTkVOVF9FVkVOVF9IQU5ETEVSOjYsNjpgQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVJgLFZOT0RFX0hPT0s6Nyw3OmBWTk9ERV9IT09LYCxESVJFQ1RJVkVfSE9PSzo4LDg6YERJUkVDVElWRV9IT09LYCxUUkFOU0lUSU9OX0hPT0s6OSw5OmBUUkFOU0lUSU9OX0hPT0tgLEFQUF9FUlJPUl9IQU5ETEVSOjEwLDEwOmBBUFBfRVJST1JfSEFORExFUmAsQVBQX1dBUk5fSEFORExFUjoxMSwxMTpgQVBQX1dBUk5fSEFORExFUmAsRlVOQ1RJT05fUkVGOjEyLDEyOmBGVU5DVElPTl9SRUZgLEFTWU5DX0NPTVBPTkVOVF9MT0FERVI6MTMsMTM6YEFTWU5DX0NPTVBPTkVOVF9MT0FERVJgLFNDSEVEVUxFUjoxNCwxNDpgU0NIRURVTEVSYCxDT01QT05FTlRfVVBEQVRFOjE1LDE1OmBDT01QT05FTlRfVVBEQVRFYCxBUFBfVU5NT1VOVF9DTEVBTlVQOjE2LDE2OmBBUFBfVU5NT1VOVF9DTEVBTlVQYH0sa249e3NwOmBzZXJ2ZXJQcmVmZXRjaCBob29rYCxiYzpgYmVmb3JlQ3JlYXRlIGhvb2tgLGM6YGNyZWF0ZWQgaG9va2AsYm06YGJlZm9yZU1vdW50IGhvb2tgLG06YG1vdW50ZWQgaG9va2AsYnU6YGJlZm9yZVVwZGF0ZSBob29rYCx1OmB1cGRhdGVkYCxidW06YGJlZm9yZVVubW91bnQgaG9va2AsdW06YHVubW91bnRlZCBob29rYCxhOmBhY3RpdmF0ZWQgaG9va2AsZGE6YGRlYWN0aXZhdGVkIGhvb2tgLGVjOmBlcnJvckNhcHR1cmVkIGhvb2tgLHJ0YzpgcmVuZGVyVHJhY2tlZCBob29rYCxydGc6YHJlbmRlclRyaWdnZXJlZCBob29rYCwwOmBzZXR1cCBmdW5jdGlvbmAsMTpgcmVuZGVyIGZ1bmN0aW9uYCwyOmB3YXRjaGVyIGdldHRlcmAsMzpgd2F0Y2hlciBjYWxsYmFja2AsNDpgd2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uYCw1OmBuYXRpdmUgZXZlbnQgaGFuZGxlcmAsNjpgY29tcG9uZW50IGV2ZW50IGhhbmRsZXJgLDc6YHZub2RlIGhvb2tgLDg6YGRpcmVjdGl2ZSBob29rYCw5OmB0cmFuc2l0aW9uIGhvb2tgLDEwOmBhcHAgZXJyb3JIYW5kbGVyYCwxMTpgYXBwIHdhcm5IYW5kbGVyYCwxMjpgcmVmIGZ1bmN0aW9uYCwxMzpgYXN5bmMgY29tcG9uZW50IGxvYWRlcmAsMTQ6YHNjaGVkdWxlciBmbHVzaGAsMTU6YGNvbXBvbmVudCB1cGRhdGVgLDE2OmBhcHAgdW5tb3VudCBjbGVhbnVwIGZ1bmN0aW9uYH07ZnVuY3Rpb24gQW4oZSx0LG4scil7dHJ5e3JldHVybiByP2UoLi4ucik6ZSgpfWNhdGNoKGUpe01uKGUsdCxuKX19ZnVuY3Rpb24gam4oZSx0LG4scil7aWYoZyhlKSl7bGV0IGk9QW4oZSx0LG4scik7cmV0dXJuIGkmJmIoaSkmJmkuY2F0Y2goZT0+e01uKGUsdCxuKX0pLGl9aWYoZChlKSl7bGV0IGk9W107Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspaS5wdXNoKGpuKGVbYV0sdCxuLHIpKTtyZXR1cm4gaX19ZnVuY3Rpb24gTW4oZSxuLHIsaT0hMCl7bGV0IGE9bj9uLnZub2RlOm51bGwse2Vycm9ySGFuZGxlcjpvLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246c309biYmbi5hcHBDb250ZXh0LmNvbmZpZ3x8dDtpZihuKXtsZXQgdD1uLnBhcmVudCxpPW4ucHJveHksYT1gaHR0cHM6Ly92dWVqcy5vcmcvZXJyb3ItcmVmZXJlbmNlLyNydW50aW1lLSR7cn1gO2Zvcig7dDspe2xldCBuPXQuZWM7aWYobil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoblt0XShlLGksYSk9PT0hMSlyZXR1cm59dD10LnBhcmVudH1pZihvKXtXZSgpLEFuKG8sbnVsbCwxMCxbZSxpLGFdKSxHZSgpO3JldHVybn19Tm4oZSxyLGEsaSxzKX1mdW5jdGlvbiBObihlLHQsbixyPSEwLGk9ITEpe2lmKGkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciBQbj1bXSxGbj0tMSxJbj1bXSxMbj1udWxsLFJuPTAsem49UHJvbWlzZS5yZXNvbHZlKCksQm49bnVsbDtmdW5jdGlvbiBWbihlKXtsZXQgdD1Cbnx8em47cmV0dXJuIGU/dC50aGVuKHRoaXM/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gSG4oZSl7bGV0IHQ9Rm4rMSxuPVBuLmxlbmd0aDtmb3IoO3Q8bjspe2xldCByPXQrbj4+PjEsaT1QbltyXSxhPUpuKGkpO2E8ZXx8YT09PWUmJmkuZmxhZ3MmMj90PXIrMTpuPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gVW4oZSl7aWYoIShlLmZsYWdzJjEpKXtsZXQgdD1KbihlKSxuPVBuW1BuLmxlbmd0aC0xXTshbnx8IShlLmZsYWdzJjIpJiZ0Pj1KbihuKT9Qbi5wdXNoKGUpOlBuLnNwbGljZShIbih0KSwwLGUpLGUuZmxhZ3N8PTEsV24oKX19ZnVuY3Rpb24gV24oKXtCbnx8PXpuLnRoZW4oWW4pfWZ1bmN0aW9uIEduKGUpe2lmKCFkKGUpKUxuJiZlLmlkPT09LTE/TG4uc3BsaWNlKFJuKzEsMCxlKTplLmZsYWdzJjF8fChJbi5wdXNoKGUpLGUuZmxhZ3N8PTEpO2Vsc2UgZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspSW4ucHVzaChlW3RdKTtXbigpfWZ1bmN0aW9uIEtuKGUsdCxuPUZuKzEpe2Zvcig7bjxQbi5sZW5ndGg7bisrKXtsZXQgdD1QbltuXTtpZih0JiZ0LmZsYWdzJjIpe2lmKGUmJnQuaWQhPT1lLnVpZCljb250aW51ZTtQbi5zcGxpY2UobiwxKSxuLS0sdC5mbGFncyY0JiYodC5mbGFncyY9LTIpLHQoKSx0LmZsYWdzJjR8fCh0LmZsYWdzJj0tMil9fX1mdW5jdGlvbiBxbihlKXtpZihJbi5sZW5ndGgpe2xldCBlPVsuLi5uZXcgU2V0KEluKV0uc29ydCgoZSx0KT0+Sm4oZSktSm4odCkpO2lmKEluLmxlbmd0aD0wLExuKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKylMbi5wdXNoKGVbdF0pO3JldHVybn1mb3IoTG49ZSxSbj0wO1JuPExuLmxlbmd0aDtSbisrKXtsZXQgZT1MbltSbl07ZS5mbGFncyY0JiYoZS5mbGFncyY9LTIpLGUuZmxhZ3MmOHx8ZSgpLGUuZmxhZ3MmPS0yfUxuPW51bGwsUm49MH19dmFyIEpuPWU9PmUuaWQ9PW51bGw/ZS5mbGFncyYyPy0xOjEvMDplLmlkO2Z1bmN0aW9uIFluKGUpe3RyeXtmb3IoRm49MDtGbjxQbi5sZW5ndGg7Rm4rKyl7bGV0IGU9UG5bRm5dO2UmJiEoZS5mbGFncyY4KSYmKGUuZmxhZ3MmNCYmKGUuZmxhZ3MmPS0yKSxBbihlLGUuaSxlLmk/MTU6MTQpLGUuZmxhZ3MmNHx8KGUuZmxhZ3MmPS0yKSl9fWZpbmFsbHl7Zm9yKDtGbjxQbi5sZW5ndGg7Rm4rKyl7bGV0IGU9UG5bRm5dO2UmJihlLmZsYWdzJj0tMil9Rm49LTEsUG4ubGVuZ3RoPTAscW4oZSksQm49bnVsbCwoUG4ubGVuZ3RofHxJbi5sZW5ndGgpJiZZbihlKX19dmFyIFhuLFpuPVtdO2Z1bmN0aW9uIFFuKGUsdCl7WG49ZSxYbj8oWG4uZW5hYmxlZD0hMCxabi5mb3JFYWNoKCh7ZXZlbnQ6ZSxhcmdzOnR9KT0+WG4uZW1pdChlLC4uLnQpKSxabj1bXSk6dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdy5IVE1MRWxlbWVudCYmISh3aW5kb3cubmF2aWdhdG9yPy51c2VyQWdlbnQpPy5pbmNsdWRlcyhganNkb21gKT8oKHQuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz10Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdKS5wdXNoKGU9PntRbihlLHQpfSksc2V0VGltZW91dCgoKT0+e1hufHwodC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsWm49W10pfSwzZTMpKTpabj1bXX12YXIgVT1udWxsLCRuPW51bGw7ZnVuY3Rpb24gZXIoZSl7bGV0IHQ9VTtyZXR1cm4gVT1lLCRuPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiB0cihlKXskbj1lfWZ1bmN0aW9uIG5yKCl7JG49bnVsbH12YXIgcnI9ZT0+aXI7ZnVuY3Rpb24gaXIoZSx0PVUsbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7bGV0IHI9KC4uLm4pPT57ci5fZCYmaXMoLTEpO2xldCBpPWVyKHQpLGE9JG8ubGVuZ3RoLG87dHJ5e289ZSguLi5uKX1maW5hbGx5e2ZvcihsZXQgZT0kby5sZW5ndGg7ZT5hO2UtLSlucygpO2VyKGkpLHIuX2QmJmlzKDEpfXJldHVybiBvfTtyZXR1cm4gci5fbj0hMCxyLl9jPSEwLHIuX2Q9ITAscn1mdW5jdGlvbiBhcihlLG4pe2lmKFU9PT1udWxsKXJldHVybiBlO2xldCByPVdzKFUpLGk9ZS5kaXJzfHw9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldFthLG8scyxjPXRdPW5bZV07YSYmKGcoYSkmJihhPXttb3VudGVkOmEsdXBkYXRlZDphfSksYS5kZWVwJiZDbihvKSxpLnB1c2goe2RpcjphLGluc3RhbmNlOnIsdmFsdWU6byxvbGRWYWx1ZTp2b2lkIDAsYXJnOnMsbW9kaWZpZXJzOmN9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoZSx0LG4scil7bGV0IGk9ZS5kaXJzLGE9dCYmdC5kaXJzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgcz1pW29dO2EmJihzLm9sZFZhbHVlPWFbb10udmFsdWUpO2xldCBjPXMuZGlyW3JdO2MmJihXZSgpLGpuKGMsbiw4LFtlLmVsLHMsZSx0XSksR2UoKSl9fWZ1bmN0aW9uIHNyKGUsdCl7aWYoSil7bGV0IG49Si5wcm92aWRlcyxyPUoucGFyZW50JiZKLnBhcmVudC5wcm92aWRlcztyPT09biYmKG49Si5wcm92aWRlcz1PYmplY3QuY3JlYXRlKHIpKSxuW2VdPXR9fWZ1bmN0aW9uIGNyKGUsdCxuPSExKXtsZXQgcj1ZKCk7aWYocnx8cWEpe2xldCBpPXFhP3FhLl9jb250ZXh0LnByb3ZpZGVzOnI/ci5wYXJlbnQ9PW51bGx8fHIuY2U/ci52bm9kZS5hcHBDb250ZXh0JiZyLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6ci5wYXJlbnQucHJvdmlkZXM6dm9pZCAwO2lmKGkmJmUgaW4gaSlyZXR1cm4gaVtlXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIG4mJmcodCk/dC5jYWxsKHImJnIucHJveHkpOnR9fWZ1bmN0aW9uIGxyKCl7cmV0dXJuISEoWSgpfHxxYSl9dmFyIHVyPVN5bWJvbC5mb3IoYHYtc2N4YCksZHI9KCk9PmNyKHVyKTtmdW5jdGlvbiBmcihlLHQpe3JldHVybiBncihlLG51bGwsdCl9ZnVuY3Rpb24gcHIoZSx0KXtyZXR1cm4gZ3IoZSxudWxsLHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBncihlLG51bGwse2ZsdXNoOmBzeW5jYH0pfWZ1bmN0aW9uIGhyKGUsdCxuKXtyZXR1cm4gZ3IoZSx0LG4pfWZ1bmN0aW9uIGdyKGUsbixpPXQpe2xldHtpbW1lZGlhdGU6YSxkZWVwOm8sZmx1c2g6YyxvbmNlOmx9PWksdT1zKHt9LGkpLGQ9biYmYXx8IW4mJmMhPT1gcG9zdGAsZjtpZihOcyl7aWYoYz09PWBzeW5jYCl7bGV0IGU9ZHIoKTtmPWUuX193YXRjaGVySGFuZGxlc3x8PVtdfWVsc2UgaWYoIWQpe2xldCBlPSgpPT57fTtyZXR1cm4gZS5zdG9wPXIsZS5yZXN1bWU9cixlLnBhdXNlPXIsZX19bGV0IHA9Sjt1LmNhbGw9KGUsdCxuKT0+am4oZSxwLHQsbik7bGV0IG09ITE7Yz09PWBwb3N0YD91LnNjaGVkdWxlcj1lPT57VyhlLHAmJnAuc3VzcGVuc2UpfTpjIT09YHN5bmNgJiYobT0hMCx1LnNjaGVkdWxlcj0oZSx0KT0+e3Q/ZSgpOlVuKGUpfSksdS5hdWdtZW50Sm9iPWU9PntuJiYoZS5mbGFnc3w9NCksbSYmKGUuZmxhZ3N8PTIscCYmKGUuaWQ9cC51aWQsZS5pPXApKX07bGV0IGg9U24oZSxuLHUpO3JldHVybiBOcyYmKGY/Zi5wdXNoKGgpOmQmJmgoKSksaH1mdW5jdGlvbiBfcihlLHQsbil7bGV0IHI9dGhpcy5wcm94eSxpPV8oZSk/ZS5pbmNsdWRlcyhgLmApP3ZyKHIsZSk6KCk9PnJbZV06ZS5iaW5kKHIsciksYTtnKHQpP2E9dDooYT10LmhhbmRsZXIsbj10KTtsZXQgbz1Bcyh0aGlzKSxzPWdyKGksYS5iaW5kKHIpLG4pO3JldHVybiBvKCksc31mdW5jdGlvbiB2cihlLHQpe2xldCBuPXQuc3BsaXQoYC5gKTtyZXR1cm4oKT0+e2xldCB0PWU7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmdDtlKyspdD10W25bZV1dO3JldHVybiB0fX12YXIgeXI9bmV3IFdlYWtNYXAsYnI9U3ltYm9sKGBfdnRlYCkseHI9ZT0+ZS5fX2lzVGVsZXBvcnQsU3I9ZT0+ZSYmKGUuZGlzYWJsZWR8fGUuZGlzYWJsZWQ9PT1gYCksQ3I9ZT0+ZSYmKGUuZGVmZXJ8fGUuZGVmZXI9PT1gYCksd3I9ZT0+dHlwZW9mIFNWR0VsZW1lbnQ8YHVgJiZlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCxUcj1lPT50eXBlb2YgTWF0aE1MRWxlbWVudD09YGZ1bmN0aW9uYCYmZSBpbnN0YW5jZW9mIE1hdGhNTEVsZW1lbnQsRXI9KGUsdCk9PntsZXQgbj1lJiZlLnRvO3JldHVybiBfKG4pP3Q/dChuKTpudWxsOm59LERyPXtuYW1lOmBUZWxlcG9ydGAsX19pc1RlbGVwb3J0OiEwLHByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbCl7bGV0e21jOnUscGM6ZCxwYmM6ZixvOntpbnNlcnQ6cCxxdWVyeVNlbGVjdG9yOm0sY3JlYXRlVGV4dDpoLGNyZWF0ZUNvbW1lbnQ6ZyxwYXJlbnROb2RlOl99fT1sLHY9U3IodC5wcm9wcykse2R5bmFtaWNDaGlsZHJlbjp5fT10LGI9KGUsdCxuKT0+e2Uuc2hhcGVGbGFnJjE2JiZ1KGUuY2hpbGRyZW4sdCxuLGksYSxvLHMsYyl9LHg9KGU9dCk9PntsZXQgbj1TcihlLnByb3BzKSxyPWUudGFyZ2V0PUVyKGUucHJvcHMsbSksYT1NcihyLGUsaCxwKTtyJiYobyE9PWBzdmdgJiZ3cihyKT9vPWBzdmdgOm8hPT1gbWF0aG1sYCYmVHIocikmJihvPWBtYXRobWxgKSxpJiZpLmlzQ0UmJihpLmNlLl90ZWxlcG9ydFRhcmdldHN8fChpLmNlLl90ZWxlcG9ydFRhcmdldHM9bmV3IFNldCkpLmFkZChyKSxufHwoYihlLHIsYSksanIoZSwhMSkpKX0sUz1lPT57bGV0IHQ9KCk9PntpZih5ci5nZXQoZSk9PT10KXtpZih5ci5kZWxldGUoZSksU3IoZS5wcm9wcykpe2xldCB0PV8oZS5lbCl8fG47YihlLHQsZS5hbmNob3IpLGpyKGUsITApfXgoZSl9fTt5ci5zZXQoZSx0KSxXKHQsYSl9O2lmKGU9PW51bGwpe2xldCBlPXQuZWw9aChgYCksaT10LmFuY2hvcj1oKGBgKTtpZihwKGUsbixyKSxwKGksbixyKSxDcih0LnByb3BzKXx8YSYmYS5wZW5kaW5nQnJhbmNoKXtTKHQpO3JldHVybn12JiYoYih0LG4saSksanIodCwhMCkpLHgoKX1lbHNle3QuZWw9ZS5lbDtsZXQgcj10LmFuY2hvcj1lLmFuY2hvcix1PXlyLmdldChlKTtpZih1KXt1LmZsYWdzfD04LHlyLmRlbGV0ZShlKSxTKHQpO3JldHVybn10LnRhcmdldFN0YXJ0PWUudGFyZ2V0U3RhcnQ7bGV0IHA9dC50YXJnZXQ9ZS50YXJnZXQsaD10LnRhcmdldEFuY2hvcj1lLnRhcmdldEFuY2hvcixnPVNyKGUucHJvcHMpLF89Zz9uOnAsYj1nP3I6aDtpZihvPT09YHN2Z2B8fHdyKHApP289YHN2Z2A6KG89PT1gbWF0aG1sYHx8VHIocCkpJiYobz1gbWF0aG1sYCkseT8oZihlLmR5bmFtaWNDaGlsZHJlbix5LF8saSxhLG8scyksTm8oZSx0LCEwKSk6Y3x8ZChlLHQsXyxiLGksYSxvLHMsITEpLHYpZz90LnByb3BzJiZlLnByb3BzJiZ0LnByb3BzLnRvIT09ZS5wcm9wcy50byYmKHQucHJvcHMudG89ZS5wcm9wcy50byk6T3IodCxuLHIsbCwxKTtlbHNlIGlmKCh0LnByb3BzJiZ0LnByb3BzLnRvKSE9PShlLnByb3BzJiZlLnByb3BzLnRvKSl7bGV0IGU9RXIodC5wcm9wcyxtKTtlJiYodC50YXJnZXQ9ZSxPcih0LGUsbnVsbCxsLDApKX1lbHNlIGcmJk9yKHQscCxoLGwsMSk7anIodCx2KX19LHJlbW92ZShlLHQsbix7dW06cixvOntyZW1vdmU6aX19LGEpe2xldHtzaGFwZUZsYWc6byxjaGlsZHJlbjpzLGFuY2hvcjpjLHRhcmdldFN0YXJ0OmwsdGFyZ2V0QW5jaG9yOnUsdGFyZ2V0OmQscHJvcHM6Zn09ZSxwPVNyKGYpLG09YXx8IXAsaD15ci5nZXQoZSk7aWYoaCYmKGguZmxhZ3N8PTgseXIuZGVsZXRlKGUpKSxkJiYoaShsKSxpKHUpKSxhJiZpKGMpLCFoJiYocHx8ZCkmJm8mMTYpZm9yKGxldCBlPTA7ZTxzLmxlbmd0aDtlKyspe2xldCBpPXNbZV07cihpLHQsbixtLCEhaS5keW5hbWljQ2hpbGRyZW4pfX0sbW92ZTpPcixoeWRyYXRlOmtyfTtmdW5jdGlvbiBPcihlLHQsbix7bzp7aW5zZXJ0OnJ9LG06aX0sYT0yKXthPT09MCYmcihlLnRhcmdldEFuY2hvcix0LG4pO2xldHtlbDpvLGFuY2hvcjpzLHNoYXBlRmxhZzpjLGNoaWxkcmVuOmwscHJvcHM6dX09ZSxkPWE9PT0yO2lmKGQmJnIobyx0LG4pLCF5ci5oYXMoZSkmJighZHx8U3IodSkpJiZjJjE2KWZvcihsZXQgZT0wO2U8bC5sZW5ndGg7ZSsrKWkobFtlXSx0LG4sMik7ZCYmcihzLHQsbil9ZnVuY3Rpb24ga3IoZSx0LG4scixpLGEse286e25leHRTaWJsaW5nOm8scGFyZW50Tm9kZTpzLHF1ZXJ5U2VsZWN0b3I6YyxpbnNlcnQ6bCxjcmVhdGVUZXh0OnV9fSxkKXtmdW5jdGlvbiBmKGUsbil7bGV0IHI9bjtmb3IoO3I7KXtpZihyJiZyLm5vZGVUeXBlPT09OCl7aWYoci5kYXRhPT09YHRlbGVwb3J0IHN0YXJ0IGFuY2hvcmApdC50YXJnZXRTdGFydD1yO2Vsc2UgaWYoci5kYXRhPT09YHRlbGVwb3J0IGFuY2hvcmApe3QudGFyZ2V0QW5jaG9yPXIsZS5fbHBhPXQudGFyZ2V0QW5jaG9yJiZvKHQudGFyZ2V0QW5jaG9yKTticmVha319cj1vKHIpfX1mdW5jdGlvbiBwKGUsdCl7dC5hbmNob3I9ZChvKGUpLHQscyhlKSxuLHIsaSxhKX1sZXQgbT10LnRhcmdldD1Fcih0LnByb3BzLGMpLGg9U3IodC5wcm9wcyk7aWYobSl7bGV0IGM9bS5fbHBhfHxtLmZpcnN0Q2hpbGQ7dC5zaGFwZUZsYWcmMTYmJihoPyhwKGUsdCksZihtLGMpLHQudGFyZ2V0QW5jaG9yfHxNcihtLHQsdSxsLHMoZSk9PT1tP2U6bnVsbCkpOih0LmFuY2hvcj1vKGUpLGYobSxjKSx0LnRhcmdldEFuY2hvcnx8TXIobSx0LHUsbCksZChjJiZvKGMpLHQsbSxuLHIsaSxhKSkpLGpyKHQsaCl9ZWxzZSBoJiZ0LnNoYXBlRmxhZyYxNiYmKHAoZSx0KSx0LnRhcmdldFN0YXJ0PWUsdC50YXJnZXRBbmNob3I9byhlKSk7cmV0dXJuIHQuYW5jaG9yJiZvKHQuYW5jaG9yKX12YXIgQXI9RHI7ZnVuY3Rpb24ganIoZSx0KXtsZXQgbj1lLmN0eDtpZihuJiZuLnV0KXtsZXQgcixpO2Zvcih0PyhyPWUuZWwsaT1lLmFuY2hvcik6KHI9ZS50YXJnZXRTdGFydCxpPWUudGFyZ2V0QW5jaG9yKTtyJiZyIT09aTspci5ub2RlVHlwZT09PTEmJnIuc2V0QXR0cmlidXRlKGBkYXRhLXYtb3duZXJgLG4udWlkKSxyPXIubmV4dFNpYmxpbmc7bi51dCgpfX1mdW5jdGlvbiBNcihlLHQsbixyLGk9bnVsbCl7bGV0IGE9dC50YXJnZXRTdGFydD1uKGBgKSxvPXQudGFyZ2V0QW5jaG9yPW4oYGApO3JldHVybiBhW2JyXT1vLGUmJihyKGEsZSxpKSxyKG8sZSxpKSksb312YXIgTnI9U3ltYm9sKGBfbGVhdmVDYmApLFByPVN5bWJvbChgX2VudGVyQ2JgKTtmdW5jdGlvbiBGcigpe2xldCBlPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBWaSgoKT0+e2UuaXNNb3VudGVkPSEwfSksV2koKCk9PntlLmlzVW5tb3VudGluZz0hMH0pLGV9dmFyIElyPVtGdW5jdGlvbixBcnJheV0sTHI9e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6SXIsb25FbnRlcjpJcixvbkFmdGVyRW50ZXI6SXIsb25FbnRlckNhbmNlbGxlZDpJcixvbkJlZm9yZUxlYXZlOklyLG9uTGVhdmU6SXIsb25BZnRlckxlYXZlOklyLG9uTGVhdmVDYW5jZWxsZWQ6SXIsb25CZWZvcmVBcHBlYXI6SXIsb25BcHBlYXI6SXIsb25BZnRlckFwcGVhcjpJcixvbkFwcGVhckNhbmNlbGxlZDpJcn0sUnI9ZT0+e2xldCB0PWUuc3ViVHJlZTtyZXR1cm4gdC5jb21wb25lbnQ/UnIodC5jb21wb25lbnQpOnR9LHpyPXtuYW1lOmBCYXNlVHJhbnNpdGlvbmAscHJvcHM6THIsc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPVkoKSxyPUZyKCk7cmV0dXJuKCk9PntsZXQgaT10LmRlZmF1bHQmJnFyKHQuZGVmYXVsdCgpLCEwKSxhPWkmJmkubGVuZ3RoP0JyKGkpOm4uc3ViVHJlZT95cygpOnZvaWQgMDtpZighYSlyZXR1cm47bGV0IG89VihlKSx7bW9kZTpzfT1vO2lmKHIuaXNMZWF2aW5nKXJldHVybiBXcihhKTtsZXQgYz1HcihhKTtpZighYylyZXR1cm4gV3IoYSk7bGV0IGw9VXIoYyxvLHIsbixlPT5sPWUpO2MudHlwZSE9PUsmJktyKGMsbCk7bGV0IHU9bi5zdWJUcmVlJiZHcihuLnN1YlRyZWUpO2lmKHUmJnUudHlwZSE9PUsmJiFscyh1LGMpJiZScihuKS50eXBlIT09Syl7bGV0IGU9VXIodSxvLHIsbik7aWYoS3IodSxlKSxzPT09YG91dC1pbmAmJmMudHlwZSE9PUspcmV0dXJuIHIuaXNMZWF2aW5nPSEwLGUuYWZ0ZXJMZWF2ZT0oKT0+e3IuaXNMZWF2aW5nPSExLG4uam9iLmZsYWdzJjh8fG4udXBkYXRlKCksZGVsZXRlIGUuYWZ0ZXJMZWF2ZSx1PXZvaWQgMH0sV3IoYSk7cz09PWBpbi1vdXRgJiZjLnR5cGUhPT1LP2UuZGVsYXlMZWF2ZT0oZSx0LG4pPT57bGV0IGk9SHIocix1KTtpW1N0cmluZyh1LmtleSldPXUsZVtOcl09KCk9Pnt0KCksZVtOcl09dm9pZCAwLGRlbGV0ZSBsLmRlbGF5ZWRMZWF2ZSx1PXZvaWQgMH0sbC5kZWxheWVkTGVhdmU9KCk9PntuKCksZGVsZXRlIGwuZGVsYXllZExlYXZlLHU9dm9pZCAwfX06dT12b2lkIDB9ZWxzZSB1JiY9dm9pZCAwO3JldHVybiBhfX19O2Z1bmN0aW9uIEJyKGUpe2xldCB0PWVbMF07aWYoZS5sZW5ndGg+MSl7Zm9yKGxldCBuIG9mIGUpaWYobi50eXBlIT09Syl7dD1uO2JyZWFrfX1yZXR1cm4gdH12YXIgVnI9enI7ZnVuY3Rpb24gSHIoZSx0KXtsZXR7bGVhdmluZ1ZOb2RlczpufT1lLHI9bi5nZXQodC50eXBlKTtyZXR1cm4gcnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuLnNldCh0LnR5cGUscikpLHJ9ZnVuY3Rpb24gVXIoZSx0LG4scixpKXtsZXR7YXBwZWFyOmEsbW9kZTpvLHBlcnNpc3RlZDpzPSExLG9uQmVmb3JlRW50ZXI6YyxvbkVudGVyOmwsb25BZnRlckVudGVyOnUsb25FbnRlckNhbmNlbGxlZDpmLG9uQmVmb3JlTGVhdmU6cCxvbkxlYXZlOm0sb25BZnRlckxlYXZlOmgsb25MZWF2ZUNhbmNlbGxlZDpnLG9uQmVmb3JlQXBwZWFyOl8sb25BcHBlYXI6dixvbkFmdGVyQXBwZWFyOnksb25BcHBlYXJDYW5jZWxsZWQ6Yn09dCx4PVN0cmluZyhlLmtleSksUz1IcihuLGUpLEM9KGUsdCk9PntlJiZqbihlLHIsOSx0KX0sdz0oZSx0KT0+e2xldCBuPXRbMV07QyhlLHQpLGQoZSk/ZS5ldmVyeShlPT5lLmxlbmd0aDw9MSkmJm4oKTplLmxlbmd0aDw9MSYmbigpfSxUPXttb2RlOm8scGVyc2lzdGVkOnMsYmVmb3JlRW50ZXIodCl7bGV0IHI9YztpZighbi5pc01vdW50ZWQpe2lmKGEpcj1ffHxjO2Vsc2UgcmV0dXJufXRbTnJdJiZ0W05yXSghMCk7bGV0IGk9U1t4XTtpJiZscyhlLGkpJiZpLmVsW05yXSYmaS5lbFtOcl0oKSxDKHIsW3RdKX0sZW50ZXIodCl7aWYoU1t4XT09PWUpcmV0dXJuO2xldCByPWwsaT11LG89ZjtpZighbi5pc01vdW50ZWQpe2lmKGEpcj12fHxsLGk9eXx8dSxvPWJ8fGY7ZWxzZSByZXR1cm59bGV0IHM9ITE7dFtQcl09ZT0+e3N8fChzPSEwLEMoZT9vOmksW3RdKSxULmRlbGF5ZWRMZWF2ZSYmVC5kZWxheWVkTGVhdmUoKSx0W1ByXT12b2lkIDApfTtsZXQgYz10W1ByXS5iaW5kKG51bGwsITEpO3I/dyhyLFt0LGNdKTpjKCl9LGxlYXZlKHQscil7bGV0IGk9U3RyaW5nKGUua2V5KTtpZih0W1ByXSYmdFtQcl0oITApLG4uaXNVbm1vdW50aW5nKXJldHVybiByKCk7QyhwLFt0XSk7bGV0IGE9ITE7dFtOcl09bj0+e2F8fChhPSEwLHIoKSxDKG4/ZzpoLFt0XSksdFtOcl09dm9pZCAwLFNbaV09PT1lJiZkZWxldGUgU1tpXSl9O2xldCBvPXRbTnJdLmJpbmQobnVsbCwhMSk7U1tpXT1lLG0/dyhtLFt0LG9dKTpvKCl9LGNsb25lKGUpe2xldCBhPVVyKGUsdCxuLHIsaSk7cmV0dXJuIGkmJmkoYSksYX19O3JldHVybiBUfWZ1bmN0aW9uIFdyKGUpe2lmKGtpKGUpKXJldHVybiBlPWdzKGUpLGUuY2hpbGRyZW49bnVsbCxlfWZ1bmN0aW9uIEdyKGUpe2lmKCFraShlKSlyZXR1cm4geHIoZS50eXBlKSYmZS5jaGlsZHJlbj9CcihlLmNoaWxkcmVuKTplO2lmKGUuY29tcG9uZW50KXJldHVybiBlLmNvbXBvbmVudC5zdWJUcmVlO2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lO2lmKG4pe2lmKHQmMTYpcmV0dXJuIG5bMF07aWYodCYzMiYmZyhuLmRlZmF1bHQpKXJldHVybiBuLmRlZmF1bHQoKX19ZnVuY3Rpb24gS3IoZSx0KXtpZihlLnNoYXBlRmxhZyY2JiZlLmNvbXBvbmVudCl7ZS50cmFuc2l0aW9uPXQ7bGV0IG49ZS5jb21wb25lbnQuc3ViVHJlZTtLcih4cihuLnR5cGUpJiZHcihuKXx8bix0KX1lbHNlIGUuc2hhcGVGbGFnJjEyOD8oZS5zc0NvbnRlbnQudHJhbnNpdGlvbj10LmNsb25lKGUuc3NDb250ZW50KSxlLnNzRmFsbGJhY2sudHJhbnNpdGlvbj10LmNsb25lKGUuc3NGYWxsYmFjaykpOmUudHJhbnNpdGlvbj10fWZ1bmN0aW9uIHFyKGUsdD0hMSxuKXtsZXQgcj1bXSxpPTA7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2xldCBvPWVbYV0scz1uPT1udWxsP28ua2V5OlN0cmluZyhuKStTdHJpbmcoby5rZXk9PW51bGw/YTpvLmtleSk7by50eXBlPT09Rz8oby5wYXRjaEZsYWcmMTI4JiZpKysscj1yLmNvbmNhdChxcihvLmNoaWxkcmVuLHQscykpKToodHx8by50eXBlIT09SykmJnIucHVzaChzPT1udWxsP286Z3Mobyx7a2V5OnN9KSl9aWYoaT4xKWZvcihsZXQgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV0ucGF0Y2hGbGFnPS0yO3JldHVybiByfWZ1bmN0aW9uIEpyKGUsdCl7cmV0dXJuIGcoZSk/cyh7bmFtZTplLm5hbWV9LHQse3NldHVwOmV9KTplfWZ1bmN0aW9uIFlyKCl7bGV0IGU9WSgpO3JldHVybiBlPyhlLmFwcENvbnRleHQuY29uZmlnLmlkUHJlZml4fHxgdmApK2AtYCtlLmlkc1swXStlLmlkc1sxXSsrOmBgfWZ1bmN0aW9uIFhyKGUpe2UuaWRzPVtlLmlkc1swXStlLmlkc1syXSsrK2AtYCwwLDBdfWZ1bmN0aW9uIFpyKGUpe2xldCBuPVkoKSxyPVp0KG51bGwpO2lmKG4pe2xldCBpPW4ucmVmcz09PXQ/bi5yZWZzPXt9Om4ucmVmcztPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+ci52YWx1ZSxzZXQ6ZT0+ci52YWx1ZT1lfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gUXIoZSx0KXtsZXQgbjtyZXR1cm4hISgobj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkpJiYhbi5jb25maWd1cmFibGUpfXZhciAkcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBlaShlLG4scixhLG89ITEpe2lmKGQoZSkpe2UuZm9yRWFjaCgoZSx0KT0+ZWkoZSxuJiYoZChuKT9uW3RdOm4pLHIsYSxvKSk7cmV0dXJufWlmKEVpKGEpJiYhbyl7YS5zaGFwZUZsYWcmNTEyJiZhLnR5cGUuX19hc3luY1Jlc29sdmVkJiZhLmNvbXBvbmVudC5zdWJUcmVlLmNvbXBvbmVudCYmZWkoZSxuLHIsYS5jb21wb25lbnQuc3ViVHJlZSk7cmV0dXJufWxldCBzPWEuc2hhcGVGbGFnJjQ/V3MoYS5jb21wb25lbnQpOmEuZWwsbD1vP251bGw6cyx7aTpmLHI6cH09ZSxtPW4mJm4ucixoPWYucmVmcz09PXQ/Zi5yZWZzPXt9OmYucmVmcyx2PWYuc2V0dXBTdGF0ZSx5PVYodiksYj12PT09dD9pOmU9PiFRcihoLGUpJiZ1KHksZSkseD0oZSx0KT0+ISh0JiZRcihoLHQpKTtpZihtIT1udWxsJiZtIT09cCl7aWYodGkobiksXyhtKSloW21dPW51bGwsYihtKSYmKHZbbV09bnVsbCk7ZWxzZSBpZihIKG0pKXtsZXQgZT1uO3gobSxlLmspJiYobS52YWx1ZT1udWxsKSxlLmsmJihoW2Uua109bnVsbCl9fWlmKGcocCkpQW4ocCxmLDEyLFtsLGhdKTtlbHNle2xldCB0PV8ocCksbj1IKHApO2lmKHR8fG4pe2xldCBpPSgpPT57aWYoZS5mKXtsZXQgbj10P2IocCk/dltwXTpoW3BdOngocCl8fCFlLms/cC52YWx1ZTpoW2Uua107aWYobylkKG4pJiZjKG4scyk7ZWxzZSBpZihkKG4pKW4uaW5jbHVkZXMocyl8fG4ucHVzaChzKTtlbHNlIGlmKHQpaFtwXT1bc10sYihwKSYmKHZbcF09aFtwXSk7ZWxzZXtsZXQgdD1bc107eChwLGUuaykmJihwLnZhbHVlPXQpLGUuayYmKGhbZS5rXT10KX19ZWxzZSB0PyhoW3BdPWwsYihwKSYmKHZbcF09bCkpOm4mJih4KHAsZS5rKSYmKHAudmFsdWU9bCksZS5rJiYoaFtlLmtdPWwpKX07aWYobCl7bGV0IHQ9KCk9PntpKCksJHIuZGVsZXRlKGUpfTt0LmlkPS0xLCRyLnNldChlLHQpLFcodCxyKX1lbHNlIHRpKGUpLGkoKX19fWZ1bmN0aW9uIHRpKGUpe2xldCB0PSRyLmdldChlKTt0JiYodC5mbGFnc3w9OCwkci5kZWxldGUoZSkpfXZhciBuaT0hMSxyaT0oKT0+e25pfHw9KGNvbnNvbGUuZXJyb3IoYEh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuYCksITApfSxpaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgc3ZnYCkmJmUudGFnTmFtZSE9PWBmb3JlaWduT2JqZWN0YCxhaT1lPT5lLm5hbWVzcGFjZVVSSS5pbmNsdWRlcyhgTWF0aE1MYCksb2k9ZT0+e2lmKGUubm9kZVR5cGU9PT0xKXtpZihpaShlKSlyZXR1cm5gc3ZnYDtpZihhaShlKSlyZXR1cm5gbWF0aG1sYH19LHNpPWU9PmUubm9kZVR5cGU9PT04O2Z1bmN0aW9uIGNpKGUpe2xldHttdDp0LHA6bixvOntwYXRjaFByb3A6cixjcmVhdGVUZXh0OmksbmV4dFNpYmxpbmc6byxwYXJlbnROb2RlOnMscmVtb3ZlOmMsaW5zZXJ0OmwsY3JlYXRlQ29tbWVudDp1fX09ZSxkPShlLHQpPT57aWYoIXQuaGFzQ2hpbGROb2RlcygpKXtuKG51bGwsZSx0KSxxbigpLHQuX3Zub2RlPWU7cmV0dXJufWYodC5maXJzdENoaWxkLGUsbnVsbCxudWxsLG51bGwpLHFuKCksdC5fdm5vZGU9ZX0sZj0obixyLGEsYyx1LGQ9ITEpPT57ZHx8PSEhci5keW5hbWljQ2hpbGRyZW47bGV0IGI9c2kobikmJm4uZGF0YT09PWBbYCx4PSgpPT5nKG4scixhLGMsdSxiKSx7dHlwZTpTLHJlZjpDLHNoYXBlRmxhZzp3LHBhdGNoRmxhZzpUfT1yLEU9bi5ub2RlVHlwZTtyLmVsPW4sVD09PS0yJiYoZD0hMSxyLmR5bmFtaWNDaGlsZHJlbj1udWxsKTtsZXQgRD1udWxsO3N3aXRjaChTKXtjYXNlIFpvOkU9PT0zPyhuLmRhdGEhPT1yLmNoaWxkcmVuJiYocmkoKSxuLmRhdGE9ci5jaGlsZHJlbiksRD1vKG4pKTpyLmNoaWxkcmVuPT09YGA/KGwoci5lbD1pKGBgKSxzKG4pLG4pLEQ9bik6RD14KCk7YnJlYWs7Y2FzZSBLOnkobik/KEQ9byhuKSx2KHIuZWw9bi5jb250ZW50LmZpcnN0Q2hpbGQsbixhKSk6RD1FIT09OHx8Yj94KCk6byhuKTticmVhaztjYXNlIFFvOmlmKGImJihuPW8obiksRT1uLm5vZGVUeXBlKSxFPT09MXx8RT09PTMpe0Q9bjtsZXQgZT0hci5jaGlsZHJlbi5sZW5ndGg7Zm9yKGxldCB0PTA7dDxyLnN0YXRpY0NvdW50O3QrKyllJiYoci5jaGlsZHJlbis9RC5ub2RlVHlwZT09PTE/RC5vdXRlckhUTUw6RC5kYXRhKSx0PT09ci5zdGF0aWNDb3VudC0xJiYoci5hbmNob3I9RCksRD1vKEQpO3JldHVybiBiP28oRCk6RH14KCk7YnJlYWs7Y2FzZSBHOkQ9Yj9oKG4scixhLGMsdSxkKTp4KCk7YnJlYWs7ZGVmYXVsdDppZih3JjEpRD0oRSE9PTF8fHIudHlwZS50b0xvd2VyQ2FzZSgpIT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkpJiYheShuKT94KCk6cChuLHIsYSxjLHUsZCk7ZWxzZSBpZih3JjYpe3Iuc2xvdFNjb3BlSWRzPXU7bGV0IGU9cyhuKTtpZihEPWI/XyhuKTpzaShuKSYmbi5kYXRhPT09YHRlbGVwb3J0IHN0YXJ0YD9fKG4sbi5kYXRhLGB0ZWxlcG9ydCBlbmRgKTpvKG4pLHQocixlLG51bGwsYSxjLG9pKGUpLGQpLEVpKHIpJiYhci50eXBlLl9fYXN5bmNSZXNvbHZlZCl7bGV0IHQ7Yj8odD1xKEcpLHQuYW5jaG9yPUQ/RC5wcmV2aW91c1NpYmxpbmc6ZS5sYXN0Q2hpbGQpOnQ9bi5ub2RlVHlwZT09PTM/X3MoYGApOnEoYGRpdmApLHQuZWw9bixyLmNvbXBvbmVudC5zdWJUcmVlPXR9fWVsc2UgdyY2ND9EPUU9PT04P3IudHlwZS5oeWRyYXRlKG4scixhLGMsdSxkLGUsbSk6eCgpOncmMTI4JiYoRD1yLnR5cGUuaHlkcmF0ZShuLHIsYSxjLG9pKHMobikpLHUsZCxlLGYpKX1yZXR1cm4gQyE9bnVsbCYmZWkoQyxudWxsLGMsciksRH0scD0oZSx0LG4saSxvLHMpPT57c3x8PSEhdC5keW5hbWljQ2hpbGRyZW47bGV0e3R5cGU6bCxkeW5hbWljUHJvcHM6dSxwcm9wczpkLHBhdGNoRmxhZzpmLHNoYXBlRmxhZzpwLGRpcnM6aCx0cmFuc2l0aW9uOmd9PXQsXz1sPT09YGlucHV0YHx8bD09PWBvcHRpb25gLGI9ISF1O2lmKF98fGJ8fGYhPT0tMSl7aCYmb3IodCxudWxsLG4sYGNyZWF0ZWRgKTtsZXQgbD0hMTtpZih5KGUpKXtsPU1vKG51bGwsZykmJm4mJm4udm5vZGUucHJvcHMmJm4udm5vZGUucHJvcHMuYXBwZWFyO2xldCByPWUuY29udGVudC5maXJzdENoaWxkO2lmKGwpe2xldCBlPXIuZ2V0QXR0cmlidXRlKGBjbGFzc2ApO2UmJihyLiRjbHM9ZSksZy5iZWZvcmVFbnRlcihyKX12KHIsZSxuKSx0LmVsPWU9cn1pZihwJjE2JiYhKGQmJihkLmlubmVySFRNTHx8ZC50ZXh0Q29udGVudCkpKXtsZXQgcj1tKGUuZmlyc3RDaGlsZCx0LGUsbixpLG8scyk7Zm9yKHImJiFwaShlLDEpJiZyaSgpO3I7KXtsZXQgZT1yO3I9ci5uZXh0U2libGluZyxjKGUpfX1lbHNlIGlmKHAmOCl7bGV0IG49dC5jaGlsZHJlbjtuWzBdPT09YApgJiYoZS50YWdOYW1lPT09YFBSRWB8fGUudGFnTmFtZT09PWBURVhUQVJFQWApJiYobj1uLnNsaWNlKDEpKTtsZXR7dGV4dENvbnRlbnQ6cn09ZTtyIT09biYmciE9PW4ucmVwbGFjZSgvXHJcbnxcci9nLGAKYCkmJihwaShlLDApfHxyaSgpLGUudGV4dENvbnRlbnQ9dC5jaGlsZHJlbil9aWYoZCl7aWYoX3x8Ynx8IXN8fGYmNDgpe2xldCB0PWUudGFnTmFtZS5pbmNsdWRlcyhgLWApLGk9ZS5uYW1lc3BhY2VVUkkuaW5jbHVkZXMoYHN2Z2ApP2BzdmdgOmUubmFtZXNwYWNlVVJJLmluY2x1ZGVzKGBNYXRoTUxgKT9gbWF0aG1sYDp2b2lkIDA7Zm9yKGxldCBvIGluIGQpaWYoXyYmKG8uZW5kc1dpdGgoYHZhbHVlYCl8fG89PT1gaW5kZXRlcm1pbmF0ZWApfHxhKG8pJiYhRShvKXx8b1swXT09PWAuYHx8dCYmIUUobyl8fHUmJnUuaW5jbHVkZXMobykpe2lmKHVpKGUsbyxkW29dKSljb250aW51ZTtyKGUsbyxudWxsLGRbb10saSxuKX19ZWxzZSBpZihkLm9uQ2xpY2spcihlLGBvbkNsaWNrYCxudWxsLGQub25DbGljayx2b2lkIDAsbik7ZWxzZSBpZihmJjQmJlV0KGQuc3R5bGUpKWZvcihsZXQgZSBpbiBkLnN0eWxlKWQuc3R5bGVbZV19bGV0IHg7KHg9ZCYmZC5vblZub2RlQmVmb3JlTW91bnQpJiZ3cyh4LG4sdCksaCYmb3IodCxudWxsLG4sYGJlZm9yZU1vdW50YCksKCh4PWQmJmQub25Wbm9kZU1vdW50ZWQpfHxofHxsKSYmSm8oKCk9Pnt4JiZ3cyh4LG4sdCksbCYmZy5lbnRlcihlKSxoJiZvcih0LG51bGwsbixgbW91bnRlZGApfSxpKX1yZXR1cm4gZS5uZXh0U2libGluZ30sbT0oZSx0LHIsYSxzLGMsdSk9Pnt1fHw9ISF0LmR5bmFtaWNDaGlsZHJlbjtsZXQgZD10LmNoaWxkcmVuLHA9ZC5sZW5ndGgsbT0hMTtmb3IobGV0IHQ9MDt0PHA7dCsrKXtsZXQgaD11P2RbdF06ZFt0XT1icyhkW3RdKSxnPWgudHlwZT09PVpvO2U/KGcmJiF1JiZ0KzE8cCYmYnMoZFt0KzFdKS50eXBlPT09Wm8mJihsKGkoZS5kYXRhLnNsaWNlKGguY2hpbGRyZW4ubGVuZ3RoKSkscixvKGUpKSxlLmRhdGE9aC5jaGlsZHJlbiksZT1mKGUsaCxhLHMsYyx1KSk6ZyYmIWguY2hpbGRyZW4/bChoLmVsPWkoYGApLHIpOihtfHwobT0hMCxwaShyLDEpfHxyaSgpKSxuKG51bGwsaCxyLG51bGwsYSxzLG9pKHIpLGMpKX1yZXR1cm4gZX0saD0oZSx0LG4scixpLGEpPT57bGV0e3Nsb3RTY29wZUlkczpjfT10O2MmJihpPWk/aS5jb25jYXQoYyk6Yyk7bGV0IGQ9cyhlKSxmPW0obyhlKSx0LGQsbixyLGksYSk7cmV0dXJuIGYmJnNpKGYpJiZmLmRhdGE9PT1gXWA/byh0LmFuY2hvcj1mKToocmkoKSxsKHQuYW5jaG9yPXUoYF1gKSxkLGYpLGYpfSxnPShlLHQscixpLGEsbCk9PntpZihoaShlLHQpfHxyaSgpLHQuZWw9bnVsbCxsKXtsZXQgdD1fKGUpO2Zvcig7Oyl7bGV0IG49byhlKTtpZihuJiZuIT09dCljKG4pO2Vsc2UgYnJlYWt9fWxldCB1PW8oZSksZD1zKGUpO3JldHVybiBjKGUpLG4obnVsbCx0LGQsdSxyLGksb2koZCksYSksciYmKHIudm5vZGUuZWw9dC5lbCxzbyhyLHQuZWwpKSx1fSxfPShlLHQ9YFtgLG49YF1gKT0+e2xldCByPTA7Zm9yKDtlOylpZihlPW8oZSksZSYmc2koZSkmJihlLmRhdGE9PT10JiZyKyssZS5kYXRhPT09bikpe2lmKHI9PT0wKXJldHVybiBvKGUpO3ItLX1yZXR1cm4gZX0sdj0oZSx0LG4pPT57bGV0IHI9dC5wYXJlbnROb2RlO3ImJnIucmVwbGFjZUNoaWxkKGUsdCk7bGV0IGk9bjtmb3IoO2k7KWkudm5vZGUuZWw9PT10JiYoaS52bm9kZS5lbD1pLnN1YlRyZWUuZWw9ZSksaT1pLnBhcmVudH0seT1lPT5lLm5vZGVUeXBlPT09MSYmZS50YWdOYW1lPT09YFRFTVBMQVRFYDtyZXR1cm5bZCxmXX12YXIgbGk9bmV3IFNldChbYHNyY2AsYHNyY3NldGAsYGhyZWZgLGBwb3N0ZXJgXSk7ZnVuY3Rpb24gdWkoZSx0LG4pe3JldHVybiBsaS5oYXModCk/ZS5nZXRBdHRyaWJ1dGUodCk9PT0obj09bnVsbD9udWxsOmAke259YCk6ITF9dmFyIGRpPWBkYXRhLWFsbG93LW1pc21hdGNoYCxmaT17MDpgdGV4dGAsMTpgY2hpbGRyZW5gLDI6YGNsYXNzYCwzOmBzdHlsZWAsNDpgYXR0cmlidXRlYH07ZnVuY3Rpb24gcGkoZSx0KXtpZih0PT09MHx8dD09PTEpZm9yKDtlJiYhZS5oYXNBdHRyaWJ1dGUoZGkpOyllPWUucGFyZW50RWxlbWVudDtyZXR1cm4gbWkoZSYmZS5nZXRBdHRyaWJ1dGUoZGkpLHQpfWZ1bmN0aW9uIG1pKGUsdCl7aWYoZT09bnVsbClyZXR1cm4hMTtpZihlPT09YGApcmV0dXJuITA7e2xldCBuPWUuc3BsaXQoYCxgKTtyZXR1cm4gdD09PTAmJm4uaW5jbHVkZXMoYGNoaWxkcmVuYCk/ITA6bi5pbmNsdWRlcyhmaVt0XSl9fWZ1bmN0aW9uIGhpKGUsdCl7cmV0dXJuIHBpKGUucGFyZW50RWxlbWVudCwxKXx8Z2koZSl8fF9pKHQpfWZ1bmN0aW9uIGdpKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MSYmbWkoZS5nZXRBdHRyaWJ1dGUoZGkpLDEpfWZ1bmN0aW9uIF9pKHtwcm9wczplfSl7bGV0IHQ9ZSYmZVtkaV07cmV0dXJuIHR5cGVvZiB0PT1gc3RyaW5nYCYmbWkodCwxKX12YXIgdmk9b2UoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrfHwoZT0+c2V0VGltZW91dChlLDEpKSx5aT1vZSgpLmNhbmNlbElkbGVDYWxsYmFja3x8KGU9PmNsZWFyVGltZW91dChlKSksYmk9KGU9MWU0KT0+dD0+e2xldCBuPXZpKHQse3RpbWVvdXQ6ZX0pO3JldHVybigpPT55aShuKX07ZnVuY3Rpb24geGkoZSl7bGV0e3RvcDp0LGxlZnQ6bixib3R0b206cixyaWdodDppfT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtpbm5lckhlaWdodDphLGlubmVyV2lkdGg6b309d2luZG93O3JldHVybih0PjAmJnQ8YXx8cj4wJiZyPGEpJiYobj4wJiZuPG98fGk+MCYmaTxvKX12YXIgU2k9ZT0+KHQsbik9PntsZXQgcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgbiBvZiBlKWlmKG4uaXNJbnRlcnNlY3Rpbmcpe3IuZGlzY29ubmVjdCgpLHQoKTticmVha319LGUpO3JldHVybiBuKGU9PntpZihlIGluc3RhbmNlb2YgRWxlbWVudCl7aWYoeGkoZSkpcmV0dXJuIHQoKSxyLmRpc2Nvbm5lY3QoKSwhMTtyLm9ic2VydmUoZSl9fSksKCk9PnIuZGlzY29ubmVjdCgpfSxDaT1lPT50PT57aWYoZSl7bGV0IG49bWF0Y2hNZWRpYShlKTtpZihuLm1hdGNoZXMpdCgpO2Vsc2UgcmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0LHtvbmNlOiEwfSksKCk9Pm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCx0KX19LHdpPShlPVtdKT0+KHQsbik9PntfKGUpJiYoZT1bZV0pO2xldCByPSExLGk9ZT0+e3J8fChyPSEwLGEoKSx0KCksZS50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgZS5jb25zdHJ1Y3RvcihlLnR5cGUsZSkpKX0sYT0oKT0+e24odD0+e2ZvcihsZXQgbiBvZiBlKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGkpfSl9O3JldHVybiBuKHQ9Pntmb3IobGV0IG4gb2YgZSl0LmFkZEV2ZW50TGlzdGVuZXIobixpLHtvbmNlOiEwfSl9KSxhfTtmdW5jdGlvbiBUaShlLHQpe2lmKHNpKGUpJiZlLmRhdGE9PT1gW2Ape2xldCBuPTEscj1lLm5leHRTaWJsaW5nO2Zvcig7cjspe2lmKHIubm9kZVR5cGU9PT0xKXtpZih0KHIpPT09ITEpYnJlYWt9ZWxzZSBpZihzaShyKSl7aWYoci5kYXRhPT09YF1gKXtpZigtLW49PT0wKWJyZWFrfWVsc2Ugci5kYXRhPT09YFtgJiZuKyt9cj1yLm5leHRTaWJsaW5nfX1lbHNlIHQoZSl9dmFyIEVpPWU9PiEhZS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gRGkoZSl7ZyhlKSYmKGU9e2xvYWRlcjplfSk7bGV0e2xvYWRlcjp0LGxvYWRpbmdDb21wb25lbnQ6bixlcnJvckNvbXBvbmVudDpyLGRlbGF5Omk9MjAwLGh5ZHJhdGU6YSx0aW1lb3V0Om8sc3VzcGVuc2libGU6cz0hMCxvbkVycm9yOmN9PWUsbD1udWxsLHUsZD0wLGY9KCk9PihkKyssbD1udWxsLHAoKSkscD0oKT0+e2xldCBlO3JldHVybiBsfHwoZT1sPXQoKS5jYXRjaChlPT57aWYoZT1lIGluc3RhbmNlb2YgRXJyb3I/ZTpFcnJvcihTdHJpbmcoZSkpLGMpcmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57YyhlLCgpPT50KGYoKSksKCk9Pm4oZSksZCsxKX0pO3Rocm93IGV9KS50aGVuKHQ9PmUhPT1sJiZsP2w6KHQmJih0Ll9fZXNNb2R1bGV8fHRbU3ltYm9sLnRvU3RyaW5nVGFnXT09PWBNb2R1bGVgKSYmKHQ9dC5kZWZhdWx0KSx1PXQsdCkpKX07cmV0dXJuIEpyKHtuYW1lOmBBc3luY0NvbXBvbmVudFdyYXBwZXJgLF9fYXN5bmNMb2FkZXI6cCxfX2FzeW5jSHlkcmF0ZShlLHQsbil7bGV0IHI9ZS5pc0Nvbm5lY3RlZCxpPSExOyh0LmJ1fHw9W10pLnB1c2goKCk9Pmk9ITApO2xldCBvPSgpPT57aXx8IWUucGFyZW50Tm9kZXx8ciYmIWUuaXNDb25uZWN0ZWR8fG4oKX0scz1hPygpPT57bGV0IG49YShvLHQ9PlRpKGUsdCkpO24mJih0LmJ1bXx8PVtdKS5wdXNoKG4pfTpvO3U/cygpOnAoKS50aGVuKCgpPT4hdC5pc1VubW91bnRlZCYmcygpKX0sZ2V0IF9fYXN5bmNSZXNvbHZlZCgpe3JldHVybiB1fSxzZXR1cCgpe2xldCBlPUo7aWYoWHIoZSksdSlyZXR1cm4oKT0+T2kodSxlKTtsZXQgdD10PT57bD1udWxsLE1uKHQsZSwxMywhcil9O2lmKHMmJmUuc3VzcGVuc2V8fE5zKXJldHVybiBwKCkudGhlbih0PT4oKT0+T2kodCxlKSkuY2F0Y2goZT0+KHQoZSksKCk9PnI/cShyLHtlcnJvcjplfSk6bnVsbCkpO2xldCBhPVh0KCExKSxjPVh0KCksZD1YdCghIWkpLGYsbTtyZXR1cm4gR2koKCk9PntmIT1udWxsJiZjbGVhclRpbWVvdXQoZiksbSE9bnVsbCYmY2xlYXJUaW1lb3V0KG0pfSksaSYmKG09c2V0VGltZW91dCgoKT0+e2UuaXNVbm1vdW50ZWR8fChkLnZhbHVlPSExKX0saSkpLG8hPW51bGwmJihmPXNldFRpbWVvdXQoKCk9PntpZighZS5pc1VubW91bnRlZCYmIWEudmFsdWUmJiFjLnZhbHVlKXtsZXQgZT1FcnJvcihgQXN5bmMgY29tcG9uZW50IHRpbWVkIG91dCBhZnRlciAke299bXMuYCk7dChlKSxjLnZhbHVlPWV9fSxvKSkscCgpLnRoZW4oKCk9PntlLmlzVW5tb3VudGVkfHwoYS52YWx1ZT0hMCxlLnBhcmVudCYma2koZS5wYXJlbnQudm5vZGUpJiZlLnBhcmVudC51cGRhdGUoKSl9KS5jYXRjaChuPT57aWYoZS5pc1VubW91bnRlZCl7bD1udWxsO3JldHVybn10KG4pLGMudmFsdWU9bn0pLCgpPT57aWYoYS52YWx1ZSYmdSlyZXR1cm4gT2kodSxlKTtpZihjLnZhbHVlJiZyKXJldHVybiBxKHIse2Vycm9yOmMudmFsdWV9KTtpZihuJiYhZC52YWx1ZSlyZXR1cm4gT2kobixlKX19fSl9ZnVuY3Rpb24gT2koZSx0KXtsZXR7cmVmOm4scHJvcHM6cixjaGlsZHJlbjppLGNlOmF9PXQudm5vZGUsbz1xKGUscixpKTtyZXR1cm4gby5yZWY9bixvLmNlPWEsZGVsZXRlIHQudm5vZGUuY2Usb312YXIga2k9ZT0+ZS50eXBlLl9faXNLZWVwQWxpdmUsQWk9e25hbWU6YEtlZXBBbGl2ZWAsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoZSx7c2xvdHM6dH0pe2xldCBuPVkoKSxyPW4uY3R4O2lmKCFyLnJlbmRlcmVyKXJldHVybigpPT57bGV0IGU9dC5kZWZhdWx0JiZ0LmRlZmF1bHQoKTtyZXR1cm4gZSYmZS5sZW5ndGg9PT0xP2VbMF06ZX07bGV0IGk9bmV3IE1hcCxhPW5ldyBTZXQsbz1udWxsLHM9bi5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6YyxtOmwsdW06dSxvOntjcmVhdGVFbGVtZW50OmR9fX09cixmPWQoYGRpdmApO3IuYWN0aXZhdGU9KGUsdCxuLHIsaSk9PntsZXQgYT1lLmNvbXBvbmVudDtsKGUsdCxuLDAscyksYyhhLnZub2RlLGUsdCxuLGEscyxyLGUuc2xvdFNjb3BlSWRzLGkpLFcoKCk9PnthLmlzRGVhY3RpdmF0ZWQ9ITEsYS5hJiZNKGEuYSk7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5vblZub2RlTW91bnRlZDt0JiZ3cyh0LGEucGFyZW50LGUpfSxzKX0sci5kZWFjdGl2YXRlPWU9PntsZXQgdD1lLmNvbXBvbmVudDtJbyh0Lm0pLElvKHQuYSksbChlLGYsbnVsbCwxLHMpLFcoKCk9Pnt0LmRhJiZNKHQuZGEpO2xldCBuPWUucHJvcHMmJmUucHJvcHMub25Wbm9kZVVubW91bnRlZDtuJiZ3cyhuLHQucGFyZW50LGUpLHQuaXNEZWFjdGl2YXRlZD0hMH0scyl9O2Z1bmN0aW9uIHAoZSl7SWkoZSksdShlLG4scywhMCl9ZnVuY3Rpb24gbShlKXtpLmZvckVhY2goKHQsbik9PntsZXQgcj1HcyhFaSh0KT90LnR5cGUuX19hc3luY1Jlc29sdmVkfHx7fTp0LnR5cGUpO3ImJiFlKHIpJiZoKG4pfSl9ZnVuY3Rpb24gaChlKXtsZXQgdD1pLmdldChlKTt0JiYoIW98fCFscyh0LG8pKT9wKHQpOm8mJklpKG8pLGkuZGVsZXRlKGUpLGEuZGVsZXRlKGUpfWhyKCgpPT5bZS5pbmNsdWRlLGUuZXhjbHVkZV0sKFtlLHRdKT0+e2UmJm0odD0+amkoZSx0KSksdCYmbShlPT4hamkodCxlKSl9LHtmbHVzaDpgcG9zdGAsZGVlcDohMH0pO2xldCBnPW51bGwsXz0oKT0+e2chPW51bGwmJihSbyhuLnN1YlRyZWUudHlwZSk/VygoKT0+e2kuc2V0KGcsTGkobi5zdWJUcmVlKSl9LG4uc3ViVHJlZS5zdXNwZW5zZSk6aS5zZXQoZyxMaShuLnN1YlRyZWUpKSl9O3JldHVybiBWaShfKSxVaShfKSxXaSgoKT0+e2kuZm9yRWFjaChlPT57bGV0e3N1YlRyZWU6dCxzdXNwZW5zZTpyfT1uLGk9TGkodCk7aWYoZS50eXBlPT09aS50eXBlJiZlLmtleT09PWkua2V5KXtJaShpKTtsZXQgZT1pLmNvbXBvbmVudC5kYTtlJiZXKGUscik7cmV0dXJufXAoZSl9KX0pLCgpPT57aWYoZz1udWxsLCF0LmRlZmF1bHQpcmV0dXJuIG89bnVsbDtsZXQgbj10LmRlZmF1bHQoKSxyPW5bMF07aWYobi5sZW5ndGg+MSlyZXR1cm4gbz1udWxsLG47aWYoIWNzKHIpfHwhKHIuc2hhcGVGbGFnJjQpJiYhKHIuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIG89bnVsbCxyO2xldCBzPUxpKHIpO2lmKHMudHlwZT09PUspcmV0dXJuIG89bnVsbCxzO2xldCBjPXMudHlwZSxsPUdzKEVpKHMpP3MudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OmMpLHtpbmNsdWRlOnUsZXhjbHVkZTpkLG1heDpmfT1lO2lmKHUmJighbHx8IWppKHUsbCkpfHxkJiZsJiZqaShkLGwpKXJldHVybiBzLnNoYXBlRmxhZyY9LTI1NyxvPXMscjtsZXQgcD1zLmtleT09bnVsbD9jOnMua2V5LG09aS5nZXQocCk7cmV0dXJuIHMuZWwmJihzPWdzKHMpLHIuc2hhcGVGbGFnJjEyOCYmKHIuc3NDb250ZW50PXMpKSxnPXAsbT8ocy5lbD1tLmVsLHMuY29tcG9uZW50PW0uY29tcG9uZW50LHMudHJhbnNpdGlvbiYmS3IocyxzLnRyYW5zaXRpb24pLHMuc2hhcGVGbGFnfD01MTIsYS5kZWxldGUocCksYS5hZGQocCkpOihhLmFkZChwKSxmJiZhLnNpemU+cGFyc2VJbnQoZiwxMCkmJmgoYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpKSxzLnNoYXBlRmxhZ3w9MjU2LG89cyxSbyhyLnR5cGUpP3I6c319fTtmdW5jdGlvbiBqaShlLHQpe3JldHVybiBkKGUpP2Uuc29tZShlPT5qaShlLHQpKTpfKGUpP2Uuc3BsaXQoYCxgKS5pbmNsdWRlcyh0KTpoKGUpPyhlLmxhc3RJbmRleD0wLGUudGVzdCh0KSk6ITF9ZnVuY3Rpb24gTWkoZSx0KXtQaShlLGBhYCx0KX1mdW5jdGlvbiBOaShlLHQpe1BpKGUsYGRhYCx0KX1mdW5jdGlvbiBQaShlLHQsbj1KKXtsZXQgcj1lLl9fd2RjfHw9KCk9PntsZXQgdD1uO2Zvcig7dDspe2lmKHQuaXNEZWFjdGl2YXRlZClyZXR1cm47dD10LnBhcmVudH1yZXR1cm4gZSgpfTtpZihSaSh0LHIsbiksbil7bGV0IGU9bi5wYXJlbnQ7Zm9yKDtlJiZlLnBhcmVudDspa2koZS5wYXJlbnQudm5vZGUpJiZGaShyLHQsbixlKSxlPWUucGFyZW50fX1mdW5jdGlvbiBGaShlLHQsbixyKXtsZXQgaT1SaSh0LGUsciwhMCk7R2koKCk9PntjKHJbdF0saSl9LG4pfWZ1bmN0aW9uIElpKGUpe2Uuc2hhcGVGbGFnJj0tMjU3LGUuc2hhcGVGbGFnJj0tNTEzfWZ1bmN0aW9uIExpKGUpe3JldHVybiBlLnNoYXBlRmxhZyYxMjg/ZS5zc0NvbnRlbnQ6ZX1mdW5jdGlvbiBSaShlLHQsbj1KLHI9ITEpe2lmKG4pe2xldCBpPW5bZV18fChuW2VdPVtdKSxhPXQuX193ZWh8fD0oLi4ucik9PntXZSgpO2xldCBpPUFzKG4pLGE9am4odCxuLGUscik7cmV0dXJuIGkoKSxHZSgpLGF9O3JldHVybiByP2kudW5zaGlmdChhKTppLnB1c2goYSksYX19dmFyIHppPWU9Pih0LG49Sik9PnsoIU5zfHxlPT09YHNwYCkmJlJpKGUsKC4uLmUpPT50KC4uLmUpLG4pfSxCaT16aShgYm1gKSxWaT16aShgbWApLEhpPXppKGBidWApLFVpPXppKGB1YCksV2k9emkoYGJ1bWApLEdpPXppKGB1bWApLEtpPXppKGBzcGApLHFpPXppKGBydGdgKSxKaT16aShgcnRjYCk7ZnVuY3Rpb24gWWkoZSx0PUope1JpKGBlY2AsZSx0KX12YXIgWGk9YGNvbXBvbmVudHNgLFppPWBkaXJlY3RpdmVzYDtmdW5jdGlvbiBRaShlLHQpe3JldHVybiBuYShYaSxlLCEwLHQpfHxlfXZhciAkaT1TeW1ib2wuZm9yKGB2LW5kY2ApO2Z1bmN0aW9uIGVhKGUpe3JldHVybiBfKGUpP25hKFhpLGUsITEpfHxlOmV8fCRpfWZ1bmN0aW9uIHRhKGUpe3JldHVybiBuYShaaSxlKX1mdW5jdGlvbiBuYShlLHQsbj0hMCxyPSExKXtsZXQgaT1VfHxKO2lmKGkpe2xldCBuPWkudHlwZTtpZihlPT09WGkpe2xldCBlPUdzKG4sITEpO2lmKGUmJihlPT09dHx8ZT09PU8odCl8fGU9PT1BKE8odCkpKSlyZXR1cm4gbn1sZXQgYT1yYShpW2VdfHxuW2VdLHQpfHxyYShpLmFwcENvbnRleHRbZV0sdCk7cmV0dXJuIWEmJnI/bjphfX1mdW5jdGlvbiByYShlLHQpe3JldHVybiBlJiYoZVt0XXx8ZVtPKHQpXXx8ZVtBKE8odCkpXSl9ZnVuY3Rpb24gaWEoZSx0LG4scil7bGV0IGksYT1uJiZuW3JdLG89ZChlKTtpZihvfHxfKGUpKXtsZXQgbj1vJiZVdChlKSxyPSExLHM9ITE7biYmKHI9IUd0KGUpLHM9V3QoZSksZT1pdChlKSksaT1BcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuPG87bisrKWlbbl09dChyP3M/WXQoSnQoZVtuXSkpOkp0KGVbbl0pOmVbbl0sbix2b2lkIDAsYSYmYVtuXSl9ZWxzZSBpZih0eXBlb2YgZT09YG51bWJlcmApe2k9QXJyYXkoZSk7Zm9yKGxldCBuPTA7bjxlO24rKylpW25dPXQobisxLG4sdm9pZCAwLGEmJmFbbl0pfWVsc2UgaWYoeShlKSl7aWYoZVtTeW1ib2wuaXRlcmF0b3JdKWk9QXJyYXkuZnJvbShlLChlLG4pPT50KGUsbix2b2lkIDAsYSYmYVtuXSkpO2Vsc2V7bGV0IG49T2JqZWN0LmtleXMoZSk7aT1BcnJheShuLmxlbmd0aCk7Zm9yKGxldCByPTAsbz1uLmxlbmd0aDtyPG87cisrKXtsZXQgbz1uW3JdO2lbcl09dChlW29dLG8scixhJiZhW3JdKX19fWVsc2UgaT1bXTtyZXR1cm4gbiYmKG5bcl09aSksaX1mdW5jdGlvbiBhYShlLHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj10W25dO2lmKGQocikpZm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0KyspZVtyW3RdLm5hbWVdPXJbdF0uZm47ZWxzZSByJiYoZVtyLm5hbWVdPXIua2V5PyguLi5lKT0+e2xldCB0PXIuZm4oLi4uZSk7cmV0dXJuIHQmJih0LmtleT1yLmtleSksdH06ci5mbil9cmV0dXJuIGV9ZnVuY3Rpb24gb2EoZSx0LG4scixpLGEpe2lmKG4/Pz17fSxVLmNlfHxVLnBhcmVudCYmRWkoVS5wYXJlbnQpJiZVLnBhcmVudC5jZSl7bGV0IGU9YSE9bnVsbCYmbi5rZXk9PW51bGw/cyh7fSxuLHtrZXk6YX0pOm4saT1PYmplY3Qua2V5cyhlKS5sZW5ndGg+MDtyZXR1cm4gdCE9PSJkZWZhdWx0IiYmKGUubmFtZT10KSx0cygpLHNzKEcsbnVsbCxbcShgc2xvdGAsZSxyJiZyKCkpXSxpPy0yOjY0KX1sZXQgbz1lW3RdO28mJm8uX2MmJihvLl9kPSExKTtsZXQgYz0kby5sZW5ndGg7dHMoKTtsZXQgbDt0cnl7bGV0IGk9byYmc2EobyhuKSkscz1uLmtleXx8YXx8aSYmaS5rZXk7bD1zcyhHLHtrZXk6KHMmJiF2KHMpP3M6YF8ke3R9YCkrKCFpJiZyP2BfZmJgOmBgKX0saXx8KHI/cigpOltdKSxpJiZlLl89PT0xPzY0Oi0yKX1jYXRjaChlKXtmb3IobGV0IGU9JG8ubGVuZ3RoO2U+YztlLS0pbnMoKTt0aHJvdyBlfWZpbmFsbHl7byYmby5fYyYmKG8uX2Q9ITApfXJldHVybiFpJiZsLnNjb3BlSWQmJihsLnNsb3RTY29wZUlkcz1bbC5zY29wZUlkK2Atc2BdKSxsfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBlLnNvbWUoZT0+IWNzKGUpfHwhKGUudHlwZT09PUt8fGUudHlwZT09PUcmJiFzYShlLmNoaWxkcmVuKSkpP2U6bnVsbH1mdW5jdGlvbiBjYShlLHQpe2xldCBuPXt9O2ZvcihsZXQgciBpbiBlKW5bdCYmL1tBLVpdLy50ZXN0KHIpP2Bvbjoke3J9YDpuZShyKV09ZVtyXTtyZXR1cm4gbn12YXIgbGE9ZT0+ZT9NcyhlKT9XcyhlKTpsYShlLnBhcmVudCk6bnVsbCx1YT1zKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6ZT0+ZSwkZWw6ZT0+ZS52bm9kZS5lbCwkZGF0YTplPT5lLmRhdGEsJHByb3BzOmU9PmUucHJvcHMsJGF0dHJzOmU9PmUuYXR0cnMsJHNsb3RzOmU9PmUuc2xvdHMsJHJlZnM6ZT0+ZS5yZWZzLCRwYXJlbnQ6ZT0+bGEoZS5wYXJlbnQpLCRyb290OmU9PmxhKGUucm9vdCksJGhvc3Q6ZT0+ZS5jZSwkZW1pdDplPT5lLmVtaXQsJG9wdGlvbnM6ZT0+UGEoZSksJGZvcmNlVXBkYXRlOmU9PmUuZnx8PSgpPT57VW4oZS51cGRhdGUpfSwkbmV4dFRpY2s6ZT0+ZS5ufHw9Vm4uYmluZChlLnByb3h5KSwkd2F0Y2g6ZT0+X3IuYmluZChlKX0pLGRhPShlLG4pPT5lIT09dCYmIWUuX19pc1NjcmlwdFNldHVwJiZ1KGUsbiksZmE9e2dldCh7XzplfSxuKXtpZihuPT09YF9fdl9za2lwYClyZXR1cm4hMDtsZXR7Y3R4OnIsc2V0dXBTdGF0ZTppLGRhdGE6YSxwcm9wczpvLGFjY2Vzc0NhY2hlOnMsdHlwZTpjLGFwcENvbnRleHQ6bH09ZTtpZihuWzBdIT09YCRgKXtsZXQgZT1zW25dO2lmKGUhPT12b2lkIDApc3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gaVtuXTtjYXNlIDI6cmV0dXJuIGFbbl07Y2FzZSA0OnJldHVybiByW25dO2Nhc2UgMzpyZXR1cm4gb1tuXX1lbHNlIGlmKGRhKGksbikpcmV0dXJuIHNbbl09MSxpW25dO2Vsc2UgaWYoYSE9PXQmJnUoYSxuKSlyZXR1cm4gc1tuXT0yLGFbbl07ZWxzZSBpZih1KG8sbikpcmV0dXJuIHNbbl09MyxvW25dO2Vsc2UgaWYociE9PXQmJnUocixuKSlyZXR1cm4gc1tuXT00LHJbbl07ZWxzZSBrYSYmKHNbbl09MCl9bGV0IGQ9dWFbbl0sZixwO2lmKGQpcmV0dXJuIG49PT1gJGF0dHJzYCYmQihlLmF0dHJzLGBnZXRgLGBgKSxkKGUpO2lmKChmPWMuX19jc3NNb2R1bGVzKSYmKGY9ZltuXSkpcmV0dXJuIGY7aWYociE9PXQmJnUocixuKSlyZXR1cm4gc1tuXT00LHJbbl07aWYocD1sLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLHUocCxuKSlyZXR1cm4gcFtuXX0sc2V0KHtfOmV9LG4scil7bGV0e2RhdGE6aSxzZXR1cFN0YXRlOmEsY3R4Om99PWU7cmV0dXJuIGRhKGEsbik/KGFbbl09ciwhMCk6aSE9PXQmJnUoaSxuKT8oaVtuXT1yLCEwKTp1KGUucHJvcHMsbil8fG5bMF09PT1gJGAmJm4uc2xpY2UoMSlpbiBlPyExOihvW25dPXIsITApfSxoYXMoe186e2RhdGE6ZSxzZXR1cFN0YXRlOm4sYWNjZXNzQ2FjaGU6cixjdHg6aSxhcHBDb250ZXh0OmEscHJvcHM6byx0eXBlOnN9fSxjKXtsZXQgbDtyZXR1cm4hIShyW2NdfHxlIT09dCYmY1swXSE9PWAkYCYmdShlLGMpfHxkYShuLGMpfHx1KG8sYyl8fHUoaSxjKXx8dSh1YSxjKXx8dShhLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGMpfHwobD1zLl9fY3NzTW9kdWxlcykmJmxbY10pfSxkZWZpbmVQcm9wZXJ0eShlLHQsbil7cmV0dXJuIG4uZ2V0PT1udWxsP3UobixgdmFsdWVgKSYmdGhpcy5zZXQoZSx0LG4udmFsdWUsbnVsbCk6ZS5fLmFjY2Vzc0NhY2hlW3RdPTAsUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsbil9fSxwYT1zKHt9LGZhLHtnZXQoZSx0KXtpZih0IT09U3ltYm9sLnVuc2NvcGFibGVzKXJldHVybiBmYS5nZXQoZSx0LGUpfSxoYXMoZSx0KXtyZXR1cm4gdFswXSE9PWBfYCYmIVAodCl9fSk7ZnVuY3Rpb24gbWEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBoYSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGdhKGUpe31mdW5jdGlvbiBfYShlKXt9ZnVuY3Rpb24gdmEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB5YSgpe31mdW5jdGlvbiBiYShlLHQpe3JldHVybiBudWxsfWZ1bmN0aW9uIHhhKCl7cmV0dXJuIENhKGB1c2VTbG90c2ApLnNsb3RzfWZ1bmN0aW9uIFNhKCl7cmV0dXJuIENhKGB1c2VBdHRyc2ApLmF0dHJzfWZ1bmN0aW9uIENhKGUpe2xldCB0PVkoKTtyZXR1cm4gdC5zZXR1cENvbnRleHR8fD1Vcyh0KX1mdW5jdGlvbiB3YShlKXtyZXR1cm4gZChlKT9lLnJlZHVjZSgoZSx0KT0+KGVbdF09bnVsbCxlKSx7fSk6ZX1mdW5jdGlvbiBUYShlLHQpe2xldCBuPXdhKGUpO2ZvcihsZXQgZSBpbiB0KXtpZihlLnN0YXJ0c1dpdGgoYF9fc2tpcGApKWNvbnRpbnVlO2xldCByPW5bZV07cj9kKHIpfHxnKHIpP3I9bltlXT17dHlwZTpyLGRlZmF1bHQ6dFtlXX06ci5kZWZhdWx0PXRbZV06cj09PW51bGwmJihyPW5bZV09e2RlZmF1bHQ6dFtlXX0pLHImJnRbYF9fc2tpcF8ke2V9YF0mJihyLnNraXBGYWN0b3J5PSEwKX1yZXR1cm4gbn1mdW5jdGlvbiBFYShlLHQpe3JldHVybiFlfHwhdD9lfHx0OmQoZSkmJmQodCk/ZS5jb25jYXQodCk6cyh7fSx3YShlKSx3YSh0KSl9ZnVuY3Rpb24gRGEoZSx0KXtsZXQgbj17fTtmb3IobGV0IHIgaW4gZSl0LmluY2x1ZGVzKHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixyLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+ZVtyXX0pO3JldHVybiBufWZ1bmN0aW9uIE9hKGUpe2xldCB0PVkoKSxuPU5zLHI9ZSgpO2pzKCksbiYma3MoITEpO2xldCBpPSgpPT57QXModCksbiYma3MoITApfSxhPSgpPT57WSgpIT09dCYmdC5zY29wZS5vZmYoKSxqcygpLG4mJmtzKCExKX07cmV0dXJuIGIocikmJihyPXIuY2F0Y2goZT0+e3Rocm93IGkoKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGEpKSxlfSkpLFtyLCgpPT57aSgpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYSl9XX12YXIga2E9ITA7ZnVuY3Rpb24gQWEoZSl7bGV0IHQ9UGEoZSksbj1lLnByb3h5LGk9ZS5jdHg7a2E9ITEsdC5iZWZvcmVDcmVhdGUmJk1hKHQuYmVmb3JlQ3JlYXRlLGUsYGJjYCk7bGV0e2RhdGE6YSxjb21wdXRlZDpvLG1ldGhvZHM6cyx3YXRjaDpjLHByb3ZpZGU6bCxpbmplY3Q6dSxjcmVhdGVkOmYsYmVmb3JlTW91bnQ6cCxtb3VudGVkOm0sYmVmb3JlVXBkYXRlOmgsdXBkYXRlZDpfLGFjdGl2YXRlZDp2LGRlYWN0aXZhdGVkOmIsYmVmb3JlRGVzdHJveTp4LGJlZm9yZVVubW91bnQ6UyxkZXN0cm95ZWQ6Qyx1bm1vdW50ZWQ6dyxyZW5kZXI6VCxyZW5kZXJUcmFja2VkOkUscmVuZGVyVHJpZ2dlcmVkOkQsZXJyb3JDYXB0dXJlZDplZSxzZXJ2ZXJQcmVmZXRjaDpPLGV4cG9zZTp0ZSxpbmhlcml0QXR0cnM6ayxjb21wb25lbnRzOkEsZGlyZWN0aXZlczpuZSxmaWx0ZXJzOmp9PXQ7aWYodSYmamEodSxpLG51bGwpLHMpZm9yKGxldCBlIGluIHMpe2xldCB0PXNbZV07Zyh0KSYmKGlbZV09dC5iaW5kKG4pKX1pZihhKXtsZXQgdD1hLmNhbGwobixuKTt5KHQpJiYoZS5kYXRhPVJ0KHQpKX1pZihrYT0hMCxvKWZvcihsZXQgZSBpbiBvKXtsZXQgdD1vW2VdLGE9cXMoe2dldDpnKHQpP3QuYmluZChuLG4pOmcodC5nZXQpP3QuZ2V0LmJpbmQobixuKTpyLHNldDohZyh0KSYmZyh0LnNldCk/dC5zZXQuYmluZChuKTpyfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5hLnZhbHVlLHNldDplPT5hLnZhbHVlPWV9KX1pZihjKWZvcihsZXQgZSBpbiBjKU5hKGNbZV0saSxuLGUpO2lmKGwpe2xldCBlPWcobCk/bC5jYWxsKG4pOmw7UmVmbGVjdC5vd25LZXlzKGUpLmZvckVhY2godD0+e3NyKHQsZVt0XSl9KX1mJiZNYShmLGUsYGNgKTtmdW5jdGlvbiBNKGUsdCl7ZCh0KT90LmZvckVhY2godD0+ZSh0LmJpbmQobikpKTp0JiZlKHQuYmluZChuKSl9aWYoTShCaSxwKSxNKFZpLG0pLE0oSGksaCksTShVaSxfKSxNKE1pLHYpLE0oTmksYiksTShZaSxlZSksTShKaSxFKSxNKHFpLEQpLE0oV2ksUyksTShHaSx3KSxNKEtpLE8pLGQodGUpKXtpZih0ZS5sZW5ndGgpe2xldCB0PWUuZXhwb3NlZHx8PXt9O3RlLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2dldDooKT0+bltlXSxzZXQ6dD0+bltlXT10LGVudW1lcmFibGU6ITB9KX0pfWVsc2UgZS5leHBvc2VkfHw9e319VCYmZS5yZW5kZXI9PT1yJiYoZS5yZW5kZXI9VCksayE9bnVsbCYmKGUuaW5oZXJpdEF0dHJzPWspLEEmJihlLmNvbXBvbmVudHM9QSksbmUmJihlLmRpcmVjdGl2ZXM9bmUpLE8mJlhyKGUpfWZ1bmN0aW9uIGphKGUsdCxuPXIpe2QoZSkmJihlPXphKGUpKTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXSxpO2k9eShyKT9gZGVmYXVsdGBpbiByP2NyKHIuZnJvbXx8bixyLmRlZmF1bHQsITApOmNyKHIuZnJvbXx8bik6Y3IociksSChpKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmkudmFsdWUsc2V0OmU9PmkudmFsdWU9ZX0pOnRbbl09aX19ZnVuY3Rpb24gTWEoZSx0LG4pe2puKGQoZSk/ZS5tYXAoZT0+ZS5iaW5kKHQucHJveHkpKTplLmJpbmQodC5wcm94eSksdCxuKX1mdW5jdGlvbiBOYShlLHQsbixyKXtsZXQgaT1yLmluY2x1ZGVzKGAuYCk/dnIobixyKTooKT0+bltyXTtpZihfKGUpKXtsZXQgbj10W2VdO2cobikmJmhyKGksbil9ZWxzZSBpZihnKGUpKWhyKGksZS5iaW5kKG4pKTtlbHNlIGlmKHkoZSkpe2lmKGQoZSkpZS5mb3JFYWNoKGU9Pk5hKGUsdCxuLHIpKTtlbHNle2xldCByPWcoZS5oYW5kbGVyKT9lLmhhbmRsZXIuYmluZChuKTp0W2UuaGFuZGxlcl07ZyhyKSYmaHIoaSxyLGUpfX19ZnVuY3Rpb24gUGEoZSl7bGV0IHQ9ZS50eXBlLHttaXhpbnM6bixleHRlbmRzOnJ9PXQse21peGluczppLG9wdGlvbnNDYWNoZTphLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOm99fT1lLmFwcENvbnRleHQscz1hLmdldCh0KSxjO3JldHVybiBzP2M9czohaS5sZW5ndGgmJiFuJiYhcj9jPXQ6KGM9e30saS5sZW5ndGgmJmkuZm9yRWFjaChlPT5GYShjLGUsbywhMCkpLEZhKGMsdCxvKSkseSh0KSYmYS5zZXQodCxjKSxjfWZ1bmN0aW9uIEZhKGUsdCxuLHI9ITEpe2xldHttaXhpbnM6aSxleHRlbmRzOmF9PXQ7YSYmRmEoZSxhLG4sITApLGkmJmkuZm9yRWFjaCh0PT5GYShlLHQsbiwhMCkpO2ZvcihsZXQgaSBpbiB0KWlmKCEociYmaT09PWBleHBvc2VgKSl7bGV0IHI9SWFbaV18fG4mJm5baV07ZVtpXT1yP3IoZVtpXSx0W2ldKTp0W2ldfXJldHVybiBlfXZhciBJYT17ZGF0YTpMYSxwcm9wczpIYSxlbWl0czpIYSxtZXRob2RzOlZhLGNvbXB1dGVkOlZhLGJlZm9yZUNyZWF0ZTpCYSxjcmVhdGVkOkJhLGJlZm9yZU1vdW50OkJhLG1vdW50ZWQ6QmEsYmVmb3JlVXBkYXRlOkJhLHVwZGF0ZWQ6QmEsYmVmb3JlRGVzdHJveTpCYSxiZWZvcmVVbm1vdW50OkJhLGRlc3Ryb3llZDpCYSx1bm1vdW50ZWQ6QmEsYWN0aXZhdGVkOkJhLGRlYWN0aXZhdGVkOkJhLGVycm9yQ2FwdHVyZWQ6QmEsc2VydmVyUHJlZmV0Y2g6QmEsY29tcG9uZW50czpWYSxkaXJlY3RpdmVzOlZhLHdhdGNoOlVhLHByb3ZpZGU6TGEsaW5qZWN0OlJhfTtmdW5jdGlvbiBMYShlLHQpe3JldHVybiB0P2U/ZnVuY3Rpb24oKXtyZXR1cm4gcyhnKGUpP2UuY2FsbCh0aGlzLHRoaXMpOmUsZyh0KT90LmNhbGwodGhpcyx0aGlzKTp0KX06dDplfWZ1bmN0aW9uIFJhKGUsdCl7cmV0dXJuIFZhKHphKGUpLHphKHQpKX1mdW5jdGlvbiB6YShlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0W2Vbbl1dPWVbbl07cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gQmEoZSx0KXtyZXR1cm4gZT9bLi4ubmV3IFNldChbXS5jb25jYXQoZSx0KSldOnR9ZnVuY3Rpb24gVmEoZSx0KXtyZXR1cm4gZT9zKE9iamVjdC5jcmVhdGUobnVsbCksZSx0KTp0fWZ1bmN0aW9uIEhhKGUsdCl7cmV0dXJuIGU/ZChlKSYmZCh0KT9bLi4ubmV3IFNldChbLi4uZSwuLi50XSldOnMoT2JqZWN0LmNyZWF0ZShudWxsKSx3YShlKSx3YSh0Pz97fSkpOnR9ZnVuY3Rpb24gVWEoZSx0KXtpZighZSlyZXR1cm4gdDtpZighdClyZXR1cm4gZTtsZXQgbj1zKE9iamVjdC5jcmVhdGUobnVsbCksZSk7Zm9yKGxldCByIGluIHQpbltyXT1CYShlW3JdLHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIFdhKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6aSxwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9LG9wdGlvbk1lcmdlU3RyYXRlZ2llczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb21waWxlck9wdGlvbnM6e319LG1peGluczpbXSxjb21wb25lbnRzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpb25zQ2FjaGU6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm5ldyBXZWFrTWFwfX12YXIgR2E9MDtmdW5jdGlvbiBLYShlLHQpe3JldHVybiBmdW5jdGlvbihuLHI9bnVsbCl7ZyhuKXx8KG49cyh7fSxuKSksciE9bnVsbCYmIXkocikmJihyPW51bGwpO2xldCBpPVdhKCksYT1uZXcgV2Vha1NldCxvPVtdLGM9ITEsbD1pLmFwcD17X3VpZDpHYSsrLF9jb21wb25lbnQ6bixfcHJvcHM6cixfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6aSxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOlFzLGdldCBjb25maWcoKXtyZXR1cm4gaS5jb25maWd9LHNldCBjb25maWcoZSl7fSx1c2UoZSwuLi50KXtyZXR1cm4gYS5oYXMoZSl8fChlJiZnKGUuaW5zdGFsbCk/KGEuYWRkKGUpLGUuaW5zdGFsbChsLC4uLnQpKTpnKGUpJiYoYS5hZGQoZSksZShsLC4uLnQpKSksbH0sbWl4aW4oZSl7cmV0dXJuIGkubWl4aW5zLmluY2x1ZGVzKGUpfHxpLm1peGlucy5wdXNoKGUpLGx9LGNvbXBvbmVudChlLHQpe3JldHVybiB0PyhpLmNvbXBvbmVudHNbZV09dCxsKTppLmNvbXBvbmVudHNbZV19LGRpcmVjdGl2ZShlLHQpe3JldHVybiB0PyhpLmRpcmVjdGl2ZXNbZV09dCxsKTppLmRpcmVjdGl2ZXNbZV19LG1vdW50KGEsbyxzKXtpZighYyl7bGV0IHU9bC5fY2VWTm9kZXx8cShuLHIpO3JldHVybiB1LmFwcENvbnRleHQ9aSxzPT09ITA/cz1gc3ZnYDpzPT09ITEmJihzPXZvaWQgMCksbyYmdD90KHUsYSk6ZSh1LGEscyksYz0hMCxsLl9jb250YWluZXI9YSxhLl9fdnVlX2FwcF9fPWwsV3ModS5jb21wb25lbnQpfX0sb25Vbm1vdW50KGUpe28ucHVzaChlKX0sdW5tb3VudCgpe2MmJihqbihvLGwuX2luc3RhbmNlLDE2KSxlKG51bGwsbC5fY29udGFpbmVyKSxkZWxldGUgbC5fY29udGFpbmVyLl9fdnVlX2FwcF9fKX0scHJvdmlkZShlLHQpe3JldHVybiBpLnByb3ZpZGVzW2VdPXQsbH0scnVuV2l0aENvbnRleHQoZSl7bGV0IHQ9cWE7cWE9bDt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3FhPXR9fX07cmV0dXJuIGx9fXZhciBxYT1udWxsO2Z1bmN0aW9uIEphKGUsbixyPXQpe2xldCBpPVkoKSxhPU8obiksbz1rKG4pLHM9WWEoZSxhKSxjPXNuKChzLGMpPT57bGV0IGwsdT10LGQ7cmV0dXJuIG1yKCgpPT57bGV0IHQ9ZVthXTtqKGwsdCkmJihsPXQsYygpKX0pLHtnZXQoKXtyZXR1cm4gcygpLHIuZ2V0P3IuZ2V0KGwpOmx9LHNldChlKXtsZXQgcz1yLnNldD9yLnNldChlKTplO2lmKCFqKHMsbCkmJiEodSE9PXQmJmooZSx1KSkpcmV0dXJuO2xldCBmPWkudm5vZGUucHJvcHMscD0hIShmJiYobiBpbiBmfHxhIGluIGZ8fG8gaW4gZikmJihgb25VcGRhdGU6JHtufWBpbiBmfHxgb25VcGRhdGU6JHthfWBpbiBmfHxgb25VcGRhdGU6JHtvfWBpbiBmKSk7cHx8KGw9ZSxjKCkpLGkuZW1pdChgdXBkYXRlOiR7bn1gLHMpLGooZSx1KSYmKGooZSxzKSYmIWoocyxkKXx8cCYmdSE9PXQmJiFqKHMsbCkpJiZjKCksdT1lLGQ9c319fSk7cmV0dXJuIGNbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e2xldCBlPTA7cmV0dXJue25leHQoKXtyZXR1cm4gZTwyP3t2YWx1ZTplKys/c3x8dDpjLGRvbmU6ITF9Ontkb25lOiEwfX19fSxjfXZhciBZYT0oZSx0KT0+dD09PWBtb2RlbFZhbHVlYHx8dD09PWBtb2RlbC12YWx1ZWA/ZS5tb2RlbE1vZGlmaWVyczplW2Ake3R9TW9kaWZpZXJzYF18fGVbYCR7Tyh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtrKHQpfU1vZGlmaWVyc2BdO2Z1bmN0aW9uIFhhKGUsbiwuLi5yKXtpZihlLmlzVW5tb3VudGVkKXJldHVybjtsZXQgaT1lLnZub2RlLnByb3BzfHx0LGE9cixvPW4uc3RhcnRzV2l0aChgdXBkYXRlOmApLHM9byYmWWEoaSxuLnNsaWNlKDcpKTtzJiYocy50cmltJiYoYT1yLm1hcChlPT5fKGUpP2UudHJpbSgpOmUpKSxzLm51bWJlciYmKGE9ci5tYXAocmUpKSk7bGV0IGMsbD1pW2M9bmUobildfHxpW2M9bmUoTyhuKSldOyFsJiZvJiYobD1pW2M9bmUoayhuKSldKSxsJiZqbihsLGUsNixhKTtsZXQgdT1pW2MrYE9uY2VgXTtpZih1KXtpZighZS5lbWl0dGVkKWUuZW1pdHRlZD17fTtlbHNlIGlmKGUuZW1pdHRlZFtjXSlyZXR1cm47ZS5lbWl0dGVkW2NdPSEwLGpuKHUsZSw2LGEpfX12YXIgWmE9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gUWEoZSx0LG49ITEpe2xldCByPW4/WmE6dC5lbWl0c0NhY2hlLGk9ci5nZXQoZSk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgYT1lLmVtaXRzLG89e30sYz0hMTtpZighZyhlKSl7bGV0IHI9ZT0+e2xldCBuPVFhKGUsdCwhMCk7biYmKGM9ITAscyhvLG4pKX07IW4mJnQubWl4aW5zLmxlbmd0aCYmdC5taXhpbnMuZm9yRWFjaChyKSxlLmV4dGVuZHMmJnIoZS5leHRlbmRzKSxlLm1peGlucyYmZS5taXhpbnMuZm9yRWFjaChyKX1yZXR1cm4hYSYmIWM/KHkoZSkmJnIuc2V0KGUsbnVsbCksbnVsbCk6KGQoYSk/YS5mb3JFYWNoKGU9Pm9bZV09bnVsbCk6cyhvLGEpLHkoZSkmJnIuc2V0KGUsbyksbyl9ZnVuY3Rpb24gJGEoZSx0KXtyZXR1cm4hZXx8IWEodCk/ITE6KHQ9dC5zbGljZSgyKSx0PXQ9PT1gT25jZWA/dDp0LnJlcGxhY2UoL09uY2UkLyxgYCksdShlLHRbMF0udG9Mb3dlckNhc2UoKSt0LnNsaWNlKDEpKXx8dShlLGsodCkpfHx1KGUsdCkpfWZ1bmN0aW9uIGVvKGUpe2xldHt0eXBlOnQsdm5vZGU6bixwcm94eTpyLHdpdGhQcm94eTppLHByb3BzT3B0aW9uczpbYV0sc2xvdHM6cyxhdHRyczpjLGVtaXQ6bCxyZW5kZXI6dSxyZW5kZXJDYWNoZTpkLHByb3BzOmYsZGF0YTpwLHNldHVwU3RhdGU6bSxjdHg6aCxpbmhlcml0QXR0cnM6Z309ZSxfPWVyKGUpLHYseTt0cnl7aWYobi5zaGFwZUZsYWcmNCl7bGV0IGU9aXx8cix0PWU7dj1icyh1LmNhbGwodCxlLGQsZixtLHAsaCkpLHk9Y31lbHNle2xldCBlPXQ7dj1icyhlLmxlbmd0aD4xP2UoZix7YXR0cnM6YyxzbG90czpzLGVtaXQ6bH0pOmUoZixudWxsKSkseT10LnByb3BzP2M6bm8oYyl9fWNhdGNoKHQpeyRvLmxlbmd0aD0wLE1uKHQsZSwxKSx2PXEoSyl9bGV0IGI9djtpZih5JiZnIT09ITEpe2xldCBlPU9iamVjdC5rZXlzKHkpLHtzaGFwZUZsYWc6dH09YjtlLmxlbmd0aCYmdCY3JiYoYSYmZS5zb21lKG8pJiYoeT1ybyh5LGEpKSxiPWdzKGIseSwhMSwhMCkpfXJldHVybiBuLmRpcnMmJihiPWdzKGIsbnVsbCwhMSwhMCksYi5kaXJzPWIuZGlycz9iLmRpcnMuY29uY2F0KG4uZGlycyk6bi5kaXJzKSxuLnRyYW5zaXRpb24mJktyKHhyKGIudHlwZSkmJkdyKGIpfHxiLG4udHJhbnNpdGlvbiksdj1iLGVyKF8pLHZ9ZnVuY3Rpb24gdG8oZSx0PSEwKXtsZXQgbjtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtpZihjcyhyKSl7aWYoci50eXBlIT09S3x8ci5jaGlsZHJlbj09PWB2LWlmYCl7aWYobilyZXR1cm47bj1yfX1lbHNlIHJldHVybn1yZXR1cm4gbn12YXIgbm89ZT0+e2xldCB0O2ZvcihsZXQgbiBpbiBlKShuPT09YGNsYXNzYHx8bj09PWBzdHlsZWB8fGEobikpJiYoKHR8fD17fSlbbl09ZVtuXSk7cmV0dXJuIHR9LHJvPShlLHQpPT57bGV0IG49e307Zm9yKGxldCByIGluIGUpKCFvKHIpfHwhKHIuc2xpY2UoOSlpbiB0KSkmJihuW3JdPWVbcl0pO3JldHVybiBufTtmdW5jdGlvbiBpbyhlLHQsbil7bGV0e3Byb3BzOnIsY2hpbGRyZW46aSxjb21wb25lbnQ6YX09ZSx7cHJvcHM6byxjaGlsZHJlbjpzLHBhdGNoRmxhZzpjfT10LGw9YS5lbWl0c09wdGlvbnM7aWYodC5kaXJzfHx0LnRyYW5zaXRpb24pcmV0dXJuITA7aWYobiYmYz49MCl7aWYoYyYxMDI0KXJldHVybiEwO2lmKGMmMTYpcmV0dXJuIHI/YW8ocixvLGwpOiEhbztpZihjJjgpe2xldCBlPXQuZHluYW1pY1Byb3BzO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgbj1lW3RdO2lmKG9vKG8scixuKSYmISRhKGwsbikpcmV0dXJuITB9fX1lbHNlIHJldHVybihpfHxzKSYmKCFzfHwhcy4kc3RhYmxlKT8hMDpyPT09bz8hMTpyPyFvfHxhbyhyLG8sbCk6ISFvO3JldHVybiExfWZ1bmN0aW9uIGFvKGUsdCxuKXtsZXQgcj1PYmplY3Qua2V5cyh0KTtpZihyLmxlbmd0aCE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aClyZXR1cm4hMDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGE9cltpXTtpZihvbyh0LGUsYSkmJiEkYShuLGEpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG9vKGUsdCxuKXtsZXQgcj1lW25dLGk9dFtuXTtyZXR1cm4gbj09PWBzdHlsZWAmJnkocikmJnkoaSk/IWhlKHIsaSk6ciE9PWl9ZnVuY3Rpb24gc28oe3Zub2RlOmUscGFyZW50OnQsc3VzcGVuc2U6bn0scil7Zm9yKDt0Oyl7bGV0IG49dC5zdWJUcmVlO2lmKG4uc3VzcGVuc2UmJm4uc3VzcGVuc2UuYWN0aXZlQnJhbmNoPT09ZSYmKG4uc3VzcGVuc2Uudm5vZGUuZWw9bi5lbD1yLGU9biksbj09PWUpKGU9dC52bm9kZSkuZWw9cix0PXQucGFyZW50O2Vsc2UgYnJlYWt9biYmbi5hY3RpdmVCcmFuY2g9PT1lJiYobi52bm9kZS5lbD1yKX12YXIgY289e30sbG89KCk9Pk9iamVjdC5jcmVhdGUoY28pLHVvPWU9Pk9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PWNvO2Z1bmN0aW9uIGZvKGUsdCxuLHI9ITEpe2xldCBpPXt9LGE9bG8oKTtlLnByb3BzRGVmYXVsdHM9T2JqZWN0LmNyZWF0ZShudWxsKSxtbyhlLHQsaSxhKTtmb3IobGV0IHQgaW4gZS5wcm9wc09wdGlvbnNbMF0pdCBpbiBpfHwoaVt0XT12b2lkIDApO2UucHJvcHM9bj9yP2k6enQoaSk6ZS50eXBlLnByb3BzP2k6YSxlLmF0dHJzPWF9ZnVuY3Rpb24gcG8oZSx0LG4scil7bGV0e3Byb3BzOmksYXR0cnM6YSx2bm9kZTp7cGF0Y2hGbGFnOm99fT1lLHM9VihpKSxbY109ZS5wcm9wc09wdGlvbnMsbD0hMTtpZigocnx8bz4wKSYmIShvJjE2KSl7aWYobyY4KXtsZXQgbj1lLnZub2RlLmR5bmFtaWNQcm9wcztmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IG89bltyXTtpZigkYShlLmVtaXRzT3B0aW9ucyxvKSljb250aW51ZTtsZXQgZD10W29dO2lmKGMpe2lmKHUoYSxvKSlkIT09YVtvXSYmKGFbb109ZCxsPSEwKTtlbHNle2xldCB0PU8obyk7aVt0XT1obyhjLHMsdCxkLGUsITEpfX1lbHNlIGQhPT1hW29dJiYoYVtvXT1kLGw9ITApfX19ZWxzZXttbyhlLHQsaSxhKSYmKGw9ITApO2xldCByO2ZvcihsZXQgYSBpbiBzKSghdHx8IXUodCxhKSYmKChyPWsoYSkpPT09YXx8IXUodCxyKSkpJiYoYz9uJiYoblthXSE9PXZvaWQgMHx8bltyXSE9PXZvaWQgMCkmJihpW2FdPWhvKGMscyxhLHZvaWQgMCxlLCEwKSk6ZGVsZXRlIGlbYV0pO2lmKGEhPT1zKWZvcihsZXQgZSBpbiBhKSghdHx8IXUodCxlKSkmJihkZWxldGUgYVtlXSxsPSEwKX1sJiZ0dChlLmF0dHJzLGBzZXRgLGBgKX1mdW5jdGlvbiBtbyhlLG4scixpKXtsZXRbYSxvXT1lLnByb3BzT3B0aW9ucyxzPSExLGM7aWYobilmb3IobGV0IHQgaW4gbil7aWYoRSh0KSljb250aW51ZTtsZXQgbD1uW3RdLGQ7YSYmdShhLGQ9Tyh0KSk/IW98fCFvLmluY2x1ZGVzKGQpP3JbZF09bDooY3x8PXt9KVtkXT1sOiRhKGUuZW1pdHNPcHRpb25zLHQpfHwoISh0IGluIGkpfHxsIT09aVt0XSkmJihpW3RdPWwscz0hMCl9aWYobyl7bGV0IG49VihyKSxpPWN8fHQ7Zm9yKGxldCB0PTA7dDxvLmxlbmd0aDt0Kyspe2xldCBzPW9bdF07cltzXT1obyhhLG4scyxpW3NdLGUsIXUoaSxzKSl9fXJldHVybiBzfWZ1bmN0aW9uIGhvKGUsdCxuLHIsaSxhKXtsZXQgbz1lW25dO2lmKG8hPW51bGwpe2xldCBlPXUobyxgZGVmYXVsdGApO2lmKGUmJnI9PT12b2lkIDApe2xldCBlPW8uZGVmYXVsdDtpZihvLnR5cGUhPT1GdW5jdGlvbiYmIW8uc2tpcEZhY3RvcnkmJmcoZSkpe2xldHtwcm9wc0RlZmF1bHRzOmF9PWk7aWYobiBpbiBhKXI9YVtuXTtlbHNle2xldCBvPUFzKGkpO3I9YVtuXT1lLmNhbGwobnVsbCx0KSxvKCl9fWVsc2Ugcj1lO2kuY2UmJmkuY2UuX3NldFByb3AobixyKX1vWzBdJiYoYSYmIWU/cj0hMTpvWzFdJiYocj09PWBgfHxyPT09ayhuKSkmJihyPSEwKSl9cmV0dXJuIHJ9dmFyIGdvPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIF9vKGUscixpPSExKXtsZXQgYT1pP2dvOnIucHJvcHNDYWNoZSxvPWEuZ2V0KGUpO2lmKG8pcmV0dXJuIG87bGV0IGM9ZS5wcm9wcyxsPXt9LGY9W10scD0hMTtpZighZyhlKSl7bGV0IHQ9ZT0+e3A9ITA7bGV0W3Qsbl09X28oZSxyLCEwKTtzKGwsdCksbiYmZi5wdXNoKC4uLm4pfTshaSYmci5taXhpbnMubGVuZ3RoJiZyLm1peGlucy5mb3JFYWNoKHQpLGUuZXh0ZW5kcyYmdChlLmV4dGVuZHMpLGUubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKHQpfWlmKCFjJiYhcClyZXR1cm4geShlKSYmYS5zZXQoZSxuKSxuO2lmKGQoYykpZm9yKGxldCBlPTA7ZTxjLmxlbmd0aDtlKyspe2xldCBuPU8oY1tlXSk7dm8obikmJihsW25dPXQpfWVsc2UgaWYoYylmb3IobGV0IGUgaW4gYyl7bGV0IHQ9TyhlKTtpZih2byh0KSl7bGV0IG49Y1tlXSxyPWxbdF09ZChuKXx8ZyhuKT97dHlwZTpufTpzKHt9LG4pLGk9ci50eXBlLGE9ITEsbz0hMDtpZihkKGkpKWZvcihsZXQgZT0wO2U8aS5sZW5ndGg7KytlKXtsZXQgdD1pW2VdLG49Zyh0KSYmdC5uYW1lO2lmKG49PT1gQm9vbGVhbmApe2E9ITA7YnJlYWt9bj09PWBTdHJpbmdgJiYobz0hMSl9ZWxzZSBhPWcoaSkmJmkubmFtZT09PWBCb29sZWFuYDtyWzBdPWEsclsxXT1vLChhfHx1KHIsYGRlZmF1bHRgKSkmJmYucHVzaCh0KX19bGV0IG09W2wsZl07cmV0dXJuIHkoZSkmJmEuc2V0KGUsbSksbX1mdW5jdGlvbiB2byhlKXtyZXR1cm4gZVswXSE9PWAkYCYmIUUoZSl9dmFyIHlvPWU9PmU9PT1gX2B8fGU9PT1gX2N0eGB8fGU9PT1gJHN0YWJsZWAsYm89ZT0+ZChlKT9lLm1hcChicyk6W2JzKGUpXSx4bz0oZSx0LG4pPT57aWYodC5fbilyZXR1cm4gdDtsZXQgcj1pcigoLi4uZSk9PmJvKHQoLi4uZSkpLG4pO3JldHVybiByLl9jPSExLHJ9LFNvPShlLHQsbik9PntsZXQgcj1lLl9jdHg7Zm9yKGxldCBuIGluIGUpe2lmKHlvKG4pKWNvbnRpbnVlO2xldCBpPWVbbl07aWYoZyhpKSl0W25dPXhvKG4saSxyKTtlbHNlIGlmKGkhPW51bGwpe2xldCBlPWJvKGkpO3Rbbl09KCk9PmV9fX0sQ289KGUsdCk9PntsZXQgbj1ibyh0KTtlLnNsb3RzLmRlZmF1bHQ9KCk9Pm59LHdvPShlLHQsbik9Pntmb3IobGV0IHIgaW4gdCkobnx8IXlvKHIpKSYmKGVbcl09dFtyXSl9LFRvPShlLHQsbik9PntsZXQgcj1lLnNsb3RzPWxvKCk7aWYoZS52bm9kZS5zaGFwZUZsYWcmMzIpe2xldCBlPXQuXztlPyh3byhyLHQsbiksbiYmTihyLGBfYCxlLCEwKSk6U28odCxyKX1lbHNlIHQmJkNvKGUsdCl9LEVvPShlLG4scik9PntsZXR7dm5vZGU6aSxzbG90czphfT1lLG89ITAscz10O2lmKGkuc2hhcGVGbGFnJjMyKXtsZXQgZT1uLl87ZT9yJiZlPT09MT9vPSExOndvKGEsbixyKToobz0hbi4kc3RhYmxlLFNvKG4sYSkpLHM9bn1lbHNlIG4mJihDbyhlLG4pLHM9e2RlZmF1bHQ6MX0pO2lmKG8pZm9yKGxldCBlIGluIGEpIXlvKGUpJiZzW2VdPT1udWxsJiZkZWxldGUgYVtlXX0sVz1KbztmdW5jdGlvbiBEbyhlKXtyZXR1cm4ga28oZSl9ZnVuY3Rpb24gT28oZSl7cmV0dXJuIGtvKGUsY2kpfWZ1bmN0aW9uIGtvKGUsaSl7bGV0IGE9b2UoKTthLl9fVlVFX189ITA7bGV0e2luc2VydDpvLHJlbW92ZTpzLHBhdGNoUHJvcDpjLGNyZWF0ZUVsZW1lbnQ6bCxjcmVhdGVUZXh0OnUsY3JlYXRlQ29tbWVudDpkLHNldFRleHQ6ZixzZXRFbGVtZW50VGV4dDpwLHBhcmVudE5vZGU6bSxuZXh0U2libGluZzpoLHNldFNjb3BlSWQ6Zz1yLGluc2VydFN0YXRpY0NvbnRlbnQ6X309ZSx2PShlLHQsbixyPW51bGwsaT1udWxsLGE9bnVsbCxvPXZvaWQgMCxzPW51bGwsYz0hIXQuZHluYW1pY0NoaWxkcmVuKT0+e2lmKGU9PT10KXJldHVybjtlJiYhbHMoZSx0KSYmKHI9ZGUoZSksY2UoZSxpLGEsITApLGU9bnVsbCksdC5wYXRjaEZsYWc9PT0tMiYmKGM9ITEsdC5keW5hbWljQ2hpbGRyZW49bnVsbCk7bGV0e3R5cGU6bCxyZWY6dSxzaGFwZUZsYWc6ZH09dDtzd2l0Y2gobCl7Y2FzZSBabzp5KGUsdCxuLHIpO2JyZWFrO2Nhc2UgSzpiKGUsdCxuLHIpO2JyZWFrO2Nhc2UgUW86ZT8/eCh0LG4scixvKTticmVhaztjYXNlIEc6QShlLHQsbixyLGksYSxvLHMsYyk7YnJlYWs7ZGVmYXVsdDpkJjE/dyhlLHQsbixyLGksYSxvLHMsYyk6ZCY2P25lKGUsdCxuLHIsaSxhLG8scyxjKTooZCY2NHx8ZCYxMjgpJiZsLnByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbWUpfXUhPW51bGwmJmk/ZWkodSxlJiZlLnJlZixhLHR8fGUsIXQpOnU9PW51bGwmJmUmJmUucmVmIT1udWxsJiZlaShlLnJlZixudWxsLGEsZSwhMCl9LHk9KGUsdCxuLHIpPT57aWYoZT09bnVsbClvKHQuZWw9dSh0LmNoaWxkcmVuKSxuLHIpO2Vsc2V7bGV0IG49dC5lbD1lLmVsO3QuY2hpbGRyZW4hPT1lLmNoaWxkcmVuJiZmKG4sdC5jaGlsZHJlbil9fSxiPShlLHQsbixyKT0+e2U9PW51bGw/byh0LmVsPWQodC5jaGlsZHJlbnx8YGApLG4scik6dC5lbD1lLmVsfSx4PShlLHQsbixyKT0+e1tlLmVsLGUuYW5jaG9yXT1fKGUuY2hpbGRyZW4sdCxuLHIsZS5lbCxlLmFuY2hvcil9LFM9KHtlbDplLGFuY2hvcjp0fSxuLHIpPT57bGV0IGk7Zm9yKDtlJiZlIT09dDspaT1oKGUpLG8oZSxuLHIpLGU9aTtvKHQsbixyKX0sQz0oe2VsOmUsYW5jaG9yOnR9KT0+e2xldCBuO2Zvcig7ZSYmZSE9PXQ7KW49aChlKSxzKGUpLGU9bjtzKHQpfSx3PShlLHQsbixyLGksYSxvLHMsYyk9PntpZih0LnR5cGU9PT1gc3ZnYD9vPWBzdmdgOnQudHlwZT09PWBtYXRoYCYmKG89YG1hdGhtbGApLGU9PW51bGwpVCh0LG4scixpLGEsbyxzLGMpO2Vsc2V7bGV0IG49ZS5lbCYmZS5lbC5faXNWdWVDRT9lLmVsOm51bGw7dHJ5e24mJm4uX2JlZ2luUGF0Y2goKSxPKGUsdCxpLGEsbyxzLGMpfWZpbmFsbHl7biYmbi5fZW5kUGF0Y2goKX19fSxUPShlLHQsbixyLGksYSxzLHUpPT57bGV0IGQsZix7cHJvcHM6bSxzaGFwZUZsYWc6aCx0cmFuc2l0aW9uOmcsZGlyczpffT1lO2lmKGQ9ZS5lbD1sKGUudHlwZSxhLG0mJm0uaXMsbSksaCY4P3AoZCxlLmNoaWxkcmVuKTpoJjE2JiZlZShlLmNoaWxkcmVuLGQsbnVsbCxyLGksQW8oZSxhKSxzLHUpLF8mJm9yKGUsbnVsbCxyLGBjcmVhdGVkYCksRChkLGUsZS5zY29wZUlkLHMsciksbSl7Zm9yKGxldCBlIGluIG0pZSE9PWB2YWx1ZWAmJiFFKGUpJiZjKGQsZSxudWxsLG1bZV0sYSxyKTtgdmFsdWVgaW4gbSYmYyhkLGB2YWx1ZWAsbnVsbCxtLnZhbHVlLGEpLChmPW0ub25Wbm9kZUJlZm9yZU1vdW50KSYmd3MoZixyLGUpfV8mJm9yKGUsbnVsbCxyLGBiZWZvcmVNb3VudGApO2xldCB2PU1vKGksZyk7diYmZy5iZWZvcmVFbnRlcihkKSxvKGQsdCxuKSwoKGY9bSYmbS5vblZub2RlTW91bnRlZCl8fHZ8fF8pJiZXKCgpPT57dHJ5e2YmJndzKGYscixlKSx2JiZnLmVudGVyKGQpLF8mJm9yKGUsbnVsbCxyLGBtb3VudGVkYCl9ZmluYWxseXt9fSxpKX0sRD0oZSx0LG4scixpKT0+e2lmKG4mJmcoZSxuKSxyKWZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCsrKWcoZSxyW3RdKTtpZihpKXtsZXQgbj1pLnN1YlRyZWU7aWYodD09PW58fFJvKG4udHlwZSkmJihuLnNzQ29udGVudD09PXR8fG4uc3NGYWxsYmFjaz09PXQpKXtsZXQgdD1pLnZub2RlO0QoZSx0LHQuc2NvcGVJZCx0LnNsb3RTY29wZUlkcyxpLnBhcmVudCl9fX0sZWU9KGUsdCxuLHIsaSxhLG8scyxjPTApPT57Zm9yKGxldCBsPWM7bDxlLmxlbmd0aDtsKyspe2xldCBjPWVbbF09cz94cyhlW2xdKTpicyhlW2xdKTt2KG51bGwsYyx0LG4scixpLGEsbyxzKX19LE89KGUsbixyLGksYSxvLHMpPT57bGV0IGw9bi5lbD1lLmVsLHtwYXRjaEZsYWc6dSxkeW5hbWljQ2hpbGRyZW46ZCxkaXJzOmZ9PW47dXw9ZS5wYXRjaEZsYWcmMTY7bGV0IG09ZS5wcm9wc3x8dCxoPW4ucHJvcHN8fHQsZztpZihyJiZqbyhyLCExKSwoZz1oLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ3cyhnLHIsbixlKSxmJiZvcihuLGUscixgYmVmb3JlVXBkYXRlYCksciYmam8ociwhMCksZCYmKCFlLmR5bmFtaWNDaGlsZHJlbnx8ZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoIT09ZC5sZW5ndGgpJiYodT0wLHM9ITEsZD1udWxsKSwobS5pbm5lckhUTUwmJmguaW5uZXJIVE1MPT1udWxsfHxtLnRleHRDb250ZW50JiZoLnRleHRDb250ZW50PT1udWxsKSYmcChsLGBgKSxkP3RlKGUuZHluYW1pY0NoaWxkcmVuLGQsbCxyLGksQW8obixhKSxvKTpzfHxhZShlLG4sbCxudWxsLHIsaSxBbyhuLGEpLG8sITEpLHU+MCl7aWYodSYxNilrKGwsbSxoLHIsYSk7ZWxzZSBpZih1JjImJm0uY2xhc3MhPT1oLmNsYXNzJiZjKGwsYGNsYXNzYCxudWxsLGguY2xhc3MsYSksdSY0JiZjKGwsYHN0eWxlYCxtLnN0eWxlLGguc3R5bGUsYSksdSY4KXtsZXQgZT1uLmR5bmFtaWNQcm9wcztmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IG49ZVt0XSxpPW1bbl0sbz1oW25dOyhvIT09aXx8bj09PWB2YWx1ZWApJiZjKGwsbixpLG8sYSxyKX19dSYxJiZlLmNoaWxkcmVuIT09bi5jaGlsZHJlbiYmcChsLG4uY2hpbGRyZW4pfWVsc2UhcyYmZD09bnVsbCYmayhsLG0saCxyLGEpOygoZz1oLm9uVm5vZGVVcGRhdGVkKXx8ZikmJlcoKCk9PntnJiZ3cyhnLHIsbixlKSxmJiZvcihuLGUscixgdXBkYXRlZGApfSxpKX0sdGU9KGUsdCxuLHIsaSxhLG8pPT57Zm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBjPWVbc10sbD10W3NdLHU9Yy5lbCYmKGMudHlwZT09PUd8fCFscyhjLGwpfHxjLnNoYXBlRmxhZyYxOTgpP20oYy5lbCk6bjt2KGMsbCx1LG51bGwscixpLGEsbywhMCl9fSxrPShlLG4scixpLGEpPT57aWYobiE9PXIpe2lmKG4hPT10KWZvcihsZXQgdCBpbiBuKSFFKHQpJiYhKHQgaW4gcikmJmMoZSx0LG5bdF0sbnVsbCxhLGkpO2ZvcihsZXQgdCBpbiByKXtpZihFKHQpKWNvbnRpbnVlO2xldCBvPXJbdF0scz1uW3RdO28hPT1zJiZ0IT09YHZhbHVlYCYmYyhlLHQscyxvLGEsaSl9YHZhbHVlYGluIHImJmMoZSxgdmFsdWVgLG4udmFsdWUsci52YWx1ZSxhKX19LEE9KGUsdCxuLHIsaSxhLHMsYyxsKT0+e2xldCBkPXQuZWw9ZT9lLmVsOnUoYGApLGY9dC5hbmNob3I9ZT9lLmFuY2hvcjp1KGBgKSx7cGF0Y2hGbGFnOnAsZHluYW1pY0NoaWxkcmVuOm0sc2xvdFNjb3BlSWRzOmh9PXQ7aCYmKGM9Yz9jLmNvbmNhdChoKTpoKSxlPT1udWxsPyhvKGQsbixyKSxvKGYsbixyKSxlZSh0LmNoaWxkcmVufHxbXSxuLGYsaSxhLHMsYyxsKSk6cD4wJiZwJjY0JiZtJiZlLmR5bmFtaWNDaGlsZHJlbiYmZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoPT09bS5sZW5ndGg/KHRlKGUuZHluYW1pY0NoaWxkcmVuLG0sbixpLGEscyxjKSwodC5rZXkhPW51bGx8fGkmJnQ9PT1pLnN1YlRyZWUpJiZObyhlLHQsITApKTphZShlLHQsbixmLGksYSxzLGMsbCl9LG5lPShlLHQsbixyLGksYSxvLHMsYyk9Pnt0LnNsb3RTY29wZUlkcz1zLGU9PW51bGw/dC5zaGFwZUZsYWcmNTEyP2kuY3R4LmFjdGl2YXRlKHQsbixyLG8sYyk6aih0LG4scixpLGEsbyxjKTpOKGUsdCxjKX0saj0oZSx0LG4scixpLGEsbyk9PntsZXQgcz1lLmNvbXBvbmVudD1EcyhlLHIsaSk7aWYoa2koZSkmJihzLmN0eC5yZW5kZXJlcj1tZSksUHMocywhMSxvKSxzLmFzeW5jRGVwKXtpZihpJiZpLnJlZ2lzdGVyRGVwKHMscmUsbyksIWUuZWwpe2xldCByPXMuc3ViVHJlZT1xKEspO2IobnVsbCxyLHQsbiksZS5wbGFjZWhvbGRlcj1yLmVsfX1lbHNlIHJlKHMsZSx0LG4saSxhLG8pfSxOPShlLHQsbik9PntsZXQgcj10LmNvbXBvbmVudD1lLmNvbXBvbmVudDtpZihpbyhlLHQsbikpe2lmKHIuYXN5bmNEZXAmJiFyLmFzeW5jUmVzb2x2ZWQpe2llKHIsdCxuKTtyZXR1cm59ci5uZXh0PXQsci51cGRhdGUoKX1lbHNlIHQuZWw9ZS5lbCxyLnZub2RlPXR9LHJlPShlLHQsbixyLGksYSxvKT0+e2xldCBzPSgpPT57aWYoZS5pc01vdW50ZWQpe2xldHtuZXh0OnQsYnU6bix1OnIscGFyZW50OnMsdm5vZGU6Y309ZTt7bGV0IG49Rm8oZSk7aWYobil7dCYmKHQuZWw9Yy5lbCxpZShlLHQsbykpLG4uYXN5bmNEZXAudGhlbigoKT0+e1coKCk9PntlLmlzVW5tb3VudGVkfHxsKCl9LGkpfSk7cmV0dXJufX1sZXQgdT10LGQ7am8oZSwhMSksdD8odC5lbD1jLmVsLGllKGUsdCxvKSk6dD1jLG4mJk0obiksKGQ9dC5wcm9wcyYmdC5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSYmd3MoZCxzLHQsYyksam8oZSwhMCk7bGV0IGY9ZW8oZSkscD1lLnN1YlRyZWU7ZS5zdWJUcmVlPWYsdihwLGYsbShwLmVsKSxkZShwKSxlLGksYSksdC5lbD1mLmVsLHU9PT1udWxsJiZzbyhlLGYuZWwpLHImJlcocixpKSwoZD10LnByb3BzJiZ0LnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmVygoKT0+d3MoZCxzLHQsYyksaSl9ZWxzZXtsZXQgbyx7ZWw6cyxwcm9wczpjfT10LHtibTpsLG06dSxwYXJlbnQ6ZCxyb290OmYsdHlwZTpwfT1lLG09RWkodCk7aWYoam8oZSwhMSksbCYmTShsKSwhbSYmKG89YyYmYy5vblZub2RlQmVmb3JlTW91bnQpJiZ3cyhvLGQsdCksam8oZSwhMCkscyYmZ2Upe2xldCB0PSgpPT57ZS5zdWJUcmVlPWVvKGUpLGdlKHMsZS5zdWJUcmVlLGUsaSxudWxsKX07bSYmcC5fX2FzeW5jSHlkcmF0ZT9wLl9fYXN5bmNIeWRyYXRlKHMsZSx0KTp0KCl9ZWxzZXtmLmNlJiZmLmNlLl9oYXNTaGFkb3dSb290KCkmJmYuY2UuX2luamVjdENoaWxkU3R5bGUocCxlLnBhcmVudD9lLnBhcmVudC50eXBlOnZvaWQgMCk7bGV0IG89ZS5zdWJUcmVlPWVvKGUpO3YobnVsbCxvLG4scixlLGksYSksdC5lbD1vLmVsfWlmKHUmJlcodSxpKSwhbSYmKG89YyYmYy5vblZub2RlTW91bnRlZCkpe2xldCBlPXQ7VygoKT0+d3MobyxkLGUpLGkpfSh0LnNoYXBlRmxhZyYyNTZ8fGQmJkVpKGQudm5vZGUpJiZkLnZub2RlLnNoYXBlRmxhZyYyNTYpJiZlLmEmJlcoZS5hLGkpLGUuaXNNb3VudGVkPSEwLHQ9bj1yPW51bGx9fTtlLnNjb3BlLm9uKCk7bGV0IGM9ZS5lZmZlY3Q9bmV3IERlKHMpO2Uuc2NvcGUub2ZmKCk7bGV0IGw9ZS51cGRhdGU9Yy5ydW4uYmluZChjKSx1PWUuam9iPWMucnVuSWZEaXJ0eS5iaW5kKGMpO3UuaT1lLHUuaWQ9ZS51aWQsYy5zY2hlZHVsZXI9KCk9PlVuKHUpLGpvKGUsITApLGwoKX0saWU9KGUsdCxuKT0+e3QuY29tcG9uZW50PWU7bGV0IHI9ZS52bm9kZS5wcm9wcztlLnZub2RlPXQsZS5uZXh0PW51bGwscG8oZSx0LnByb3BzLHIsbiksRW8oZSx0LmNoaWxkcmVuLG4pLFdlKCksS24oZSksR2UoKX0sYWU9KGUsdCxuLHIsaSxhLG8scyxjPSExKT0+e2xldCBsPWUmJmUuY2hpbGRyZW4sdT1lP2Uuc2hhcGVGbGFnOjAsZD10LmNoaWxkcmVuLHtwYXRjaEZsYWc6ZixzaGFwZUZsYWc6bX09dDtpZihmPjApe2lmKGYmMTI4KXtGKGwsZCxuLHIsaSxhLG8scyxjKTtyZXR1cm59aWYoZiYyNTYpe1AobCxkLG4scixpLGEsbyxzLGMpO3JldHVybn19bSY4Pyh1JjE2JiZ1ZShsLGksYSksZCE9PWwmJnAobixkKSk6dSYxNj9tJjE2P0YobCxkLG4scixpLGEsbyxzLGMpOnVlKGwsaSxhLCEwKToodSY4JiZwKG4sYGApLG0mMTYmJmVlKGQsbixyLGksYSxvLHMsYykpfSxQPShlLHQscixpLGEsbyxzLGMsbCk9PntlfHw9bix0fHw9bjtsZXQgdT1lLmxlbmd0aCxkPXQubGVuZ3RoLGY9TWF0aC5taW4odSxkKSxwO2ZvcihwPTA7cDxmO3ArKyl7bGV0IG49dFtwXT1sP3hzKHRbcF0pOmJzKHRbcF0pO3YoZVtwXSxuLHIsbnVsbCxhLG8scyxjLGwpfXU+ZD91ZShlLGEsbywhMCwhMSxmKTplZSh0LHIsaSxhLG8scyxjLGwsZil9LEY9KGUsdCxyLGksYSxvLHMsYyxsKT0+e2xldCB1PTAsZD10Lmxlbmd0aCxmPWUubGVuZ3RoLTEscD1kLTE7Zm9yKDt1PD1mJiZ1PD1wOyl7bGV0IG49ZVt1XSxpPXRbdV09bD94cyh0W3VdKTpicyh0W3VdKTtpZihscyhuLGkpKXYobixpLHIsbnVsbCxhLG8scyxjLGwpO2Vsc2UgYnJlYWs7dSsrfWZvcig7dTw9ZiYmdTw9cDspe2xldCBuPWVbZl0saT10W3BdPWw/eHModFtwXSk6YnModFtwXSk7aWYobHMobixpKSl2KG4saSxyLG51bGwsYSxvLHMsYyxsKTtlbHNlIGJyZWFrO2YtLSxwLS19aWYodT5mKXtpZih1PD1wKXtsZXQgZT1wKzEsbj1lPGQ/dFtlXS5lbDppO2Zvcig7dTw9cDspdihudWxsLHRbdV09bD94cyh0W3VdKTpicyh0W3VdKSxyLG4sYSxvLHMsYyxsKSx1Kyt9fWVsc2UgaWYodT5wKWZvcig7dTw9ZjspY2UoZVt1XSxhLG8sITApLHUrKztlbHNle2xldCBtPXUsaD11LGc9bmV3IE1hcDtmb3IodT1oO3U8PXA7dSsrKXtsZXQgZT10W3VdPWw/eHModFt1XSk6YnModFt1XSk7ZS5rZXkhPW51bGwmJmcuc2V0KGUua2V5LHUpfWxldCBfLHk9MCxiPXAtaCsxLHg9ITEsUz0wLEM9QXJyYXkoYik7Zm9yKHU9MDt1PGI7dSsrKUNbdV09MDtmb3IodT1tO3U8PWY7dSsrKXtsZXQgbj1lW3VdO2lmKHk+PWIpe2NlKG4sYSxvLCEwKTtjb250aW51ZX1sZXQgaTtpZihuLmtleSE9bnVsbClpPWcuZ2V0KG4ua2V5KTtlbHNlIGZvcihfPWg7Xzw9cDtfKyspaWYoQ1tfLWhdPT09MCYmbHMobix0W19dKSl7aT1fO2JyZWFrfWk9PT12b2lkIDA/Y2UobixhLG8sITApOihDW2ktaF09dSsxLGk+PVM/Uz1pOng9ITAsdihuLHRbaV0scixudWxsLGEsbyxzLGMsbCkseSsrKX1sZXQgdz14P1BvKEMpOm47Zm9yKF89dy5sZW5ndGgtMSx1PWItMTt1Pj0wO3UtLSl7bGV0IGU9aCt1LG49dFtlXSxmPXRbZSsxXSxwPWUrMTxkP2YuZWx8fExvKGYpOmk7Q1t1XT09PTA/dihudWxsLG4scixwLGEsbyxzLGMsbCk6eCYmKF88MHx8dSE9PXdbX10/c2UobixyLHAsMik6Xy0tKX19fSxzZT0oZSx0LG4scixpPW51bGwpPT57bGV0e2VsOmEsdHlwZTpjLHRyYW5zaXRpb246bCxjaGlsZHJlbjp1LHNoYXBlRmxhZzpkfT1lO2lmKGQmNil7c2UoZS5jb21wb25lbnQuc3ViVHJlZSx0LG4scik7cmV0dXJufWlmKGQmMTI4KXtlLnN1c3BlbnNlLm1vdmUodCxuLHIpO3JldHVybn1pZihkJjY0KXtjLm1vdmUoZSx0LG4sbWUpO3JldHVybn1pZihjPT09Ryl7byhhLHQsbik7Zm9yKGxldCBlPTA7ZTx1Lmxlbmd0aDtlKyspc2UodVtlXSx0LG4scik7byhlLmFuY2hvcix0LG4pO3JldHVybn1pZihjPT09UW8pe1MoZSx0LG4pO3JldHVybn1pZihyIT09MiYmZCYxJiZsKXtpZihyPT09MClsLnBlcnNpc3RlZCYmIWFbTnJdP28oYSx0LG4pOihsLmJlZm9yZUVudGVyKGEpLG8oYSx0LG4pLFcoKCk9PmwuZW50ZXIoYSksaSkpO2Vsc2V7bGV0e2xlYXZlOnIsZGVsYXlMZWF2ZTppLGFmdGVyTGVhdmU6Y309bCx1PSgpPT57ZS5jdHguaXNVbm1vdW50ZWQ/cyhhKTpvKGEsdCxuKX0sZD0oKT0+e2xldCBlPWEuX2lzTGVhdmluZ3x8ISFhW05yXTthLl9pc0xlYXZpbmcmJmFbTnJdKCEwKSxsLnBlcnNpc3RlZCYmIWU/dSgpOnIoYSwoKT0+e3UoKSxjJiZjKCl9KX07aT9pKGEsdSxkKTpkKCl9fWVsc2UgbyhhLHQsbil9LGNlPShlLHQsbixyPSExLGk9ITEpPT57bGV0e3R5cGU6YSxwcm9wczpvLHJlZjpzLGNoaWxkcmVuOmMsZHluYW1pY0NoaWxkcmVuOmwsc2hhcGVGbGFnOnUscGF0Y2hGbGFnOmQsZGlyczpmLGNhY2hlSW5kZXg6cCxtZW1vOm19PWU7aWYoZD09PS0yJiYoaT0hMSkscyE9bnVsbCYmKFdlKCksZWkocyxudWxsLG4sZSwhMCksR2UoKSkscCE9bnVsbCYmKHQucmVuZGVyQ2FjaGVbcF09dm9pZCAwKSx1JjI1Nil7dC5jdHguZGVhY3RpdmF0ZShlKTtyZXR1cm59bGV0IGg9dSYxJiZmLGc9IUVpKGUpLF87aWYoZyYmKF89byYmby5vblZub2RlQmVmb3JlVW5tb3VudCkmJndzKF8sdCxlKSx1JjYpTChlLmNvbXBvbmVudCxuLHIpO2Vsc2V7aWYodSYxMjgpe2Uuc3VzcGVuc2UudW5tb3VudChuLHIpO3JldHVybn1oJiZvcihlLG51bGwsdCxgYmVmb3JlVW5tb3VudGApLHUmNjQ/ZS50eXBlLnJlbW92ZShlLHQsbixtZSxyKTpsJiYhbC5oYXNPbmNlJiYoYSE9PUd8fGQ+MCYmZCY2NCk/dWUobCx0LG4sITEsITApOihhPT09RyYmZCYzODR8fCFpJiZ1JjE2KSYmdWUoYyx0LG4pLHImJkkoZSl9bGV0IHY9bSE9bnVsbCYmcD09bnVsbDsoZyYmKF89byYmby5vblZub2RlVW5tb3VudGVkKXx8aHx8dikmJlcoKCk9PntfJiZ3cyhfLHQsZSksaCYmb3IoZSxudWxsLHQsYHVubW91bnRlZGApLHYmJihlLmVsPW51bGwpfSxuKX0sST1lPT57bGV0e3R5cGU6dCxlbDpuLGFuY2hvcjpyLHRyYW5zaXRpb246aX09ZTtpZih0PT09Ryl7bGUobixyKTtyZXR1cm59aWYodD09PVFvKXtDKGUpO3JldHVybn1sZXQgYT0oKT0+e3MobiksaSYmIWkucGVyc2lzdGVkJiZpLmFmdGVyTGVhdmUmJmkuYWZ0ZXJMZWF2ZSgpfTtpZihlLnNoYXBlRmxhZyYxJiZpJiYhaS5wZXJzaXN0ZWQpe2xldHtsZWF2ZTp0LGRlbGF5TGVhdmU6cn09aSxvPSgpPT50KG4sYSk7cj9yKGUuZWwsYSxvKTpvKCl9ZWxzZSBhKCl9LGxlPShlLHQpPT57bGV0IG47Zm9yKDtlIT09dDspbj1oKGUpLHMoZSksZT1uO3ModCl9LEw9KGUsdCxuKT0+e2xldHtidW06cixzY29wZTppLGpvYjphLHN1YlRyZWU6byx1bTpzLG06YyxhOmx9PWU7SW8oYyksSW8obCksciYmTShyKSxpLnN0b3AoKSxhJiYoYS5mbGFnc3w9OCxjZShvLGUsdCxuKSkscyYmVyhzLHQpLFcoKCk9PntlLmlzVW5tb3VudGVkPSEwfSx0KX0sdWU9KGUsdCxuLHI9ITEsaT0hMSxhPTApPT57Zm9yKGxldCBvPWE7bzxlLmxlbmd0aDtvKyspY2UoZVtvXSx0LG4scixpKX0sZGU9ZT0+e2lmKGUuc2hhcGVGbGFnJjYpcmV0dXJuIGRlKGUuY29tcG9uZW50LnN1YlRyZWUpO2lmKGUuc2hhcGVGbGFnJjEyOClyZXR1cm4gZS5zdXNwZW5zZS5uZXh0KCk7bGV0IHQ9aChlLmFuY2hvcnx8ZS5lbCksbj10JiZ0W2JyXTtyZXR1cm4gbj9oKG4pOnR9LGZlPSExLHBlPShlLHQsbik9PntsZXQgcjtlPT1udWxsP3QuX3Zub2RlJiYoY2UodC5fdm5vZGUsbnVsbCxudWxsLCEwKSxyPXQuX3Zub2RlLmNvbXBvbmVudCk6dih0Ll92bm9kZXx8bnVsbCxlLHQsbnVsbCxudWxsLG51bGwsbiksdC5fdm5vZGU9ZSxmZXx8PShmZT0hMCxLbihyKSxxbigpLCExKX0sbWU9e3A6dix1bTpjZSxtOnNlLHI6SSxtdDpqLG1jOmVlLHBjOmFlLHBiYzp0ZSxuOmRlLG86ZX0saGUsZ2U7cmV0dXJuIGkmJihbaGUsZ2VdPWkobWUpKSx7cmVuZGVyOnBlLGh5ZHJhdGU6aGUsY3JlYXRlQXBwOkthKHBlLGhlKX19ZnVuY3Rpb24gQW8oe3R5cGU6ZSxwcm9wczp0fSxuKXtyZXR1cm4gbj09PWBzdmdgJiZlPT09YGZvcmVpZ25PYmplY3RgfHxuPT09YG1hdGhtbGAmJmU9PT1gYW5ub3RhdGlvbi14bWxgJiZ0JiZ0LmVuY29kaW5nJiZ0LmVuY29kaW5nLmluY2x1ZGVzKGBodG1sYCk/dm9pZCAwOm59ZnVuY3Rpb24gam8oe2VmZmVjdDplLGpvYjp0fSxuKXtuPyhlLmZsYWdzfD0zMix0LmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdW5jdGlvbiBNbyhlLHQpe3JldHVybighZXx8ZSYmIWUucGVuZGluZ0JyYW5jaCkmJnQmJiF0LnBlcnNpc3RlZH1mdW5jdGlvbiBObyhlLHQsbj0hMSl7bGV0IHI9ZS5jaGlsZHJlbixpPXQuY2hpbGRyZW47aWYoZChyKSYmZChpKSlmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyl7bGV0IHQ9cltlXSxhPWlbZV07YS5zaGFwZUZsYWcmMSYmIWEuZHluYW1pY0NoaWxkcmVuJiYoKGEucGF0Y2hGbGFnPD0wfHxhLnBhdGNoRmxhZz09PTMyKSYmKGE9aVtlXT14cyhpW2VdKSxhLmVsPXQuZWwpLCFuJiZhLnBhdGNoRmxhZyE9PS0yJiZObyh0LGEpKSxhLnR5cGU9PT1abyYmKGEucGF0Y2hGbGFnPT09LTEmJihhPWlbZV09eHMoYSkpLGEuZWw9dC5lbCksYS50eXBlPT09SyYmIWEuZWwmJihhLmVsPXQuZWwpfX1mdW5jdGlvbiBQbyhlKXtsZXQgdD1lLnNsaWNlKCksbj1bMF0scixpLGEsbyxzLGM9ZS5sZW5ndGg7Zm9yKHI9MDtyPGM7cisrKXtsZXQgYz1lW3JdO2lmKGMhPT0wKXtpZihpPW5bbi5sZW5ndGgtMV0sZVtpXTxjKXt0W3JdPWksbi5wdXNoKHIpO2NvbnRpbnVlfWZvcihhPTAsbz1uLmxlbmd0aC0xO2E8bzspcz1hK28+PjEsZVtuW3NdXTxjP2E9cysxOm89cztjPGVbblthXV0mJihhPjAmJih0W3JdPW5bYS0xXSksblthXT1yKX19Zm9yKGE9bi5sZW5ndGgsbz1uW2EtMV07YS0tPjA7KW5bYV09byxvPXRbb107cmV0dXJuIG59ZnVuY3Rpb24gRm8oZSl7bGV0IHQ9ZS5zdWJUcmVlLmNvbXBvbmVudDtpZih0KXJldHVybiB0LmFzeW5jRGVwJiYhdC5hc3luY1Jlc29sdmVkP3Q6Rm8odCl9ZnVuY3Rpb24gSW8oZSl7aWYoZSlmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmZsYWdzfD04fWZ1bmN0aW9uIExvKGUpe2lmKGUucGxhY2Vob2xkZXIpcmV0dXJuIGUucGxhY2Vob2xkZXI7bGV0IHQ9ZS5jb21wb25lbnQ7cmV0dXJuIHQ/TG8odC5zdWJUcmVlKTpudWxsfXZhciBSbz1lPT5lLl9faXNTdXNwZW5zZSx6bz0wLEJvPXtuYW1lOmBTdXNwZW5zZWAsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MoZSx0LG4scixpLGEsbyxzLGMsbCl7aWYoZT09bnVsbClIbyh0LG4scixpLGEsbyxzLGMsbCk7ZWxzZXtpZihhJiZhLmRlcHM+MCYmIWUuc3VzcGVuc2UuaXNJbkZhbGxiYWNrKXt0LnN1c3BlbnNlPWUuc3VzcGVuc2UsdC5zdXNwZW5zZS52bm9kZT10LHQuZWw9ZS5lbDtyZXR1cm59VW8oZSx0LG4scixpLG8scyxjLGwpfX0saHlkcmF0ZTpHbyxub3JtYWxpemU6S299O2Z1bmN0aW9uIFZvKGUsdCl7bGV0IG49ZS5wcm9wcyYmZS5wcm9wc1t0XTtnKG4pJiZuKCl9ZnVuY3Rpb24gSG8oZSx0LG4scixpLGEsbyxzLGMpe2xldHtwOmwsbzp7Y3JlYXRlRWxlbWVudDp1fX09YyxkPXUoYGRpdmApLGY9ZS5zdXNwZW5zZT1XbyhlLGkscix0LGQsbixhLG8scyxjKTtsKG51bGwsZi5wZW5kaW5nQnJhbmNoPWUuc3NDb250ZW50LGQsbnVsbCxyLGYsYSxvKSxmLmRlcHM+MD8oVm8oZSxgb25QZW5kaW5nYCksVm8oZSxgb25GYWxsYmFja2ApLGwobnVsbCxlLnNzRmFsbGJhY2ssdCxuLHIsbnVsbCxhLG8pLFlvKGYsZS5zc0ZhbGxiYWNrKSk6Zi5yZXNvbHZlKCExLCEwKX1mdW5jdGlvbiBVbyhlLHQsbixyLGksYSxvLHMse3A6Yyx1bTpsLG86e2NyZWF0ZUVsZW1lbnQ6dX19KXtsZXQgZD10LnN1c3BlbnNlPWUuc3VzcGVuc2U7ZC52bm9kZT10LHQuZWw9ZS5lbDtsZXQgZj10LnNzQ29udGVudCxwPXQuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOm0scGVuZGluZ0JyYW5jaDpoLGlzSW5GYWxsYmFjazpnLGlzSHlkcmF0aW5nOl99PWQ7aWYoaClkLnBlbmRpbmdCcmFuY2g9ZixscyhoLGYpPyhjKGgsZixkLmhpZGRlbkNvbnRhaW5lcixudWxsLGksZCxhLG8scyksZC5kZXBzPD0wP2QucmVzb2x2ZSgpOmcmJihffHwoYyhtLHAsbixyLGksbnVsbCxhLG8scyksWW8oZCxwKSkpKTooZC5wZW5kaW5nSWQ9em8rKyxfPyhkLmlzSHlkcmF0aW5nPSExLGQuYWN0aXZlQnJhbmNoPWgpOmwoaCxpLGQpLGQuZGVwcz0wLGQuZWZmZWN0cy5sZW5ndGg9MCxkLmhpZGRlbkNvbnRhaW5lcj11KGBkaXZgKSxnPyhjKG51bGwsZixkLmhpZGRlbkNvbnRhaW5lcixudWxsLGksZCxhLG8scyksZC5kZXBzPD0wP2QucmVzb2x2ZSgpOihjKG0scCxuLHIsaSxudWxsLGEsbyxzKSxZbyhkLHApKSk6bSYmbHMobSxmKT8oYyhtLGYsbixyLGksZCxhLG8scyksZC5yZXNvbHZlKCEwKSk6KGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTAmJmQucmVzb2x2ZSgpKSk7ZWxzZSBpZihtJiZscyhtLGYpKWMobSxmLG4scixpLGQsYSxvLHMpLFlvKGQsZik7ZWxzZSBpZihWbyh0LGBvblBlbmRpbmdgKSxkLnBlbmRpbmdCcmFuY2g9ZixkLnBlbmRpbmdJZD1mLnNoYXBlRmxhZyY1MTI/Zi5jb21wb25lbnQuc3VzcGVuc2VJZDp6bysrLGMobnVsbCxmLGQuaGlkZGVuQ29udGFpbmVyLG51bGwsaSxkLGEsbyxzKSxkLmRlcHM8PTApZC5yZXNvbHZlKCk7ZWxzZXtsZXR7dGltZW91dDplLHBlbmRpbmdJZDp0fT1kO2U+MD9zZXRUaW1lb3V0KCgpPT57ZC5wZW5kaW5nSWQ9PT10JiZkLmZhbGxiYWNrKHApfSxlKTplPT09MCYmZC5mYWxsYmFjayhwKX19ZnVuY3Rpb24gV28oZSx0LG4scixpLGEsbyxzLGMsbCx1PSExKXtsZXR7cDpkLG06Zix1bTpwLG46bSxvOntwYXJlbnROb2RlOmgscmVtb3ZlOmd9fT1sLF8sdj1YbyhlKTt2JiZ0JiZ0LnBlbmRpbmdCcmFuY2gmJihfPXQucGVuZGluZ0lkLHQuZGVwcysrKTtsZXQgeT1lLnByb3BzP2llKGUucHJvcHMudGltZW91dCk6dm9pZCAwLGI9YSx4PXt2bm9kZTplLHBhcmVudDp0LHBhcmVudENvbXBvbmVudDpuLG5hbWVzcGFjZTpvLGNvbnRhaW5lcjpyLGhpZGRlbkNvbnRhaW5lcjppLGRlcHM6MCxwZW5kaW5nSWQ6em8rKyx0aW1lb3V0OnR5cGVvZiB5PT1gbnVtYmVyYD95Oi0xLGFjdGl2ZUJyYW5jaDpudWxsLGlzRmFsbGJhY2tNb3VudFBlbmRpbmc6ITEscGVuZGluZ0JyYW5jaDpudWxsLGlzSW5GYWxsYmFjazohdSxpc0h5ZHJhdGluZzp1LGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZShlPSExLG49ITEpe2xldHt2bm9kZTpyLGFjdGl2ZUJyYW5jaDppLHBlbmRpbmdCcmFuY2g6byxwZW5kaW5nSWQ6cyxlZmZlY3RzOmMscGFyZW50Q29tcG9uZW50OmwsY29udGFpbmVyOnUsaXNJbkZhbGxiYWNrOmR9PXgsZz0hMTtpZih4LmlzSHlkcmF0aW5nKXguaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZighZSl7Zz1pJiZvLnRyYW5zaXRpb24mJm8udHJhbnNpdGlvbi5tb2RlPT09YG91dC1pbmA7bGV0IGU9ITE7ZyYmKGkudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57cz09PXgucGVuZGluZ0lkJiYoZihvLHUsYT09PWImJiFlP20oaSk6YSwwKSxHbihjKSxkJiZyLnNzRmFsbGJhY2smJihyLnNzRmFsbGJhY2suZWw9bnVsbCkpfSksaSYmIXguaXNGYWxsYmFja01vdW50UGVuZGluZyYmKGgoaS5lbCk9PT11JiYoYT1tKGkpLGU9ITApLHAoaSxsLHgsITApLCFnJiZkJiZyLnNzRmFsbGJhY2smJlcoKCk9PnIuc3NGYWxsYmFjay5lbD1udWxsLHgpKSxnfHxmKG8sdSxhLDApfXguaXNGYWxsYmFja01vdW50UGVuZGluZz0hMSxZbyh4LG8pLHgucGVuZGluZ0JyYW5jaD1udWxsLHguaXNJbkZhbGxiYWNrPSExO2xldCB5PXgucGFyZW50LFM9ITE7Zm9yKDt5Oyl7aWYoeS5wZW5kaW5nQnJhbmNoKXtmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl5LmVmZmVjdHMucHVzaChjW2VdKTtTPSEwO2JyZWFrfXk9eS5wYXJlbnR9IVMmJiFnJiZHbihjKSx4LmVmZmVjdHM9W10sdiYmdCYmdC5wZW5kaW5nQnJhbmNoJiZfPT09dC5wZW5kaW5nSWQmJih0LmRlcHMtLSx0LmRlcHM9PT0wJiYhbiYmdC5yZXNvbHZlKCkpLFZvKHIsYG9uUmVzb2x2ZWApfSxmYWxsYmFjayhlKXtpZigheC5wZW5kaW5nQnJhbmNoKXJldHVybjtsZXR7dm5vZGU6dCxhY3RpdmVCcmFuY2g6bixwYXJlbnRDb21wb25lbnQ6cixjb250YWluZXI6aSxuYW1lc3BhY2U6YX09eDtWbyh0LGBvbkZhbGxiYWNrYCk7bGV0IG89bShuKSxsPSgpPT57eC5pc0ZhbGxiYWNrTW91bnRQZW5kaW5nPSExLHguaXNJbkZhbGxiYWNrJiYoZChudWxsLGUsaSxvLHIsbnVsbCxhLHMsYyksWW8oeCxlKSl9LHU9ZS50cmFuc2l0aW9uJiZlLnRyYW5zaXRpb24ubW9kZT09PWBvdXQtaW5gO3UmJih4LmlzRmFsbGJhY2tNb3VudFBlbmRpbmc9ITAsbi50cmFuc2l0aW9uLmFmdGVyTGVhdmU9bCkseC5pc0luRmFsbGJhY2s9ITAscChuLHIsbnVsbCwhMCksdXx8bCgpfSxtb3ZlKGUsdCxuKXt4LmFjdGl2ZUJyYW5jaCYmZih4LmFjdGl2ZUJyYW5jaCxlLHQsbikseC5jb250YWluZXI9ZX0sbmV4dCgpe3JldHVybiB4LmFjdGl2ZUJyYW5jaCYmbSh4LmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKGUsdCxuKXtsZXQgcj0hIXgucGVuZGluZ0JyYW5jaDtyJiZ4LmRlcHMrKztsZXQgaT1lLnZub2RlLmVsO2UuYXN5bmNEZXAuY2F0Y2godD0+e01uKHQsZSwwKX0pLnRoZW4oYT0+e2lmKGUuaXNVbm1vdW50ZWR8fHguaXNVbm1vdW50ZWR8fHgucGVuZGluZ0lkIT09ZS5zdXNwZW5zZUlkKXJldHVybjtqcygpLGUuYXN5bmNSZXNvbHZlZD0hMDtsZXR7dm5vZGU6c309ZTtJcyhlLGEsITEpLGkmJihzLmVsPWkpO2xldCBjPSFpJiZlLnN1YlRyZWUuZWw7dChlLHMsaChpfHxlLnN1YlRyZWUuZWwpLGk/bnVsbDptKGUuc3ViVHJlZSkseCxvLG4pLGMmJihzLnBsYWNlaG9sZGVyPW51bGwsZyhjKSksc28oZSxzLmVsKSxyJiYtLXguZGVwcz09PTAmJngucmVzb2x2ZSgpfSl9LHVubW91bnQoZSx0KXt4LmlzVW5tb3VudGVkPSEwLHguYWN0aXZlQnJhbmNoJiZwKHguYWN0aXZlQnJhbmNoLG4sZSx0KSx4LnBlbmRpbmdCcmFuY2gmJnAoeC5wZW5kaW5nQnJhbmNoLG4sZSx0KX19O3JldHVybiB4fWZ1bmN0aW9uIEdvKGUsdCxuLHIsaSxhLG8scyxjKXtsZXQgbD10LnN1c3BlbnNlPVdvKHQscixuLGUucGFyZW50Tm9kZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBkaXZgKSxudWxsLGksYSxvLHMsITApLHU9YyhlLGwucGVuZGluZ0JyYW5jaD10LnNzQ29udGVudCxuLGwsYSxvKTtyZXR1cm4gbC5kZXBzPT09MCYmbC5yZXNvbHZlKCExLCEwKSx1fWZ1bmN0aW9uIEtvKGUpe2xldHtzaGFwZUZsYWc6dCxjaGlsZHJlbjpufT1lLHI9dCYzMjtlLnNzQ29udGVudD1xbyhyP24uZGVmYXVsdDpuKSxlLnNzRmFsbGJhY2s9cj9xbyhuLmZhbGxiYWNrKTpxKEspfWZ1bmN0aW9uIHFvKGUpe2xldCB0O2lmKGcoZSkpe2xldCBuPXJzJiZlLl9jO24mJihlLl9kPSExLHRzKCkpLGU9ZSgpLG4mJihlLl9kPSEwLHQ9ZXMsbnMoKSl9cmV0dXJuIGQoZSkmJihlPXRvKGUpKSxlPWJzKGUpLHQmJiFlLmR5bmFtaWNDaGlsZHJlbiYmKGUuZHluYW1pY0NoaWxkcmVuPXQuZmlsdGVyKHQ9PnQhPT1lKSksZX1mdW5jdGlvbiBKbyhlLHQpe3QmJnQucGVuZGluZ0JyYW5jaD9kKGUpP3QuZWZmZWN0cy5wdXNoKC4uLmUpOnQuZWZmZWN0cy5wdXNoKGUpOkduKGUpfWZ1bmN0aW9uIFlvKGUsdCl7ZS5hY3RpdmVCcmFuY2g9dDtsZXR7dm5vZGU6bixwYXJlbnRDb21wb25lbnQ6cn09ZSxpPXQuZWw7Zm9yKDshaSYmdC5jb21wb25lbnQ7KXQ9dC5jb21wb25lbnQuc3ViVHJlZSxpPXQuZWw7bi5lbD1pLHImJnIuc3ViVHJlZT09PW4mJihyLnZub2RlLmVsPWksc28ocixpKSl9ZnVuY3Rpb24gWG8oZSl7bGV0IHQ9ZS5wcm9wcyYmZS5wcm9wcy5zdXNwZW5zaWJsZTtyZXR1cm4gdCE9bnVsbCYmdCE9PSExfXZhciBHPVN5bWJvbC5mb3IoYHYtZmd0YCksWm89U3ltYm9sLmZvcihgdi10eHRgKSxLPVN5bWJvbC5mb3IoYHYtY210YCksUW89U3ltYm9sLmZvcihgdi1zdGNgKSwkbz1bXSxlcz1udWxsO2Z1bmN0aW9uIHRzKGU9ITEpeyRvLnB1c2goZXM9ZT9udWxsOltdKX1mdW5jdGlvbiBucygpeyRvLnBvcCgpLGVzPSRvWyRvLmxlbmd0aC0xXXx8bnVsbH12YXIgcnM9MTtmdW5jdGlvbiBpcyhlLHQ9ITEpe3JzKz1lLGU8MCYmZXMmJnQmJihlcy5oYXNPbmNlPSEwKX1mdW5jdGlvbiBhcyhlKXtyZXR1cm4gZS5keW5hbWljQ2hpbGRyZW49cnM+MD9lc3x8bjpudWxsLG5zKCkscnM+MCYmZXMmJmVzLnB1c2goZSksZX1mdW5jdGlvbiBvcyhlLHQsbixyLGksYSl7cmV0dXJuIGFzKHBzKGUsdCxuLHIsaSxhLCEwKSl9ZnVuY3Rpb24gc3MoZSx0LG4scixpKXtyZXR1cm4gYXMocShlLHQsbixyLGksITApKX1mdW5jdGlvbiBjcyhlKXtyZXR1cm4gZT9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gbHMoZSx0KXtyZXR1cm4gZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fWZ1bmN0aW9uIHVzKGUpe312YXIgZHM9KHtrZXk6ZX0pPT5lPz9udWxsLGZzPSh7cmVmOmUscmVmX2tleTp0LHJlZl9mb3I6bn0pPT4odHlwZW9mIGU9PWBudW1iZXJgJiYoZT1gYCtlKSxlPT1udWxsP251bGw6XyhlKXx8SChlKXx8ZyhlKT97aTpVLHI6ZSxrOnQsZjohIW59OmUpO2Z1bmN0aW9uIHBzKGUsdD1udWxsLG49bnVsbCxyPTAsaT1udWxsLGE9ZT09PUc/MDoxLG89ITEscz0hMSl7bGV0IGM9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZSxwcm9wczp0LGtleTp0JiZkcyh0KSxyZWY6dCYmZnModCksc2NvcGVJZDokbixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOmEscGF0Y2hGbGFnOnIsZHluYW1pY1Byb3BzOmksZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDpVfTtyZXR1cm4gcz8oU3MoYyxuKSxhJjEyOCYmZS5ub3JtYWxpemUoYykpOm4mJihjLnNoYXBlRmxhZ3w9XyhuKT84OjE2KSxycz4wJiYhbyYmZXMmJihjLnBhdGNoRmxhZz4wfHxhJjYpJiZjLnBhdGNoRmxhZyE9PTMyJiZlcy5wdXNoKGMpLGN9dmFyIHE9bXM7ZnVuY3Rpb24gbXMoZSx0PW51bGwsbj1udWxsLHI9MCxpPW51bGwsYT0hMSl7aWYoKCFlfHxlPT09JGkpJiYoZT1LKSxjcyhlKSl7bGV0IHI9Z3MoZSx0LCEwKTtyZXR1cm4gbiYmU3MocixuKSxycz4wJiYhYSYmZXMmJihyLnNoYXBlRmxhZyY2P2VzW2VzLmluZGV4T2YoZSldPXI6ZXMucHVzaChyKSksci5wYXRjaEZsYWc9LTIscn1pZihLcyhlKSYmKGU9ZS5fX3ZjY09wdHMpLHQpe3Q9aHModCk7bGV0e2NsYXNzOmUsc3R5bGU6bn09dDtlJiYhXyhlKSYmKHQuY2xhc3M9TChlKSkseShuKSYmKEt0KG4pJiYhZChuKSYmKG49cyh7fSxuKSksdC5zdHlsZT1GKG4pKX1sZXQgbz1fKGUpPzE6Um8oZSk/MTI4OnhyKGUpPzY0OnkoZSk/NDpnKGUpPzI6MDtyZXR1cm4gcHMoZSx0LG4scixpLG8sYSwhMCl9ZnVuY3Rpb24gaHMoZSl7cmV0dXJuIGU/S3QoZSl8fHVvKGUpP3Moe30sZSk6ZTpudWxsfWZ1bmN0aW9uIGdzKGUsdCxuPSExLHI9ITEpe2xldHtwcm9wczppLHJlZjphLHBhdGNoRmxhZzpvLGNoaWxkcmVuOnMsdHJhbnNpdGlvbjpjfT1lLGw9dD9DcyhpfHx7fSx0KTppLHU9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZS50eXBlLHByb3BzOmwsa2V5OmwmJmRzKGwpLHJlZjp0JiZ0LnJlZj9uJiZhP2QoYSk/YS5jb25jYXQoZnModCkpOlthLGZzKHQpXTpmcyh0KTphLHNjb3BlSWQ6ZS5zY29wZUlkLHNsb3RTY29wZUlkczplLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpzLHRhcmdldDplLnRhcmdldCx0YXJnZXRTdGFydDplLnRhcmdldFN0YXJ0LHRhcmdldEFuY2hvcjplLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDplLnN0YXRpY0NvdW50LHNoYXBlRmxhZzplLnNoYXBlRmxhZyxwYXRjaEZsYWc6dCYmZS50eXBlIT09Rz9vPT09LTE/MTY6b3wxNjpvLGR5bmFtaWNQcm9wczplLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46ZS5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDplLmFwcENvbnRleHQsZGlyczplLmRpcnMsdHJhbnNpdGlvbjpjLGNvbXBvbmVudDplLmNvbXBvbmVudCxzdXNwZW5zZTplLnN1c3BlbnNlLHNzQ29udGVudDplLnNzQ29udGVudCYmZ3MoZS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6ZS5zc0ZhbGxiYWNrJiZncyhlLnNzRmFsbGJhY2spLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsZWw6ZS5lbCxhbmNob3I6ZS5hbmNob3IsY3R4OmUuY3R4LGNlOmUuY2V9O3JldHVybiBjJiZyJiZLcih1LGMuY2xvbmUodSkpLHV9ZnVuY3Rpb24gX3MoZT1gIGAsdD0wKXtyZXR1cm4gcShabyxudWxsLGUsdCl9ZnVuY3Rpb24gdnMoZSx0KXtsZXQgbj1xKFFvLG51bGwsZSk7cmV0dXJuIG4uc3RhdGljQ291bnQ9dCxufWZ1bmN0aW9uIHlzKGU9YGAsdD0hMSl7cmV0dXJuIHQ/KHRzKCksc3MoSyxudWxsLGUpKTpxKEssbnVsbCxlKX1mdW5jdGlvbiBicyhlKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PWBib29sZWFuYD9xKEspOmQoZSk/cShHLG51bGwsZS5zbGljZSgpKTpjcyhlKT94cyhlKTpxKFpvLG51bGwsU3RyaW5nKGUpKX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4gZS5lbD09PW51bGwmJmUucGF0Y2hGbGFnIT09LTF8fGUubWVtbz9lOmdzKGUpfWZ1bmN0aW9uIFNzKGUsdCl7bGV0IG49MCx7c2hhcGVGbGFnOnJ9PWU7aWYodD09bnVsbCl0PW51bGw7ZWxzZSBpZihkKHQpKW49MTY7ZWxzZSBpZih0eXBlb2YgdD09YG9iamVjdGApe2lmKHImNjUpe2xldCBuPXQuZGVmYXVsdDtuJiYobi5fYyYmKG4uX2Q9ITEpLFNzKGUsbigpKSxuLl9jJiYobi5fZD0hMCkpO3JldHVybn17bj0zMjtsZXQgcj10Ll87IXImJiF1byh0KT90Ll9jdHg9VTpyPT09MyYmVSYmKFUuc2xvdHMuXz09PTE/dC5fPTE6KHQuXz0yLGUucGF0Y2hGbGFnfD0xMDI0KSl9fWVsc2UgaWYoZyh0KSl7aWYociY2NSl7U3MoZSx7ZGVmYXVsdDp0fSk7cmV0dXJufXQ9e2RlZmF1bHQ6dCxfY3R4OlV9LG49MzJ9ZWxzZSB0PVN0cmluZyh0KSxyJjY0PyhuPTE2LHQ9W19zKHQpXSk6bj04O2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bn1mdW5jdGlvbiBDcyguLi5lKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXTtmb3IobGV0IGUgaW4gcilpZihlPT09YGNsYXNzYCl0LmNsYXNzIT09ci5jbGFzcyYmKHQuY2xhc3M9TChbdC5jbGFzcyxyLmNsYXNzXSkpO2Vsc2UgaWYoZT09PWBzdHlsZWApdC5zdHlsZT1GKFt0LnN0eWxlLHIuc3R5bGVdKTtlbHNlIGlmKGEoZSkpe2xldCBuPXRbZV0saT1yW2VdO2kmJm4hPT1pJiYhKGQobikmJm4uaW5jbHVkZXMoaSkpP3RbZV09bj9bXS5jb25jYXQobixpKTppOmk9PW51bGwmJm49PW51bGwmJiFvKGUpJiYodFtlXT1pKX1lbHNlIGUhPT1gYCYmKHRbZV09cltlXSl9cmV0dXJuIHR9ZnVuY3Rpb24gd3MoZSx0LG4scj1udWxsKXtqbihlLHQsNyxbbixyXSl9dmFyIFRzPVdhKCksRXM9MDtmdW5jdGlvbiBEcyhlLG4scil7bGV0IGk9ZS50eXBlLGE9KG4/bi5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fFRzLG89e3VpZDpFcysrLHZub2RlOmUsdHlwZTppLHBhcmVudDpuLGFwcENvbnRleHQ6YSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqb2I6bnVsbCxzY29wZTpuZXcgU2UoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6bj9uLnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoYS5wcm92aWRlcyksaWRzOm4/bi5pZHM6W2BgLDAsMF0sYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpfbyhpLGEpLGVtaXRzT3B0aW9uczpRYShpLGEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czp0LGluaGVyaXRBdHRyczppLmluaGVyaXRBdHRycyxjdHg6dCxkYXRhOnQscHJvcHM6dCxhdHRyczp0LHNsb3RzOnQscmVmczp0LHNldHVwU3RhdGU6dCxzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpyLHN1c3BlbnNlSWQ6cj9yLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIG8uY3R4PXtfOm99LG8ucm9vdD1uP24ucm9vdDpvLG8uZW1pdD1YYS5iaW5kKG51bGwsbyksZS5jZSYmZS5jZShvKSxvfXZhciBKPW51bGwsWT0oKT0+Snx8VSxPcyxrczt7bGV0IGU9b2UoKSx0PSh0LG4pPT57bGV0IHI7cmV0dXJuKHI9ZVt0XSl8fChyPWVbdF09W10pLHIucHVzaChuKSxlPT57ci5sZW5ndGg+MT9yLmZvckVhY2godD0+dChlKSk6clswXShlKX19O09zPXQoYF9fVlVFX0lOU1RBTkNFX1NFVFRFUlNfX2AsZT0+Sj1lKSxrcz10KGBfX1ZVRV9TU1JfU0VUVEVSU19fYCxlPT5Ocz1lKX12YXIgQXM9ZT0+e2xldCB0PUo7cmV0dXJuIE9zKGUpLGUuc2NvcGUub24oKSwoKT0+e2Uuc2NvcGUub2ZmKCksT3ModCl9fSxqcz0oKT0+e0omJkouc2NvcGUub2ZmKCksT3MobnVsbCl9O2Z1bmN0aW9uIE1zKGUpe3JldHVybiBlLnZub2RlLnNoYXBlRmxhZyY0fXZhciBOcz0hMTtmdW5jdGlvbiBQcyhlLHQ9ITEsbj0hMSl7dCYma3ModCk7bGV0e3Byb3BzOnIsY2hpbGRyZW46aX09ZS52bm9kZSxhPU1zKGUpO2ZvKGUscixhLHQpLFRvKGUsaSxufHx0KTtsZXQgbz1hP0ZzKGUsdCk6dm9pZCAwO3JldHVybiB0JiZrcyghMSksb31mdW5jdGlvbiBGcyhlLHQpe2xldCBuPWUudHlwZTtlLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksZS5wcm94eT1uZXcgUHJveHkoZS5jdHgsZmEpO2xldHtzZXR1cDpyfT1uO2lmKHIpe1dlKCk7bGV0IG49ZS5zZXR1cENvbnRleHQ9ci5sZW5ndGg+MT9VcyhlKTpudWxsLGk9QXMoZSksYT1BbihyLGUsMCxbZS5wcm9wcyxuXSksbz1iKGEpO2lmKEdlKCksaSgpLChvfHxlLnNwKSYmIUVpKGUpJiZYcihlKSxvKXtpZihhLnRoZW4oanMsanMpLHQpcmV0dXJuIGEudGhlbihuPT57a3MoITApO3RyeXtJcyhlLG4sdCl9ZmluYWxseXtrcyghMSl9fSkuY2F0Y2godD0+e01uKHQsZSwwKX0pO2UuYXN5bmNEZXA9YX1lbHNlIElzKGUsYSx0KX1lbHNlIFZzKGUsdCl9ZnVuY3Rpb24gSXMoZSx0LG4pe2codCk/ZS50eXBlLl9fc3NySW5saW5lUmVuZGVyP2Uuc3NyUmVuZGVyPXQ6ZS5yZW5kZXI9dDp5KHQpJiYoZS5zZXR1cFN0YXRlPWFuKHQpKSxWcyhlLG4pfXZhciBMcyxScztmdW5jdGlvbiB6cyhlKXtMcz1lLFJzPWU9PntlLnJlbmRlci5fcmMmJihlLndpdGhQcm94eT1uZXcgUHJveHkoZS5jdHgscGEpKX19dmFyIEJzPSgpPT4hTHM7ZnVuY3Rpb24gVnMoZSx0LG4pe2xldCBpPWUudHlwZTtpZighZS5yZW5kZXIpe2lmKCF0JiZMcyYmIWkucmVuZGVyKXtsZXQgdD1pLnRlbXBsYXRlfHxQYShlKS50ZW1wbGF0ZTtpZih0KXtsZXR7aXNDdXN0b21FbGVtZW50Om4sY29tcGlsZXJPcHRpb25zOnJ9PWUuYXBwQ29udGV4dC5jb25maWcse2RlbGltaXRlcnM6YSxjb21waWxlck9wdGlvbnM6b309aSxjPXMocyh7aXNDdXN0b21FbGVtZW50Om4sZGVsaW1pdGVyczphfSxyKSxvKTtpLnJlbmRlcj1Mcyh0LGMpfX1lLnJlbmRlcj1pLnJlbmRlcnx8cixScyYmUnMoZSl9e2xldCB0PUFzKGUpO1dlKCk7dHJ5e0FhKGUpfWZpbmFsbHl7R2UoKSx0KCl9fX12YXIgSHM9e2dldChlLHQpe3JldHVybiBCKGUsYGdldGAsYGApLGVbdF19fTtmdW5jdGlvbiBVcyhlKXtyZXR1cm57YXR0cnM6bmV3IFByb3h5KGUuYXR0cnMsSHMpLHNsb3RzOmUuc2xvdHMsZW1pdDplLmVtaXQsZXhwb3NlOnQ9PntlLmV4cG9zZWQ9dHx8e319fX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5leHBvc2VkP2UuZXhwb3NlUHJveHl8fD1uZXcgUHJveHkoYW4ocXQoZS5leHBvc2VkKSkse2dldCh0LG4pe2lmKG4gaW4gdClyZXR1cm4gdFtuXTtpZihuIGluIHVhKXJldHVybiB1YVtuXShlKX0saGFzKGUsdCl7cmV0dXJuIHQgaW4gZXx8dCBpbiB1YX19KTplLnByb3h5fWZ1bmN0aW9uIEdzKGUsdD0hMCl7cmV0dXJuIGcoZSk/ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lOmUubmFtZXx8dCYmZS5fX25hbWV9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIGcoZSkmJmBfX3ZjY09wdHNgaW4gZX12YXIgcXM9KGUsdCk9Pm1uKGUsdCxOcyk7ZnVuY3Rpb24gSnMoZSx0LG4pe3RyeXtpcygtMSk7bGV0IHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj09PTI/eSh0KSYmIWQodCk/Y3ModCk/cShlLG51bGwsW3RdKTpxKGUsdCk6cShlLG51bGwsdCk6KHI+Mz9uPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTpyPT09MyYmY3MobikmJihuPVtuXSkscShlLHQsbikpfWZpbmFsbHl7aXMoMSl9fWZ1bmN0aW9uIFlzKCl7fWZ1bmN0aW9uIFhzKGUsdCxuLHIpe2xldCBpPW5bcl07aWYoaSYmWnMoaSxlKSlyZXR1cm4gaTtsZXQgYT10KCk7cmV0dXJuIGEubWVtbz1lLnNsaWNlKCksYS5jYWNoZUluZGV4PXIsbltyXT1hfWZ1bmN0aW9uIFpzKGUsdCl7bGV0IG49ZS5tZW1vO2lmKG4ubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihqKG5bZV0sdFtlXSkpcmV0dXJuITE7cmV0dXJuIHJzPjAmJmVzJiZlcy5wdXNoKGUpLCEwfXZhciBRcz1gMy41LjQxYCwkcz1yLGVjPWtuLHRjPVhuLG5jPVFuLHJjPXtjcmVhdGVDb21wb25lbnRJbnN0YW5jZTpEcyxzZXR1cENvbXBvbmVudDpQcyxyZW5kZXJDb21wb25lbnRSb290OmVvLHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTplcixpc1ZOb2RlOmNzLG5vcm1hbGl6ZVZOb2RlOmJzLGdldENvbXBvbmVudFB1YmxpY0luc3RhbmNlOldzLGVuc3VyZVZhbGlkVk5vZGU6c2EscHVzaFdhcm5pbmdDb250ZXh0OlRuLHBvcFdhcm5pbmdDb250ZXh0OkVufSxpYz12b2lkIDAsYWM9dHlwZW9mIHdpbmRvdzxgdWAmJndpbmRvdy50cnVzdGVkVHlwZXM7aWYoYWMpdHJ5e2ljPWFjLmNyZWF0ZVBvbGljeShgdnVlYCx7Y3JlYXRlSFRNTDplPT5lfSl9Y2F0Y2h7fXZhciBvYz1pYz9lPT5pYy5jcmVhdGVIVE1MKGUpOmU9PmUsc2M9YGh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnYCxjYz1gaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTGAsbGM9dHlwZW9mIGRvY3VtZW50PGB1YD9kb2N1bWVudDpudWxsLHVjPWxjJiZsYy5jcmVhdGVFbGVtZW50KGB0ZW1wbGF0ZWApLGRjPXtpbnNlcnQ6KGUsdCxuKT0+e3QuaW5zZXJ0QmVmb3JlKGUsbnx8bnVsbCl9LHJlbW92ZTplPT57bGV0IHQ9ZS5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQoZSl9LGNyZWF0ZUVsZW1lbnQ6KGUsdCxuLHIpPT57bGV0IGk9dD09PWBzdmdgP2xjLmNyZWF0ZUVsZW1lbnROUyhzYyxlKTp0PT09YG1hdGhtbGA/bGMuY3JlYXRlRWxlbWVudE5TKGNjLGUpOm4/bGMuY3JlYXRlRWxlbWVudChlLHtpczpufSk6bGMuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZT09PWBzZWxlY3RgJiZyJiZyLm11bHRpcGxlIT1udWxsJiZpLnNldEF0dHJpYnV0ZShgbXVsdGlwbGVgLHIubXVsdGlwbGUpLGl9LGNyZWF0ZVRleHQ6ZT0+bGMuY3JlYXRlVGV4dE5vZGUoZSksY3JlYXRlQ29tbWVudDplPT5sYy5jcmVhdGVDb21tZW50KGUpLHNldFRleHQ6KGUsdCk9PntlLm5vZGVWYWx1ZT10fSxzZXRFbGVtZW50VGV4dDooZSx0KT0+e2UudGV4dENvbnRlbnQ9dH0scGFyZW50Tm9kZTplPT5lLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6ZT0+ZS5uZXh0U2libGluZyxxdWVyeVNlbGVjdG9yOmU9PmxjLnF1ZXJ5U2VsZWN0b3IoZSksc2V0U2NvcGVJZChlLHQpe2Uuc2V0QXR0cmlidXRlKHQsYGApfSxpbnNlcnRTdGF0aWNDb250ZW50KGUsdCxuLHIsaSxhKXtsZXQgbz1uP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkO2lmKGkmJihpPT09YXx8aS5uZXh0U2libGluZykpZm9yKDt0Lmluc2VydEJlZm9yZShpLmNsb25lTm9kZSghMCksbiksIShpPT09YXx8IShpPWkubmV4dFNpYmxpbmcpKTspO2Vsc2V7dWMuaW5uZXJIVE1MPW9jKHI9PT1gc3ZnYD9gPHN2Zz4ke2V9PC9zdmc+YDpyPT09YG1hdGhtbGA/YDxtYXRoPiR7ZX08L21hdGg+YDplKTtsZXQgaT11Yy5jb250ZW50O2lmKHI9PT1gc3ZnYHx8cj09PWBtYXRobWxgKXtsZXQgZT1pLmZpcnN0Q2hpbGQ7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWkuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtpLnJlbW92ZUNoaWxkKGUpfXQuaW5zZXJ0QmVmb3JlKGksbil9cmV0dXJuW28/by5uZXh0U2libGluZzp0LmZpcnN0Q2hpbGQsbj9uLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZF19fSxmYz1gdHJhbnNpdGlvbmAscGM9YGFuaW1hdGlvbmAsbWM9U3ltYm9sKGBfdnRjYCksaGM9e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LGdjPXMoe30sTHIsaGMpLF9jPShlPT4oZS5kaXNwbGF5TmFtZT1gVHJhbnNpdGlvbmAsZS5wcm9wcz1nYyxlKSkoKGUse3Nsb3RzOnR9KT0+SnMoVnIsYmMoZSksdCkpLHZjPShlLHQ9W10pPT57ZChlKT9lLmZvckVhY2goZT0+ZSguLi50KSk6ZSYmZSguLi50KX0seWM9ZT0+ZT9kKGUpP2Uuc29tZShlPT5lLmxlbmd0aD4xKTplLmxlbmd0aD4xOiExO2Z1bmN0aW9uIGJjKGUpe2xldCB0PXt9O2ZvcihsZXQgbiBpbiBlKW4gaW4gaGN8fCh0W25dPWVbbl0pO2lmKGUuY3NzPT09ITEpcmV0dXJuIHQ7bGV0e25hbWU6bj1gdmAsdHlwZTpyLGR1cmF0aW9uOmksZW50ZXJGcm9tQ2xhc3M6YT1gJHtufS1lbnRlci1mcm9tYCxlbnRlckFjdGl2ZUNsYXNzOm89YCR7bn0tZW50ZXItYWN0aXZlYCxlbnRlclRvQ2xhc3M6Yz1gJHtufS1lbnRlci10b2AsYXBwZWFyRnJvbUNsYXNzOmw9YSxhcHBlYXJBY3RpdmVDbGFzczp1PW8sYXBwZWFyVG9DbGFzczpkPWMsbGVhdmVGcm9tQ2xhc3M6Zj1gJHtufS1sZWF2ZS1mcm9tYCxsZWF2ZUFjdGl2ZUNsYXNzOnA9YCR7bn0tbGVhdmUtYWN0aXZlYCxsZWF2ZVRvQ2xhc3M6bT1gJHtufS1sZWF2ZS10b2B9PWUsaD14YyhpKSxnPWgmJmhbMF0sXz1oJiZoWzFdLHtvbkJlZm9yZUVudGVyOnYsb25FbnRlcjp5LG9uRW50ZXJDYW5jZWxsZWQ6YixvbkxlYXZlOngsb25MZWF2ZUNhbmNlbGxlZDpTLG9uQmVmb3JlQXBwZWFyOkM9dixvbkFwcGVhcjp3PXksb25BcHBlYXJDYW5jZWxsZWQ6VD1ifT10LEU9KGUsdCxuLHIpPT57ZS5fZW50ZXJDYW5jZWxsZWQ9cix3YyhlLHQ/ZDpjKSx3YyhlLHQ/dTpvKSxuJiZuKCl9LEQ9KGUsdCk9PntlLl9pc0xlYXZpbmc9ITEsd2MoZSxmKSx3YyhlLG0pLHdjKGUscCksdCYmdCgpfSxlZT1lPT4odCxuKT0+e2xldCBpPWU/dzp5LG89KCk9PkUodCxlLG4pO3ZjKGksW3Qsb10pLFRjKCgpPT57d2ModCxlP2w6YSksQ2ModCxlP2Q6YykseWMoaSl8fERjKHQscixnLG8pfSl9O3JldHVybiBzKHQse29uQmVmb3JlRW50ZXIoZSl7dmModixbZV0pLENjKGUsYSksQ2MoZSxvKX0sb25CZWZvcmVBcHBlYXIoZSl7dmMoQyxbZV0pLENjKGUsbCksQ2MoZSx1KX0sb25FbnRlcjplZSghMSksb25BcHBlYXI6ZWUoITApLG9uTGVhdmUoZSx0KXtlLl9pc0xlYXZpbmc9ITA7bGV0IG49KCk9PkQoZSx0KTtDYyhlLGYpLGUuX2VudGVyQ2FuY2VsbGVkPyhDYyhlLHApLGpjKGUpKTooamMoZSksQ2MoZSxwKSksVGMoKCk9PntlLl9pc0xlYXZpbmcmJih3YyhlLGYpLENjKGUsbSkseWMoeCl8fERjKGUscixfLG4pKX0pLHZjKHgsW2Usbl0pfSxvbkVudGVyQ2FuY2VsbGVkKGUpe0UoZSwhMSx2b2lkIDAsITApLHZjKGIsW2VdKX0sb25BcHBlYXJDYW5jZWxsZWQoZSl7RShlLCEwLHZvaWQgMCwhMCksdmMoVCxbZV0pfSxvbkxlYXZlQ2FuY2VsbGVkKGUpe0QoZSksdmMoUyxbZV0pfX0pfWZ1bmN0aW9uIHhjKGUpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYoeShlKSlyZXR1cm5bU2MoZS5lbnRlciksU2MoZS5sZWF2ZSldO3tsZXQgdD1TYyhlKTtyZXR1cm5bdCx0XX19ZnVuY3Rpb24gU2MoZSl7cmV0dXJuIGllKGUpfWZ1bmN0aW9uIENjKGUsdCl7dC5zcGxpdCgvXHMrLykuZm9yRWFjaCh0PT50JiZlLmNsYXNzTGlzdC5hZGQodCkpLChlW21jXXx8KGVbbWNdPW5ldyBTZXQpKS5hZGQodCl9ZnVuY3Rpb24gd2MoZSx0KXt0LnNwbGl0KC9ccysvKS5mb3JFYWNoKHQ9PnQmJmUuY2xhc3NMaXN0LnJlbW92ZSh0KSk7bGV0IG49ZVttY107biYmKG4uZGVsZXRlKHQpLG4uc2l6ZXx8KGVbbWNdPXZvaWQgMCkpfWZ1bmN0aW9uIFRjKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShlKX0pfXZhciBFYz0wO2Z1bmN0aW9uIERjKGUsdCxuLHIpe2xldCBpPWUuX2VuZElkPSsrRWMsYT0oKT0+e2k9PT1lLl9lbmRJZCYmcigpfTtpZihuIT1udWxsKXJldHVybiBzZXRUaW1lb3V0KGEsbik7bGV0e3R5cGU6byx0aW1lb3V0OnMscHJvcENvdW50OmN9PU9jKGUsdCk7aWYoIW8pcmV0dXJuIHIoKTtsZXQgbD1vK2BlbmRgLHU9MCxkPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGwsZiksYSgpfSxmPXQ9Pnt0LnRhcmdldD09PWUmJisrdT49YyYmZCgpfTtzZXRUaW1lb3V0KCgpPT57dTxjJiZkKCl9LHMrMSksZS5hZGRFdmVudExpc3RlbmVyKGwsZil9ZnVuY3Rpb24gT2MoZSx0KXtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSxyPWU9PihuW2VdfHxgYCkuc3BsaXQoYCwgYCksaT1yKGAke2ZjfURlbGF5YCksYT1yKGAke2ZjfUR1cmF0aW9uYCksbz1rYyhpLGEpLHM9cihgJHtwY31EZWxheWApLGM9cihgJHtwY31EdXJhdGlvbmApLGw9a2MocyxjKSx1PW51bGwsZD0wLGY9MDt0PT09ZmM/bz4wJiYodT1mYyxkPW8sZj1hLmxlbmd0aCk6dD09PXBjP2w+MCYmKHU9cGMsZD1sLGY9Yy5sZW5ndGgpOihkPU1hdGgubWF4KG8sbCksdT1kPjA/bz5sP2ZjOnBjOm51bGwsZj11P3U9PT1mYz9hLmxlbmd0aDpjLmxlbmd0aDowKTtsZXQgcD11PT09ZmMmJi9cYig/OnRyYW5zZm9ybXxhbGwpKD86LHwkKS8udGVzdChyKGAke2ZjfVByb3BlcnR5YCkudG9TdHJpbmcoKSk7cmV0dXJue3R5cGU6dSx0aW1lb3V0OmQscHJvcENvdW50OmYsaGFzVHJhbnNmb3JtOnB9fWZ1bmN0aW9uIGtjKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXgoLi4udC5tYXAoKHQsbik9PkFjKHQpK0FjKGVbbl0pKSl9ZnVuY3Rpb24gQWMoZSl7cmV0dXJuIGU9PT1gYXV0b2A/MDpOdW1iZXIoZS5zbGljZSgwLC0xKS5yZXBsYWNlKGAsYCxgLmApKSoxZTN9ZnVuY3Rpb24gamMoZSl7cmV0dXJuKGU/ZS5vd25lckRvY3VtZW50OmRvY3VtZW50KS5ib2R5Lm9mZnNldEhlaWdodH1mdW5jdGlvbiBNYyhlLHQsbil7bGV0IHI9ZVttY107ciYmKHQ9KHQ/W3QsLi4ucl06Wy4uLnJdKS5qb2luKGAgYCkpLHQ9PW51bGw/ZS5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6bj9lLnNldEF0dHJpYnV0ZShgY2xhc3NgLHQpOmUuY2xhc3NOYW1lPXR9dmFyIE5jPVN5bWJvbChgX3ZvZGApLFBjPVN5bWJvbChgX3ZzaGApLEZjPXtuYW1lOmBzaG93YCxiZWZvcmVNb3VudChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7ZVtOY109ZS5zdHlsZS5kaXNwbGF5PT09YG5vbmVgP2BgOmUuc3R5bGUuZGlzcGxheSxuJiZ0P24uYmVmb3JlRW50ZXIoZSk6SWMoZSx0KX0sbW91bnRlZChlLHt2YWx1ZTp0fSx7dHJhbnNpdGlvbjpufSl7biYmdCYmbi5lbnRlcihlKX0sdXBkYXRlZChlLHt2YWx1ZTp0LG9sZFZhbHVlOm59LHt0cmFuc2l0aW9uOnJ9KXshdCE9IW4mJihyP3Q/KHIuYmVmb3JlRW50ZXIoZSksSWMoZSwhMCksci5lbnRlcihlKSk6ci5sZWF2ZShlLCgpPT57SWMoZSwhMSl9KTpJYyhlLHQpKX0sYmVmb3JlVW5tb3VudChlLHt2YWx1ZTp0fSl7SWMoZSx0KX19O2Z1bmN0aW9uIEljKGUsdCl7ZS5zdHlsZS5kaXNwbGF5PXQ/ZVtOY106YG5vbmVgLGVbUGNdPSF0fWZ1bmN0aW9uIExjKCl7RmMuZ2V0U1NSUHJvcHM9KHt2YWx1ZTplfSk9PntpZighZSlyZXR1cm57c3R5bGU6e2Rpc3BsYXk6YG5vbmVgfX19fXZhciBSYz1TeW1ib2woYGApO2Z1bmN0aW9uIHpjKGUpe2xldCB0PVkoKTtpZighdClyZXR1cm47bGV0IG49dC51dD0obj1lKHQucHJveHkpKT0+e0FycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtdi1vd25lcj0iJHt0LnVpZH0iXWApKS5mb3JFYWNoKGU9PlZjKGUsbikpfSxpPSgpPT57bGV0IHI9ZSh0LnByb3h5KTt0LmNlP1ZjKHQuY2Uscik6QmModC5zdWJUcmVlLHIpLG4ocil9O0hpKCgpPT57R24oaSl9KSxWaSgoKT0+e2hyKGkscix7Zmx1c2g6YHBvc3RgfSk7bGV0IGU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoaSk7ZS5vYnNlcnZlKHQuc3ViVHJlZS5lbC5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSxHaSgoKT0+ZS5kaXNjb25uZWN0KCkpfSl9ZnVuY3Rpb24gQmMoZSx0KXtpZihlLnNoYXBlRmxhZyYxMjgpe2xldCBuPWUuc3VzcGVuc2U7ZT1uLmFjdGl2ZUJyYW5jaCxuLnBlbmRpbmdCcmFuY2gmJiFuLmlzSHlkcmF0aW5nJiZuLmVmZmVjdHMucHVzaCgoKT0+e0JjKG4uYWN0aXZlQnJhbmNoLHQpfSl9Zm9yKDtlLmNvbXBvbmVudDspZT1lLmNvbXBvbmVudC5zdWJUcmVlO2lmKGUuc2hhcGVGbGFnJjEmJmUuZWwpVmMoZS5lbCx0KTtlbHNlIGlmKGUudHlwZT09PUcpZS5jaGlsZHJlbi5mb3JFYWNoKGU9PkJjKGUsdCkpO2Vsc2UgaWYoZS50eXBlPT09UW8pe2xldHtlbDpuLGFuY2hvcjpyfT1lO2Zvcig7biYmKFZjKG4sdCksbiE9PXIpOyluPW4ubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIFZjKGUsdCl7aWYoZS5ub2RlVHlwZT09PTEpe2xldCBuPWUuc3R5bGUscj1gYDtmb3IobGV0IGUgaW4gdCl7bGV0IGk9eGUodFtlXSk7bi5zZXRQcm9wZXJ0eShgLS0ke2V9YCxpKSxyKz1gLS0ke2V9OiAke2l9O2B9bltSY109cn19dmFyIEhjPS8oPzpefDspXHMqZGlzcGxheVxzKjovO2Z1bmN0aW9uIFVjKGUsdCxuKXtsZXQgcj1lLnN0eWxlLGk9XyhuKSxhPSExO2lmKG4mJiFpKXtpZih0KXtpZihfKHQpKWZvcihsZXQgZSBvZiB0LnNwbGl0KGA7YCkpe2xldCB0PWUuc2xpY2UoMCxlLmluZGV4T2YoYDpgKSkudHJpbSgpO25bdF0/P0djKHIsdCxgYCl9ZWxzZSBmb3IobGV0IGUgaW4gdCluW2VdPz9HYyhyLGUsYGApfWZvcihsZXQgaSBpbiBuKXtpPT09YGRpc3BsYXlgJiYoYT0hMCk7bGV0IG89bltpXTtvPT1udWxsP0djKHIsaSxgYCk6WWMoZSxpLCFfKHQpJiZ0P3RbaV06dm9pZCAwLG8pfHxHYyhyLGksbyl9fWVsc2UgaWYoaSl7aWYodCE9PW4pe2xldCBlPXJbUmNdO2UmJihuKz1gO2ArZSksci5jc3NUZXh0PW4sYT1IYy50ZXN0KG4pfX1lbHNlIHQmJmUucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApO05jIGluIGUmJihlW05jXT1hP3IuZGlzcGxheTpgYCxlW1BjXSYmKHIuZGlzcGxheT1gbm9uZWApKX12YXIgV2M9L1xzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBHYyhlLHQsbil7aWYoZChuKSluLmZvckVhY2gobj0+R2MoZSx0LG4pKTtlbHNlIGlmKG4/Pz1gYCx0LnN0YXJ0c1dpdGgoYC0tYCkpZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7bGV0IHI9SmMoZSx0KTtXYy50ZXN0KG4pP2Uuc2V0UHJvcGVydHkoayhyKSxuLnJlcGxhY2UoV2MsYGApLGBpbXBvcnRhbnRgKTplW3JdPW59fXZhciBLYz1bYFdlYmtpdGAsYE1vemAsYG1zYF0scWM9e307ZnVuY3Rpb24gSmMoZSx0KXtsZXQgbj1xY1t0XTtpZihuKXJldHVybiBuO2xldCByPU8odCk7aWYociE9PWBmaWx0ZXJgJiZyIGluIGUpcmV0dXJuIHFjW3RdPXI7cj1BKHIpO2ZvcihsZXQgbj0wO248S2MubGVuZ3RoO24rKyl7bGV0IGk9S2Nbbl0rcjtpZihpIGluIGUpcmV0dXJuIHFjW3RdPWl9cmV0dXJuIHR9ZnVuY3Rpb24gWWMoZSx0LG4scil7cmV0dXJuIGUudGFnTmFtZT09PWBURVhUQVJFQWAmJih0PT09YHdpZHRoYHx8dD09PWBoZWlnaHRgKSYmXyhyKSYmbj09PXJ9dmFyIFhjPWBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYDtmdW5jdGlvbiBaYyhlLHQsbixyLGksYT1mZSh0KSl7ciYmdC5zdGFydHNXaXRoKGB4bGluazpgKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMoWGMsdC5zbGljZSg2LHQubGVuZ3RoKSk6ZS5zZXRBdHRyaWJ1dGVOUyhYYyx0LG4pOm49PW51bGx8fGEmJiFwZShuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LGE/YGA6dihuKT9TdHJpbmcobik6bil9ZnVuY3Rpb24gUWMoZSx0LG4scixpKXtpZih0PT09YGlubmVySFRNTGB8fHQ9PT1gdGV4dENvbnRlbnRgKXtuIT1udWxsJiYoZVt0XT10PT09YGlubmVySFRNTGA/b2Mobik6bik7cmV0dXJufWxldCBhPWUudGFnTmFtZTtpZih0PT09YHZhbHVlYCYmYSE9PWBQUk9HUkVTU2AmJiFhLmluY2x1ZGVzKGAtYCkpe2xldCByPWE9PT1gT1BUSU9OYD9lLmdldEF0dHJpYnV0ZShgdmFsdWVgKXx8YGA6ZS52YWx1ZSxpPW49PW51bGw/ZS50eXBlPT09YGNoZWNrYm94YD9gb25gOmBgOlN0cmluZyhuKTsociE9PWl8fCEoYF92YWx1ZWBpbiBlKSkmJihlLnZhbHVlPWkpLG4/P2UucmVtb3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT1gYHx8bj09bnVsbCl7bGV0IHI9dHlwZW9mIGVbdF07cj09PWBib29sZWFuYD9uPXBlKG4pOm49PW51bGwmJnI9PT1gc3RyaW5nYD8obj1gYCxvPSEwKTpyPT09YG51bWJlcmAmJihuPTAsbz0hMCl9dHJ5e2VbdF09bn1jYXRjaHt9byYmZS5yZW1vdmVBdHRyaWJ1dGUoaXx8dCl9ZnVuY3Rpb24gJGMoZSx0LG4scil7ZS5hZGRFdmVudExpc3RlbmVyKHQsbixyKX1mdW5jdGlvbiBlbChlLHQsbixyKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpfXZhciB0bD1TeW1ib2woYF92ZWlgKTtmdW5jdGlvbiBubChlLHQsbixyLGk9bnVsbCl7bGV0IGE9ZVt0bF18fChlW3RsXT17fSksbz1hW3RdO2lmKHImJm8pby52YWx1ZT1yO2Vsc2V7bGV0W24sc109YWwodCk7cj8kYyhlLG4sYVt0XT1sbChyLGkpLHMpOm8mJihlbChlLG4sbyxzKSxhW3RdPXZvaWQgMCl9fXZhciBybD0vKE9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvLGlsPS9eb246Pyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIGFsKGUpe2xldCB0LG47Zm9yKDsobj1lLm1hdGNoKHJsKSkmJiFpbC50ZXN0KGUpOyl0fHw9e30sZT1lLnNsaWNlKDAsZS5sZW5ndGgtblsxXS5sZW5ndGgpLHRbblsxXS50b0xvd2VyQ2FzZSgpXT0hMDtyZXR1cm5bZVsyXT09PWA6YD9lLnNsaWNlKDMpOmsoZS5zbGljZSgyKSksdF19dmFyIG9sPTAsc2w9UHJvbWlzZS5yZXNvbHZlKCksY2w9KCk9Pm9sfHw9KHNsLnRoZW4oKCk9Pm9sPTApLERhdGUubm93KCkpO2Z1bmN0aW9uIGxsKGUsdCl7bGV0IG49ZT0+e2lmKCFlLl92dHMpZS5fdnRzPURhdGUubm93KCk7ZWxzZSBpZihlLl92dHM8PW4uYXR0YWNoZWQpcmV0dXJuO2xldCByPW4udmFsdWU7aWYoZChyKSl7bGV0IG49ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249KCk9PntuLmNhbGwoZSksZS5fc3RvcHBlZD0hMH07bGV0IGk9ci5zbGljZSgpLGE9W2VdO2ZvcihsZXQgbj0wO248aS5sZW5ndGgmJiFlLl9zdG9wcGVkO24rKyl7bGV0IGU9aVtuXTtlJiZqbihlLHQsNSxhKX19ZWxzZSBqbihyLHQsNSxbZV0pfTtyZXR1cm4gbi52YWx1ZT1lLG4uYXR0YWNoZWQ9Y2woKSxufXZhciB1bD1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmZS5jaGFyQ29kZUF0KDIpPjk2JiZlLmNoYXJDb2RlQXQoMik8MTIzLGRsPShlLHQsbixyLGkscyk9PntsZXQgYz1pPT09YHN2Z2A7dD09PWBjbGFzc2A/TWMoZSxyLGMpOnQ9PT1gc3R5bGVgP1VjKGUsbixyKTphKHQpP28odCl8fG5sKGUsdCxuLHIscyk6KHRbMF09PT1gLmA/KHQ9dC5zbGljZSgxKSwhMCk6dFswXT09PWBeYD8odD10LnNsaWNlKDEpLCExKTpmbChlLHQscixjKSk/KFFjKGUsdCxyKSwhZS50YWdOYW1lLmluY2x1ZGVzKGAtYCkmJih0PT09YHZhbHVlYHx8dD09PWBjaGVja2VkYHx8dD09PWBzZWxlY3RlZGApJiZaYyhlLHQscixjLHMsdCE9PWB2YWx1ZWApKTplLl9pc1Z1ZUNFJiYocGwoZSx0KXx8ZS5fZGVmLl9fYXN5bmNMb2FkZXImJigvW0EtWl0vLnRlc3QodCl8fCFfKHIpKSk/UWMoZSxPKHQpLHIscyx0KToodD09PWB0cnVlLXZhbHVlYD9lLl90cnVlVmFsdWU9cjp0PT09YGZhbHNlLXZhbHVlYCYmKGUuX2ZhbHNlVmFsdWU9ciksWmMoZSx0LHIsYykpfTtmdW5jdGlvbiBmbChlLHQsbixyKXtpZihyKXJldHVybiEhKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGB8fHQgaW4gZSYmdWwodCkmJmcobikpO2lmKHQ9PT1gc3BlbGxjaGVja2B8fHQ9PT1gZHJhZ2dhYmxlYHx8dD09PWB0cmFuc2xhdGVgfHx0PT09YGF1dG9jb3JyZWN0YHx8dD09PWBzYW5kYm94YCYmZS50YWdOYW1lPT09YElGUkFNRWB8fHQ9PT1gZm9ybWB8fHQ9PT1gbGlzdGAmJmUudGFnTmFtZT09PWBJTlBVVGB8fHQ9PT1gdHlwZWAmJmUudGFnTmFtZT09PWBURVhUQVJFQWApcmV0dXJuITE7aWYodD09PWB3aWR0aGB8fHQ9PT1gaGVpZ2h0YCl7bGV0IHQ9ZS50YWdOYW1lO2lmKHQ9PT1gSU1HYHx8dD09PWBWSURFT2B8fHQ9PT1gQ0FOVkFTYHx8dD09PWBTT1VSQ0VgKXJldHVybiExfXJldHVybiB1bCh0KSYmXyhuKT8hMTp0IGluIGV9ZnVuY3Rpb24gcGwoZSx0KXtsZXQgbj1lLl9kZWYucHJvcHM7aWYoIW4pcmV0dXJuITE7bGV0IHI9Tyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLnNvbWUoZT0+TyhlKT09PXIpOk9iamVjdC5rZXlzKG4pLnNvbWUoZT0+TyhlKT09PXIpfXZhciBtbD17fTtmdW5jdGlvbiBobChlLHQsbil7bGV0IHI9SnIoZSx0KTt3KHIpJiYocj1zKHt9LHIsdCkpO2NsYXNzIGkgZXh0ZW5kcyB2bHtjb25zdHJ1Y3RvcihlKXtzdXBlcihyLGUsbil9fXJldHVybiBpLmRlZj1yLGl9dmFyIGdsPSgoZSx0KT0+aGwoZSx0LGx1KSksX2w9dHlwZW9mIEhUTUxFbGVtZW50PGB1YD9IVE1MRWxlbWVudDpjbGFzc3t9LHZsPWNsYXNzIGUgZXh0ZW5kcyBfbHtjb25zdHJ1Y3RvcihlLHQ9e30sbj1jdSl7c3VwZXIoKSx0aGlzLl9kZWY9ZSx0aGlzLl9wcm9wcz10LHRoaXMuX2NyZWF0ZUFwcD1uLHRoaXMuX2lzVnVlQ0U9ITAsdGhpcy5faW5zdGFuY2U9bnVsbCx0aGlzLl9hcHA9bnVsbCx0aGlzLl9ub25jZT10aGlzLl9kZWYubm9uY2UsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3Jlc29sdmVkPSExLHRoaXMuX3BhdGNoaW5nPSExLHRoaXMuX2RpcnR5PSExLHRoaXMuX251bWJlclByb3BzPW51bGwsdGhpcy5fc3R5bGVDaGlsZHJlbj1uZXcgV2Vha1NldCx0aGlzLl9zdHlsZUFuY2hvcnM9bmV3IFdlYWtNYXAsdGhpcy5fb2I9bnVsbCx0aGlzLnNoYWRvd1Jvb3QmJm4hPT1jdT90aGlzLl9yb290PXRoaXMuc2hhZG93Um9vdDplLnNoYWRvd1Jvb3Q9PT0hMT90aGlzLl9yb290PXRoaXM6KHRoaXMuYXR0YWNoU2hhZG93KHMoe30sZS5zaGFkb3dSb290T3B0aW9ucyx7bW9kZTpgb3BlbmB9KSksdGhpcy5fcm9vdD10aGlzLnNoYWRvd1Jvb3QpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoIXRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuOyF0aGlzLnNoYWRvd1Jvb3QmJiF0aGlzLl9yZXNvbHZlZCYmdGhpcy5fcGFyc2VTbG90cygpLHRoaXMuX2Nvbm5lY3RlZD0hMDtsZXQgdD10aGlzO2Zvcig7dCYmPXQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGV8fHQuaG9zdDspaWYodCBpbnN0YW5jZW9mIGUpe3RoaXMuX3BhcmVudD10O2JyZWFrfXRoaXMuX2luc3RhbmNlfHwodGhpcy5fcmVzb2x2ZWQ/dGhpcy5fbW91bnQodGhpcy5fZGVmKTp0JiZ0Ll9wZW5kaW5nUmVzb2x2ZT90aGlzLl9wZW5kaW5nUmVzb2x2ZT10Ll9wZW5kaW5nUmVzb2x2ZS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ1Jlc29sdmU9dm9pZCAwLHRoaXMuaXNDb25uZWN0ZWQpcmV0dXJuIHRoaXMuX3Jlc29sdmVEZWYoKX0pOnRoaXMuX3Jlc29sdmVEZWYoKSl9X3NldFBhcmVudChlPXRoaXMuX3BhcmVudCl7ZSYmKHRoaXMuX2luc3RhbmNlLnBhcmVudD1lLl9pbnN0YW5jZSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dChlKSl9X2luaGVyaXRQYXJlbnRDb250ZXh0KGU9dGhpcy5fcGFyZW50KXtlJiZ0aGlzLl9hcHAmJk9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLl9hcHAuX2NvbnRleHQucHJvdmlkZXMsZS5faW5zdGFuY2UucHJvdmlkZXMpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fY29ubmVjdGVkPSExLFZuKCgpPT57dGhpcy5fY29ubmVjdGVkfHwodGhpcy5fb2ImJj0odGhpcy5fb2IuZGlzY29ubmVjdCgpLG51bGwpLHRoaXMuX2FwcCYmdGhpcy5fYXBwLnVubW91bnQoKSx0aGlzLl9pbnN0YW5jZSYmKHRoaXMuX2luc3RhbmNlLmNlPXZvaWQgMCksdGhpcy5fYXBwPXRoaXMuX2luc3RhbmNlPW51bGwsdGhpcy5fdGVsZXBvcnRUYXJnZXRzJiY9KHRoaXMuX3RlbGVwb3J0VGFyZ2V0cy5jbGVhcigpLHZvaWQgMCkpfSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7Zm9yKGxldCB0IG9mIGUpdGhpcy5fc2V0QXR0cih0LmF0dHJpYnV0ZU5hbWUpfV9yZXNvbHZlRGVmKCl7aWYodGhpcy5fcGVuZGluZ1Jlc29sdmUpcmV0dXJuIHRoaXMuX3BlbmRpbmdSZXNvbHZlO2ZvcihsZXQgZT0wO2U8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtlKyspdGhpcy5fc2V0QXR0cih0aGlzLmF0dHJpYnV0ZXNbZV0ubmFtZSk7dGhpcy5fb2I9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fcHJvY2Vzc011dGF0aW9ucy5iaW5kKHRoaXMpKSx0aGlzLl9vYi5vYnNlcnZlKHRoaXMse2F0dHJpYnV0ZXM6ITB9KTtsZXQgZT0oZSx0PSExKT0+e3RoaXMuX3Jlc29sdmVkPSEwLHRoaXMuX3BlbmRpbmdSZXNvbHZlPXZvaWQgMDtsZXR7cHJvcHM6bixzdHlsZXM6cn09ZSxpO2lmKG4mJiFkKG4pKWZvcihsZXQgZSBpbiBuKXtsZXQgdD1uW2VdOyh0PT09TnVtYmVyfHx0JiZ0LnR5cGU9PT1OdW1iZXIpJiYoZSBpbiB0aGlzLl9wcm9wcyYmKHRoaXMuX3Byb3BzW2VdPWllKHRoaXMuX3Byb3BzW2VdKSksKGl8fD1PYmplY3QuY3JlYXRlKG51bGwpKVtPKGUpXT0hMCl9dGhpcy5fbnVtYmVyUHJvcHM9aSx0aGlzLl9yZXNvbHZlUHJvcHMoZSksdGhpcy5zaGFkb3dSb290JiZ0aGlzLl9hcHBseVN0eWxlcyhyKSx0aGlzLl9tb3VudChlKX0sdD10aGlzLl9kZWYuX19hc3luY0xvYWRlcjtpZih0KXJldHVybiB0aGlzLl9wZW5kaW5nUmVzb2x2ZT10KCkudGhlbih0PT57dC5jb25maWd1cmVBcHA9dGhpcy5fZGVmLmNvbmZpZ3VyZUFwcCxlKHRoaXMuX2RlZj10LCEwKX0pLHRoaXMuX3BlbmRpbmdSZXNvbHZlO2UodGhpcy5fZGVmKX1fbW91bnQoZSl7dGhpcy5fYXBwPXRoaXMuX2NyZWF0ZUFwcChlKSx0aGlzLl9pbmhlcml0UGFyZW50Q29udGV4dCgpLGUuY29uZmlndXJlQXBwJiZlLmNvbmZpZ3VyZUFwcCh0aGlzLl9hcHApLHRoaXMuX2FwcC5fY2VWTm9kZT10aGlzLl9jcmVhdGVWTm9kZSgpLHRoaXMuX2FwcC5tb3VudCh0aGlzLl9yb290KTtsZXQgdD10aGlzLl9pbnN0YW5jZSYmdGhpcy5faW5zdGFuY2UuZXhwb3NlZDtpZih0KWZvcihsZXQgZSBpbiB0KXUodGhpcyxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7Z2V0OigpPT50bih0W2VdKX0pfV9yZXNvbHZlUHJvcHMoZSl7bGV0e3Byb3BzOnR9PWUsbj1kKHQpP3Q6T2JqZWN0LmtleXModHx8e30pO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0aGlzKSllWzBdIT09YF9gJiZuLmluY2x1ZGVzKGUpJiZ0aGlzLl9zZXRQcm9wKGUsdGhpc1tlXSk7Zm9yKGxldCBlIG9mIG4ubWFwKE8pKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2dldCgpe3JldHVybiB0aGlzLl9nZXRQcm9wKGUpfSxzZXQodCl7dGhpcy5fc2V0UHJvcChlLHQsITAsIXRoaXMuX3BhdGNoaW5nKX19KX1fc2V0QXR0cihlKXtpZihlLnN0YXJ0c1dpdGgoYGRhdGEtdi1gKSlyZXR1cm47bGV0IHQ9dGhpcy5oYXNBdHRyaWJ1dGUoZSksbj10P3RoaXMuZ2V0QXR0cmlidXRlKGUpOm1sLHI9TyhlKTt0JiZ0aGlzLl9udW1iZXJQcm9wcyYmdGhpcy5fbnVtYmVyUHJvcHNbcl0mJihuPWllKG4pKSx0aGlzLl9zZXRQcm9wKHIsbiwhMSwhMCl9X2dldFByb3AoZSl7cmV0dXJuIHRoaXMuX3Byb3BzW2VdfV9zZXRQcm9wKGUsdCxuPSEwLHI9ITEpe2lmKHQhPT10aGlzLl9wcm9wc1tlXSYmKHRoaXMuX2RpcnR5PSEwLHQ9PT1tbD9kZWxldGUgdGhpcy5fcHJvcHNbZV06KHRoaXMuX3Byb3BzW2VdPXQsZT09PWBrZXlgJiZ0aGlzLl9hcHAmJih0aGlzLl9hcHAuX2NlVk5vZGUua2V5PXQpKSxyJiZ0aGlzLl9pbnN0YW5jZSYmdGhpcy5fdXBkYXRlKCksbikpe2xldCBuPXRoaXMuX29iO24mJih0aGlzLl9wcm9jZXNzTXV0YXRpb25zKG4udGFrZVJlY29yZHMoKSksbi5kaXNjb25uZWN0KCkpLHQ9PT0hMD90aGlzLnNldEF0dHJpYnV0ZShrKGUpLGBgKTp0eXBlb2YgdD09YHN0cmluZ2B8fHR5cGVvZiB0PT1gbnVtYmVyYD90aGlzLnNldEF0dHJpYnV0ZShrKGUpLHQrYGApOnR8fHRoaXMucmVtb3ZlQXR0cmlidXRlKGsoZSkpLG4mJm4ub2JzZXJ2ZSh0aGlzLHthdHRyaWJ1dGVzOiEwfSl9fV91cGRhdGUoKXtsZXQgZT10aGlzLl9jcmVhdGVWTm9kZSgpO3RoaXMuX2FwcCYmKGUuYXBwQ29udGV4dD10aGlzLl9hcHAuX2NvbnRleHQpLG91KGUsdGhpcy5fcm9vdCl9X2NyZWF0ZVZOb2RlKCl7bGV0IGU9e307dGhpcy5zaGFkb3dSb290fHwoZS5vblZub2RlTW91bnRlZD1lLm9uVm5vZGVVcGRhdGVkPXRoaXMuX3JlbmRlclNsb3RzLmJpbmQodGhpcykpO2xldCB0PXEodGhpcy5fZGVmLHMoZSx0aGlzLl9wcm9wcykpO3JldHVybiB0aGlzLl9pbnN0YW5jZXx8KHQuY2U9ZT0+e3RoaXMuX2luc3RhbmNlPWUsZS5jZT10aGlzLGUuaXNDRT0hMDtsZXQgdD0oZSx0KT0+e3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZSx3KHRbMF0pP3Moe2RldGFpbDp0fSx0WzBdKTp7ZGV0YWlsOnR9KSl9O2UuZW1pdD0oZSwuLi5uKT0+e3QoZSxuKSxrKGUpIT09ZSYmdChrKGUpLG4pfSx0aGlzLl9zZXRQYXJlbnQoKX0pLHR9X2FwcGx5U3R5bGVzKGUsdCxuKXtpZighZSlyZXR1cm47aWYodCl7aWYodD09PXRoaXMuX2RlZnx8dGhpcy5fc3R5bGVDaGlsZHJlbi5oYXModCkpcmV0dXJuO3RoaXMuX3N0eWxlQ2hpbGRyZW4uYWRkKHQpfWxldCByPXRoaXMuX25vbmNlLGk9dGhpcy5zaGFkb3dSb290LGE9bj90aGlzLl9nZXRTdHlsZUFuY2hvcihuKXx8dGhpcy5fZ2V0U3R5bGVBbmNob3IodGhpcy5fZGVmKTp0aGlzLl9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoaSksbz1udWxsO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3ImJmMuc2V0QXR0cmlidXRlKGBub25jZWAsciksYy50ZXh0Q29udGVudD1lW3NdLGkuaW5zZXJ0QmVmb3JlKGMsb3x8YSksbz1jLHM9PT0wJiYobnx8dGhpcy5fc3R5bGVBbmNob3JzLnNldCh0aGlzLl9kZWYsYyksdCYmdGhpcy5fc3R5bGVBbmNob3JzLnNldCh0LGMpKX19X2dldFN0eWxlQW5jaG9yKGUpe2lmKCFlKXJldHVybiBudWxsO2xldCB0PXRoaXMuX3N0eWxlQW5jaG9ycy5nZXQoZSk7cmV0dXJuIHQmJnQucGFyZW50Tm9kZT09PXRoaXMuc2hhZG93Um9vdD90Oih0JiZ0aGlzLl9zdHlsZUFuY2hvcnMuZGVsZXRlKGUpLG51bGwpfV9nZXRSb290U3R5bGVJbnNlcnRpb25BbmNob3IoZSl7Zm9yKGxldCB0PTA7dDxlLmNoaWxkTm9kZXMubGVuZ3RoO3QrKyl7bGV0IG49ZS5jaGlsZE5vZGVzW3RdO2lmKCEobiBpbnN0YW5jZW9mIEhUTUxTdHlsZUVsZW1lbnQpKXJldHVybiBufXJldHVybiBudWxsfV9wYXJzZVNsb3RzKCl7bGV0IGU9dGhpcy5fc2xvdHM9e30sdDtmb3IoO3Q9dGhpcy5maXJzdENoaWxkOyl7bGV0IG49dC5ub2RlVHlwZT09PTEmJnQuZ2V0QXR0cmlidXRlKGBzbG90YCl8fGBkZWZhdWx0YDsoZVtuXXx8KGVbbl09W10pKS5wdXNoKHQpLHRoaXMucmVtb3ZlQ2hpbGQodCl9fV9yZW5kZXJTbG90cygpe2xldCBlPXRoaXMuX2dldFNsb3RzKCksdD10aGlzLl9pbnN0YW5jZS50eXBlLl9fc2NvcGVJZDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPXIuZ2V0QXR0cmlidXRlKGBuYW1lYCl8fGBkZWZhdWx0YCxhPXRoaXMuX3Nsb3RzW2ldLG89ci5wYXJlbnROb2RlO2lmKGEpZm9yKGxldCBlIG9mIGEpe2lmKHQmJmUubm9kZVR5cGU9PT0xKXtsZXQgbj10K2Atc2Ascj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsMSk7ZS5zZXRBdHRyaWJ1dGUobixgYCk7bGV0IGk7Zm9yKDtpPXIubmV4dE5vZGUoKTspaS5zZXRBdHRyaWJ1dGUobixgYCl9by5pbnNlcnRCZWZvcmUoZSxyKX1lbHNlIGZvcig7ci5maXJzdENoaWxkOylvLmluc2VydEJlZm9yZShyLmZpcnN0Q2hpbGQscik7by5yZW1vdmVDaGlsZChyKX19X2dldFNsb3RzKCl7bGV0IGU9W3RoaXNdO3RoaXMuX3RlbGVwb3J0VGFyZ2V0cyYmZS5wdXNoKC4uLnRoaXMuX3RlbGVwb3J0VGFyZ2V0cyk7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgZSl7bGV0IGU9bi5xdWVyeVNlbGVjdG9yQWxsKGBzbG90YCk7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdC5hZGQoZVtuXSl9cmV0dXJuIEFycmF5LmZyb20odCl9X2luamVjdENoaWxkU3R5bGUoZSx0KXt0aGlzLl9hcHBseVN0eWxlcyhlLnN0eWxlcyxlLHQpfV9iZWdpblBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITAsdGhpcy5fZGlydHk9ITF9X2VuZFBhdGNoKCl7dGhpcy5fcGF0Y2hpbmc9ITEsdGhpcy5fZGlydHkmJnRoaXMuX2luc3RhbmNlJiZ0aGlzLl91cGRhdGUoKX1faGFzU2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9kZWYuc2hhZG93Um9vdCE9PSExfV9yZW1vdmVDaGlsZFN0eWxlKGUpe319O2Z1bmN0aW9uIHlsKGUpe2xldCB0PVkoKTtyZXR1cm4gdCYmdC5jZXx8bnVsbH1mdW5jdGlvbiBibCgpe2xldCBlPXlsKCk7cmV0dXJuIGUmJmUuc2hhZG93Um9vdH1mdW5jdGlvbiB4bChlPWAkc3R5bGVgKXt7bGV0IG49WSgpO2lmKCFuKXJldHVybiB0O2xldCByPW4udHlwZS5fX2Nzc01vZHVsZXM7cmV0dXJuIHImJnJbZV18fHR9fXZhciBTbD1uZXcgV2Vha01hcCxDbD1uZXcgV2Vha01hcCx3bD1TeW1ib2woYF9tb3ZlQ2JgKSxUbD1TeW1ib2woYF9lbnRlckNiYCksRWw9KGU9PihkZWxldGUgZS5wcm9wcy5tb2RlLGUpKSh7bmFtZTpgVHJhbnNpdGlvbkdyb3VwYCxwcm9wczpzKHt9LGdjLHt0YWc6U3RyaW5nLG1vdmVDbGFzczpTdHJpbmd9KSxzZXR1cChlLHtzbG90czp0fSl7bGV0IG49WSgpLHI9RnIoKSxpLGE7cmV0dXJuIFVpKCgpPT57aWYoIWkubGVuZ3RoKXJldHVybjtsZXQgdD1lLm1vdmVDbGFzc3x8YCR7ZS5uYW1lfHxgdmB9LW1vdmVgO2lmKCFqbChpWzBdLmVsLG4udm5vZGUuZWwsdCkpe2k9W107cmV0dXJufWkuZm9yRWFjaChEbCksaS5mb3JFYWNoKE9sKTtsZXQgcj1pLmZpbHRlcihrbCk7amMobi52bm9kZS5lbCksci5mb3JFYWNoKGU9PntsZXQgbj1lLmVsLHI9bi5zdHlsZTtDYyhuLHQpLHIudHJhbnNmb3JtPXIud2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPWBgO2xldCBpPW5bd2xdPWU9PntlJiZlLnRhcmdldCE9PW58fCghZXx8ZS5wcm9wZXJ0eU5hbWUuZW5kc1dpdGgoYHRyYW5zZm9ybWApKSYmKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgdHJhbnNpdGlvbmVuZGAsaSksblt3bF09bnVsbCx3YyhuLHQpKX07bi5hZGRFdmVudExpc3RlbmVyKGB0cmFuc2l0aW9uZW5kYCxpKX0pLGk9W119KSwoKT0+e2xldCBvPVYoZSkscz1iYyhvKSxjPW8udGFnfHxHO2lmKGk9W10sYSlmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrKyl7bGV0IHQ9YVtlXTt0LmVsJiZ0LmVsIGluc3RhbmNlb2YgRWxlbWVudCYmIXQuZWxbUGNdJiYoaS5wdXNoKHQpLEtyKHQsVXIodCxzLHIsbikpLFNsLnNldCh0LEFsKHQuZWwpKSl9YT10LmRlZmF1bHQ/cXIodC5kZWZhdWx0KCkpOltdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO3Qua2V5IT1udWxsJiZLcih0LFVyKHQscyxyLG4pKX1yZXR1cm4gcShjLG51bGwsYSl9fX0pO2Z1bmN0aW9uIERsKGUpe2xldCB0PWUuZWw7dFt3bF0mJnRbd2xdKCksdFtUbF0mJnRbVGxdKCl9ZnVuY3Rpb24gT2woZSl7Q2wuc2V0KGUsQWwoZS5lbCkpfWZ1bmN0aW9uIGtsKGUpe2xldCB0PVNsLmdldChlKSxuPUNsLmdldChlKSxyPXQubGVmdC1uLmxlZnQsaT10LnRvcC1uLnRvcDtpZihyfHxpKXtsZXQgdD1lLmVsLG49dC5zdHlsZSxhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLHM9MTtyZXR1cm4gdC5vZmZzZXRXaWR0aCYmKG89YS53aWR0aC90Lm9mZnNldFdpZHRoKSx0Lm9mZnNldEhlaWdodCYmKHM9YS5oZWlnaHQvdC5vZmZzZXRIZWlnaHQpLCghTnVtYmVyLmlzRmluaXRlKG8pfHxvPT09MCkmJihvPTEpLCghTnVtYmVyLmlzRmluaXRlKHMpfHxzPT09MCkmJihzPTEpLE1hdGguYWJzKG8tMSk8LjAxJiYobz0xKSxNYXRoLmFicyhzLTEpPC4wMSYmKHM9MSksbi50cmFuc2Zvcm09bi53ZWJraXRUcmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Ivb31weCwke2kvc31weClgLG4udHJhbnNpdGlvbkR1cmF0aW9uPWAwc2AsZX19ZnVuY3Rpb24gQWwoZSl7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDp0LmxlZnQsdG9wOnQudG9wfX1mdW5jdGlvbiBqbChlLHQsbil7bGV0IHI9ZS5jbG9uZU5vZGUoKSxpPWVbbWNdO2kmJmkuZm9yRWFjaChlPT57ZS5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5yZW1vdmUoZSkpfSksbi5zcGxpdCgvXHMrLykuZm9yRWFjaChlPT5lJiZyLmNsYXNzTGlzdC5hZGQoZSkpLHIuc3R5bGUuZGlzcGxheT1gbm9uZWA7bGV0IGE9dC5ub2RlVHlwZT09PTE/dDp0LnBhcmVudE5vZGU7YS5hcHBlbmRDaGlsZChyKTtsZXR7aGFzVHJhbnNmb3JtOm99PU9jKHIpO3JldHVybiBhLnJlbW92ZUNoaWxkKHIpLG99dmFyIE1sPWU9PntsZXQgdD1lLnByb3BzW2BvblVwZGF0ZTptb2RlbFZhbHVlYF18fCExO3JldHVybiBkKHQpP2U9Pk0odCxlKTp0fTtmdW5jdGlvbiBObChlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gUGwoZSl7bGV0IHQ9ZS50YXJnZXQ7dC5jb21wb3NpbmcmJih0LmNvbXBvc2luZz0hMSx0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGBpbnB1dGApKSl9dmFyIEZsPVN5bWJvbChgX2Fzc2lnbmApLElsPVN5bWJvbChgX2luaXRpYWxWYWx1ZWApO2Z1bmN0aW9uIExsKGUsdCxuKXtyZXR1cm4gdCYmKGU9ZS50cmltKCkpLG4mJihlPXJlKGUpKSxlfXZhciBSbD17Y3JlYXRlZChlLHttb2RpZmllcnM6e2xhenk6dCx0cmltOm4sbnVtYmVyOnJ9fSxpKXtlLnBhcmVudE5vZGUmJihlLnR5cGU9PT1gdGV4dGA/ZVtJbF09ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvW1xyXG5dL2csYGApOmUudHlwZT09PWB0ZXh0YXJlYWAmJihlW0lsXT1lLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC9cclxuPy9nLGAKYCkpKSxlW0ZsXT1NbChpKTtsZXQgYT1yfHxpLnByb3BzJiZpLnByb3BzLnR5cGU9PT1gbnVtYmVyYDskYyhlLHQ/YGNoYW5nZWA6YGlucHV0YCx0PT57dC50YXJnZXQuY29tcG9zaW5nfHxlW0ZsXShMbChlLnZhbHVlLG4sYSkpfSksKG58fGEpJiYkYyhlLGBjaGFuZ2VgLCgpPT57ZS52YWx1ZT1MbChlLnZhbHVlLG4sYSl9KSx0fHwoJGMoZSxgY29tcG9zaXRpb25zdGFydGAsTmwpLCRjKGUsYGNvbXBvc2l0aW9uZW5kYCxQbCksJGMoZSxgY2hhbmdlYCxQbCkpfSxtb3VudGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOnt0cmltOm4sbnVtYmVyOnJ9fSl7bGV0IGk9dD8/YGAsYT1lW0lsXTtkZWxldGUgZVtJbF0sYSE9PXZvaWQgMCYmKGUudHlwZT09PWB0ZXh0YHx8ZS50eXBlPT09YHRleHRhcmVhYCkmJmUudmFsdWUhPT1hP2VbRmxdKExsKGUudmFsdWUsbixyKSk6ZS52YWx1ZT1pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpuLG1vZGlmaWVyczp7bGF6eTpyLHRyaW06aSxudW1iZXI6YX19LG8pe2lmKGVbRmxdPU1sKG8pLGUuY29tcG9zaW5nKXJldHVybjtsZXQgcz0oYXx8ZS50eXBlPT09YG51bWJlcmApJiYhL14wXGQvLnRlc3QoZS52YWx1ZSk/cmUoZS52YWx1ZSk6ZS52YWx1ZSxjPXQ/P2BgO2lmKHM9PT1jKXJldHVybjtsZXQgbD1lLmdldFJvb3ROb2RlKCk7KGwgaW5zdGFuY2VvZiBEb2N1bWVudHx8bCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpJiZsLmFjdGl2ZUVsZW1lbnQ9PT1lJiZlLnR5cGUhPT1gcmFuZ2VgJiYociYmdD09PW58fGkmJmUudmFsdWUudHJpbSgpPT09Yyl8fChlLnZhbHVlPWMpfX0semw9e2RlZXA6ITAsY3JlYXRlZChlLHQsbil7ZVtGbF09TWwobiksJGMoZSxgY2hhbmdlYCwoKT0+e2xldCB0PWUuX21vZGVsVmFsdWUsbj1XbChlKSxyPWUuY2hlY2tlZCxpPWVbRmxdO2lmKGQodCkpe2xldCBlPWdlKHQsbiksYT1lIT09LTE7aWYociYmIWEpaSh0LmNvbmNhdChuKSk7ZWxzZSBpZighciYmYSl7bGV0IG49Wy4uLnRdO24uc3BsaWNlKGUsMSksaShuKX19ZWxzZSBpZihwKHQpKXtsZXQgZT1uZXcgU2V0KHQpO3I/ZS5hZGQobik6ZS5kZWxldGUobiksaShlKX1lbHNlIGkoR2woZSxyKSl9KX0sbW91bnRlZDpCbCxiZWZvcmVVcGRhdGUoZSx0LG4pe2VbRmxdPU1sKG4pLEJsKGUsdCxuKX19O2Z1bmN0aW9uIEJsKGUse3ZhbHVlOnQsb2xkVmFsdWU6bn0scil7ZS5fbW9kZWxWYWx1ZT10O2xldCBpO2lmKGQodCkpaT1nZSh0LHIucHJvcHMudmFsdWUpPi0xO2Vsc2UgaWYocCh0KSlpPXQuaGFzKHIucHJvcHMudmFsdWUpO2Vsc2V7aWYodD09PW4pcmV0dXJuO2k9aGUodCxHbChlLCEwKSl9ZS5jaGVja2VkIT09aSYmKGUuY2hlY2tlZD1pKX12YXIgVmw9e2NyZWF0ZWQoZSx7dmFsdWU6dH0sbil7ZS5jaGVja2VkPWhlKHQsbi5wcm9wcy52YWx1ZSksZVtGbF09TWwobiksJGMoZSxgY2hhbmdlYCwoKT0+e2VbRmxdKFdsKGUpKX0pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpufSxyKXtlW0ZsXT1NbChyKSx0IT09biYmKGUuY2hlY2tlZD1oZSh0LHIucHJvcHMudmFsdWUpKX19LEhsPXtkZWVwOiEwLGNyZWF0ZWQoZSx7dmFsdWU6dCxtb2RpZmllcnM6e251bWJlcjpufX0scil7ZS5fbW9kZWxWYWx1ZT10LCRjKGUsYGNoYW5nZWAsKCk9PntsZXQgdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZS5vcHRpb25zLGU9PmUuc2VsZWN0ZWQpLm1hcChlPT5uP3JlKFdsKGUpKTpXbChlKSk7ZVtGbF0oZS5tdWx0aXBsZT9wKGUuX21vZGVsVmFsdWUpP25ldyBTZXQodCk6dDp0WzBdKSxlLl9hc3NpZ25pbmc9ITAsVm4oKCk9PntlLl9hc3NpZ25pbmc9ITF9KX0pLGVbRmxdPU1sKHIpfSxtb3VudGVkKGUse3ZhbHVlOnR9KXtVbChlLHQpfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dH0sbil7ZS5fbW9kZWxWYWx1ZT10LGVbRmxdPU1sKG4pfSx1cGRhdGVkKGUse3ZhbHVlOnR9KXtlLl9hc3NpZ25pbmd8fFVsKGUsdCl9fTtmdW5jdGlvbiBVbChlLHQpe2xldCBuPWUubXVsdGlwbGUscj1kKHQpO2lmKCEobiYmIXImJiFwKHQpKSl7Zm9yKGxldCBpPTAsYT1lLm9wdGlvbnMubGVuZ3RoO2k8YTtpKyspe2xldCBhPWUub3B0aW9uc1tpXSxvPVdsKGEpO2lmKG4pe2lmKHIpe2xldCBlPXR5cGVvZiBvO2Euc2VsZWN0ZWQ9ZT09PWBzdHJpbmdgfHxlPT09YG51bWJlcmA/dC5zb21lKGU9PlN0cmluZyhlKT09PVN0cmluZyhvKSk6Z2UodCxvKT4tMX1lbHNlIGEuc2VsZWN0ZWQ9dC5oYXMobyl9ZWxzZSBpZihoZShXbChhKSx0KSl7ZS5zZWxlY3RlZEluZGV4IT09aSYmKGUuc2VsZWN0ZWRJbmRleD1pKTtyZXR1cm59fSFuJiZlLnNlbGVjdGVkSW5kZXghPT0tMSYmKGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIFdsKGUpe3JldHVybmBfdmFsdWVgaW4gZT9lLl92YWx1ZTplLnZhbHVlfWZ1bmN0aW9uIEdsKGUsdCl7bGV0IG49dD9gX3RydWVWYWx1ZWA6YF9mYWxzZVZhbHVlYDtyZXR1cm4gbiBpbiBlP2Vbbl06dH12YXIgS2w9e2NyZWF0ZWQoZSx0LG4pe0psKGUsdCxuLG51bGwsYGNyZWF0ZWRgKX0sbW91bnRlZChlLHQsbil7SmwoZSx0LG4sbnVsbCxgbW91bnRlZGApfSxiZWZvcmVVcGRhdGUoZSx0LG4scil7SmwoZSx0LG4scixgYmVmb3JlVXBkYXRlYCl9LHVwZGF0ZWQoZSx0LG4scil7SmwoZSx0LG4scixgdXBkYXRlZGApfX07ZnVuY3Rpb24gcWwoZSx0KXtzd2l0Y2goZSl7Y2FzZWBTRUxFQ1RgOnJldHVybiBIbDtjYXNlYFRFWFRBUkVBYDpyZXR1cm4gUmw7ZGVmYXVsdDpzd2l0Y2godCl7Y2FzZWBjaGVja2JveGA6cmV0dXJuIHpsO2Nhc2VgcmFkaW9gOnJldHVybiBWbDtkZWZhdWx0OnJldHVybiBSbH19fWZ1bmN0aW9uIEpsKGUsdCxuLHIsaSl7bGV0IGE9cWwoZS50YWdOYW1lLG4ucHJvcHMmJm4ucHJvcHMudHlwZSlbaV07YSYmYShlLHQsbixyKX1mdW5jdGlvbiBZbCgpe1JsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0pPT4oe3ZhbHVlOmV9KSxWbC5nZXRTU1JQcm9wcz0oe3ZhbHVlOmV9LHQpPT57aWYodC5wcm9wcyYmaGUodC5wcm9wcy52YWx1ZSxlKSlyZXR1cm57Y2hlY2tlZDohMH19LHpsLmdldFNTUlByb3BzPSh7dmFsdWU6ZX0sdCk9PntpZihkKGUpKXtpZih0LnByb3BzJiZnZShlLHQucHJvcHMudmFsdWUpPi0xKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKHAoZSkpe2lmKHQucHJvcHMmJmUuaGFzKHQucHJvcHMudmFsdWUpKXJldHVybntjaGVja2VkOiEwfX1lbHNlIGlmKGUpcmV0dXJue2NoZWNrZWQ6ITB9fSxLbC5nZXRTU1JQcm9wcz0oZSx0KT0+e2lmKHR5cGVvZiB0LnR5cGUhPWBzdHJpbmdgKXJldHVybjtsZXQgbj1xbCh0LnR5cGUudG9VcHBlckNhc2UoKSx0LnByb3BzJiZ0LnByb3BzLnR5cGUpO2lmKG4uZ2V0U1NSUHJvcHMpcmV0dXJuIG4uZ2V0U1NSUHJvcHMoZSx0KX19dmFyIFhsPVtgY3RybGAsYHNoaWZ0YCxgYWx0YCxgbWV0YWBdLFpsPXtzdG9wOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDplPT5lLnByZXZlbnREZWZhdWx0KCksc2VsZjplPT5lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldCxjdHJsOmU9PiFlLmN0cmxLZXksc2hpZnQ6ZT0+IWUuc2hpZnRLZXksYWx0OmU9PiFlLmFsdEtleSxtZXRhOmU9PiFlLm1ldGFLZXksbGVmdDplPT5gYnV0dG9uYGluIGUmJmUuYnV0dG9uIT09MCxtaWRkbGU6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTEscmlnaHQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTIsZXhhY3Q6KGUsdCk9PlhsLnNvbWUobj0+ZVtgJHtufUtleWBdJiYhdC5pbmNsdWRlcyhuKSl9LFFsPShlLHQpPT57aWYoIWUpcmV0dXJuIGU7bGV0IG49ZS5fd2l0aE1vZHN8fD17fSxyPXQuam9pbihgLmApO3JldHVybiBuW3JdfHwobltyXT0oKG4sLi4ucik9Pntmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9WmxbdFtlXV07aWYociYmcihuLHQpKXJldHVybn1yZXR1cm4gZShuLC4uLnIpfSkpfSwkbD17ZXNjOmBlc2NhcGVgLHNwYWNlOmAgYCx1cDpgYXJyb3ctdXBgLGxlZnQ6YGFycm93LWxlZnRgLHJpZ2h0OmBhcnJvdy1yaWdodGAsZG93bjpgYXJyb3ctZG93bmAsZGVsZXRlOmBiYWNrc3BhY2VgfSxldT0oZSx0KT0+e2xldCBuPWUuX3dpdGhLZXlzfHw9e30scj10LmpvaW4oYC5gKTtyZXR1cm4gbltyXXx8KG5bcl09KG49PntpZighKGBrZXlgaW4gbikpcmV0dXJuO2xldCByPWsobi5rZXkpO2lmKHQuc29tZShlPT5lPT09cnx8JGxbZV09PT1yKSlyZXR1cm4gZShuKX0pKX0sdHU9cyh7cGF0Y2hQcm9wOmRsfSxkYyksbnUscnU9ITE7ZnVuY3Rpb24gaXUoKXtyZXR1cm4gbnV8fD1Ebyh0dSl9ZnVuY3Rpb24gYXUoKXtyZXR1cm4gbnU9cnU/bnU6T28odHUpLHJ1PSEwLG51fXZhciBvdT0oKC4uLmUpPT57aXUoKS5yZW5kZXIoLi4uZSl9KSxzdT0oKC4uLmUpPT57YXUoKS5oeWRyYXRlKC4uLmUpfSksY3U9KCguLi5lKT0+e2xldCB0PWl1KCkuY3JlYXRlQXBwKC4uLmUpLHttb3VudDpufT10O3JldHVybiB0Lm1vdW50PWU9PntsZXQgcj1kdShlKTtpZighcilyZXR1cm47bGV0IGk9dC5fY29tcG9uZW50OyFnKGkpJiYhaS5yZW5kZXImJiFpLnRlbXBsYXRlJiYoaS50ZW1wbGF0ZT1yLmlubmVySFRNTCksci5ub2RlVHlwZT09PTEmJihyLnRleHRDb250ZW50PWBgKTtsZXQgYT1uKHIsITEsdXUocikpO3JldHVybiByIGluc3RhbmNlb2YgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKGB2LWNsb2FrYCksci5zZXRBdHRyaWJ1dGUoYGRhdGEtdi1hcHBgLGBgKSksYX0sdH0pLGx1PSgoLi4uZSk9PntsZXQgdD1hdSgpLmNyZWF0ZUFwcCguLi5lKSx7bW91bnQ6bn09dDtyZXR1cm4gdC5tb3VudD1lPT57bGV0IHQ9ZHUoZSk7aWYodClyZXR1cm4gbih0LCEwLHV1KHQpKX0sdH0pO2Z1bmN0aW9uIHV1KGUpe2lmKGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KXJldHVybmBzdmdgO2lmKHR5cGVvZiBNYXRoTUxFbGVtZW50PT1gZnVuY3Rpb25gJiZlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClyZXR1cm5gbWF0aG1sYH1mdW5jdGlvbiBkdShlKXtyZXR1cm4gXyhlKT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmV9dmFyIGZ1PSExLHB1PSgpPT57ZnV8fChmdT0hMCxZbCgpLExjKCkpfSxtdT10eXBlb2Ygd2luZG93PGB1YCxodSxndT1lPT5odT1lLF91PVN5bWJvbCgpO2Z1bmN0aW9uIHZ1KGUpe3JldHVybiBlJiZ0eXBlb2YgZT09YG9iamVjdGAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE9iamVjdF1gJiZ0eXBlb2YgZS50b0pTT04hPWBmdW5jdGlvbmB9dmFyIHl1PXR5cGVvZiB3aW5kb3c9PWBvYmplY3RgJiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzp0eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYuc2VsZj09PXNlbGY/c2VsZjp0eXBlb2YgZ2xvYmFsPT1gb2JqZWN0YCYmZ2xvYmFsLmdsb2JhbD09PWdsb2JhbD9nbG9iYWw6dHlwZW9mIGdsb2JhbFRoaXM9PWBvYmplY3RgP2dsb2JhbFRoaXM6e0hUTUxFbGVtZW50Om51bGx9O2Z1bmN0aW9uIGJ1KGUse2F1dG9Cb206dD0hMX09e30pe3JldHVybiB0JiYvXlxzKig/OnRleHRcL1xTKnxhcHBsaWNhdGlvblwveG1sfFxTKlwvXFMqXCt4bWwpXHMqOy4qY2hhcnNldFxzKj1ccyp1dGYtOC9pLnRlc3QoZS50eXBlKT9uZXcgQmxvYihbYO+7v2AsZV0se3R5cGU6ZS50eXBlfSk6ZX1mdW5jdGlvbiB4dShlLHQsbil7bGV0IHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3Iub3BlbihgR0VUYCxlKSxyLnJlc3BvbnNlVHlwZT1gYmxvYmAsci5vbmxvYWQ9ZnVuY3Rpb24oKXtFdShyLnJlc3BvbnNlLHQsbil9LHIub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoYGNvdWxkIG5vdCBkb3dubG9hZCBmaWxlYCl9LHIuc2VuZCgpfWZ1bmN0aW9uIFN1KGUpe2xldCB0PW5ldyBYTUxIdHRwUmVxdWVzdDt0Lm9wZW4oYEhFQURgLGUsITEpO3RyeXt0LnNlbmQoKX1jYXRjaHt9cmV0dXJuIHQuc3RhdHVzPj0yMDAmJnQuc3RhdHVzPD0yOTl9ZnVuY3Rpb24gQ3UoZSl7dHJ5e2UuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChgY2xpY2tgKSl9Y2F0Y2h7bGV0IHQ9bmV3IE1vdXNlRXZlbnQoYGNsaWNrYCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLHZpZXc6d2luZG93LGRldGFpbDowLHNjcmVlblg6ODAsc2NyZWVuWToyMCxjbGllbnRYOjgwLGNsaWVudFk6MjAsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0Om51bGx9KTtlLmRpc3BhdGNoRXZlbnQodCl9fXZhciB3dT10eXBlb2YgbmF2aWdhdG9yPT1gb2JqZWN0YD9uYXZpZ2F0b3I6e3VzZXJBZ2VudDpgYH0sVHU9L01hY2ludG9zaC8udGVzdCh3dS51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3Qod3UudXNlckFnZW50KSYmIS9TYWZhcmkvLnRlc3Qod3UudXNlckFnZW50KSxFdT1tdT90eXBlb2YgSFRNTEFuY2hvckVsZW1lbnQ8YHVgJiZgZG93bmxvYWRgaW4gSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlJiYhVHU/RHU6YG1zU2F2ZU9yT3BlbkJsb2JgaW4gd3U/T3U6a3U6KCk9Pnt9O2Z1bmN0aW9uIER1KGUsdD1gZG93bmxvYWRgLG4pe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyLmRvd25sb2FkPXQsci5yZWw9YG5vb3BlbmVyYCx0eXBlb2YgZT09YHN0cmluZ2A/KHIuaHJlZj1lLHIub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP0N1KHIpOlN1KHIuaHJlZik/eHUoZSx0LG4pOihyLnRhcmdldD1gX2JsYW5rYCxDdShyKSkpOihyLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChyLmhyZWYpfSw0ZTQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDdShyKX0sMCkpfWZ1bmN0aW9uIE91KGUsdD1gZG93bmxvYWRgLG4pe2lmKHR5cGVvZiBlPT1gc3RyaW5nYCl7aWYoU3UoZSkpeHUoZSx0LG4pO2Vsc2V7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgYWApO3QuaHJlZj1lLHQudGFyZ2V0PWBfYmxhbmtgLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDdSh0KX0pfX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJ1KGUsbiksdCl9ZnVuY3Rpb24ga3UoZSx0LG4scil7aWYocnx8PW9wZW4oYGAsYF9ibGFua2ApLHImJihyLmRvY3VtZW50LnRpdGxlPXIuZG9jdW1lbnQuYm9keS5pbm5lclRleHQ9YGRvd25sb2FkaW5nLi4uYCksdHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiB4dShlLHQsbik7bGV0IGk9ZS50eXBlPT09YGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAsYT0vY29uc3RydWN0b3IvaS50ZXN0KFN0cmluZyh5dS5IVE1MRWxlbWVudCkpfHxgc2FmYXJpYGluIHl1LG89L0NyaU9TXC9bXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigob3x8aSYmYXx8VHUpJiZ0eXBlb2YgRmlsZVJlYWRlcjxgdWApe2xldCB0PW5ldyBGaWxlUmVhZGVyO3Qub25sb2FkZW5kPWZ1bmN0aW9uKCl7bGV0IGU9dC5yZXN1bHQ7aWYodHlwZW9mIGUhPWBzdHJpbmdgKXRocm93IHI9bnVsbCxFcnJvcihgV3JvbmcgcmVhZGVyLnJlc3VsdCB0eXBlYCk7ZT1vP2U6ZS5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLGBkYXRhOmF0dGFjaG1lbnQvZmlsZTtgKSxyP3IubG9jYXRpb24uaHJlZj1lOmxvY2F0aW9uLmFzc2lnbihlKSxyPW51bGx9LHQucmVhZEFzRGF0YVVSTChlKX1lbHNle2xldCB0PVVSTC5jcmVhdGVPYmplY3RVUkwoZSk7cj9yLmxvY2F0aW9uLmFzc2lnbih0KTpsb2NhdGlvbi5ocmVmPXQscj1udWxsLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHQpfSw0ZTQpfX12YXJ7YXNzaWduOkF1fT1PYmplY3Q7ZnVuY3Rpb24ganUoKXtsZXQgZT1DZSghMCksdD1lLnJ1bigoKT0+WHQoe30pKSxuPVtdLHI9W10saT1xdCh7aW5zdGFsbChlKXtndShpKSxpLl9hPWUsZS5wcm92aWRlKF91LGkpLGUuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJHBpbmlhPWksci5mb3JFYWNoKGU9Pm4ucHVzaChlKSkscj1bXX0sdXNlKGUpe3JldHVybiB0aGlzLl9hP24ucHVzaChlKTpyLnB1c2goZSksdGhpc30sX3A6bixfYTpudWxsLF9lOmUsX3M6bmV3IE1hcCxzdGF0ZTp0fSk7cmV0dXJuIGl9dmFyIE11PSgpPT57fTtmdW5jdGlvbiBOdShlLHQsbixyPU11KXtlLmFkZCh0KTtsZXQgaT0oKT0+e2UuZGVsZXRlKHQpJiZyKCl9O3JldHVybiFuJiZ3ZSgpJiZUZShpKSxpfWZ1bmN0aW9uIFB1KGUsLi4udCl7ZS5mb3JFYWNoKGU9PntlKC4uLnQpfSl9dmFyIEZ1PWU9PmUoKSxJdT1TeW1ib2woKSxMdT1TeW1ib2woKTtmdW5jdGlvbiBSdShlLHQpe2UgaW5zdGFuY2VvZiBNYXAmJnQgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKCh0LG4pPT5lLnNldChuLHQpKTplIGluc3RhbmNlb2YgU2V0JiZ0IGluc3RhbmNlb2YgU2V0JiZ0LmZvckVhY2goZS5hZGQsZSk7Zm9yKGxldCBuIGluIHQpe2lmKCFPYmplY3QuaGFzT3duKHQsbikpY29udGludWU7bGV0IHI9dFtuXSxpPWVbbl07ZVtuXT12dShpKSYmdnUocikmJk9iamVjdC5oYXNPd24oZSxuKSYmIUgocikmJiFVdChyKT9SdShpLHIpOnJ9cmV0dXJuIGV9dmFyIHp1PVN5bWJvbCgpO2Z1bmN0aW9uIEJ1KGUpe3JldHVybiFlfHx0eXBlb2YgZSE9YG9iamVjdGB8fCFPYmplY3QuaGFzT3duKGUsenUpfXZhcnthc3NpZ246VnV9PU9iamVjdDtmdW5jdGlvbiBIdShlKXtyZXR1cm4hIShIKGUpJiZlLmVmZmVjdCl9ZnVuY3Rpb24gVXUoZSx0LG4scil7bGV0e3N0YXRlOmksYWN0aW9uczphLGdldHRlcnM6b309dCxzPW4uc3RhdGUudmFsdWVbZV0sYztmdW5jdGlvbiBsKCl7cmV0dXJuIHN8fChuLnN0YXRlLnZhbHVlW2VdPWk/aSgpOnt9KSxWdShjbihuLnN0YXRlLnZhbHVlW2VdKSxhLE9iamVjdC5rZXlzKG98fHt9KS5yZWR1Y2UoKHQscik9Pih0W3JdPXF0KHFzKCgpPT57Z3Uobik7bGV0IHQ9bi5fcy5nZXQoZSk7cmV0dXJuIG9bcl0uY2FsbCh0LHQpfSkpLHQpLHt9KSl9cmV0dXJuIGM9V3UoZSxsLHQsbixyLCEwKSxjfWZ1bmN0aW9uIFd1KGUsdCxuPXt9LHIsaSxhKXtsZXQgbyxzPVZ1KHthY3Rpb25zOnt9fSxuKSxjPXtkZWVwOiEwfSxsLHUsZD1uZXcgU2V0LGY9bmV3IFNldCxwLG09ci5zdGF0ZS52YWx1ZVtlXTshYSYmIW0mJihyLnN0YXRlLnZhbHVlW2VdPXt9KTtsZXQgaDtmdW5jdGlvbiBnKHQpe2xldCBuO2w9dT0hMSx0eXBlb2YgdD09YGZ1bmN0aW9uYD8odChyLnN0YXRlLnZhbHVlW2VdKSxuPXt0eXBlOmBwYXRjaCBmdW5jdGlvbmAsc3RvcmVJZDplLGV2ZW50czpwfSk6KFJ1KHIuc3RhdGUudmFsdWVbZV0sdCksbj17dHlwZTpgcGF0Y2ggb2JqZWN0YCxwYXlsb2FkOnQsc3RvcmVJZDplLGV2ZW50czpwfSk7bGV0IGk9aD1TeW1ib2woKTtWbigpLnRoZW4oKCk9PntoPT09aSYmKGw9ITApfSksdT0hMCxQdShkLG4sci5zdGF0ZS52YWx1ZVtlXSl9bGV0IF89YT9mdW5jdGlvbigpe2xldHtzdGF0ZTplfT1uLHQ9ZT9lKCk6e307dGhpcy4kcGF0Y2goZT0+e1Z1KGUsdCl9KX06TXU7ZnVuY3Rpb24gdigpe28uc3RvcCgpLGQuY2xlYXIoKSxmLmNsZWFyKCksci5fcy5kZWxldGUoZSl9bGV0IHk9KHQsbj1gYCk9PntpZihJdSBpbiB0KXJldHVybiB0W0x1XT1uLHQ7bGV0IGk9ZnVuY3Rpb24oKXtndShyKTtsZXQgbj1BcnJheS5mcm9tKGFyZ3VtZW50cyksYT1uZXcgU2V0LG89bmV3IFNldDtmdW5jdGlvbiBzKGUpe2EuYWRkKGUpfWZ1bmN0aW9uIGMoZSl7by5hZGQoZSl9UHUoZix7YXJnczpuLG5hbWU6aVtMdV0sc3RvcmU6YixhZnRlcjpzLG9uRXJyb3I6Y30pO2xldCBsO3RyeXtsPXQuYXBwbHkodGhpcyYmdGhpcy4kaWQ9PT1lP3RoaXM6YixuKX1jYXRjaChlKXt0aHJvdyBQdShvLGUpLGV9cmV0dXJuIGwgaW5zdGFuY2VvZiBQcm9taXNlP2wudGhlbihlPT4oUHUoYSxlKSxlKSkuY2F0Y2goZT0+KFB1KG8sZSksUHJvbWlzZS5yZWplY3QoZSkpKTooUHUoYSxsKSxsKX07cmV0dXJuIGlbSXVdPSEwLGlbTHVdPW4saX0sYj1SdCh7X3A6ciwkaWQ6ZSwkb25BY3Rpb246TnUuYmluZChudWxsLGYpLCRwYXRjaDpnLCRyZXNldDpfLCRzdWJzY3JpYmUodCxuPXt9KXtpZihkLmhhcyh0KSlyZXR1cm4gTXU7bGV0IGk9TnUoZCx0LG4uZGV0YWNoZWQsKCk9PmEoKSksYT1vLnJ1bigoKT0+aHIoKCk9PnIuc3RhdGUudmFsdWVbZV0scj0+eyhuLmZsdXNoPT09YHN5bmNgP3U6bCkmJnQoe3N0b3JlSWQ6ZSx0eXBlOmBkaXJlY3RgLGV2ZW50czpwfSxyKX0sVnUoe30sYyxuKSkpO3JldHVybiBpfSwkZGlzcG9zZTp2fSk7ci5fcy5zZXQoZSxiKTtsZXQgeD0oci5fYSYmci5fYS5ydW5XaXRoQ29udGV4dHx8RnUpKCgpPT5yLl9lLnJ1bigoKT0+KG89Q2UoKSkucnVuKCgpPT50KHthY3Rpb246eX0pKSkpO2ZvcihsZXQgdCBpbiB4KXtsZXQgbj14W3RdO0gobikmJiFIdShuKXx8VXQobik/YXx8KG0mJkJ1KG4pJiYoSChuKT9uLnZhbHVlPW1bdF06KChuIGluc3RhbmNlb2YgU2V0fHxuIGluc3RhbmNlb2YgTWFwKSYmbi5jbGVhcigpLFJ1KG4sbVt0XSkpKSxyLnN0YXRlLnZhbHVlW2VdW3RdPW4pOnR5cGVvZiBuPT1gZnVuY3Rpb25gJiYoeFt0XT15KG4sdCkscy5hY3Rpb25zW3RdPW4pfXJldHVybiBWdShiLHgpLFZ1KFYoYikseCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIiRzdGF0ZSIse2dldDooKT0+ci5zdGF0ZS52YWx1ZVtlXSxzZXQ6ZT0+e2codD0+e1Z1KHQsZSl9KX19KSxyLl9wLmZvckVhY2goZT0+e2xldCB0PW8ucnVuKCgpPT5lKHtzdG9yZTpiLGFwcDpyLl9hLHBpbmlhOnIsb3B0aW9uczpzfSkpO1Z1KGIsdCl9KSxtJiZhJiZuLmh5ZHJhdGUmJm4uaHlkcmF0ZShiLiRzdGF0ZSxtKSxsPSEwLHU9ITAsYn1mdW5jdGlvbiBHdShlLHQsbil7bGV0IHIsaT10eXBlb2YgdD09YGZ1bmN0aW9uYDtyPWk/bjp0O2Z1bmN0aW9uIGEobixhKXtsZXQgbz1scigpO3JldHVybiBufHw9bz9jcihfdSxudWxsKTpudWxsLG4mJmd1KG4pLG49aHUsbi5fcy5oYXMoZSl8fChpP1d1KGUsdCxyLG4pOlV1KGUscixuKSksbi5fcy5nZXQoZSl9cmV0dXJuIGEuJGlkPWUsYX1mdW5jdGlvbiBLdShlKXtsZXQgdD1WKGUpLG49e307Zm9yKGxldCByIGluIHQpe2xldCBpPXRbcl07aT8uZWZmZWN0P25bcl09cXMoe2dldDooKT0+ZVtyXSxzZXQodCl7ZVtyXT10fX0pOihIKGkpfHxVdChpKSkmJihuW3JdPWRuKGUscikpfXJldHVybiBufXZhciBxdT17cHJlZml4OmBmYXNgLGljb25OYW1lOmBtYWduaWZ5aW5nLWdsYXNzYCxpY29uOls1MTIsNTEyLFsxMjgyNjksYHNlYXJjaGBdLGBmMDAyYCxgTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6YF19LEp1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGtleWAsaWNvbjpbNTEyLDUxMixbMTI4MjczXSxgZjA4NGAsYE0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwemBdfSxZdT17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0LXVwYCxpY29uOlszODQsNTEyLFtgc29ydC1hc2NgXSxgZjBkZWAsYE0zMiAyMjRjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTc4LjUgOS40IDE2OS40bDE2MC0xNjBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzNjQuOSAyMjQgMzUyIDIyNEwzMiAyMjR6YF19LFh1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGV5ZWAsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSxgZjA2ZWAsYE0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjYtNDYuOCA0My41LTc4LjEgOTUuNC05MyAxMzEuMS0zLjMgNy45LTMuMyAxNi43IDAgMjQuNiAxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xIDQ3LjEgNDMuNyAxMTEuOCA4MC42IDE5Mi42IDgwLjZzMTQ1LjUtMzYuOCAxOTIuNi04MC42YzQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42ek0xNDQgMjU2YTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0NC02NGMwIDM1LjMtMjguNyA2NC02NCA2NC0xMS41IDAtMjIuMy0zLTMxLjctOC40LTEgMTAuOS0uMSAyMi4xIDIuOSAzMy4yIDEzLjcgNTEuMiA2Ni40IDgxLjYgMTE3LjYgNjcuOXM4MS42LTY2LjQgNjcuOS0xMTcuNmMtMTIuMi00NS43LTU1LjUtNzQuOC0xMDEuMS03MC44IDUuMyA5LjMgOC40IDIwLjEgOC40IDMxLjd6YF19LFp1PXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGNoZXZyb24tdXBgLGljb246WzQ0OCw1MTIsW10sYGYwNzdgLGBNMjAxLjQgMTA1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyMjQgMTczLjMgNTQuNiAzNDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTkyLTE5MnpgXX0sUXU9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1yaWdodGAsaWNvbjpbMzIwLDUxMixbOTAwMl0sYGYwNTRgLGBNMzExLjEgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0My4yIDI1NiA3My45IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MnpgXX0sJHU9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgdXNlcnNgLGljb246WzY0MCw1MTIsW10sYGYwYzBgLGBNMzIwIDE2YTEwNCAxMDQgMCAxIDEgMCAyMDggMTA0IDEwNCAwIDEgMSAwLTIwOHpNOTYgODhhNzIgNzIgMCAxIDEgMCAxNDQgNzIgNzIgMCAxIDEgMC0xNDR6TTAgNDE2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDEyLjggMCAyNS4yIDEuOSAzNi45IDUuNC0zMi45IDM2LjgtNTIuOSA4NS40LTUyLjkgMTM4LjZsMCAxNmMwIDExLjQgMi40IDIyLjIgNi43IDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMnptNTIxLjMgNjRjNC4zLTkuOCA2LjctMjAuNiA2LjctMzJsMC0xNmMwLTUzLjItMjAtMTAxLjgtNTIuOS0xMzguNiAxMS43LTMuNSAyNC4xLTUuNCAzNi45LTUuNCA3MC43IDAgMTI4IDU3LjMgMTI4IDEyOGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC04Ni43IDB6TTQ3MiAxNjBhNzIgNzIgMCAxIDEgMTQ0IDAgNzIgNzIgMCAxIDEgLTE0NCAwek0xNjAgNDMyYzAtODguNCA3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6YF19LGVkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGhlYXJ0LXB1bHNlYCxpY29uOls1MTIsNTEyLFtgaGVhcnRiZWF0YF0sYGYyMWVgLGBNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4emBdfSx0ZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUteG1hcmtgLGljb246WzUxMiw1MTIsWzYxNTMyLGB0aW1lcy1jaXJjbGVgLGB4bWFyay1jaXJjbGVgXSxgZjA1N2AsYE0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpgXX0sbmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFtgZXhjbGFtYXRpb24tY2lyY2xlYF0sYGYwNmFgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6bTAtMTkyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMC0xOTJjLTE4LjIgMC0zMi43IDE1LjUtMzEuNCAzMy43bDcuNCAxMDRjLjkgMTIuNiAxMS40IDIyLjMgMjMuOSAyMi4zIDEyLjYgMCAyMy05LjcgMjMuOS0yMi4zbDcuNC0xMDRjMS4zLTE4LjItMTMuMS0zMy43LTMxLjQtMzMuN3pgXX0scmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hlY2tgLGljb246WzQ0OCw1MTIsWzEwMDAzLDEwMDA0XSxgZjAwY2AsYE00MzQuOCA3MC4xYzE0LjMgMTAuNCAxNy41IDMwLjQgNy4xIDQ0LjdsLTI1NiAzNTJjLTUuNSA3LjYtMTQgMTIuMy0yMy40IDEzLjFzLTE4LjUtMi43LTI1LjEtOS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDEwMS41IDEwMS41IDIzNC0zMjEuN2MxMC40LTE0LjMgMzAuNC0xNy41IDQ0LjctNy4xemBdfSxpZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBob3VzZWAsaWNvbjpbNTEyLDUxMixbMTI3OTY4LDYzNDk4LDYzNTAwLGBob21lYCxgaG9tZS1hbHRgLGBob21lLWxnLWFsdGBdLGBmMDE1YCxgTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTI0MCAzMjBsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2LTEyOCAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6YF19LGFkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHNsaWRlcnNgLGljb246WzUxMiw1MTIsW2BzbGlkZXJzLWhgXSxgZjFkZWAsYE0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMjY1LjMgNjRDMjUzIDM1LjcgMjI0LjggMTYgMTkyIDE2cy02MSAxOS43LTczLjMgNDhMMzIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI0Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhsNTQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01NC43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAyMjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU0LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OEw0ODAgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNDYuNyAwYy0xMi4zLTI4LjMtNDAuNS00OC03My4zLTQ4cy02MSAxOS43LTczLjMgNDhMMzIgMzg0emBdfSxvZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBzb3J0YCxpY29uOlszODQsNTEyLFtgdW5zb3J0ZWRgXSxgZjBkY2AsYE0yLjQgMjA0LjJjNSAxMiAxNi42IDE5LjggMjkuNiAxOS44bDMyMCAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOXptMCAxMDMuNWMtNSAxMi0yLjIgMjUuNyA2LjkgMzQuOWwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44emBdfSxzZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmB4bWFya2AsaWNvbjpbMzg0LDUxMixbMTI4NDczLDEwMDA1LDEwMDA2LDEwMDYwLDIxNSxgY2xvc2VgLGBtdWx0aXBseWAsYHJlbW92ZWAsYHRpbWVzYF0sYGYwMGRgLGBNNTUuMSA3My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wxNDcuMiAyNTYgOS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5Mi41IDMwMS4zIDMyOS45IDQzOC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjM3LjggMjU2IDM3NS4xIDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE5Mi41IDIxMC43IDU1LjEgNzMuNHpgXX0sY2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2lyY2xlLWNoZWNrYCxpY29uOls1MTIsNTEyLFs2MTUzMyxgY2hlY2stY2lyY2xlYF0sYGYwNThgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAxIDAtNTEyIDI1NiAyNTYgMCAxIDEgMCA1MTJ6TTM3NCAxNDUuN2MtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNMMjIxLjEgMzE1LjIgMTY5IDI2My4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDcyIDcyYzUgNSAxMS44IDcuNSAxOC44IDdzMTMuNC00LjEgMTcuNS05LjhMMzc5LjMgMTc5LjJjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6YF19LGxkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGN1YmVzYCxpY29uOls1MTIsNTEyLFtdLGBmMWIzYCxgTTI4NC0xLjNjLTE3LjMtMTAtMzguNy0xMC01NiAwTDE0My44IDQ3LjNjLTE3LjMgMTAtMjggMjguNS0yOCA0OC41bDAgMTAxLjktODguMyA1MWMtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCA5Ny4zYzAgMjAgMTAuNyAzOC41IDI4IDQ4LjVsODQuMyA0OC42YzE3LjMgMTAgMzguNyAxMCA1NiAwbDg4LjMtNTEgODguMyA1MWMxNy4zIDEwIDM4LjcgMTAgNTYgMEw0ODQuNSA0NDNjMTcuMy0xMCAyOC0yOC41IDI4LTQ4LjVsMC05Ny4zYzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVsLTg4LjMtNTEgMC0xMDEuOWMwLTIwLTEwLjctMzguNS0yOC00OC41TDI4NC0xLjN6TTIzMiAyOTIuNmwwIDEwNi41LTg4LjMgNTFjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTIuMy01My4zem0yMzEuNCAuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNGwwIDk3LjNjMCAyLjktMS41IDUuNS00IDYuOWwtODQuMyA0OC42Yy0xLjIgLjctMi42IDEuMS00IDEuMWwwLTEwNS4zIDkxLjItNTIuNnpNMzQ4LjMgOTUuOGwwIDEwMS45LTkyLjMgNTMuMyAwLTEwNi41IDkxLjItNTIuNmMuNyAxLjIgMS4xIDIuNiAxLjEgNHpgXX0sdWQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY2hldnJvbi1kb3duYCxpY29uOls0NDgsNTEyLFtdLGBmMDc4YCxgTTIwMS40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDMzOC43IDU0LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6YF19LGRkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHBsdWdgLGljb246WzQ0OCw1MTIsWzEyODI2OF0sYGYxZTZgLGBNMTI4LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDY0YzAgOTUuMS02OS4yIDE3NC4xLTE2MCAxODkuM2wwIDY2LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzEwMS4yIDM5OC4xIDMyIDMxOS4xIDMyIDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpgXX0sZmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgaW5ib3hgLGljb246WzUxMiw1MTIsW10sYGYwMWNgLGBNOTEuOCAzMkM1OS45IDMyIDMyLjkgNTUuNCAyOC40IDg2LjlMLjYgMjgxLjJjLS40IDMtLjYgNi0uNiA5LjFMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xMjUuN2MwLTMtLjItNi4xLS42LTkuMUw0ODMuNiA4Ni45QzQ3OS4xIDU1LjQgNDUyLjEgMzIgNDIwLjIgMzJMOTEuOCAzMnptMCA2NGwzMjguNSAwIDI3LjQgMTkyLTU5LjkgMGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtMTQuMyAyOC42Yy01LjQgMTAuOC0xNi41IDE3LjctMjguNiAxNy43bC0xMjAuNCAwYy0xMi4xIDAtMjMuMi02LjgtMjguNi0xNy43bC0xNC4zLTI4LjZjLTUuNC0xMC44LTE2LjUtMTcuNy0yOC42LTE3LjdMNjQuMyAyODggOTEuOCA5NnpgXX0scGQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgZmlsZS1jc3ZgLGljb246WzU3Niw1MTIsW10sYGY2ZGRgLGBNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4MCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE3NiAwIDAtMTY1LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTI2NCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLThjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwxNiAwYzIuMiAwIDQgMS44IDQgNGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0xMzYgMGMtMjguNyAwLTUyIDIzLjMtNTIgNTJzMjMuMyA1MiA1MiA1MmM2LjYgMCAxMiA1LjQgMTIgMTJzLTUuNCAxMi0xMiAxMmwtMzIgMGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MnMtMjMuMy01Mi01Mi01MmMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwyNCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMjQgMHptOTYgMGMtMTEgMC0yMCA5LTIwIDIwbDAgMzEuNmMwIDM1LjUgMTAuNSA3MC4zIDMwLjIgOTkuOGw1LjEgNy43YzMuNyA1LjYgMTAgOC45IDE2LjYgOC45czEyLjktMy4zIDE2LjYtOC45bDUuMS03LjdjMTkuNy0yOS42IDMwLjItNjQuMyAzMC4yLTk5LjhsMC0zMS42YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDMxLjZjMCAxOS42LTQuMSAzOC45LTEyIDU2LjctNy45LTE3LjgtMTItMzcuMS0xMi01Ni43bDAtMzEuNmMwLTExLTktMjAtMjAtMjB6YF19LG1kPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YHRyaWFuZ2xlLWV4Y2xhbWF0aW9uYCxpY29uOls1MTIsNTEyLFs5ODg4LGBleGNsYW1hdGlvbi10cmlhbmdsZWAsYHdhcm5pbmdgXSxgZjA3MWAsYE0yNTYgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjVTNDg2LjEgNDgwIDQ3MiA0ODBMNDAgNDgwYy0xNC4xIDAtMjcuMi03LjQtMzQuNC0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDBjNy0xMi45IDIwLjUtMjEgMzUuMi0yMXptMCAzNTJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wLTE5MmMtMTguMiAwLTMyLjcgMTUuNS0zMS40IDMzLjdsNy40IDEwNGMuOSAxMi41IDExLjQgMjIuMyAyMy45IDIyLjMgMTIuNiAwIDIzLTkuNyAyMy45LTIyLjNsNy40LTEwNGMxLjMtMTguMi0xMy4xLTMzLjctMzEuNC0zMy43emBdfSxoZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBhcnJvdy1yaWdodC1hcnJvdy1sZWZ0YCxpY29uOls1MTIsNTEyLFs4NjQ0LGBleGNoYW5nZWBdLGBmMGVjYCxgTTUwMi42IDE1MC42bC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDAyLjcgMTYwIDMyIDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5NmwzNzAuNyAwLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTA5LjMgMzUyIDQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM3MC43IDAgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwemBdfSxnZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBhcnJvdy1sZWZ0YCxpY29uOls1MTIsNTEyLFs4NTkyXSxgZjA2MGAsYE05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyODggNDgwIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzcwLjcgMCAxMDUuNC0xMDUuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MHpgXX0sX2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY29weWAsaWNvbjpbNDQ4LDUxMixbXSxgZjBjNWAsYE0xOTIgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMDAuNmMwLTE3LjQtNy4xLTM0LjEtMTkuNy00Ni4yTDM3MC42IDE3LjhDMzU4LjcgNi40IDM0Mi44IDAgMzI2LjMgMEwxOTIgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTY0IDAgMCAxNi0xOTIgMCAwLTI1NiAxNiAwIDAtNjQtMTYgMHpgXX0sdmQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgYXJyb3ctcm90YXRlLXJpZ2h0YCxpY29uOls1MTIsNTEyLFs4NjM1LGBhcnJvdy1yaWdodC1yb3RhdGVgLGBhcnJvdy1yb3RhdGUtZm9yd2FyZGAsYHJlZG9gXSxgZjAxZWAsYE00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3pgXX0seWQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgZXllLXNsYXNoYCxpY29uOls1NzYsNTEyLFtdLGBmMDcwYCxgTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6YF19LGJkPXtwcmVmaXg6YGZhc2AsaWNvbk5hbWU6YGFycm93LXVwLXJpZ2h0LWZyb20tc3F1YXJlYCxpY29uOls1MTIsNTEyLFtgZXh0ZXJuYWwtbGlua2BdLGBmMDhlYCxgTTMyMCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDgyLjcgMC0yMDEuNCAyMDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw0NDggMTA5LjMgNDQ4IDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyMCAwek04MCA5NkMzNS44IDk2IDAgMTMxLjggMCAxNzZMMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMjU2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNkw4MCA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsODAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA5NnpgXX0seGQ9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgY29pbnNgLGljb246WzUxMiw1MTIsW10sYGY1MWVgLGBNMTI4IDk2bDAtMTZjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODBsMCAxNmMwIDMwLjYtNDEuMyA1Ny4yLTEwMiA3MC43LTIuNC0yLjgtNC45LTUuNS03LjQtOC0xNS41LTE1LjMtMzUuNS0yNi45LTU2LjQtMzUuNS00MS45LTE3LjUtOTYuNS0yNy4xLTE1NC4yLTI3LjEtMjEuOSAwLTQzLjMgMS40LTYzLjggNC4xLS4yLTEuMy0uMi0yLjctLjItNC4xek00MzIgMzUzbDAtNDYuMmMxNS4xLTMuOSAyOS4zLTguNSA0Mi4yLTEzLjkgMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXptMC05NmwwLTMzYzAtNC41LS40LTguOC0xLTEzIDE1LjUtMy45IDMwLTguNiA0My4yLTE0LjJzMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjRjMCAyNi44LTMxLjUgNTAuNS04MCA2NXpNMCAyNDBsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwczE5MiAzNS44IDE5MiA4MGwwIDE2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAyODQuMiAwIDI0MHptMzg0IDk2YzAgNDQuMi04NiA4MC0xOTIgODBTMCAzODAuMiAwIDMzNmwwLTE1LjRjMTEuNiA4LjEgMjQuNSAxNC43IDM3LjggMjAuMyA0MS45IDE3LjUgOTYuNSAyNy4xIDE1NC4yIDI3LjFzMTEyLjMtOS43IDE1NC4yLTI3LjFjMTMuMi01LjUgMjYuMS0xMi4yIDM3LjgtMjAuM2wwIDE1LjR6bTAgODAuNmwwIDE1LjRjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDQ3Ni4yIDAgNDMybDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zemBdfSxTZD17cHJlZml4OmBmYXNgLGljb25OYW1lOmBjaXJjbGUtaW5mb2AsaWNvbjpbNTEyLDUxMixbYGluZm8tY2lyY2xlYF0sYGYwNWFgLGBNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjQtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpgXX0sQ2Q9e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpgc29ydC1kb3duYCxpY29uOlszODQsNTEyLFtgc29ydC1kZXNjYF0sYGYwZGRgLGBNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4emBdfTtmdW5jdGlvbiB3ZChlKXt2YXIgdCxuLHI9YGA7aWYodHlwZW9mIGU9PWBzdHJpbmdgfHx0eXBlb2YgZT09YG51bWJlcmApcis9ZTtlbHNlIGlmKHR5cGVvZiBlPT1gb2JqZWN0YCl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKWVbdF0mJihuPXdkKGVbdF0pKSYmKHImJihyKz1gIGApLHIrPW4pfWVsc2UgZm9yKG4gaW4gZSllW25dJiYociYmKHIrPWAgYCkscis9bil9cmV0dXJuIHJ9ZnVuY3Rpb24gVGQoKXtmb3IodmFyIGUsdCxuPTAscj1gYCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKykoZT1hcmd1bWVudHNbbl0pJiYodD13ZChlKSkmJihyJiYocis9YCBgKSxyKz10KTtyZXR1cm4gcn12YXIgRWQ9ZT0+dHlwZW9mIGU9PWBib29sZWFuYD9gJHtlfWA6ZT09PTA/YDBgOmUsRGQ9VGQsT2Q9KGUsdCk9Pm49PntpZih0Py52YXJpYW50cz09bnVsbClyZXR1cm4gRGQoZSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpO2xldHt2YXJpYW50czpyLGRlZmF1bHRWYXJpYW50czppfT10LGE9T2JqZWN0LmtleXMocikubWFwKGU9PntsZXQgdD1uPy5bZV0sYT1pPy5bZV07aWYodD09PW51bGwpcmV0dXJuIG51bGw7bGV0IG89RWQodCl8fEVkKGEpO3JldHVybiByW2VdW29dfSksbz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsdCk9PntsZXRbbixyXT10O3JldHVybiByPT09dm9pZCAwfHwoZVtuXT1yKSxlfSx7fSk7cmV0dXJuIERkKGUsYSx0Py5jb21wb3VuZFZhcmlhbnRzPy5yZWR1Y2UoKGUsdCk9PntsZXR7Y2xhc3M6bixjbGFzc05hbWU6ciwuLi5hfT10O3JldHVybiBPYmplY3QuZW50cmllcyhhKS5ldmVyeShlPT57bGV0W3Qsbl09ZTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLmluY2x1ZGVzKHsuLi5pLC4uLm99W3RdKTp7Li4uaSwuLi5vfVt0XT09PW59KT9bLi4uZSxuLHJdOmV9LFtdKSxuPy5jbGFzcyxuPy5jbGFzc05hbWUpfSxrZD0oZSx0KT0+e2xldCBuPUFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspbltlLmxlbmd0aCtyXT10W3JdO3JldHVybiBufSxBZD0oZSx0KT0+KHtjbGFzc0dyb3VwSWQ6ZSx2YWxpZGF0b3I6dH0pLGpkPShlPW5ldyBNYXAsdD1udWxsLG4pPT4oe25leHRQYXJ0OmUsdmFsaWRhdG9yczp0LGNsYXNzR3JvdXBJZDpufSksTWQ9YC1gLE5kPVtdLFBkPWBhcmJpdHJhcnkuLmAsRmQ9ZT0+e2xldCB0PVJkKGUpLHtjb25mbGljdGluZ0NsYXNzR3JvdXBzOm4sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnJ9PWU7cmV0dXJue2dldENsYXNzR3JvdXBJZDplPT57aWYoZS5zdGFydHNXaXRoKGBbYCkmJmUuZW5kc1dpdGgoYF1gKSlyZXR1cm4gTGQoZSk7bGV0IG49ZS5zcGxpdChNZCk7cmV0dXJuIElkKG4sKyhuWzBdPT09YGAmJm4ubGVuZ3RoPjEpLHQpfSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6KGUsdCk9PntpZih0KXtsZXQgdD1yW2VdLGk9bltlXTtyZXR1cm4gdD9pP2tkKGksdCk6dDppfHxOZH1yZXR1cm4gbltlXXx8TmR9fX0sSWQ9KGUsdCxuKT0+e2lmKGUubGVuZ3RoLXQ9PT0wKXJldHVybiBuLmNsYXNzR3JvdXBJZDtsZXQgcj1lW3RdLGk9bi5uZXh0UGFydC5nZXQocik7aWYoaSl7bGV0IG49SWQoZSx0KzEsaSk7aWYobilyZXR1cm4gbn1sZXQgYT1uLnZhbGlkYXRvcnM7aWYoYT09PW51bGwpcmV0dXJuO2xldCBvPXQ9PT0wP2Uuam9pbihNZCk6ZS5zbGljZSh0KS5qb2luKE1kKSxzPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cztlKyspe2xldCB0PWFbZV07aWYodC52YWxpZGF0b3IobykpcmV0dXJuIHQuY2xhc3NHcm91cElkfX0sTGQ9ZT0+ZS5zbGljZSgxLC0xKS5pbmRleE9mKGA6YCk9PT0tMT92b2lkIDA6KCgpPT57bGV0IHQ9ZS5zbGljZSgxLC0xKSxuPXQuaW5kZXhPZihgOmApLHI9dC5zbGljZSgwLG4pO3JldHVybiByP1BkK3I6dm9pZCAwfSkoKSxSZD1lPT57bGV0e3RoZW1lOnQsY2xhc3NHcm91cHM6bn09ZTtyZXR1cm4gemQobix0KX0semQ9KGUsdCk9PntsZXQgbj1qZCgpO2ZvcihsZXQgciBpbiBlKXtsZXQgaT1lW3JdO0JkKGksbixyLHQpfXJldHVybiBufSxCZD0oZSx0LG4scik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgaT1lW2FdO1ZkKGksdCxuLHIpfX0sVmQ9KGUsdCxuLHIpPT57aWYodHlwZW9mIGU9PWBzdHJpbmdgKXtIZChlLHQsbik7cmV0dXJufWlmKHR5cGVvZiBlPT1gZnVuY3Rpb25gKXtVZChlLHQsbixyKTtyZXR1cm59V2QoZSx0LG4scil9LEhkPShlLHQsbik9PntsZXQgcj1lPT09YGA/dDpHZCh0LGUpO3IuY2xhc3NHcm91cElkPW59LFVkPShlLHQsbixyKT0+e2lmKEtkKGUpKXtCZChlKHIpLHQsbixyKTtyZXR1cm59dC52YWxpZGF0b3JzPT09bnVsbCYmKHQudmFsaWRhdG9ycz1bXSksdC52YWxpZGF0b3JzLnB1c2goQWQobixlKSl9LFdkPShlLHQsbixyKT0+e2xldCBpPU9iamVjdC5lbnRyaWVzKGUpLGE9aS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7bGV0W2Esb109aVtlXTtCZChvLEdkKHQsYSksbixyKX19LEdkPShlLHQpPT57bGV0IG49ZSxyPXQuc3BsaXQoTWQpLGk9ci5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bGV0IHQ9cltlXSxpPW4ubmV4dFBhcnQuZ2V0KHQpO2l8fChpPWpkKCksbi5uZXh0UGFydC5zZXQodCxpKSksbj1pfXJldHVybiBufSxLZD1lPT5gaXNUaGVtZUdldHRlcmBpbiBlJiZlLmlzVGhlbWVHZXR0ZXI9PT0hMCxxZD1lPT57aWYoZTwxKXJldHVybntnZXQ6KCk9PnZvaWQgMCxzZXQ6KCk9Pnt9fTtsZXQgdD0wLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPU9iamVjdC5jcmVhdGUobnVsbCksaT0oaSxhKT0+e25baV09YSx0KyssdD5lJiYodD0wLHI9bixuPU9iamVjdC5jcmVhdGUobnVsbCkpfTtyZXR1cm57Z2V0KGUpe2xldCB0PW5bZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdDtpZigodD1yW2VdKSE9PXZvaWQgMClyZXR1cm4gaShlLHQpLHR9LHNldChlLHQpe2UgaW4gbj9uW2VdPXQ6aShlLHQpfX19LEpkPWAhYCxZZD1gOmAsWGQ9W10sWmQ9KGUsdCxuLHIsaSk9Pih7bW9kaWZpZXJzOmUsaGFzSW1wb3J0YW50TW9kaWZpZXI6dCxiYXNlQ2xhc3NOYW1lOm4sbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpyLGlzRXh0ZXJuYWw6aX0pLFFkPWU9PntsZXR7cHJlZml4OnQsZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWU6bn09ZSxyPWU9PntsZXQgdD1bXSxuPTAscj0wLGk9MCxhLG89ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxvO3MrKyl7bGV0IG89ZVtzXTtpZihuPT09MCYmcj09PTApe2lmKG89PT1ZZCl7dC5wdXNoKGUuc2xpY2UoaSxzKSksaT1zKzE7Y29udGludWV9aWYobz09PWAvYCl7YT1zO2NvbnRpbnVlfX1vPT09YFtgP24rKzpvPT09YF1gP24tLTpvPT09YChgP3IrKzpvPT09YClgJiZyLS19bGV0IHM9dC5sZW5ndGg9PT0wP2U6ZS5zbGljZShpKSxjPXMsbD0hMTtzLmVuZHNXaXRoKEpkKT8oYz1zLnNsaWNlKDAsLTEpLGw9ITApOnMuc3RhcnRzV2l0aChKZCkmJihjPXMuc2xpY2UoMSksbD0hMCk7bGV0IHU9YSYmYT5pP2EtaTp2b2lkIDA7cmV0dXJuIFpkKHQsbCxjLHUpfTtpZih0KXtsZXQgZT10K1lkLG49cjtyPXQ9PnQuc3RhcnRzV2l0aChlKT9uKHQuc2xpY2UoZS5sZW5ndGgpKTpaZChYZCwhMSx0LHZvaWQgMCwhMCl9aWYobil7bGV0IGU9cjtyPXQ9Pm4oe2NsYXNzTmFtZTp0LHBhcnNlQ2xhc3NOYW1lOmV9KX1yZXR1cm4gcn0sJGQ9ZT0+e2xldCB0PW5ldyBNYXA7cmV0dXJuIGUub3JkZXJTZW5zaXRpdmVNb2RpZmllcnMuZm9yRWFjaCgoZSxuKT0+e3Quc2V0KGUsMWU2K24pfSksZT0+e2xldCBuPVtdLHI9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV0sbz1hWzBdPT09YFtgLHM9dC5oYXMoYSk7b3x8cz8oci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSxyPVtdKSxuLnB1c2goYSkpOnIucHVzaChhKX1yZXR1cm4gci5sZW5ndGg+MCYmKHIuc29ydCgpLG4ucHVzaCguLi5yKSksbn19LGVmPWU9Pih7Y2FjaGU6cWQoZS5jYWNoZVNpemUpLHBhcnNlQ2xhc3NOYW1lOlFkKGUpLHNvcnRNb2RpZmllcnM6JGQoZSkscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6dGYoZSksLi4uRmQoZSl9KSx0Zj1lPT57bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPWUucG9zdGZpeExvb2t1cENsYXNzR3JvdXBzO2lmKG4pZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdFtuW2VdXT0hMDtyZXR1cm4gdH0sbmY9L1xzKy8scmY9KGUsdCk9PntsZXR7cGFyc2VDbGFzc05hbWU6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aSxzb3J0TW9kaWZpZXJzOmEscG9zdGZpeExvb2t1cENsYXNzR3JvdXBJZHM6b309dCxzPVtdLGM9ZS50cmltKCkuc3BsaXQobmYpLGw9YGA7Zm9yKGxldCBlPWMubGVuZ3RoLTE7ZT49MDstLWUpe2xldCB0PWNbZV0se2lzRXh0ZXJuYWw6dSxtb2RpZmllcnM6ZCxoYXNJbXBvcnRhbnRNb2RpZmllcjpmLGJhc2VDbGFzc05hbWU6cCxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOm19PW4odCk7aWYodSl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWxldCBoPSEhbSxnO2lmKGgpe2c9cihwLnN1YnN0cmluZygwLG0pKTtsZXQgZT1nJiZvW2ddP3IocCk6dm9pZCAwO2UmJmUhPT1nJiYoZz1lLGg9ITEpfWVsc2UgZz1yKHApO2lmKCFnKXtpZighaCl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWlmKGc9cihwKSwhZyl7bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpO2NvbnRpbnVlfWg9ITF9bGV0IF89ZC5sZW5ndGg9PT0wP2BgOmQubGVuZ3RoPT09MT9kWzBdOmEoZCkuam9pbihgOmApLHY9Zj9fK0pkOl8seT12K2c7aWYocy5pbmRleE9mKHkpPi0xKWNvbnRpbnVlO3MucHVzaCh5KTtsZXQgYj1pKGcsaCk7Zm9yKGxldCBlPTA7ZTxiLmxlbmd0aDsrK2Upe2xldCB0PWJbZV07cy5wdXNoKHYrdCl9bD10KyhsLmxlbmd0aD4wP2AgYCtsOmwpfXJldHVybiBsfSxhZj0oLi4uZSk9PntsZXQgdD0wLG4scixpPWBgO2Zvcig7dDxlLmxlbmd0aDspKG49ZVt0KytdKSYmKHI9b2YobikpJiYoaSYmKGkrPWAgYCksaSs9cik7cmV0dXJuIGl9LG9mPWU9PntpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7bGV0IHQsbj1gYDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiYodD1vZihlW3JdKSkmJihuJiYobis9YCBgKSxuKz10KTtyZXR1cm4gbn0sc2Y9KGUsLi4udCk9PntsZXQgbixyLGksYSxvPW89PihuPWVmKHQucmVkdWNlKChlLHQpPT50KGUpLGUoKSkpLHI9bi5jYWNoZS5nZXQsaT1uLmNhY2hlLnNldCxhPXMscyhvKSkscz1lPT57bGV0IHQ9cihlKTtpZih0KXJldHVybiB0O2xldCBhPXJmKGUsbik7cmV0dXJuIGkoZSxhKSxhfTtyZXR1cm4gYT1vLCguLi5lKT0+YShhZiguLi5lKSl9LGNmPVtdLFg9ZT0+e2xldCB0PXQ9PnRbZV18fGNmO3JldHVybiB0LmlzVGhlbWVHZXR0ZXI9ITAsdH0sbGY9L15cWyg/Oihcd1tcdy1dKik6KT8oLispXF0kL2ksdWY9L15cKCg/Oihcd1tcdy1dKik6KT8oLispXCkkL2ksZGY9L15cZCsoPzpcLlxkKyk/XC9cZCsoPzpcLlxkKyk/JC8sZmY9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxwZj0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sbWY9L14ocmdiYT98aHNsYT98aHdifChvayk/KGxhYnxsY2gpfGNvbG9yLW1peClcKC4rXCkkLyxoZj0vXihpbnNldF8pPy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxnZj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvLF9mPWU9PmRmLnRlc3QoZSksWj1lPT4hIWUmJiFOdW1iZXIuaXNOYU4oTnVtYmVyKGUpKSx2Zj1lPT4hIWUmJk51bWJlci5pc0ludGVnZXIoTnVtYmVyKGUpKSx5Zj1lPT5lLmVuZHNXaXRoKGAlYCkmJlooZS5zbGljZSgwLC0xKSksYmY9ZT0+ZmYudGVzdChlKSx4Zj0oKT0+ITAsU2Y9ZT0+cGYudGVzdChlKSYmIW1mLnRlc3QoZSksQ2Y9KCk9PiExLHdmPWU9PmhmLnRlc3QoZSksVGY9ZT0+Z2YudGVzdChlKSxFZj1lPT4hUShlKSYmISQoZSksRGY9ZT0+ZS5zdGFydHNXaXRoKGBAY29udGFpbmVyYCkmJihlWzEwXT09PWAvYCYmZVsxMV0hPT12b2lkIDB8fGVbMTFdPT09YHNgJiZlWzE2XSE9PXZvaWQgMCYmZS5zdGFydHNXaXRoKGAtc2l6ZS9gLDEwKXx8ZVsxMV09PT1gbmAmJmVbMThdIT09dm9pZCAwJiZlLnN0YXJ0c1dpdGgoYC1ub3JtYWwvYCwxMCkpLE9mPWU9PlVmKGUscWYsQ2YpLFE9ZT0+bGYudGVzdChlKSxrZj1lPT5VZihlLEpmLFNmKSxBZj1lPT5VZihlLFlmLFopLGpmPWU9PlVmKGUsWmYseGYpLE1mPWU9PlVmKGUsWGYsQ2YpLE5mPWU9PlVmKGUsR2YsQ2YpLFBmPWU9PlVmKGUsS2YsVGYpLEZmPWU9PlVmKGUsUWYsd2YpLCQ9ZT0+dWYudGVzdChlKSxJZj1lPT5XZihlLEpmKSxMZj1lPT5XZihlLFhmKSxSZj1lPT5XZihlLEdmKSx6Zj1lPT5XZihlLHFmKSxCZj1lPT5XZihlLEtmKSxWZj1lPT5XZihlLFFmLCEwKSxIZj1lPT5XZihlLFpmLCEwKSxVZj0oZSx0LG4pPT57bGV0IHI9bGYuZXhlYyhlKTtyZXR1cm4gcj9yWzFdP3QoclsxXSk6bihyWzJdKTohMX0sV2Y9KGUsdCxuPSExKT0+e2xldCByPXVmLmV4ZWMoZSk7cmV0dXJuIHI/clsxXT90KHJbMV0pOm46ITF9LEdmPWU9PmU9PT1gcG9zaXRpb25gfHxlPT09YHBlcmNlbnRhZ2VgLEtmPWU9PmU9PT1gaW1hZ2VgfHxlPT09YHVybGAscWY9ZT0+ZT09PWBsZW5ndGhgfHxlPT09YHNpemVgfHxlPT09YGJnLXNpemVgLEpmPWU9PmU9PT1gbGVuZ3RoYCxZZj1lPT5lPT09YG51bWJlcmAsWGY9ZT0+ZT09PWBmYW1pbHktbmFtZWAsWmY9ZT0+ZT09PWBudW1iZXJgfHxlPT09YHdlaWdodGAsUWY9ZT0+ZT09PWBzaGFkb3dgLCRmPXNmKCgpPT57bGV0IGU9WChgY29sb3JgKSx0PVgoYGZvbnRgKSxuPVgoYHRleHRgKSxyPVgoYGZvbnQtd2VpZ2h0YCksaT1YKGB0cmFja2luZ2ApLGE9WChgbGVhZGluZ2ApLG89WChgYnJlYWtwb2ludGApLHM9WChgY29udGFpbmVyYCksYz1YKGBzcGFjaW5nYCksbD1YKGByYWRpdXNgKSx1PVgoYHNoYWRvd2ApLGQ9WChgaW5zZXQtc2hhZG93YCksZj1YKGB0ZXh0LXNoYWRvd2ApLHA9WChgZHJvcC1zaGFkb3dgKSxtPVgoYGJsdXJgKSxoPVgoYHBlcnNwZWN0aXZlYCksZz1YKGBhc3BlY3RgKSxfPVgoYGVhc2VgKSx2PVgoYGFuaW1hdGVgKSx5PSgpPT5bYGF1dG9gLGBhdm9pZGAsYGFsbGAsYGF2b2lkLXBhZ2VgLGBwYWdlYCxgbGVmdGAsYHJpZ2h0YCxgY29sdW1uYF0sYj0oKT0+W2BjZW50ZXJgLGB0b3BgLGBib3R0b21gLGBsZWZ0YCxgcmlnaHRgLGB0b3AtbGVmdGAsYGxlZnQtdG9wYCxgdG9wLXJpZ2h0YCxgcmlnaHQtdG9wYCxgYm90dG9tLXJpZ2h0YCxgcmlnaHQtYm90dG9tYCxgYm90dG9tLWxlZnRgLGBsZWZ0LWJvdHRvbWBdLHg9KCk9PlsuLi5iKCksJCxRXSxTPSgpPT5bYGF1dG9gLGBoaWRkZW5gLGBjbGlwYCxgdmlzaWJsZWAsYHNjcm9sbGBdLEM9KCk9PltgYXV0b2AsYGNvbnRhaW5gLGBub25lYF0sdz0oKT0+WyQsUSxjXSxUPSgpPT5bX2YsYGZ1bGxgLGBhdXRvYCwuLi53KCldLEU9KCk9Plt2Zixgbm9uZWAsYHN1YmdyaWRgLCQsUV0sRD0oKT0+W2BhdXRvYCx7c3BhbjpbYGZ1bGxgLHZmLCQsUV19LHZmLCQsUV0sZWU9KCk9Plt2ZixgYXV0b2AsJCxRXSxPPSgpPT5bYGF1dG9gLGBtaW5gLGBtYXhgLGBmcmAsJCxRXSx0ZT0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGJldHdlZW5gLGBhcm91bmRgLGBldmVubHlgLGBzdHJldGNoYCxgYmFzZWxpbmVgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0saz0oKT0+W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYHN0cmV0Y2hgLGBjZW50ZXItc2FmZWAsYGVuZC1zYWZlYF0sQT0oKT0+W2BhdXRvYCwuLi53KCldLG5lPSgpPT5bX2YsYGF1dG9gLGBmdWxsYCxgZHZ3YCxgZHZoYCxgbHZ3YCxgbHZoYCxgc3Z3YCxgc3ZoYCxgbWluYCxgbWF4YCxgZml0YCwuLi53KCldLGo9KCk9PltfZixgc2NyZWVuYCxgZnVsbGAsYGR2d2AsYGx2d2AsYHN2d2AsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxNPSgpPT5bX2YsYHNjcmVlbmAsYGZ1bGxgLGBsaGAsYGR2aGAsYGx2aGAsYHN2aGAsYG1pbmAsYG1heGAsYGZpdGAsLi4udygpXSxOPSgpPT5bZSwkLFFdLHJlPSgpPT5bLi4uYigpLFJmLE5mLHtwb3NpdGlvbjpbJCxRXX1dLGllPSgpPT5bYG5vLXJlcGVhdGAse3JlcGVhdDpbYGAsYHhgLGB5YCxgc3BhY2VgLGByb3VuZGBdfV0sYWU9KCk9PltgYXV0b2AsYGNvdmVyYCxgY29udGFpbmAsemYsT2Yse3NpemU6WyQsUV19XSxvZT0oKT0+W3lmLElmLGtmXSxQPSgpPT5bYGAsYG5vbmVgLGBmdWxsYCxsLCQsUV0sRj0oKT0+W2BgLFosSWYsa2ZdLHNlPSgpPT5bYHNvbGlkYCxgZGFzaGVkYCxgZG90dGVkYCxgZG91YmxlYF0sY2U9KCk9Pltgbm9ybWFsYCxgbXVsdGlwbHlgLGBzY3JlZW5gLGBvdmVybGF5YCxgZGFya2VuYCxgbGlnaHRlbmAsYGNvbG9yLWRvZGdlYCxgY29sb3ItYnVybmAsYGhhcmQtbGlnaHRgLGBzb2Z0LWxpZ2h0YCxgZGlmZmVyZW5jZWAsYGV4Y2x1c2lvbmAsYGh1ZWAsYHNhdHVyYXRpb25gLGBjb2xvcmAsYGx1bWlub3NpdHlgXSxJPSgpPT5bWix5ZixSZixOZl0sbGU9KCk9PltgYCxgbm9uZWAsbSwkLFFdLEw9KCk9Pltgbm9uZWAsWiwkLFFdLHVlPSgpPT5bYG5vbmVgLFosJCxRXSxkZT0oKT0+W1osJCxRXSxmZT0oKT0+W19mLGBmdWxsYCwuLi53KCldO3JldHVybntjYWNoZVNpemU6NTAwLHRoZW1lOnthbmltYXRlOltgc3BpbmAsYHBpbmdgLGBwdWxzZWAsYGJvdW5jZWBdLGFzcGVjdDpbYHZpZGVvYF0sYmx1cjpbYmZdLGJyZWFrcG9pbnQ6W2JmXSxjb2xvcjpbeGZdLGNvbnRhaW5lcjpbYmZdLCJkcm9wLXNoYWRvdyI6W2JmXSxlYXNlOltgaW5gLGBvdXRgLGBpbi1vdXRgXSxmb250OltFZl0sImZvbnQtd2VpZ2h0IjpbYHRoaW5gLGBleHRyYWxpZ2h0YCxgbGlnaHRgLGBub3JtYWxgLGBtZWRpdW1gLGBzZW1pYm9sZGAsYGJvbGRgLGBleHRyYWJvbGRgLGBibGFja2BdLCJpbnNldC1zaGFkb3ciOltiZl0sbGVhZGluZzpbYG5vbmVgLGB0aWdodGAsYHNudWdgLGBub3JtYWxgLGByZWxheGVkYCxgbG9vc2VgXSxwZXJzcGVjdGl2ZTpbYGRyYW1hdGljYCxgbmVhcmAsYG5vcm1hbGAsYG1pZHJhbmdlYCxgZGlzdGFudGAsYG5vbmVgXSxyYWRpdXM6W2JmXSxzaGFkb3c6W2JmXSxzcGFjaW5nOltgcHhgLFpdLHRleHQ6W2JmXSwidGV4dC1zaGFkb3ciOltiZl0sdHJhY2tpbmc6W2B0aWdodGVyYCxgdGlnaHRgLGBub3JtYWxgLGB3aWRlYCxgd2lkZXJgLGB3aWRlc3RgXX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbYGF1dG9gLGBzcXVhcmVgLF9mLFEsJCxnXX1dLGNvbnRhaW5lcjpbYGNvbnRhaW5lcmBdLCJjb250YWluZXItdHlwZSI6W3siQGNvbnRhaW5lciI6W2BgLGBub3JtYWxgLGBzaXplYCwkLFFdfV0sImNvbnRhaW5lci1uYW1lZCI6W0RmXSxjb2x1bW5zOlt7Y29sdW1uczpbWixRLCQsc119XSwiYnJlYWstYWZ0ZXIiOlt7ImJyZWFrLWFmdGVyIjp5KCl9XSwiYnJlYWstYmVmb3JlIjpbeyJicmVhay1iZWZvcmUiOnkoKX1dLCJicmVhay1pbnNpZGUiOlt7ImJyZWFrLWluc2lkZSI6W2BhdXRvYCxgYXZvaWRgLGBhdm9pZC1wYWdlYCxgYXZvaWQtY29sdW1uYF19XSwiYm94LWRlY29yYXRpb24iOlt7ImJveC1kZWNvcmF0aW9uIjpbYHNsaWNlYCxgY2xvbmVgXX1dLGJveDpbe2JveDpbYGJvcmRlcmAsYGNvbnRlbnRgXX1dLGRpc3BsYXk6W2BibG9ja2AsYGlubGluZS1ibG9ja2AsYGlubGluZWAsYGZsZXhgLGBpbmxpbmUtZmxleGAsYHRhYmxlYCxgaW5saW5lLXRhYmxlYCxgdGFibGUtY2FwdGlvbmAsYHRhYmxlLWNlbGxgLGB0YWJsZS1jb2x1bW5gLGB0YWJsZS1jb2x1bW4tZ3JvdXBgLGB0YWJsZS1mb290ZXItZ3JvdXBgLGB0YWJsZS1oZWFkZXItZ3JvdXBgLGB0YWJsZS1yb3ctZ3JvdXBgLGB0YWJsZS1yb3dgLGBmbG93LXJvb3RgLGBncmlkYCxgaW5saW5lLWdyaWRgLGBjb250ZW50c2AsYGxpc3QtaXRlbWAsYGhpZGRlbmBdLHNyOltgc3Itb25seWAsYG5vdC1zci1vbmx5YF0sZmxvYXQ6W3tmbG9hdDpbYHJpZ2h0YCxgbGVmdGAsYG5vbmVgLGBzdGFydGAsYGVuZGBdfV0sY2xlYXI6W3tjbGVhcjpbYGxlZnRgLGByaWdodGAsYGJvdGhgLGBub25lYCxgc3RhcnRgLGBlbmRgXX1dLGlzb2xhdGlvbjpbYGlzb2xhdGVgLGBpc29sYXRpb24tYXV0b2BdLCJvYmplY3QtZml0Ijpbe29iamVjdDpbYGNvbnRhaW5gLGBjb3ZlcmAsYGZpbGxgLGBub25lYCxgc2NhbGUtZG93bmBdfV0sIm9iamVjdC1wb3NpdGlvbiI6W3tvYmplY3Q6eCgpfV0sb3ZlcmZsb3c6W3tvdmVyZmxvdzpTKCl9XSwib3ZlcmZsb3cteCI6W3sib3ZlcmZsb3cteCI6UygpfV0sIm92ZXJmbG93LXkiOlt7Im92ZXJmbG93LXkiOlMoKX1dLG92ZXJzY3JvbGw6W3tvdmVyc2Nyb2xsOkMoKX1dLCJvdmVyc2Nyb2xsLXgiOlt7Im92ZXJzY3JvbGwteCI6QygpfV0sIm92ZXJzY3JvbGwteSI6W3sib3ZlcnNjcm9sbC15IjpDKCl9XSxwb3NpdGlvbjpbYHN0YXRpY2AsYGZpeGVkYCxgYWJzb2x1dGVgLGByZWxhdGl2ZWAsYHN0aWNreWBdLGluc2V0Olt7aW5zZXQ6VCgpfV0sImluc2V0LXgiOlt7Imluc2V0LXgiOlQoKX1dLCJpbnNldC15IjpbeyJpbnNldC15IjpUKCl9XSxzdGFydDpbeyJpbnNldC1zIjpUKCksc3RhcnQ6VCgpfV0sZW5kOlt7Imluc2V0LWUiOlQoKSxlbmQ6VCgpfV0sImluc2V0LWJzIjpbeyJpbnNldC1icyI6VCgpfV0sImluc2V0LWJlIjpbeyJpbnNldC1iZSI6VCgpfV0sdG9wOlt7dG9wOlQoKX1dLHJpZ2h0Olt7cmlnaHQ6VCgpfV0sYm90dG9tOlt7Ym90dG9tOlQoKX1dLGxlZnQ6W3tsZWZ0OlQoKX1dLHZpc2liaWxpdHk6W2B2aXNpYmxlYCxgaW52aXNpYmxlYCxgY29sbGFwc2VgXSx6Olt7ejpbdmYsYGF1dG9gLCQsUV19XSxiYXNpczpbe2Jhc2lzOltfZixgZnVsbGAsYGF1dG9gLHMsLi4udygpXX1dLCJmbGV4LWRpcmVjdGlvbiI6W3tmbGV4Oltgcm93YCxgcm93LXJldmVyc2VgLGBjb2xgLGBjb2wtcmV2ZXJzZWBdfV0sImZsZXgtd3JhcCI6W3tmbGV4Oltgbm93cmFwYCxgd3JhcGAsYHdyYXAtcmV2ZXJzZWBdfV0sZmxleDpbe2ZsZXg6W1osX2YsYGF1dG9gLGBpbml0aWFsYCxgbm9uZWAsUV19XSxncm93Olt7Z3JvdzpbYGAsWiwkLFFdfV0sc2hyaW5rOlt7c2hyaW5rOltgYCxaLCQsUV19XSxvcmRlcjpbe29yZGVyOlt2ZixgZmlyc3RgLGBsYXN0YCxgbm9uZWAsJCxRXX1dLCJncmlkLWNvbHMiOlt7ImdyaWQtY29scyI6RSgpfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOkQoKX1dLCJjb2wtc3RhcnQiOlt7ImNvbC1zdGFydCI6ZWUoKX1dLCJjb2wtZW5kIjpbeyJjb2wtZW5kIjplZSgpfV0sImdyaWQtcm93cyI6W3siZ3JpZC1yb3dzIjpFKCl9XSwicm93LXN0YXJ0LWVuZCI6W3tyb3c6RCgpfV0sInJvdy1zdGFydCI6W3sicm93LXN0YXJ0IjplZSgpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOmVlKCl9XSwiZ3JpZC1mbG93IjpbeyJncmlkLWZsb3ciOltgcm93YCxgY29sYCxgZGVuc2VgLGByb3ctZGVuc2VgLGBjb2wtZGVuc2VgXX1dLCJhdXRvLWNvbHMiOlt7ImF1dG8tY29scyI6TygpfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpPKCl9XSxnYXA6W3tnYXA6dygpfV0sImdhcC14IjpbeyJnYXAteCI6dygpfV0sImdhcC15IjpbeyJnYXAteSI6dygpfV0sImp1c3RpZnktY29udGVudCI6W3tqdXN0aWZ5OlsuLi50ZSgpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbLi4uaygpLGBub3JtYWxgXX1dLCJqdXN0aWZ5LXNlbGYiOlt7Imp1c3RpZnktc2VsZiI6W2BhdXRvYCwuLi5rKCldfV0sImFsaWduLWNvbnRlbnQiOlt7Y29udGVudDpbYG5vcm1hbGAsLi4udGUoKV19XSwiYWxpZ24taXRlbXMiOlt7aXRlbXM6Wy4uLmsoKSx7YmFzZWxpbmU6W2BgLGBsYXN0YF19XX1dLCJhbGlnbi1zZWxmIjpbe3NlbGY6W2BhdXRvYCwuLi5rKCkse2Jhc2VsaW5lOltgYCxgbGFzdGBdfV19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6dGUoKX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsuLi5rKCksYGJhc2VsaW5lYF19XSwicGxhY2Utc2VsZiI6W3sicGxhY2Utc2VsZiI6W2BhdXRvYCwuLi5rKCldfV0scDpbe3A6dygpfV0scHg6W3tweDp3KCl9XSxweTpbe3B5OncoKX1dLHBzOlt7cHM6dygpfV0scGU6W3twZTp3KCl9XSxwYnM6W3twYnM6dygpfV0scGJlOlt7cGJlOncoKX1dLHB0Olt7cHQ6dygpfV0scHI6W3twcjp3KCl9XSxwYjpbe3BiOncoKX1dLHBsOlt7cGw6dygpfV0sbTpbe206QSgpfV0sbXg6W3tteDpBKCl9XSxteTpbe215OkEoKX1dLG1zOlt7bXM6QSgpfV0sbWU6W3ttZTpBKCl9XSxtYnM6W3ttYnM6QSgpfV0sbWJlOlt7bWJlOkEoKX1dLG10Olt7bXQ6QSgpfV0sbXI6W3ttcjpBKCl9XSxtYjpbe21iOkEoKX1dLG1sOlt7bWw6QSgpfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOncoKX1dLCJzcGFjZS14LXJldmVyc2UiOltgc3BhY2UteC1yZXZlcnNlYF0sInNwYWNlLXkiOlt7InNwYWNlLXkiOncoKX1dLCJzcGFjZS15LXJldmVyc2UiOltgc3BhY2UteS1yZXZlcnNlYF0sc2l6ZTpbe3NpemU6bmUoKX1dLCJpbmxpbmUtc2l6ZSI6W3tpbmxpbmU6W2BhdXRvYCwuLi5qKCldfV0sIm1pbi1pbmxpbmUtc2l6ZSI6W3sibWluLWlubGluZSI6W2BhdXRvYCwuLi5qKCldfV0sIm1heC1pbmxpbmUtc2l6ZSI6W3sibWF4LWlubGluZSI6W2Bub25lYCwuLi5qKCldfV0sImJsb2NrLXNpemUiOlt7YmxvY2s6W2BhdXRvYCwuLi5NKCldfV0sIm1pbi1ibG9jay1zaXplIjpbeyJtaW4tYmxvY2siOltgYXV0b2AsLi4uTSgpXX1dLCJtYXgtYmxvY2stc2l6ZSI6W3sibWF4LWJsb2NrIjpbYG5vbmVgLC4uLk0oKV19XSx3Olt7dzpbcyxgc2NyZWVuYCwuLi5uZSgpXX1dLCJtaW4tdyI6W3sibWluLXciOltzLGBzY3JlZW5gLGBub25lYCwuLi5uZSgpXX1dLCJtYXgtdyI6W3sibWF4LXciOltzLGBzY3JlZW5gLGBub25lYCxgcHJvc2VgLHtzY3JlZW46W29dfSwuLi5uZSgpXX1dLGg6W3toOltgc2NyZWVuYCxgbGhgLC4uLm5lKCldfV0sIm1pbi1oIjpbeyJtaW4taCI6W2BzY3JlZW5gLGBsaGAsYG5vbmVgLC4uLm5lKCldfV0sIm1heC1oIjpbeyJtYXgtaCI6W2BzY3JlZW5gLGBsaGAsLi4ubmUoKV19XSwiZm9udC1zaXplIjpbe3RleHQ6W2BiYXNlYCxuLElmLGtmXX1dLCJmb250LXNtb290aGluZyI6W2BhbnRpYWxpYXNlZGAsYHN1YnBpeGVsLWFudGlhbGlhc2VkYF0sImZvbnQtc3R5bGUiOltgaXRhbGljYCxgbm90LWl0YWxpY2BdLCJmb250LXdlaWdodCI6W3tmb250OltyLEhmLGpmXX1dLCJmb250LXN0cmV0Y2giOlt7ImZvbnQtc3RyZXRjaCI6W2B1bHRyYS1jb25kZW5zZWRgLGBleHRyYS1jb25kZW5zZWRgLGBjb25kZW5zZWRgLGBzZW1pLWNvbmRlbnNlZGAsYG5vcm1hbGAsYHNlbWktZXhwYW5kZWRgLGBleHBhbmRlZGAsYGV4dHJhLWV4cGFuZGVkYCxgdWx0cmEtZXhwYW5kZWRgLHlmLFFdfV0sImZvbnQtZmFtaWx5Ijpbe2ZvbnQ6W0xmLE1mLHRdfV0sImZvbnQtZmVhdHVyZXMiOlt7ImZvbnQtZmVhdHVyZXMiOltRXX1dLCJmdm4tbm9ybWFsIjpbYG5vcm1hbC1udW1zYF0sImZ2bi1vcmRpbmFsIjpbYG9yZGluYWxgXSwiZnZuLXNsYXNoZWQtemVybyI6W2BzbGFzaGVkLXplcm9gXSwiZnZuLWZpZ3VyZSI6W2BsaW5pbmctbnVtc2AsYG9sZHN0eWxlLW51bXNgXSwiZnZuLXNwYWNpbmciOltgcHJvcG9ydGlvbmFsLW51bXNgLGB0YWJ1bGFyLW51bXNgXSwiZnZuLWZyYWN0aW9uIjpbYGRpYWdvbmFsLWZyYWN0aW9uc2AsYHN0YWNrZWQtZnJhY3Rpb25zYF0sdHJhY2tpbmc6W3t0cmFja2luZzpbaSwkLFFdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOltaLGBub25lYCwkLEFmXX1dLGxlYWRpbmc6W3tsZWFkaW5nOlthLC4uLncoKV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6W2Bub25lYCwkLFFdfV0sImxpc3Qtc3R5bGUtcG9zaXRpb24iOlt7bGlzdDpbYGluc2lkZWAsYG91dHNpZGVgXX1dLCJsaXN0LXN0eWxlLXR5cGUiOlt7bGlzdDpbYGRpc2NgLGBkZWNpbWFsYCxgbm9uZWAsJCxRXX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OltgbGVmdGAsYGNlbnRlcmAsYHJpZ2h0YCxganVzdGlmeWAsYHN0YXJ0YCxgZW5kYF19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6TigpfV0sInRleHQtY29sb3IiOlt7dGV4dDpOKCl9XSwidGV4dC1kZWNvcmF0aW9uIjpbYHVuZGVybGluZWAsYG92ZXJsaW5lYCxgbGluZS10aHJvdWdoYCxgbm8tdW5kZXJsaW5lYF0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6W3tkZWNvcmF0aW9uOlsuLi5zZSgpLGB3YXZ5YF19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOltaLGBmcm9tLWZvbnRgLGBhdXRvYCwkLGtmXX1dLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiOlt7ZGVjb3JhdGlvbjpOKCl9XSwidW5kZXJsaW5lLW9mZnNldCI6W3sidW5kZXJsaW5lLW9mZnNldCI6W1osYGF1dG9gLCQsUV19XSwidGV4dC10cmFuc2Zvcm0iOltgdXBwZXJjYXNlYCxgbG93ZXJjYXNlYCxgY2FwaXRhbGl6ZWAsYG5vcm1hbC1jYXNlYF0sInRleHQtb3ZlcmZsb3ciOltgdHJ1bmNhdGVgLGB0ZXh0LWVsbGlwc2lzYCxgdGV4dC1jbGlwYF0sInRleHQtd3JhcCI6W3t0ZXh0Oltgd3JhcGAsYG5vd3JhcGAsYGJhbGFuY2VgLGBwcmV0dHlgXX1dLGluZGVudDpbe2luZGVudDp3KCl9XSwidGFiLXNpemUiOlt7dGFiOlt2ZiwkLFFdfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOltgYmFzZWxpbmVgLGB0b3BgLGBtaWRkbGVgLGBib3R0b21gLGB0ZXh0LXRvcGAsYHRleHQtYm90dG9tYCxgc3ViYCxgc3VwZXJgLCQsUV19XSx3aGl0ZXNwYWNlOlt7d2hpdGVzcGFjZTpbYG5vcm1hbGAsYG5vd3JhcGAsYHByZWAsYHByZS1saW5lYCxgcHJlLXdyYXBgLGBicmVhay1zcGFjZXNgXX1dLGJyZWFrOlt7YnJlYWs6W2Bub3JtYWxgLGB3b3Jkc2AsYGFsbGAsYGtlZXBgXX1dLHdyYXA6W3t3cmFwOltgYnJlYWstd29yZGAsYGFueXdoZXJlYCxgbm9ybWFsYF19XSxoeXBoZW5zOlt7aHlwaGVuczpbYG5vbmVgLGBtYW51YWxgLGBhdXRvYF19XSxjb250ZW50Olt7Y29udGVudDpbYG5vbmVgLCQsUV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbYGZpeGVkYCxgbG9jYWxgLGBzY3JvbGxgXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgdGV4dGBdfV0sImJnLW9yaWdpbiI6W3siYmctb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YF19XSwiYmctcG9zaXRpb24iOlt7Ymc6cmUoKX1dLCJiZy1yZXBlYXQiOlt7Ymc6aWUoKX1dLCJiZy1zaXplIjpbe2JnOmFlKCl9XSwiYmctaW1hZ2UiOlt7Ymc6W2Bub25lYCx7bGluZWFyOlt7dG86W2B0YCxgdHJgLGByYCxgYnJgLGBiYCxgYmxgLGBsYCxgdGxgXX0sdmYsJCxRXSxyYWRpYWw6W2BgLCQsUV0sY29uaWM6W3ZmLCQsUV19LEJmLFBmXX1dLCJiZy1jb2xvciI6W3tiZzpOKCl9XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpvZSgpfV0sImdyYWRpZW50LXZpYS1wb3MiOlt7dmlhOm9lKCl9XSwiZ3JhZGllbnQtdG8tcG9zIjpbe3RvOm9lKCl9XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOk4oKX1dLCJncmFkaWVudC12aWEiOlt7dmlhOk4oKX1dLCJncmFkaWVudC10byI6W3t0bzpOKCl9XSxyb3VuZGVkOlt7cm91bmRlZDpQKCl9XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOlAoKX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6UCgpfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10IjpQKCl9XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOlAoKX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6UCgpfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpQKCl9XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6UCgpfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOlAoKX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpQKCl9XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6UCgpfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOlAoKX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpQKCl9XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6UCgpfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOlAoKX1dLCJib3JkZXItdyI6W3tib3JkZXI6RigpfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14IjpGKCl9XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOkYoKX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6RigpfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpGKCl9XSwiYm9yZGVyLXctYnMiOlt7ImJvcmRlci1icyI6RigpfV0sImJvcmRlci13LWJlIjpbeyJib3JkZXItYmUiOkYoKX1dLCJib3JkZXItdy10IjpbeyJib3JkZXItdCI6RigpfV0sImJvcmRlci13LXIiOlt7ImJvcmRlci1yIjpGKCl9XSwiYm9yZGVyLXctYiI6W3siYm9yZGVyLWIiOkYoKX1dLCJib3JkZXItdy1sIjpbeyJib3JkZXItbCI6RigpfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6RigpfV0sImRpdmlkZS14LXJldmVyc2UiOltgZGl2aWRlLXgtcmV2ZXJzZWBdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOkYoKX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbYGRpdmlkZS15LXJldmVyc2VgXSwiYm9yZGVyLXN0eWxlIjpbe2JvcmRlcjpbLi4uc2UoKSxgaGlkZGVuYCxgbm9uZWBdfV0sImRpdmlkZS1zdHlsZSI6W3tkaXZpZGU6Wy4uLnNlKCksYGhpZGRlbmAsYG5vbmVgXX1dLCJib3JkZXItY29sb3IiOlt7Ym9yZGVyOk4oKX1dLCJib3JkZXItY29sb3IteCI6W3siYm9yZGVyLXgiOk4oKX1dLCJib3JkZXItY29sb3IteSI6W3siYm9yZGVyLXkiOk4oKX1dLCJib3JkZXItY29sb3ItcyI6W3siYm9yZGVyLXMiOk4oKX1dLCJib3JkZXItY29sb3ItZSI6W3siYm9yZGVyLWUiOk4oKX1dLCJib3JkZXItY29sb3ItYnMiOlt7ImJvcmRlci1icyI6TigpfV0sImJvcmRlci1jb2xvci1iZSI6W3siYm9yZGVyLWJlIjpOKCl9XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpOKCl9XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpOKCl9XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpOKCl9XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpOKCl9XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpOKCl9XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsuLi5zZSgpLGBub25lYCxgaGlkZGVuYF19XSwib3V0bGluZS1vZmZzZXQiOlt7Im91dGxpbmUtb2Zmc2V0IjpbWiwkLFFdfV0sIm91dGxpbmUtdyI6W3tvdXRsaW5lOltgYCxaLElmLGtmXX1dLCJvdXRsaW5lLWNvbG9yIjpbe291dGxpbmU6TigpfV0sc2hhZG93Olt7c2hhZG93OltgYCxgbm9uZWAsdSxWZixGZl19XSwic2hhZG93LWNvbG9yIjpbe3NoYWRvdzpOKCl9XSwiaW5zZXQtc2hhZG93IjpbeyJpbnNldC1zaGFkb3ciOltgbm9uZWAsZCxWZixGZl19XSwiaW5zZXQtc2hhZG93LWNvbG9yIjpbeyJpbnNldC1zaGFkb3ciOk4oKX1dLCJyaW5nLXciOlt7cmluZzpGKCl9XSwicmluZy13LWluc2V0IjpbYHJpbmctaW5zZXRgXSwicmluZy1jb2xvciI6W3tyaW5nOk4oKX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W1osa2ZdfV0sInJpbmctb2Zmc2V0LWNvbG9yIjpbeyJyaW5nLW9mZnNldCI6TigpfV0sImluc2V0LXJpbmctdyI6W3siaW5zZXQtcmluZyI6RigpfV0sImluc2V0LXJpbmctY29sb3IiOlt7Imluc2V0LXJpbmciOk4oKX1dLCJ0ZXh0LXNoYWRvdyI6W3sidGV4dC1zaGFkb3ciOltgbm9uZWAsZixWZixGZl19XSwidGV4dC1zaGFkb3ctY29sb3IiOlt7InRleHQtc2hhZG93IjpOKCl9XSxvcGFjaXR5Olt7b3BhY2l0eTpbWiwkLFFdfV0sIm1peC1ibGVuZCI6W3sibWl4LWJsZW5kIjpbLi4uY2UoKSxgcGx1cy1kYXJrZXJgLGBwbHVzLWxpZ2h0ZXJgXX1dLCJiZy1ibGVuZCI6W3siYmctYmxlbmQiOmNlKCl9XSwibWFzay1jbGlwIjpbeyJtYXNrLWNsaXAiOltgYm9yZGVyYCxgcGFkZGluZ2AsYGNvbnRlbnRgLGBmaWxsYCxgc3Ryb2tlYCxgdmlld2BdfSxgbWFzay1uby1jbGlwYF0sIm1hc2stY29tcG9zaXRlIjpbe21hc2s6W2BhZGRgLGBzdWJ0cmFjdGAsYGludGVyc2VjdGAsYGV4Y2x1ZGVgXX1dLCJtYXNrLWltYWdlLWxpbmVhci1wb3MiOlt7Im1hc2stbGluZWFyIjpbWl19XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1wb3MiOlt7Im1hc2stbGluZWFyLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWxpbmVhci10by1wb3MiOlt7Im1hc2stbGluZWFyLXRvIjpJKCl9XSwibWFzay1pbWFnZS1saW5lYXItZnJvbS1jb2xvciI6W3sibWFzay1saW5lYXItZnJvbSI6TigpfV0sIm1hc2staW1hZ2UtbGluZWFyLXRvLWNvbG9yIjpbeyJtYXNrLWxpbmVhci10byI6TigpfV0sIm1hc2staW1hZ2UtdC1mcm9tLXBvcyI6W3sibWFzay10LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXQtdG8tcG9zIjpbeyJtYXNrLXQtdG8iOkkoKX1dLCJtYXNrLWltYWdlLXQtZnJvbS1jb2xvciI6W3sibWFzay10LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXQtdG8tY29sb3IiOlt7Im1hc2stdC10byI6TigpfV0sIm1hc2staW1hZ2Utci1mcm9tLXBvcyI6W3sibWFzay1yLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXItdG8tcG9zIjpbeyJtYXNrLXItdG8iOkkoKX1dLCJtYXNrLWltYWdlLXItZnJvbS1jb2xvciI6W3sibWFzay1yLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXItdG8tY29sb3IiOlt7Im1hc2stci10byI6TigpfV0sIm1hc2staW1hZ2UtYi1mcm9tLXBvcyI6W3sibWFzay1iLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWItdG8tcG9zIjpbeyJtYXNrLWItdG8iOkkoKX1dLCJtYXNrLWltYWdlLWItZnJvbS1jb2xvciI6W3sibWFzay1iLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWItdG8tY29sb3IiOlt7Im1hc2stYi10byI6TigpfV0sIm1hc2staW1hZ2UtbC1mcm9tLXBvcyI6W3sibWFzay1sLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLWwtdG8tcG9zIjpbeyJtYXNrLWwtdG8iOkkoKX1dLCJtYXNrLWltYWdlLWwtZnJvbS1jb2xvciI6W3sibWFzay1sLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWwtdG8tY29sb3IiOlt7Im1hc2stbC10byI6TigpfV0sIm1hc2staW1hZ2UteC1mcm9tLXBvcyI6W3sibWFzay14LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXgtdG8tcG9zIjpbeyJtYXNrLXgtdG8iOkkoKX1dLCJtYXNrLWltYWdlLXgtZnJvbS1jb2xvciI6W3sibWFzay14LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXgtdG8tY29sb3IiOlt7Im1hc2steC10byI6TigpfV0sIm1hc2staW1hZ2UteS1mcm9tLXBvcyI6W3sibWFzay15LWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXktdG8tcG9zIjpbeyJtYXNrLXktdG8iOkkoKX1dLCJtYXNrLWltYWdlLXktZnJvbS1jb2xvciI6W3sibWFzay15LWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLXktdG8tY29sb3IiOlt7Im1hc2steS10byI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsIjpbeyJtYXNrLXJhZGlhbCI6WyQsUV19XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1wb3MiOlt7Im1hc2stcmFkaWFsLWZyb20iOkkoKX1dLCJtYXNrLWltYWdlLXJhZGlhbC10by1wb3MiOlt7Im1hc2stcmFkaWFsLXRvIjpJKCl9XSwibWFzay1pbWFnZS1yYWRpYWwtZnJvbS1jb2xvciI6W3sibWFzay1yYWRpYWwtZnJvbSI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXRvLWNvbG9yIjpbeyJtYXNrLXJhZGlhbC10byI6TigpfV0sIm1hc2staW1hZ2UtcmFkaWFsLXNoYXBlIjpbeyJtYXNrLXJhZGlhbCI6W2BjaXJjbGVgLGBlbGxpcHNlYF19XSwibWFzay1pbWFnZS1yYWRpYWwtc2l6ZSI6W3sibWFzay1yYWRpYWwiOlt7Y2xvc2VzdDpbYHNpZGVgLGBjb3JuZXJgXSxmYXJ0aGVzdDpbYHNpZGVgLGBjb3JuZXJgXX1dfV0sIm1hc2staW1hZ2UtcmFkaWFsLXBvcyI6W3sibWFzay1yYWRpYWwtYXQiOmIoKX1dLCJtYXNrLWltYWdlLWNvbmljLXBvcyI6W3sibWFzay1jb25pYyI6W1pdfV0sIm1hc2staW1hZ2UtY29uaWMtZnJvbS1wb3MiOlt7Im1hc2stY29uaWMtZnJvbSI6SSgpfV0sIm1hc2staW1hZ2UtY29uaWMtdG8tcG9zIjpbeyJtYXNrLWNvbmljLXRvIjpJKCl9XSwibWFzay1pbWFnZS1jb25pYy1mcm9tLWNvbG9yIjpbeyJtYXNrLWNvbmljLWZyb20iOk4oKX1dLCJtYXNrLWltYWdlLWNvbmljLXRvLWNvbG9yIjpbeyJtYXNrLWNvbmljLXRvIjpOKCl9XSwibWFzay1tb2RlIjpbe21hc2s6W2BhbHBoYWAsYGx1bWluYW5jZWAsYG1hdGNoYF19XSwibWFzay1vcmlnaW4iOlt7Im1hc2stb3JpZ2luIjpbYGJvcmRlcmAsYHBhZGRpbmdgLGBjb250ZW50YCxgZmlsbGAsYHN0cm9rZWAsYHZpZXdgXX1dLCJtYXNrLXBvc2l0aW9uIjpbe21hc2s6cmUoKX1dLCJtYXNrLXJlcGVhdCI6W3ttYXNrOmllKCl9XSwibWFzay1zaXplIjpbe21hc2s6YWUoKX1dLCJtYXNrLXR5cGUiOlt7Im1hc2stdHlwZSI6W2BhbHBoYWAsYGx1bWluYW5jZWBdfV0sIm1hc2staW1hZ2UiOlt7bWFzazpbYG5vbmVgLCQsUV19XSxmaWx0ZXI6W3tmaWx0ZXI6W2BgLGBub25lYCwkLFFdfV0sYmx1cjpbe2JsdXI6bGUoKX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltaLCQsUV19XSxjb250cmFzdDpbe2NvbnRyYXN0OltaLCQsUV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbYGAsYG5vbmVgLHAsVmYsRmZdfV0sImRyb3Atc2hhZG93LWNvbG9yIjpbeyJkcm9wLXNoYWRvdyI6TigpfV0sZ3JheXNjYWxlOlt7Z3JheXNjYWxlOltgYCxaLCQsUV19XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W1osJCxRXX1dLGludmVydDpbe2ludmVydDpbYGAsWiwkLFFdfV0sc2F0dXJhdGU6W3tzYXR1cmF0ZTpbWiwkLFFdfV0sc2VwaWE6W3tzZXBpYTpbYGAsWiwkLFFdfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbYGAsYG5vbmVgLCQsUV19XSwiYmFja2Ryb3AtYmx1ciI6W3siYmFja2Ryb3AtYmx1ciI6bGUoKX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbWiwkLFFdfV0sImJhY2tkcm9wLWNvbnRyYXN0IjpbeyJiYWNrZHJvcC1jb250cmFzdCI6W1osJCxRXX1dLCJiYWNrZHJvcC1ncmF5c2NhbGUiOlt7ImJhY2tkcm9wLWdyYXlzY2FsZSI6W2BgLFosJCxRXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbWiwkLFFdfV0sImJhY2tkcm9wLWludmVydCI6W3siYmFja2Ryb3AtaW52ZXJ0IjpbYGAsWiwkLFFdfV0sImJhY2tkcm9wLW9wYWNpdHkiOlt7ImJhY2tkcm9wLW9wYWNpdHkiOltaLCQsUV19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbWiwkLFFdfV0sImJhY2tkcm9wLXNlcGlhIjpbeyJiYWNrZHJvcC1zZXBpYSI6W2BgLFosJCxRXX1dLCJib3JkZXItY29sbGFwc2UiOlt7Ym9yZGVyOltgY29sbGFwc2VgLGBzZXBhcmF0ZWBdfV0sImJvcmRlci1zcGFjaW5nIjpbeyJib3JkZXItc3BhY2luZyI6dygpfV0sImJvcmRlci1zcGFjaW5nLXgiOlt7ImJvcmRlci1zcGFjaW5nLXgiOncoKX1dLCJib3JkZXItc3BhY2luZy15IjpbeyJib3JkZXItc3BhY2luZy15Ijp3KCl9XSwidGFibGUtbGF5b3V0Ijpbe3RhYmxlOltgYXV0b2AsYGZpeGVkYF19XSxjYXB0aW9uOlt7Y2FwdGlvbjpbYHRvcGAsYGJvdHRvbWBdfV0sdHJhbnNpdGlvbjpbe3RyYW5zaXRpb246W2BgLGBhbGxgLGBjb2xvcnNgLGBvcGFjaXR5YCxgc2hhZG93YCxgdHJhbnNmb3JtYCxgbm9uZWAsJCxRXX1dLCJ0cmFuc2l0aW9uLWJlaGF2aW9yIjpbe3RyYW5zaXRpb246W2Bub3JtYWxgLGBkaXNjcmV0ZWBdfV0sZHVyYXRpb246W3tkdXJhdGlvbjpbWixgaW5pdGlhbGAsJCxRXX1dLGVhc2U6W3tlYXNlOltgbGluZWFyYCxgaW5pdGlhbGAsXywkLFFdfV0sZGVsYXk6W3tkZWxheTpbWiwkLFFdfV0sYW5pbWF0ZTpbe2FuaW1hdGU6W2Bub25lYCx2LCQsUV19XSxiYWNrZmFjZTpbe2JhY2tmYWNlOltgaGlkZGVuYCxgdmlzaWJsZWBdfV0scGVyc3BlY3RpdmU6W3twZXJzcGVjdGl2ZTpbaCwkLFFdfV0sInBlcnNwZWN0aXZlLW9yaWdpbiI6W3sicGVyc3BlY3RpdmUtb3JpZ2luIjp4KCl9XSxyb3RhdGU6W3tyb3RhdGU6TCgpfV0sInJvdGF0ZS14IjpbeyJyb3RhdGUteCI6TCgpfV0sInJvdGF0ZS15IjpbeyJyb3RhdGUteSI6TCgpfV0sInJvdGF0ZS16IjpbeyJyb3RhdGUteiI6TCgpfV0sc2NhbGU6W3tzY2FsZTp1ZSgpfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOnVlKCl9XSwic2NhbGUteSI6W3sic2NhbGUteSI6dWUoKX1dLCJzY2FsZS16IjpbeyJzY2FsZS16Ijp1ZSgpfV0sInNjYWxlLTNkIjpbYHNjYWxlLTNkYF0sc2tldzpbe3NrZXc6ZGUoKX1dLCJza2V3LXgiOlt7InNrZXcteCI6ZGUoKX1dLCJza2V3LXkiOlt7InNrZXcteSI6ZGUoKX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbJCxRLGBgLGBub25lYCxgZ3B1YCxgY3B1YF19XSwidHJhbnNmb3JtLW9yaWdpbiI6W3tvcmlnaW46eCgpfV0sInRyYW5zZm9ybS1zdHlsZSI6W3t0cmFuc2Zvcm06W2AzZGAsYGZsYXRgXX1dLHRyYW5zbGF0ZTpbe3RyYW5zbGF0ZTpmZSgpfV0sInRyYW5zbGF0ZS14IjpbeyJ0cmFuc2xhdGUteCI6ZmUoKX1dLCJ0cmFuc2xhdGUteSI6W3sidHJhbnNsYXRlLXkiOmZlKCl9XSwidHJhbnNsYXRlLXoiOlt7InRyYW5zbGF0ZS16IjpmZSgpfV0sInRyYW5zbGF0ZS1ub25lIjpbYHRyYW5zbGF0ZS1ub25lYF0sem9vbTpbe3pvb206W3ZmLCQsUV19XSxhY2NlbnQ6W3thY2NlbnQ6TigpfV0sYXBwZWFyYW5jZTpbe2FwcGVhcmFuY2U6W2Bub25lYCxgYXV0b2BdfV0sImNhcmV0LWNvbG9yIjpbe2NhcmV0Ok4oKX1dLCJjb2xvci1zY2hlbWUiOlt7c2NoZW1lOltgbm9ybWFsYCxgZGFya2AsYGxpZ2h0YCxgbGlnaHQtZGFya2AsYG9ubHktZGFya2AsYG9ubHktbGlnaHRgXX1dLGN1cnNvcjpbe2N1cnNvcjpbYGF1dG9gLGBkZWZhdWx0YCxgcG9pbnRlcmAsYHdhaXRgLGB0ZXh0YCxgbW92ZWAsYGhlbHBgLGBub3QtYWxsb3dlZGAsYG5vbmVgLGBjb250ZXh0LW1lbnVgLGBwcm9ncmVzc2AsYGNlbGxgLGBjcm9zc2hhaXJgLGB2ZXJ0aWNhbC10ZXh0YCxgYWxpYXNgLGBjb3B5YCxgbm8tZHJvcGAsYGdyYWJgLGBncmFiYmluZ2AsYGFsbC1zY3JvbGxgLGBjb2wtcmVzaXplYCxgcm93LXJlc2l6ZWAsYG4tcmVzaXplYCxgZS1yZXNpemVgLGBzLXJlc2l6ZWAsYHctcmVzaXplYCxgbmUtcmVzaXplYCxgbnctcmVzaXplYCxgc2UtcmVzaXplYCxgc3ctcmVzaXplYCxgZXctcmVzaXplYCxgbnMtcmVzaXplYCxgbmVzdy1yZXNpemVgLGBud3NlLXJlc2l6ZWAsYHpvb20taW5gLGB6b29tLW91dGAsJCxRXX1dLCJmaWVsZC1zaXppbmciOlt7ImZpZWxkLXNpemluZyI6W2BmaXhlZGAsYGNvbnRlbnRgXX1dLCJwb2ludGVyLWV2ZW50cyI6W3sicG9pbnRlci1ldmVudHMiOltgYXV0b2AsYG5vbmVgXX1dLHJlc2l6ZTpbe3Jlc2l6ZTpbYG5vbmVgLGBgLGB5YCxgeGBdfV0sInNjcm9sbC1iZWhhdmlvciI6W3tzY3JvbGw6W2BhdXRvYCxgc21vb3RoYF19XSwic2Nyb2xsYmFyLXRodW1iLWNvbG9yIjpbeyJzY3JvbGxiYXItdGh1bWIiOk4oKX1dLCJzY3JvbGxiYXItdHJhY2stY29sb3IiOlt7InNjcm9sbGJhci10cmFjayI6TigpfV0sInNjcm9sbGJhci1ndXR0ZXIiOlt7InNjcm9sbGJhci1ndXR0ZXIiOltgYXV0b2AsYHN0YWJsZWAsYGJvdGhgXX1dLCJzY3JvbGxiYXItdyI6W3tzY3JvbGxiYXI6W2BhdXRvYCxgdGhpbmAsYG5vbmVgXX1dLCJzY3JvbGwtbSI6W3sic2Nyb2xsLW0iOncoKX1dLCJzY3JvbGwtbXgiOlt7InNjcm9sbC1teCI6dygpfV0sInNjcm9sbC1teSI6W3sic2Nyb2xsLW15Ijp3KCl9XSwic2Nyb2xsLW1zIjpbeyJzY3JvbGwtbXMiOncoKX1dLCJzY3JvbGwtbWUiOlt7InNjcm9sbC1tZSI6dygpfV0sInNjcm9sbC1tYnMiOlt7InNjcm9sbC1tYnMiOncoKX1dLCJzY3JvbGwtbWJlIjpbeyJzY3JvbGwtbWJlIjp3KCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOncoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6dygpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjp3KCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOncoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOncoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6dygpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5Ijp3KCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOncoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6dygpfV0sInNjcm9sbC1wYnMiOlt7InNjcm9sbC1wYnMiOncoKX1dLCJzY3JvbGwtcGJlIjpbeyJzY3JvbGwtcGJlIjp3KCl9XSwic2Nyb2xsLXB0IjpbeyJzY3JvbGwtcHQiOncoKX1dLCJzY3JvbGwtcHIiOlt7InNjcm9sbC1wciI6dygpfV0sInNjcm9sbC1wYiI6W3sic2Nyb2xsLXBiIjp3KCl9XSwic2Nyb2xsLXBsIjpbeyJzY3JvbGwtcGwiOncoKX1dLCJzbmFwLWFsaWduIjpbe3NuYXA6W2BzdGFydGAsYGVuZGAsYGNlbnRlcmAsYGFsaWduLW5vbmVgXX1dLCJzbmFwLXN0b3AiOlt7c25hcDpbYG5vcm1hbGAsYGFsd2F5c2BdfV0sInNuYXAtdHlwZSI6W3tzbmFwOltgbm9uZWAsYHhgLGB5YCxgYm90aGBdfV0sInNuYXAtc3RyaWN0bmVzcyI6W3tzbmFwOltgbWFuZGF0b3J5YCxgcHJveGltaXR5YF19XSx0b3VjaDpbe3RvdWNoOltgYXV0b2AsYG5vbmVgLGBtYW5pcHVsYXRpb25gXX1dLCJ0b3VjaC14IjpbeyJ0b3VjaC1wYW4iOltgeGAsYGxlZnRgLGByaWdodGBdfV0sInRvdWNoLXkiOlt7InRvdWNoLXBhbiI6W2B5YCxgdXBgLGBkb3duYF19XSwidG91Y2gtcHoiOltgdG91Y2gtcGluY2gtem9vbWBdLHNlbGVjdDpbe3NlbGVjdDpbYG5vbmVgLGB0ZXh0YCxgYWxsYCxgYXV0b2BdfV0sIndpbGwtY2hhbmdlIjpbeyJ3aWxsLWNoYW5nZSI6W2BhdXRvYCxgc2Nyb2xsYCxgY29udGVudHNgLGB0cmFuc2Zvcm1gLCQsUV19XSxmaWxsOlt7ZmlsbDpbYG5vbmVgLC4uLk4oKV19XSwic3Ryb2tlLXciOlt7c3Ryb2tlOltaLElmLGtmLEFmXX1dLHN0cm9rZTpbe3N0cm9rZTpbYG5vbmVgLC4uLk4oKV19XSwiZm9yY2VkLWNvbG9yLWFkanVzdCI6W3siZm9yY2VkLWNvbG9yLWFkanVzdCI6W2BhdXRvYCxgbm9uZWBdfV19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cHM6eyJjb250YWluZXItbmFtZWQiOltgY29udGFpbmVyLXR5cGVgXSxvdmVyZmxvdzpbYG92ZXJmbG93LXhgLGBvdmVyZmxvdy15YF0sb3ZlcnNjcm9sbDpbYG92ZXJzY3JvbGwteGAsYG92ZXJzY3JvbGwteWBdLGluc2V0OltgaW5zZXQteGAsYGluc2V0LXlgLGBpbnNldC1ic2AsYGluc2V0LWJlYCxgc3RhcnRgLGBlbmRgLGB0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXSwiaW5zZXQteCI6W2ByaWdodGAsYGxlZnRgXSwiaW5zZXQteSI6W2B0b3BgLGBib3R0b21gXSxmbGV4OltgYmFzaXNgLGBncm93YCxgc2hyaW5rYF0sZ2FwOltgZ2FwLXhgLGBnYXAteWBdLHA6W2BweGAsYHB5YCxgcHNgLGBwZWAsYHBic2AsYHBiZWAsYHB0YCxgcHJgLGBwYmAsYHBsYF0scHg6W2BwcmAsYHBsYF0scHk6W2BwdGAsYHBiYF0sbTpbYG14YCxgbXlgLGBtc2AsYG1lYCxgbWJzYCxgbWJlYCxgbXRgLGBtcmAsYG1iYCxgbWxgXSxteDpbYG1yYCxgbWxgXSxteTpbYG10YCxgbWJgXSxzaXplOltgd2AsYGhgXSwiZm9udC1zaXplIjpbYGxlYWRpbmdgXSwiZnZuLW5vcm1hbCI6W2Bmdm4tb3JkaW5hbGAsYGZ2bi1zbGFzaGVkLXplcm9gLGBmdm4tZmlndXJlYCxgZnZuLXNwYWNpbmdgLGBmdm4tZnJhY3Rpb25gXSwiZnZuLW9yZGluYWwiOltgZnZuLW5vcm1hbGBdLCJmdm4tc2xhc2hlZC16ZXJvIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZpZ3VyZSI6W2Bmdm4tbm9ybWFsYF0sImZ2bi1zcGFjaW5nIjpbYGZ2bi1ub3JtYWxgXSwiZnZuLWZyYWN0aW9uIjpbYGZ2bi1ub3JtYWxgXSwibGluZS1jbGFtcCI6W2BkaXNwbGF5YCxgb3ZlcmZsb3dgXSxyb3VuZGVkOltgcm91bmRlZC1zYCxgcm91bmRlZC1lYCxgcm91bmRlZC10YCxgcm91bmRlZC1yYCxgcm91bmRlZC1iYCxgcm91bmRlZC1sYCxgcm91bmRlZC1zc2AsYHJvdW5kZWQtc2VgLGByb3VuZGVkLWVlYCxgcm91bmRlZC1lc2AsYHJvdW5kZWQtdGxgLGByb3VuZGVkLXRyYCxgcm91bmRlZC1icmAsYHJvdW5kZWQtYmxgXSwicm91bmRlZC1zIjpbYHJvdW5kZWQtc3NgLGByb3VuZGVkLWVzYF0sInJvdW5kZWQtZSI6W2Byb3VuZGVkLXNlYCxgcm91bmRlZC1lZWBdLCJyb3VuZGVkLXQiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtdHJgXSwicm91bmRlZC1yIjpbYHJvdW5kZWQtdHJgLGByb3VuZGVkLWJyYF0sInJvdW5kZWQtYiI6W2Byb3VuZGVkLWJyYCxgcm91bmRlZC1ibGBdLCJyb3VuZGVkLWwiOltgcm91bmRlZC10bGAsYHJvdW5kZWQtYmxgXSwiYm9yZGVyLXNwYWNpbmciOltgYm9yZGVyLXNwYWNpbmcteGAsYGJvcmRlci1zcGFjaW5nLXlgXSwiYm9yZGVyLXciOltgYm9yZGVyLXcteGAsYGJvcmRlci13LXlgLGBib3JkZXItdy1zYCxgYm9yZGVyLXctZWAsYGJvcmRlci13LWJzYCxgYm9yZGVyLXctYmVgLGBib3JkZXItdy10YCxgYm9yZGVyLXctcmAsYGJvcmRlci13LWJgLGBib3JkZXItdy1sYF0sImJvcmRlci13LXgiOltgYm9yZGVyLXctcmAsYGJvcmRlci13LWxgXSwiYm9yZGVyLXcteSI6W2Bib3JkZXItdy10YCxgYm9yZGVyLXctYmBdLCJib3JkZXItY29sb3IiOltgYm9yZGVyLWNvbG9yLXhgLGBib3JkZXItY29sb3IteWAsYGJvcmRlci1jb2xvci1zYCxgYm9yZGVyLWNvbG9yLWVgLGBib3JkZXItY29sb3ItYnNgLGBib3JkZXItY29sb3ItYmVgLGBib3JkZXItY29sb3ItdGAsYGJvcmRlci1jb2xvci1yYCxgYm9yZGVyLWNvbG9yLWJgLGBib3JkZXItY29sb3ItbGBdLCJib3JkZXItY29sb3IteCI6W2Bib3JkZXItY29sb3ItcmAsYGJvcmRlci1jb2xvci1sYF0sImJvcmRlci1jb2xvci15IjpbYGJvcmRlci1jb2xvci10YCxgYm9yZGVyLWNvbG9yLWJgXSx0cmFuc2xhdGU6W2B0cmFuc2xhdGUteGAsYHRyYW5zbGF0ZS15YCxgdHJhbnNsYXRlLW5vbmVgXSwidHJhbnNsYXRlLW5vbmUiOltgdHJhbnNsYXRlYCxgdHJhbnNsYXRlLXhgLGB0cmFuc2xhdGUteWAsYHRyYW5zbGF0ZS16YF0sInNjcm9sbC1tIjpbYHNjcm9sbC1teGAsYHNjcm9sbC1teWAsYHNjcm9sbC1tc2AsYHNjcm9sbC1tZWAsYHNjcm9sbC1tYnNgLGBzY3JvbGwtbWJlYCxgc2Nyb2xsLW10YCxgc2Nyb2xsLW1yYCxgc2Nyb2xsLW1iYCxgc2Nyb2xsLW1sYF0sInNjcm9sbC1teCI6W2BzY3JvbGwtbXJgLGBzY3JvbGwtbWxgXSwic2Nyb2xsLW15IjpbYHNjcm9sbC1tdGAsYHNjcm9sbC1tYmBdLCJzY3JvbGwtcCI6W2BzY3JvbGwtcHhgLGBzY3JvbGwtcHlgLGBzY3JvbGwtcHNgLGBzY3JvbGwtcGVgLGBzY3JvbGwtcGJzYCxgc2Nyb2xsLXBiZWAsYHNjcm9sbC1wdGAsYHNjcm9sbC1wcmAsYHNjcm9sbC1wYmAsYHNjcm9sbC1wbGBdLCJzY3JvbGwtcHgiOltgc2Nyb2xsLXByYCxgc2Nyb2xsLXBsYF0sInNjcm9sbC1weSI6W2BzY3JvbGwtcHRgLGBzY3JvbGwtcGJgXSx0b3VjaDpbYHRvdWNoLXhgLGB0b3VjaC15YCxgdG91Y2gtcHpgXSwidG91Y2gteCI6W2B0b3VjaGBdLCJ0b3VjaC15IjpbYHRvdWNoYF0sInRvdWNoLXB6IjpbYHRvdWNoYF19LGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczp7ImZvbnQtc2l6ZSI6W2BsZWFkaW5nYF19LHBvc3RmaXhMb29rdXBDbGFzc0dyb3VwczpbYGNvbnRhaW5lci10eXBlYF0sb3JkZXJTZW5zaXRpdmVNb2RpZmllcnM6W2AqYCxgKipgLGBhZnRlcmAsYGJhY2tkcm9wYCxgYmVmb3JlYCxgZGV0YWlscy1jb250ZW50YCxgZmlsZWAsYGZpcnN0LWxldHRlcmAsYGZpcnN0LWxpbmVgLGBtYXJrZXJgLGBwbGFjZWhvbGRlcmAsYHNlbGVjdGlvbmBdfX0pO2Z1bmN0aW9uIGVwKC4uLmUpe3JldHVybiAkZihUZChlKSl9ZnVuY3Rpb24gdHAoZSx0KXtyZXR1cm4gd2UoKT8oVGUoZSx0KSwhMCk6ITF9ZnVuY3Rpb24gbnAoZSl7bGV0IHQ9ITEsbixyPUNlKCEwKTtyZXR1cm4oKC4uLmkpPT4odHx8PShuPXIucnVuKCgpPT5lKC4uLmkpKSwhMCksbikpfXZhciBycD10eXBlb2Ygd2luZG93PGB1YCYmdHlwZW9mIGRvY3VtZW50PGB1YDt0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8YHVgJiZnbG9iYWxUaGlzIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGU7dmFyIGlwPWU9PmUhPT12b2lkIDAsYXA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvcD1lPT5hcC5jYWxsKGUpPT09YFtvYmplY3QgT2JqZWN0XWAsc3A9Y3AoKTtmdW5jdGlvbiBjcCgpe3ZhciBlLHQ7cmV0dXJuIHJwJiYhISgoZT13aW5kb3cpIT1udWxsJiYoZT1lLm5hdmlnYXRvcikhPW51bGwmJmUudXNlckFnZW50KSYmKC9pUCg/OmFkfGhvbmV8b2QpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KXx8KCh0PXdpbmRvdyk9PW51bGx8fCh0PXQubmF2aWdhdG9yKT09bnVsbD92b2lkIDA6dC5tYXhUb3VjaFBvaW50cyk+MiYmL2lQYWR8TWFjaW50b3NoLy50ZXN0KHdpbmRvdz8ubmF2aWdhdG9yLnVzZXJBZ2VudCkpfWZ1bmN0aW9uIGxwKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIHVwKGUpe3JldHVybiBlfHxZKCl9ZnVuY3Rpb24gZHAoZSl7aWYoIXJwKXJldHVybiBlO2xldCB0PTAsbixyLGk9KCk9PnstLXQsciYmdDw9MCYmKHIuc3RvcCgpLG49dm9pZCAwLHI9dm9pZCAwKX07cmV0dXJuKCguLi5hKT0+KHQrPTEscnx8KHI9Q2UoITApLG49ci5ydW4oKCk9PmUoLi4uYSkpKSx0cChpKSxuKSl9ZnVuY3Rpb24gZnAoZSl7cmV0dXJuIFJ0KEgoZSk/bmV3IFByb3h5KHt9LHtnZXQodCxuLHIpe3JldHVybiB0bihSZWZsZWN0LmdldChlLnZhbHVlLG4scikpfSxzZXQodCxuLHIpe3JldHVybiBIKGUudmFsdWVbbl0pJiYhSChyKT9lLnZhbHVlW25dLnZhbHVlPXI6ZS52YWx1ZVtuXT1yLCEwfSxkZWxldGVQcm9wZXJ0eSh0LG4pe3JldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGUudmFsdWUsbil9LGhhcyh0LG4pe3JldHVybiBSZWZsZWN0LmhhcyhlLnZhbHVlLG4pfSxvd25LZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKGUudmFsdWUpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKXtyZXR1cm57ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9fX0pOmUpfWZ1bmN0aW9uIHBwKGUpe3JldHVybiBmcChxcyhlKSl9ZnVuY3Rpb24gbXAoZSwuLi50KXtsZXQgbj10LmZsYXQoKSxyPW5bMF07cmV0dXJuIHBwKCgpPT5PYmplY3QuZnJvbUVudHJpZXModHlwZW9mIHI9PWBmdW5jdGlvbmA/T2JqZWN0LmVudHJpZXMoY24oZSkpLmZpbHRlcigoW2UsdF0pPT4hcihubih0KSxlKSk6T2JqZWN0LmVudHJpZXMoY24oZSkpLmZpbHRlcihlPT4hbi5pbmNsdWRlcyhlWzBdKSkpKX1mdW5jdGlvbiBocChlLHQ9MWU0KXtyZXR1cm4gc24oKG4scik9PntsZXQgaT1ubihlKSxhLG89KCk9PnNldFRpbWVvdXQoKCk9PntpPW5uKGUpLHIoKX0sbm4odCkpO3JldHVybiB0cCgoKT0+e2NsZWFyVGltZW91dChhKX0pLHtnZXQoKXtyZXR1cm4gbigpLGl9LHNldChlKXtpPWUscigpLGNsZWFyVGltZW91dChhKSxhPW8oKX19fSl9ZnVuY3Rpb24gZ3AoZSx0KXt1cCh0KSYmV2koZSx0KX1mdW5jdGlvbiBfcChlLHQsbil7cmV0dXJuIGhyKGUsdCx7Li4ubixpbW1lZGlhdGU6ITB9KX12YXIgdnA9cnA/d2luZG93OnZvaWQgMDtycCYmd2luZG93LmRvY3VtZW50LHJwJiZ3aW5kb3cubmF2aWdhdG9yLHJwJiZ3aW5kb3cubG9jYXRpb247ZnVuY3Rpb24geXAoZSl7bGV0IHQ9bm4oZSk7cmV0dXJuIHQ/LiRlbD8/dH1mdW5jdGlvbiBicCguLi5lKXtsZXQgdD0oZSx0LG4scik9PihlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLHIpKSxuPXFzKCgpPT57bGV0IHQ9bHAobm4oZVswXSkpLmZpbHRlcihlPT5lIT1udWxsKTtyZXR1cm4gdC5ldmVyeShlPT50eXBlb2YgZSE9YHN0cmluZ2ApP3Q6dm9pZCAwfSk7cmV0dXJuIF9wKCgpPT5bbi52YWx1ZT8ubWFwKGU9PnlwKGUpKT8/W3ZwXS5maWx0ZXIoZT0+ZSE9bnVsbCksbHAobm4obi52YWx1ZT9lWzFdOmVbMF0pKSxscCh0bihuLnZhbHVlP2VbMl06ZVsxXSkpLG5uKG4udmFsdWU/ZVszXTplWzJdKV0sKFtlLG4scixpXSxhLG8pPT57aWYoIWU/Lmxlbmd0aHx8IW4/Lmxlbmd0aHx8IXI/Lmxlbmd0aClyZXR1cm47bGV0IHM9b3AoaSk/ey4uLml9OmksYz1lLmZsYXRNYXAoZT0+bi5mbGF0TWFwKG49PnIubWFwKHI9PnQoZSxuLHIscykpKSk7bygoKT0+e2MuZm9yRWFjaChlPT5lKCkpfSl9LHtmbHVzaDpgcG9zdGB9KX1mdW5jdGlvbiB4cCgpe2xldCBlPVp0KCExKSx0PVkoKTtyZXR1cm4gdCYmVmkoKCk9PntlLnZhbHVlPSEwfSx0KSxlfWZ1bmN0aW9uIFNwKGUpe2xldCB0PXhwKCk7cmV0dXJuIHFzKCgpPT4odC52YWx1ZSwhIWUoKSkpfWZ1bmN0aW9uIENwKGUpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lOnR5cGVvZiBlPT1gc3RyaW5nYD90PT50LmtleT09PWU6QXJyYXkuaXNBcnJheShlKT90PT5lLmluY2x1ZGVzKHQua2V5KTooKT0+ITB9ZnVuY3Rpb24gd3AoLi4uZSl7bGV0IHQsbixyPXt9O2UubGVuZ3RoPT09Mz8odD1lWzBdLG49ZVsxXSxyPWVbMl0pOmUubGVuZ3RoPT09Mj90eXBlb2YgZVsxXT09YG9iamVjdGA/KHQ9ITAsbj1lWzBdLHI9ZVsxXSk6KHQ9ZVswXSxuPWVbMV0pOih0PSEwLG49ZVswXSk7bGV0e3RhcmdldDppPXZwLGV2ZW50TmFtZTphPWBrZXlkb3duYCxwYXNzaXZlOm89ITEsZGVkdXBlOnM9ITF9PXIsYz1DcCh0KTtyZXR1cm4gYnAoaSxhLGU9PntlLnJlcGVhdCYmbm4ocyl8fGMoZSkmJm4oZSl9LG8pfWZ1bmN0aW9uIFRwKGUpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKX1mdW5jdGlvbiBFcChlLHQsbj17fSl7bGV0e3dpbmRvdzpyPXZwLC4uLml9PW4sYSxvPVNwKCgpPT5yJiZgUmVzaXplT2JzZXJ2ZXJgaW4gcikscz0oKT0+e2EmJj0oYS5kaXNjb25uZWN0KCksdm9pZCAwKX0sYz1ocihxcygoKT0+e2xldCB0PW5uKGUpO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGU9PnlwKGUpKTpbeXAodCldfSksZT0+e2lmKHMoKSxvLnZhbHVlJiZyKXthPW5ldyBSZXNpemVPYnNlcnZlcih0KTtmb3IobGV0IHQgb2YgZSl0JiZhLm9ic2VydmUodCxpKX19LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHBvc3RgfSksbD0oKT0+e3MoKSxjKCl9O3JldHVybiB0cChsKSx7aXNTdXBwb3J0ZWQ6byxzdG9wOmx9fWZ1bmN0aW9uIERwKGUsdCxuLHI9e30pe3ZhciBpLGE7bGV0e2Nsb25lOm89ITEscGFzc2l2ZTpzPSExLGV2ZW50TmFtZTpjLGRlZXA6bD0hMSxkZWZhdWx0VmFsdWU6dSxzaG91bGRFbWl0OmR9PXIsZj1ZKCkscD1ufHxmPy5lbWl0fHwoZj09bnVsbHx8KGk9Zi4kZW1pdCk9PW51bGw/dm9pZCAwOmkuYmluZChmKSl8fChmPT1udWxsfHwoYT1mLnByb3h5KT09bnVsbHx8KGE9YS4kZW1pdCk9PW51bGw/dm9pZCAwOmEuYmluZChmPy5wcm94eSkpLG09Yzt0fHw9YG1vZGVsVmFsdWVgLG18fD1gdXBkYXRlOiR7dC50b1N0cmluZygpfWA7bGV0IGg9ZT0+bz90eXBlb2Ygbz09YGZ1bmN0aW9uYD9vKGUpOlRwKGUpOmUsZz0oKT0+aXAoZVt0XSk/aChlW3RdKTp1LF89ZT0+e2Q/ZChlKSYmcChtLGUpOnAobSxlKX07aWYocyl7bGV0IG49WHQoZygpKSxyPSExO3JldHVybiBocigoKT0+ZVt0XSxlPT57cnx8KHI9ITAsbi52YWx1ZT1oKGUpLFZuKCgpPT5yPSExKSl9KSxocihuLG49PnshciYmKG4hPT1lW3RdfHxsKSYmXyhuKX0se2RlZXA6bH0pLG59cmV0dXJuIHFzKHtnZXQoKXtyZXR1cm4gZygpfSxzZXQoZSl7XyhlKX19KX1mdW5jdGlvbiBPcChlKXtyZXR1cm4gZT9lLmZsYXRNYXAoZT0+ZS50eXBlPT09Rz9PcChlLmNoaWxkcmVuKTpbZV0pOltdfXZhciBrcD1Kcih7bmFtZTpgUHJpbWl0aXZlU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse2F0dHJzOnQsc2xvdHM6bn0pe3JldHVybigpPT57aWYoIW4uZGVmYXVsdClyZXR1cm4gbnVsbDtsZXQgZT1PcChuLmRlZmF1bHQoKSkscj1lLmZpbmRJbmRleChlPT5lLnR5cGUhPT1LKTtpZihyPT09LTEpcmV0dXJuIGU7bGV0IGk9ZVtyXTtkZWxldGUgaS5wcm9wcz8ucmVmO2xldCBhPWkucHJvcHM/Q3ModCxpLnByb3BzKTp0LG89Z3Moey4uLmkscHJvcHM6e319LGEpO3JldHVybiBlLmxlbmd0aD09PTE/bzooZVtyXT1vLGUpfX19KSxBcD1bYGFyZWFgLGBpbWdgLGBpbnB1dGBdLGpwPUpyKHtuYW1lOmBQcmltaXRpdmVgLGluaGVyaXRBdHRyczohMSxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGFzOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0OmBkaXZgfX0sc2V0dXAoZSx7YXR0cnM6dCxzbG90czpufSl7bGV0IHI9ZS5hc0NoaWxkP2B0ZW1wbGF0ZWA6ZS5hcztyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgJiZBcC5pbmNsdWRlcyhyKT8oKT0+SnMocix0KTpyPT09YHRlbXBsYXRlYD8oKT0+SnMoa3AsdCx7ZGVmYXVsdDpuLmRlZmF1bHR9KTooKT0+SnMoZS5hcyx0LHtkZWZhdWx0Om4uZGVmYXVsdH0pfX0pLE1wPUpyKHtfX25hbWU6YEJ1dHRvbmAscHJvcHM6e3ZhcmlhbnQ6e30sc2l6ZTp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOntkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KHRzKCksc3ModG4oanApLHsiZGF0YS1zbG90IjpgYnV0dG9uYCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnQsImRhdGEtc2l6ZSI6ZS5zaXplLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsY2xhc3M6TCh0bihlcCkodG4oTnApKHt2YXJpYW50OmUudmFyaWFudCxzaXplOmUuc2l6ZX0pLHQuY2xhc3MpKX0se2RlZmF1bHQ6aXIoKCk9PltvYShuLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgZGF0YS12YXJpYW50YCxgZGF0YS1zaXplYCxgYXNgLGBhcy1jaGlsZGAsYGNsYXNzYF0pKX19KSxOcD1PZChgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBiZy1jbGlwLXBhZGRpbmcgdGV4dC1zbSBmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIGFjdGl2ZTpub3QtYXJpYS1baGFzcG9wdXBdOnRyYW5zbGF0ZS15LXB4IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZ3JvdXAvYnV0dG9uIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgc2VsZWN0LW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLG91dGxpbmU6YGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwIGFyaWEtZXhwYW5kZWQ6Ymctc2Vjb25kYXJ5IGFyaWEtZXhwYW5kZWQ6dGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmRgLGRlc3RydWN0aXZlOmBiZy1kZXN0cnVjdGl2ZS8xMCBob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMCB0ZXh0LWRlc3RydWN0aXZlIGZvY3VzLXZpc2libGU6Ym9yZGVyLWRlc3RydWN0aXZlLzQwIGRhcms6aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMzBgLGxpbms6YHRleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lYH0sc2l6ZTp7ZGVmYXVsdDpgaC04IGdhcC0xLjUgcHgtMi41IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTIgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0yYCx4czpgaC02IGdhcC0xIHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSBweC0yIHRleHQteHMgaW4tZGF0YS1bc2xvdD1idXR0b24tZ3JvdXBdOnJvdW5kZWQtbGcgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLHNtOmBoLTcgZ2FwLTEgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIHB4LTIuNSB0ZXh0LVswLjhyZW1dIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEuNSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS0zLjVgLGxnOmBoLTkgZ2FwLTEuNSBweC0yLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMiBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTJgLGljb246YHNpemUtOGAsImljb24teHMiOmBzaXplLTYgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTNgLCJpY29uLXNtIjpgc2l6ZS03IHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEycHgpXSBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZ2AsImljb24tbGciOmBzaXplLTlgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YCxzaXplOmBkZWZhdWx0YH19KSxQcD1bYGRhdGEtc2l6ZWBdLEZwPUpyKHtfX25hbWU6YENhcmRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxzaXplOntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKG4scik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZGAsImRhdGEtc2l6ZSI6ZS5zaXplLGNsYXNzOkwodG4oZXApKGByaW5nLWZvcmVncm91bmQvMTAgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZCBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bCBweS00IHRleHQtc20gcmluZy0xIGhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wIGhhcy1bPmltZzpmaXJzdC1jaGlsZF06cHQtMCBkYXRhLVtzaXplPXNtXTpnYXAtMyBkYXRhLVtzaXplPXNtXTpweS0zIGRhdGEtW3NpemU9c21dOmhhcy1kYXRhLVtzbG90PWNhcmQtZm9vdGVyXTpwYi0wICo6W2ltZzpmaXJzdC1jaGlsZF06cm91bmRlZC10LXhsICo6W2ltZzpsYXN0LWNoaWxkXTpyb3VuZGVkLWIteGwgZ3JvdXAvY2FyZCBmbGV4IGZsZXgtY29sYCx0LmNsYXNzKSl9LFtvYShuLiRzbG90cyxgZGVmYXVsdGApXSwxMCxQcCkpfX0pLElwPUpyKHtfX25hbWU6YENhcmRDb250ZW50YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1jb250ZW50YCxjbGFzczpMKHRuKGVwKShgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTNgLHQuY2xhc3MpKX0sW29hKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxMcD1Kcih7X19uYW1lOmBDYXJkSGVhZGVyYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih0cygpLG9zKGBkaXZgLHsiZGF0YS1zbG90IjpgY2FyZC1oZWFkZXJgLGNsYXNzOkwodG4oZXApKGBnYXAtMSByb3VuZGVkLXQteGwgcHgtNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOnB4LTMgWy5ib3JkZXItYl06cGItNCBncm91cC1kYXRhLVtzaXplPXNtXS9jYXJkOlsuYm9yZGVyLWJdOnBiLTMgZ3JvdXAvY2FyZC1oZWFkZXIgQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gaXRlbXMtc3RhcnQgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dIGhhcy1kYXRhLVtzbG90PWNhcmQtZGVzY3JpcHRpb25dOmdyaWQtcm93cy1bYXV0b19hdXRvXWAsdC5jbGFzcykpfSxbb2EoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLFJwPUpyKHtfX25hbWU6YENhcmRUaXRsZWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4odHMoKSxvcyhgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtdGl0bGVgLGNsYXNzOkwodG4oZXApKGB0ZXh0LWJhc2UgbGVhZGluZy1zbnVnIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3NpemU9c21dL2NhcmQ6dGV4dC1zbSBmb250LWhlYWRpbmdgLHQuY2xhc3MpKX0sW29hKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSx6cD1gbGxtZ3dBZG1pbktleWA7ZnVuY3Rpb24gQnAoKXt0cnl7cmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oenApPz9gYH1jYXRjaHtyZXR1cm5gYH19ZnVuY3Rpb24gVnAoZSl7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oenAsZSl9Y2F0Y2h7fX1mdW5jdGlvbiBIcCgpe3RyeXtzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHpwKX1jYXRjaHt9fXZhciBVcD1HdShgYXV0aGAse3N0YXRlOigpPT4oe2FwaUtleTpCcCgpLGVycm9yOmBgfSksZ2V0dGVyczp7aXNBdXRoZW50aWNhdGVkOmU9PmUuYXBpS2V5IT09YGB9LGFjdGlvbnM6e3N1Ym1pdChlKXtlJiYodGhpcy5hcGlLZXk9ZSx0aGlzLmVycm9yPWBgLFZwKGUpKX0scmVqZWN0KGUpe3RoaXMuYXBpS2V5PWBgLHRoaXMuZXJyb3I9ZSxIcCgpfX19KSxXcD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXR1cztjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUpLHRoaXMubmFtZT1gQWRtaW5BcGlFcnJvcmAsdGhpcy5zdGF0dXM9dH19O2FzeW5jIGZ1bmN0aW9uIEdwKGUsdCl7bGV0IG49YCR7dH06IEhUVFAgJHtlLnN0YXR1c31gO3RyeXtyZXR1cm4oYXdhaXQgZS5qc29uKCkpLmVycm9yPy5tZXNzYWdlfHxufWNhdGNoe3JldHVybiBufX1hc3luYyBmdW5jdGlvbiBLcChlKXtsZXQgdD1VcCgpLG49dC5hcGlLZXkscj1hd2FpdCBmZXRjaChlLHtjcmVkZW50aWFsczpgc2FtZS1vcmlnaW5gLGhlYWRlcnM6bj97IngtYXBpLWtleSI6bn06e319KTtpZighci5vayl7bGV0IGk9YXdhaXQgR3AocixlKTt0aHJvdyhyLnN0YXR1cz09PTQwMXx8ci5zdGF0dXM9PT00MDMpJiZ0LmFwaUtleT09PW4mJnQucmVqZWN0KGBpbnZhbGlkIGtleSwgb3Igbm90IGFuIGFkbWluYCksbmV3IFdwKGksci5zdGF0dXMpfXJldHVybiBhd2FpdCByLmpzb24oKX1mdW5jdGlvbiBxcChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpTdHJpbmcoZSl9ZnVuY3Rpb24gSnAoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBXcCYmKGUuc3RhdHVzPT09NDAxfHxlLnN0YXR1cz09PTQwMyl9ZnVuY3Rpb24gWXAoZSl7cmV0dXJuIGV8fCh0eXBlb2YgZG9jdW1lbnQ+YHVgP3ZvaWQgMDpkb2N1bWVudCl9ZnVuY3Rpb24gWHAoe2ludGVydmFsTXM6ZSx0aWNrOnQsZG9jOm59KXtsZXQgcj1ZcChuKSxpLGE9ITE7ZnVuY3Rpb24gbygpe2khPT12b2lkIDAmJihjbGVhckludGVydmFsKGkpLGk9dm9pZCAwKX1mdW5jdGlvbiBzKCl7bygpLGk9c2V0SW50ZXJ2YWwodCxlKX1mdW5jdGlvbiBjKCl7ciYmKHIuaGlkZGVuP28oKToodCgpLHMoKSkpfWZ1bmN0aW9uIGwoKXthfHwoYT0hMCxyPy5oaWRkZW58fCh0KCkscygpKSxyPy5hZGRFdmVudExpc3RlbmVyKGB2aXNpYmlsaXR5Y2hhbmdlYCxjKSl9ZnVuY3Rpb24gdSgpe2E9ITEsbygpLHI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHZpc2liaWxpdHljaGFuZ2VgLGMpfXJldHVybntzdGFydDpsLHN0b3A6dX19dmFyIFpwPXtzdWNjZXNzOjNlMyxpbmZvOjNlMyxlcnJvcjo2ZTN9LFFwPUd1KGB0b2FzdHNgLHtzdGF0ZTooKT0+KHt0b2FzdHM6W10sbmV4dElkOjEsdGltZXJzOnt9fSksYWN0aW9uczp7cHVzaCh7a2luZDplLG1lc3NhZ2U6dCx0aW1lb3V0TXM6bn0pe2xldCByPXRoaXMudG9hc3RzW3RoaXMudG9hc3RzLmxlbmd0aC0xXTtpZihyJiZyLmtpbmQ9PT1lJiZyLm1lc3NhZ2U9PT10KXJldHVybjtsZXQgaT10aGlzLm5leHRJZCsrLGE9e2lkOmksa2luZDplLG1lc3NhZ2U6dCx0aW1lb3V0TXM6bj8/WnBbZV19O2lmKHRoaXMudG9hc3RzLnB1c2goYSksdGhpcy50b2FzdHMubGVuZ3RoPjMpe2xldCBlPXRoaXMudG9hc3RzLnNoaWZ0KCk7ZSYmdGhpcy5jbGVhclRpbWVyKGUuaWQpfXRoaXMudGltZXJzW2ldPXNldFRpbWVvdXQoKCk9PnRoaXMuZGlzbWlzcyhpKSxhLnRpbWVvdXRNcyl9LGRpc21pc3MoZSl7dGhpcy5jbGVhclRpbWVyKGUpLHRoaXMudG9hc3RzPXRoaXMudG9hc3RzLmZpbHRlcih0PT50LmlkIT09ZSl9LGNsZWFyVGltZXIoZSl7bGV0IHQ9dGhpcy50aW1lcnNbZV07dCE9PXZvaWQgMCYmKGNsZWFyVGltZW91dCh0KSxkZWxldGUgdGhpcy50aW1lcnNbZV0pfX19KSwkcD01ZTMsZW09R3UoYGRhc2hib2FyZGAse3N0YXRlOigpPT4oe292ZXJ2aWV3Om51bGwsdXNhZ2U6bnVsbCx0YXJnZXRzOm51bGwsbGFzdFVwZGF0ZWQ6bnVsbCxlcnJvcjpgYCxwb2xsZXI6dm9pZCAwLHJlZnJlc2hpbmc6ITEsdG9hc3RlZEZvckZhaWx1cmU6ITF9KSxhY3Rpb25zOnthc3luYyByZWZyZXNoKCl7aWYoVXAoKS5pc0F1dGhlbnRpY2F0ZWQmJiF0aGlzLnJlZnJlc2hpbmcpe3RoaXMucmVmcmVzaGluZz0hMDt0cnl7YXdhaXQgdGhpcy5kb1JlZnJlc2goKX1maW5hbGx5e3RoaXMucmVmcmVzaGluZz0hMX19fSxhc3luYyBkb1JlZnJlc2goKXtsZXQgZT10aGlzLm92ZXJ2aWV3IT09bnVsbHx8dGhpcy51c2FnZSE9PW51bGx8fHRoaXMudGFyZ2V0cyE9PW51bGwsW3QsbixyXT1hd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW0twKGAvYWRtaW4vYXBpL292ZXJ2aWV3YCksS3AoYC9hZG1pbi9hcGkvdXNhZ2VgKSxLcChgL2FkbWluL2FwaS90YXJnZXRzYCldKTt0LnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy5vdmVydmlldz10LnZhbHVlKSxuLnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy51c2FnZT1uLnZhbHVlKSxyLnN0YXR1cz09PWBmdWxmaWxsZWRgJiYodGhpcy50YXJnZXRzPXIudmFsdWUpO2xldCBpPVtdO2lmKHQuc3RhdHVzPT09YHJlamVjdGVkYCYmaS5wdXNoKHtsYWJlbDpgb3ZlcnZpZXdgLHJlYXNvbjp0LnJlYXNvbn0pLG4uc3RhdHVzPT09YHJlamVjdGVkYCYmaS5wdXNoKHtsYWJlbDpgdXNhZ2VgLHJlYXNvbjpuLnJlYXNvbn0pLHIuc3RhdHVzPT09YHJlamVjdGVkYCYmaS5wdXNoKHtsYWJlbDpgdGFyZ2V0c2AscmVhc29uOnIucmVhc29ufSksaS5sZW5ndGg9PT0wKXt0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGAsdGhpcy50b2FzdGVkRm9yRmFpbHVyZT0hMTtyZXR1cm59aS5zb21lKCh7cmVhc29uOmV9KT0+SnAoZSkpfHwoaS5sZW5ndGg8MyYmKHRoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUpLHRoaXMuZXJyb3I9aS5tYXAoKHtsYWJlbDplLHJlYXNvbjp0fSk9PmAke2V9OiAke3FwKHQpfWApLmpvaW4oYDsgYCksZSYmIXRoaXMudG9hc3RlZEZvckZhaWx1cmUmJlFwKCkucHVzaCh7a2luZDpgZXJyb3JgLG1lc3NhZ2U6YERhc2hib2FyZCByZWZyZXNoIGZhaWxlZDogJHt0aGlzLmVycm9yfWB9KSx0aGlzLnRvYXN0ZWRGb3JGYWlsdXJlPSEwKX0sc3RhcnRQb2xsaW5nKCl7dGhpcy5wb2xsZXJ8fCh0aGlzLnBvbGxlcj1YcCh7aW50ZXJ2YWxNczokcCx0aWNrOigpPT52b2lkIHRoaXMucmVmcmVzaCgpfSksdGhpcy5wb2xsZXIuc3RhcnQoKSl9fX0pLHRtPVtgaG9tZWAsYHNwZW5kYCxgY29uc3VtZXJzYCxgbW9kZWxzYCxgcmVsaWFiaWxpdHlgLGBjb25maWdgLGB0YXJnZXRzYF0sbm09YGhvbWVgLHJtPVt7aWQ6YGhvbWVgLGxhYmVsOmBIb21lYCxpY29uOmlkfSx7aWQ6YHNwZW5kYCxsYWJlbDpgU3BlbmRgLGljb246eGR9LHtpZDpgY29uc3VtZXJzYCxsYWJlbDpgQ29uc3VtZXJzYCxpY29uOiR1fSx7aWQ6YG1vZGVsc2AsbGFiZWw6YE1vZGVsc2AsaWNvbjpsZH0se2lkOmByZWxpYWJpbGl0eWAsbGFiZWw6YFJlbGlhYmlsaXR5YCxpY29uOmVkfSx7aWQ6YGNvbmZpZ2AsbGFiZWw6YENvbmZpZ2AsaWNvbjphZH0se2lkOmB0YXJnZXRzYCxsYWJlbDpgTUNQICYgQWdlbnRzYCxpY29uOmRkfV07ZnVuY3Rpb24gaW0oZSl7cmV0dXJuIHRtLmluY2x1ZGVzKGUpfXZhciBhbT1bYDI0aGAsYDQ4aGAsYDdkYCxgMTRkYCxgMzBkYCxgM21vYCxgNm1vYCxgMTJtb2BdLG9tPXsiMjRoIjp7d2luZG93OmBob3VyYCxzcGFuOjI0fSwiNDhoIjp7d2luZG93OmBob3VyYCxzcGFuOjQ4fSwiN2QiOnt3aW5kb3c6YGRheWAsc3Bhbjo3fSwiMTRkIjp7d2luZG93OmBkYXlgLHNwYW46MTR9LCIzMGQiOnt3aW5kb3c6YGRheWAsc3BhbjozMH0sIjNtbyI6e3dpbmRvdzpgbW9udGhgLHNwYW46M30sIjZtbyI6e3dpbmRvdzpgbW9udGhgLHNwYW46Nn0sIjEybW8iOnt3aW5kb3c6YG1vbnRoYCxzcGFuOjEyfX0sc209e2hvdXI6NDgsZGF5OjM1LG1vbnRoOjEzfSxjbT1bYG5vbmVgLGBwcmV2YF0sbG09YG5vbmVgO2Z1bmN0aW9uIHVtKGUpe2xldHt3aW5kb3c6dCxzcGFuOm59PW9tW2VdLHI9c21bdF07cmV0dXJuIDIqbj5yP3thdmFpbGFibGU6ITEsb2Zmc2V0Om4scmVhc29uOmByZXRlbnRpb24gbGltaXRgfTp7YXZhaWxhYmxlOiEwLG9mZnNldDpufX1mdW5jdGlvbiBkbShlLHQpe3JldHVybiBlPT09YG1vbnRoYD97d2luZG93OmBtb250aGAsc3Bhbjp0fTplPT09YGRheWA/e3dpbmRvdzpgZGF5YCxzcGFuOnR9Ont3aW5kb3c6YGRheWAsc3Bhbjo3fX1mdW5jdGlvbiBmbShlLHQpe3JldHVybiBlPT09YGhvdXJgP2BTaG93aW5nIGxhc3QgJHtkbShlLHQpLnNwYW59IGRheXMg4oCUIHBlci1ob3VyIGRhdGEgaXMgbm90IGtlcHQgZm9yIHRoaXMgdmlldy5gOm51bGx9ZnVuY3Rpb24gcG0oZSl7cmV0dXJuIGFtLmluY2x1ZGVzKGUpfWZ1bmN0aW9uIG1tKGUpe3JldHVybiBjbS5pbmNsdWRlcyhlKX1mdW5jdGlvbiBobShlKXtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXQgbiBvZiBlLnNjb3BlKXQuYXBwZW5kKGBzY29wZWAsbik7cmV0dXJuIHQuc2V0KGBtZXRyaWNgLGUubWV0cmljKSx0LnNldChgd2luZG93YCxlLndpbmRvdyksdC5zZXQoYHNwYW5gLFN0cmluZyhlLnNwYW4pKSxlLm9mZnNldCYmdC5zZXQoYG9mZnNldGAsU3RyaW5nKGUub2Zmc2V0KSksYC9hZG1pbi9hcGkvdXNhZ2Uvc2VyaWVzPyR7dC50b1N0cmluZygpfWB9ZnVuY3Rpb24gZ20oZSl7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztyZXR1cm4gdC5zZXQoYGtpbmRgLGUua2luZCksZS53aW5kb3cmJnQuc2V0KGB3aW5kb3dgLGUud2luZG93KSxlLnNwYW4hPT12b2lkIDAmJnQuc2V0KGBzcGFuYCxTdHJpbmcoZS5zcGFuKSksZS5vZmZzZXQmJnQuc2V0KGBvZmZzZXRgLFN0cmluZyhlLm9mZnNldCkpLGUubWV0cmljcyYmZS5tZXRyaWNzLmxlbmd0aD4wJiZ0LnNldChgbWV0cmljc2AsZS5tZXRyaWNzLmpvaW4oYCxgKSksZS5saW1pdCE9PXZvaWQgMCYmdC5zZXQoYGxpbWl0YCxTdHJpbmcoZS5saW1pdCkpLGUuZ3JvdXAmJnQuc2V0KGBncm91cGAsZS5ncm91cCksZS51c2VyJiZ0LnNldChgdXNlcmAsZS51c2VyKSxlLm1vZGVsJiZ0LnNldChgbW9kZWxgLGUubW9kZWwpLGUudGFyZ2V0JiZ0LnNldChgdGFyZ2V0YCxlLnRhcmdldCksYC9hZG1pbi9hcGkvdXNhZ2UvdG90YWxzPyR7dC50b1N0cmluZygpfWB9dmFyIF9tPUd1KGBuYXZgLHtzdGF0ZTooKT0+KHtwYWdlOm5tLHBhcmFtczp7fX0pLGFjdGlvbnM6e2dvVG8oZSx0PXt9KXt0aGlzLnBhZ2U9ZSx0aGlzLnBhcmFtcz10fX19KSx2bT1Kcih7X19uYW1lOmBTa2VsZXRvbmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4odHMoKSxvcyhgZGl2YCx7ImRhdGEtc2xvdCI6YHNrZWxldG9uYCxjbGFzczpMKHRuKGVwKShgYW5pbWF0ZS1wdWxzZSByb3VuZGVkLW1kIGJnLW11dGVkIG1vdGlvbi1yZWR1Y2U6YW5pbWF0ZS1ub25lYCx0LmNsYXNzKSl9LG51bGwsMikpfX0pO2V4cG9ydHt1ZCBhcyAkLEppIGFzICRuLFd0IGFzICRyLEJvIGFzICR0LGtwIGFzIEEsSnMgYXMgQW4sUXMgYXMgQXIsZGMgYXMgQXQsZHAgYXMgQixCcyBhcyBCbixYcyBhcyBCcixIbCBhcyBCdCxVcCBhcyBDLEYgYXMgQ2ksX2EgYXMgQ24sU2EgYXMgQ3IsdmwgYXMgQ3QsRnAgYXMgRCxZIGFzIERuLHhhIGFzIERyLGdsIGFzIER0LElwIGFzIEUsdGMgYXMgRW4sZHIgYXMgRXIsaGwgYXMgRXQsYnAgYXMgRixDaSBhcyBGbixtciBhcyBGcix5bCBhcyBGdCxncCBhcyBHLFZuIGFzIEduLGduIGFzIEdyLFZyIGFzIEd0LHNwIGFzIEgsVGEgYXMgSG4sU2UgYXMgSHIsRmMgYXMgSHQseHAgYXMgSSxTaSBhcyBJbixPYSBhcyBJcixibCBhcyBJdCxnZCBhcyBKLFdpIGFzIEpuLENlIGFzIEpyLE9uIGFzIEp0LGVwIGFzIEssTWkgYXMgS24sc24gYXMgS3IsTHIgYXMgS3QsRXAgYXMgTCxZcyBhcyBMbixpciBhcyBMcix6bCBhcyBMdCx2cCBhcyBNLGxyIGFzIE1uLGhyIGFzIE1yLG91IGFzIE10LHdwIGFzIE4sYmkgYXMgTm4sZnIgYXMgTnIseGwgYXMgTnQsTXAgYXMgTyxxciBhcyBPbixaciBhcyBPcixzdSBhcyBPdCx5cCBhcyBQLHdpIGFzIFBuLHByIGFzIFByLHpjIGFzIFB0LHJkIGFzIFEsVmkgYXMgUW4sVXQgYXMgUXIsUW8gYXMgUXQsRHAgYXMgUixjciBhcyBSbixiYSBhcyBScixLbCBhcyBSdCxxcCBhcyBTLHVlIGFzIFNpLHlhIGFzIFNuLHVzIGFzIFNyLEVsIGFzIFN0LExwIGFzIFQsbmUgYXMgVGksdmEgYXMgVG4sSmEgYXMgVHIsbHUgYXMgVHQsbXAgYXMgVSxFYSBhcyBVbixEZSBhcyBVcixldSBhcyBVdCxycCBhcyBWLGNzIGFzIFZuLHJyIGFzIFZyLFJsIGFzIFZ0LGhwIGFzIFcsQ3MgYXMgV24saG4gYXMgV3IsUWwgYXMgV3QsdmQgYXMgWCxOaSBhcyBYbixibiBhcyBYcixHIGFzIFh0LGhkIGFzIFksSGkgYXMgWW4sd2UgYXMgWXIsZWMgYXMgWXQsYmQgYXMgWixZaSBhcyBabixLdCBhcyBacixBaSBhcyBadCxRcCBhcyBfLGVuIGFzIF9pLHEgYXMgX24sbmMgYXMgX3Isc2QgYXMgX3Qsb20gYXMgYSxhbiBhcyBhaSxncyBhcyBhbixuciBhcyBhcix0ZCBhcyBhdCxLcCBhcyBiLEEgYXMgYmksaGEgYXMgYm4scmMgYXMgYnIsS3UgYXMgYnQsZG0gYXMgYyxYdCBhcyBjaSxzcyBhcyBjbixHbiBhcyBjcix5ZCBhcyBjdCxobSBhcyBkLFp0IGFzIGRpLE9vIGFzIGRuLG9hIGFzIGRyLEp1IGFzIGR0LEggYXMgZWksQXIgYXMgZW4scWkgYXMgZXIsUXUgYXMgZXQsZ20gYXMgZixWZSBhcyBmaSxEYSBhcyBmbixRaSBhcyBmcixxdSBhcyBmdCxlbSBhcyBnLG5uIGFzIGdpLF9zIGFzIGduLGlzIGFzIGdyLG1kIGFzIGd0LGltIGFzIGgsY24gYXMgaGksdnMgYXMgaG4sVXIgYXMgaHIsWXUgYXMgaHQsYW0gYXMgaSx4biBhcyBpaSxBbiBhcyBpbix0cyBhcyBpcixTZCBhcyBpdCxPcCBhcyBqLE1uIGFzIGpuLCRzIGFzIGpyLGRsIGFzIGp0LGpwIGFzIGssaHMgYXMga24sRnIgYXMga3IscHUgYXMga3QsbW0gYXMgbCx6dCBhcyBsaSx5cyBhcyBsbix6cyBhcyBscixwZCBhcyBsdCxybSBhcyBtLGRuIGFzIG1pLGFhIGFzIG1uLGVhIGFzIG1yLENkIGFzIG10LF9tIGFzIG4scXQgYXMgbmksRG4gYXMgbm4sR2kgYXMgbnIsY2QgYXMgbnQsdW0gYXMgbyxSdCBhcyBvaSxxcyBhcyBvbixzciBhcyBvcixfZCBhcyBvdCxubSBhcyBwLFYgYXMgcGksRG8gYXMgcG4sdGEgYXMgcHIsb2QgYXMgcHQsT2QgYXMgcSxCaSBhcyBxbixCZSBhcyBxcixLIGFzIHF0LGxtIGFzIHIsVGUgYXMgcmksam4gYXMgcm4sVWkgYXMgcnIsbmQgYXMgcnQsZm0gYXMgcyxCdCBhcyBzaSxwcyBhcyBzbix0ciBhcyBzcixYdSBhcyBzdCx2bSBhcyB0LEd0IGFzIHRpLFpvIGFzIHRuLEtpIGFzIHRyLFp1IGFzIHR0LHBtIGFzIHUsVnQgYXMgdWksb3MgYXMgdW4saWEgYXMgdXIsZmQgYXMgdXQsWHAgYXMgdix0biBhcyB2aSxEaSBhcyB2bixLciBhcyB2cixqdSBhcyB2dCxScCBhcyB3LHZlIGFzIHdpLG1hIGFzIHduLFlyIGFzIHdyLGN1IGFzIHd0LEpwIGFzIHgsTCBhcyB4aSxnYSBhcyB4bixjYSBhcyB4cixfYyBhcyB4dCxXcCBhcyB5LE8gYXMgeWksSnIgYXMgeW4sdXIgYXMgeXIsR3UgYXMgeXQsbnAgYXMgeixacyBhcyB6bixhciBhcyB6cixWbCBhcyB6dH07", ), }, - "SkeletonList-Cmqz3hfa.js": { + "SkeletonChart-1Y_5s9f0.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0p0IGFzIGUsX24gYXMgdCxhbiBhcyBuLGNuIGFzIHIsY3IgYXMgaSxnaSBhcyBhLGhuIGFzIG8sbnIgYXMgcyx0IGFzIGN9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgbD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEuNWB9LHU9e2NsYXNzOmBmbGV4IG1pbi13LTAgZmxleC0xIGl0ZW1zLWNlbnRlciBnYXAtMmB9LGQ9dCh7X19uYW1lOmBTa2VsZXRvbkxpc3RgLHByb3BzOntyb3dzOntkZWZhdWx0OjV9fSxzZXR1cCh0KXtyZXR1cm4oZCxmKT0+KHMoKSxyKGBvbGAsbCxbKHMoITApLHIoZSxudWxsLGkodC5yb3dzLGU9PihzKCkscihgbGlgLHtrZXk6ZSxjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zYH0sW24oYHNwYW5gLHUsW28oYShjKSx7Y2xhc3M6YGgtMyB3LTQgc2hyaW5rLTBgfSksbyhhKGMpLHtjbGFzczpgaC00IHctZnVsbCBtYXgtdy00MGB9KV0pLG8oYShjKSx7Y2xhc3M6YGgtNCB3LTEyIHNocmluay0wYH0pXSkpKSwxMjgpKV0pKX19KTtleHBvcnR7ZCBhcyB0fTs=", + "aW1wb3J0e19uIGFzIGUsaXIgYXMgdCx0IGFzIG4sdW4gYXMgcix2aSBhcyBpLHluIGFzIGF9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjt2YXIgbz17Y2xhc3M6YGgtNzIgdy1mdWxsYH0scz1hKHtfX25hbWU6YFNrZWxldG9uQ2hhcnRgLHNldHVwKGEpe3JldHVybihhLHMpPT4odCgpLHIoYGRpdmAsbyxbZShpKG4pLHtjbGFzczpgaC1mdWxsIHctZnVsbGB9KV0pKX19KTtleHBvcnR7cyBhcyB0fTs=", ), }, - "SpendPage-6ZX2q3Zv.js": { + "SpendPage-CN4owVU0.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEUgYXMgbixGciBhcyByLEp0IGFzIGksT24gYXMgYSxRIGFzIG8sUyBhcyBzLFNpIGFzIGMsVCBhcyBsLFhuIGFzIHUsX24gYXMgZCxfdCBhcyBmLGFuIGFzIHAsYiBhcyBtLGMgYXMgaCxjbiBhcyBnLGNyIGFzIF8sZCBhcyB2LGVyIGFzIHksZiBhcyBiLGcgYXMgeCxnaSBhcyBTLGhuIGFzIEMsaW4gYXMgdyxtbiBhcyBULG4gYXMgZWUsbnIgYXMgRSxvaSBhcyBELG9uIGFzIE8sc24gYXMgayx2IGFzIEEsdyBhcyBqLHggYXMgTSx5IGFzIE4seWkgYXMgUH1mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO2ltcG9ydHtuIGFzIHRlLHIgYXMgbmUsdCBhcyByZX1mcm9tIi4vdGFicy1ZbGhuSHBLLS5qcyI7aW1wb3J0e18gYXMgRixhIGFzIGllLGMgYXMgSSxnIGFzIEwsaCBhcyBhZSxpIGFzIG9lLG0gYXMgc2UsbiBhcyBjZSxvIGFzIGxlLHIgYXMgdWUsdCBhcyBSfWZyb20iLi9pbmRleC1keXdTOE9wVC5qcyI7aW1wb3J0e3QgYXMgen1mcm9tIi4vRXJyb3JTdGF0ZS15bTZlU2xqMi5qcyI7aW1wb3J0e18gYXMgQixhIGFzIGRlLGQgYXMgZmUsaSBhcyBwZSxvIGFzIFYsciBhcyBtZSx0IGFzIEgsdiBhcyBVfWZyb20iLi9iYWRnZS1EVWlCVER5QS5qcyI7aW1wb3J0e28gYXMgVyx0IGFzIEd9ZnJvbSIuL0RhdGFUYWJsZS1DUXhSVkRTWS5qcyI7aW1wb3J0e3QgYXMgS31mcm9tIi4vQ29tcGFjdE51bWJlci1wcjhjSjRjdi5qcyI7aW1wb3J0e3QgYXMgcX1mcm9tIi4vVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQ2prVW5hT3ouanMiO2ltcG9ydHthIGFzIGhlLGkgYXMgZ2UsbiBhcyBfZSxvIGFzIEosciBhcyB2ZSxzIGFzIHllLHQgYXMgYmV9ZnJvbSIuL2J1cm5kb3duLUJ6NDR4Ny1kLmpzIjtpbXBvcnR7dCBhcyBZfWZyb20iLi9FbnRpdHlMaW5rLURnOTNLR1ZULmpzIjtpbXBvcnR7dCBhcyB4ZX1mcm9tIi4vQ2xhbXBlZFJhbmdlTm90aWNlLUQyd2FsblhmLmpzIjtpbXBvcnR7biBhcyBTZSx0IGFzIENlfWZyb20iLi9UaW1lU2VyaWVzQ2hhcnQtQkZjVDZ3b0EuanMiO2ltcG9ydHtvIGFzIHdlfWZyb20iLi9rcGktY2htM0JpdUYuanMiO2ltcG9ydHt0IGFzIFRlfWZyb20iLi9jYXRhbG9nLWxVNDFpcklxLmpzIjtpbXBvcnR7aSBhcyBFZSxyIGFzIERlLHQgYXMgT2V9ZnJvbSIuL3Nlcmllcy1OSVJWQlhNUC5qcyI7dmFyIGtlPVtgbW9kZWxgLGBwcm92aWRlcmAsYGdyb3VwYF07ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIGtlLmluY2x1ZGVzKGUpfXZhciBqZT1bYGNvc3RgLGByZXFgLGB0b2tpbmAsYHRva291dGBdLFg9e2Nvc3Q6YENvc3RgLHJlcTpgUmVxdWVzdHNgLHRva2luOmBUb2tlbnMgaW5gLHRva291dDpgVG9rZW5zIG91dGB9O2Z1bmN0aW9uIE1lKGUpe3JldHVybiBqZS5pbmNsdWRlcyhlKX12YXIgTmU9MTAwLFo9MTAwLFBlPTZlNCxGZT1mKGBzcGVuZGAse3N0YXRlOigpPT4oe2J5OmBtb2RlbGAsbWV0cmljOmBjb3N0YCxkcmlsbDpgYCxidWNrZXRzOltdLGJyZWFrZG93bjpbXSxvdGhlclBvaW50czpudWxsLHRvdGFsUG9pbnRzOltdLGNvbXBhcmlzb25Qb2ludHM6bnVsbCxjb21wYXJpc29uVW5hdmFpbGFibGVSZWFzb246bnVsbCxtb2RlbFJhbmtpbmc6W10scHJpY2luZ0hlYWx0aFJhbmtpbmc6W10sYnVybmRvd25CdWNrZXRzOltdLGJ1cm5kb3duUG9pbnRzOltdLGJ1cm5kb3duQnVkZ2V0TWljcm9zOm51bGwsZHJpbGxkb3duUm93czpbXSxkcmlsbGRvd25NZXRyaWNzOltdLGRyaWxsZG93bkRpc2FibGVkOiExLGxvYWRpbmc6ITEsYnJlYWtkb3duRXJyb3I6YGAscmFua2luZ0Vycm9yOmBgLHByaWNpbmdIZWFsdGhFcnJvcjpgYCxkcmlsbGRvd25FcnJvcjpgYCxidXJuZG93bkVycm9yOmBgLHByaWNpbmdIZWFsdGhMb2FkaW5nOiExLGRyaWxsZG93bkxvYWRpbmc6ITEsYnVybmRvd25Mb2FkaW5nOiExLHByaWNpbmdIZWFsdGhMb2FkZWQ6ITEsZHJpbGxkb3duTG9hZGVkOiExLHByaWNpbmdIZWFsdGhXaW5kb3c6bnVsbCxwcmljaW5nSGVhbHRoU3BhbjpudWxsLGRyaWxsZG93bldpbmRvdzpudWxsLGRyaWxsZG93blNwYW46bnVsbCxkcmlsbGRvd25EcmlsbEZldGNoZWRGb3I6bnVsbCxicmVha2Rvd25CeUZldGNoZWRGb3I6bnVsbCxicmVha2Rvd25NZXRyaWNGZXRjaGVkRm9yOm51bGwsYnJlYWtkb3duV2luZG93Om51bGwsYnJlYWtkb3duU3BhbjpudWxsLGJyZWFrZG93blNjb3BlOm51bGwsYnJlYWtkb3duUmVxSWQ6MCxyYW5raW5nUmVxSWQ6MCxwcmljaW5nSGVhbHRoUmVxSWQ6MCxidXJuZG93blJlcUlkOjAsZHJpbGxkb3duUmVxSWQ6MCxyZWZyZXNoUmVxSWQ6MCxwb2xsZXI6dm9pZCAwfSksZ2V0dGVyczp7YnVybmRvd25BdmFpbGFibGU6KCk9PkxlKFIoKS5zY29wZSkhPT1udWxsfSxhY3Rpb25zOntzZXRTZWxlY3Rpb24oZSl7bGV0IHQ9ITE7ZS5ieSE9PXZvaWQgMCYmZS5ieSE9PXRoaXMuYnkmJih0aGlzLmJ5PWUuYnksdD0hMCksZS5tZXRyaWMhPT12b2lkIDAmJmUubWV0cmljIT09dGhpcy5tZXRyaWMmJih0aGlzLm1ldHJpYz1lLm1ldHJpYyx0PSEwKSxlLmRyaWxsIT09dm9pZCAwJiZlLmRyaWxsIT09dGhpcy5kcmlsbCYmKHRoaXMuZHJpbGw9ZS5kcmlsbCx0PSEwKSx0JiZ0aGlzLnJlZnJlc2goKX0sYXN5bmMgcmVmcmVzaCgpe2lmKCFNKCkuaXNBdXRoZW50aWNhdGVkKXJldHVybjtsZXQgZT0rK3RoaXMucmVmcmVzaFJlcUlkO3RoaXMubG9hZGluZz0hMDt0cnl7YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZmV0Y2hNb2RlbFJhbmtpbmcoKS50aGVuKCgpPT50aGlzLmZldGNoQnJlYWtkb3duKCkpLHRoaXMuZmV0Y2hQcmljaW5nSGVhbHRoUmFua2luZygpLHRoaXMuZmV0Y2hCdXJuZG93bigpLHRoaXMuZmV0Y2hEcmlsbGRvd24oKV0pfWZpbmFsbHl7ZT09PXRoaXMucmVmcmVzaFJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19LGFzeW5jIGZldGNoTW9kZWxSYW5raW5nKCl7bGV0IGU9UigpLHQ9Kyt0aGlzLnJhbmtpbmdSZXFJZDt0cnl7bGV0IG49YXdhaXQgbShgL2FkbWluL2FwaS91c2FnZS9tb2RlbHM/bWV0cmljPSR7dGhpcy5tZXRyaWN9JndpbmRvdz0ke2Uud2luZG93fSZzcGFuPSR7ZS5zcGFufSZsaW1pdD0ke05lfSZkZXRhaWw9MWApO2lmKHQhPT10aGlzLnJhbmtpbmdSZXFJZClyZXR1cm47dGhpcy5tb2RlbFJhbmtpbmc9bi5tb2RlbHMsdGhpcy5yYW5raW5nRXJyb3I9YGB9Y2F0Y2goZSl7aWYodCE9PXRoaXMucmFua2luZ1JlcUlkfHxRKGUpKXJldHVybjt0aGlzLnJhbmtpbmdFcnJvcj0kKGUpfX0sYXN5bmMgZmV0Y2hQcmljaW5nSGVhbHRoUmFua2luZygpe2xldCBlPVIoKTsodGhpcy5wcmljaW5nSGVhbHRoV2luZG93IT09ZS53aW5kb3d8fHRoaXMucHJpY2luZ0hlYWx0aFNwYW4hPT1lLnNwYW4pJiYodGhpcy5wcmljaW5nSGVhbHRoTG9hZGVkPSExKSx0aGlzLnByaWNpbmdIZWFsdGhXaW5kb3c9ZS53aW5kb3csdGhpcy5wcmljaW5nSGVhbHRoU3Bhbj1lLnNwYW47bGV0IHQ9Kyt0aGlzLnByaWNpbmdIZWFsdGhSZXFJZDt0aGlzLnByaWNpbmdIZWFsdGhMb2FkaW5nPSEwO3RyeXtsZXQgbj1hd2FpdCBtKGAvYWRtaW4vYXBpL3VzYWdlL21vZGVscz9tZXRyaWM9cmVxJndpbmRvdz0ke2Uud2luZG93fSZzcGFuPSR7ZS5zcGFufSZsaW1pdD0ke05lfSZkZXRhaWw9MWApO2lmKHQhPT10aGlzLnByaWNpbmdIZWFsdGhSZXFJZClyZXR1cm47dGhpcy5wcmljaW5nSGVhbHRoUmFua2luZz1uLm1vZGVscyx0aGlzLnByaWNpbmdIZWFsdGhFcnJvcj1gYCx0aGlzLnByaWNpbmdIZWFsdGhMb2FkZWQ9ITB9Y2F0Y2goZSl7aWYodCE9PXRoaXMucHJpY2luZ0hlYWx0aFJlcUlkfHxRKGUpKXJldHVybjt0aGlzLnByaWNpbmdIZWFsdGhFcnJvcj0kKGUpfWZpbmFsbHl7dD09PXRoaXMucHJpY2luZ0hlYWx0aFJlcUlkJiYodGhpcy5wcmljaW5nSGVhbHRoTG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaEJyZWFrZG93bigpe2xldCBlPVIoKTsodGhpcy5icmVha2Rvd25CeUZldGNoZWRGb3IhPT10aGlzLmJ5fHx0aGlzLmJyZWFrZG93bk1ldHJpY0ZldGNoZWRGb3IhPT10aGlzLm1ldHJpY3x8dGhpcy5icmVha2Rvd25XaW5kb3chPT1lLndpbmRvd3x8dGhpcy5icmVha2Rvd25TcGFuIT09ZS5zcGFufHx0aGlzLmJyZWFrZG93blNjb3BlIT09ZS5zY29wZSkmJih0aGlzLmJ1Y2tldHM9W10pLHRoaXMuYnJlYWtkb3duQnlGZXRjaGVkRm9yPXRoaXMuYnksdGhpcy5icmVha2Rvd25NZXRyaWNGZXRjaGVkRm9yPXRoaXMubWV0cmljLHRoaXMuYnJlYWtkb3duV2luZG93PWUud2luZG93LHRoaXMuYnJlYWtkb3duU3Bhbj1lLnNwYW4sdGhpcy5icmVha2Rvd25TY29wZT1lLnNjb3BlO2xldCB0PSsrdGhpcy5icmVha2Rvd25SZXFJZDt0cnl7aWYoZS5zY29wZT09PWBhbGxgP2F3YWl0IHRoaXMuZmV0Y2hCcmVha2Rvd25GbGVldFdpZGUoZS53aW5kb3csZS5zcGFuLHQpOmUuc2NvcGUuc3RhcnRzV2l0aChgZ3JvdXA6YCl8fGUuc2NvcGUuc3RhcnRzV2l0aChgdXNlcjpgKT9hd2FpdCB0aGlzLmZldGNoQnJlYWtkb3duU2luZ2xlU2NvcGUoZS5zY29wZSxlLndpbmRvdyxlLnNwYW4sdCk6YXdhaXQgdGhpcy5mZXRjaEJyZWFrZG93blByb3ZpZGVyU2NvcGUoZS5zY29wZS5zbGljZSg5KSxlLndpbmRvdyxlLnNwYW4sdCksdCE9PXRoaXMuYnJlYWtkb3duUmVxSWQpcmV0dXJuO3RoaXMuYnJlYWtkb3duRXJyb3I9YGAsZS5jbXBTcGVjLnJlcXVlc3RlZD9hd2FpdCB0aGlzLmZldGNoQ29tcGFyaXNvbihlLnNjb3BlLGUud2luZG93LGUuc3BhbixlLmNtcFNwZWMub2Zmc2V0LHQpOih0aGlzLmNvbXBhcmlzb25Qb2ludHM9bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1udWxsKX1jYXRjaChlKXtpZih0IT09dGhpcy5icmVha2Rvd25SZXFJZHx8UShlKSlyZXR1cm47dGhpcy5icmVha2Rvd25FcnJvcj0kKGUpfX0sYXN5bmMgZmV0Y2hCcmVha2Rvd25GbGVldFdpZGUoZSx0LG4pe2xldCByPWF3YWl0IHRoaXMuZmV0Y2hTZXJpZXMoW2B0b3RhbGBdLHRoaXMubWV0cmljLGUsdCwwKTtpZihuIT09dGhpcy5icmVha2Rvd25SZXFJZClyZXR1cm47dGhpcy5idWNrZXRzPXIuYnVja2V0cztsZXQgaT1yLnNlcmllcy5maW5kKGU9PmUuc2NvcGU9PT1gdG90YWxgKT8ucG9pbnRzPz9BcnJheShyLmJ1Y2tldHMubGVuZ3RoKS5maWxsKDApO2lmKHRoaXMudG90YWxQb2ludHM9aSx0aGlzLmJ5PT09YG1vZGVsYCl7bGV0IHI9dGhpcy5tb2RlbFJhbmtpbmcuc2xpY2UoMCwxMCkubWFwKGU9PmBtb2RlbDoke2UuaWR9YCk7aWYoci5sZW5ndGg9PT0wKXt0aGlzLmJyZWFrZG93bj1bXSx0aGlzLm90aGVyUG9pbnRzPU9lKGksW10pO3JldHVybn1sZXQgYT1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKHIsdGhpcy5tZXRyaWMsZSx0LDApO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjtsZXQgbz1EZShhLnNlcmllcywxMCk7dGhpcy5icmVha2Rvd249byx0aGlzLm90aGVyUG9pbnRzPU9lKGksbyk7cmV0dXJufWlmKHRoaXMuYnk9PT1gcHJvdmlkZXJgKXtsZXQgcj10aGlzLm1vZGVsUmFua2luZy5zbGljZSgwLFopLm1hcChlPT5gbW9kZWw6JHtlLmlkfWApO2lmKHIubGVuZ3RoPT09MCl7dGhpcy5icmVha2Rvd249W10sdGhpcy5vdGhlclBvaW50cz1udWxsO3JldHVybn1sZXQgaT1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKHIsdGhpcy5tZXRyaWMsZSx0LDApO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjt0aGlzLmJyZWFrZG93bj1FZShpLnNlcmllcyksdGhpcy5vdGhlclBvaW50cz1udWxsO3JldHVybn1sZXQgYT1hd2FpdCBtKGIoe2tpbmQ6YGdyb3VwYCx3aW5kb3c6ZSxzcGFuOnQsbWV0cmljczpbdGhpcy5tZXRyaWNdfSkpO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjtsZXQgbz1hLnJvd3Muc2xpY2UoMCxaKS5tYXAoZT0+YGdyb3VwOiR7ZS5pZH1gKTtpZihvLmxlbmd0aD09PTApe3RoaXMuYnJlYWtkb3duPVtdLHRoaXMub3RoZXJQb2ludHM9bnVsbDtyZXR1cm59bGV0IHM9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhvLHRoaXMubWV0cmljLGUsdCwwKTtuPT09dGhpcy5icmVha2Rvd25SZXFJZCYmKHRoaXMuYnJlYWtkb3duPXMuc2VyaWVzLHRoaXMub3RoZXJQb2ludHM9bnVsbCl9LGFzeW5jIGZldGNoQnJlYWtkb3duU2luZ2xlU2NvcGUoZSx0LG4scil7bGV0IGk9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhbZV0sdGhpcy5tZXRyaWMsdCxuLDApO2lmKHIhPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjt0aGlzLmJ1Y2tldHM9aS5idWNrZXRzO2xldCBhPWkuc2VyaWVzLmZpbmQodD0+dC5zY29wZT09PWUpPy5wb2ludHM/P0FycmF5KGkuYnVja2V0cy5sZW5ndGgpLmZpbGwoMCk7dGhpcy5icmVha2Rvd249W3tzY29wZTplLHBvaW50czphfV0sdGhpcy5vdGhlclBvaW50cz1udWxsLHRoaXMudG90YWxQb2ludHM9YX0sYXN5bmMgZmV0Y2hCcmVha2Rvd25Qcm92aWRlclNjb3BlKGUsdCxuLHIpe2xldCBpPXRoaXMubW9kZWxSYW5raW5nLmZpbHRlcih0PT50LmlkLnN0YXJ0c1dpdGgoYCR7ZX0vYCkpLnNsaWNlKDAsWikubWFwKGU9PmBtb2RlbDoke2UuaWR9YCk7aWYoaS5sZW5ndGg9PT0wKXt0aGlzLmJ1Y2tldHM9W10sdGhpcy5icmVha2Rvd249W10sdGhpcy5vdGhlclBvaW50cz1udWxsLHRoaXMudG90YWxQb2ludHM9W107cmV0dXJufWxldCBhPWF3YWl0IHRoaXMuZmV0Y2hTZXJpZXMoaSx0aGlzLm1ldHJpYyx0LG4sMCk7aWYociE9PXRoaXMuYnJlYWtkb3duUmVxSWQpcmV0dXJuO3RoaXMuYnVja2V0cz1hLmJ1Y2tldHM7bGV0W29dPUVlKGEuc2VyaWVzKSxzPW8/LnBvaW50cz8/QXJyYXkoYS5idWNrZXRzLmxlbmd0aCkuZmlsbCgwKTt0aGlzLmJyZWFrZG93bj1be3Njb3BlOmBwcm92aWRlcjoke2V9YCxwb2ludHM6c31dLHRoaXMub3RoZXJQb2ludHM9bnVsbCx0aGlzLnRvdGFsUG9pbnRzPXN9LGFzeW5jIGZldGNoQ29tcGFyaXNvbihlLHQsbixyLGkpe2xldCBhPWU9PT1gYWxsYD9gdG90YWxgOmUuc3RhcnRzV2l0aChgcHJvdmlkZXI6YCk/bnVsbDplO2lmKGE9PT1udWxsKXt0aGlzLmNvbXBhcmlzb25Qb2ludHM9bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1gQ29tcGFyaXNvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBhIHNpbmdsZS1wcm92aWRlciBzY29wZS5gO3JldHVybn1sZXQgbz1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKFthXSx0aGlzLm1ldHJpYyx0LG4scik7aT09PXRoaXMuYnJlYWtkb3duUmVxSWQmJih0aGlzLmNvbXBhcmlzb25Qb2ludHM9by5zZXJpZXMuZmluZChlPT5lLnNjb3BlPT09YSk/LnBvaW50cz8/bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1udWxsKX0sYXN5bmMgZmV0Y2hTZXJpZXMoZSx0LG4scixpKXtyZXR1cm4gbSh2KHtzY29wZTplLG1ldHJpYzp0LHdpbmRvdzpuLHNwYW46cixvZmZzZXQ6aXx8dm9pZCAwfSkpfSxhc3luYyBmZXRjaEJ1cm5kb3duKCl7bGV0IGU9UigpLHQ9Kyt0aGlzLmJ1cm5kb3duUmVxSWQsbj1MZShlLnNjb3BlKTtpZihuPT09bnVsbCl7dGhpcy5idXJuZG93bkJ1Y2tldHM9W10sdGhpcy5idXJuZG93blBvaW50cz1bXSx0aGlzLmJ1cm5kb3duQnVkZ2V0TWljcm9zPW51bGwsdGhpcy5idXJuZG93bkVycm9yPWBgLHRoaXMuYnVybmRvd25Mb2FkaW5nPSExO3JldHVybn10aGlzLmJ1cm5kb3duTG9hZGluZz0hMDt0cnl7bGV0IGU9X2UobmV3IERhdGUpLHI9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhbbl0sYGNvc3RgLGBkYXlgLGUsMCk7aWYodCE9PXRoaXMuYnVybmRvd25SZXFJZClyZXR1cm47dGhpcy5idXJuZG93bkJ1Y2tldHM9ci5idWNrZXRzLHRoaXMuYnVybmRvd25Qb2ludHM9ci5zZXJpZXMuZmluZChlPT5lLnNjb3BlPT09bik/LnBvaW50cz8/QXJyYXkoci5idWNrZXRzLmxlbmd0aCkuZmlsbCgwKSx0aGlzLmJ1cm5kb3duQnVkZ2V0TWljcm9zPVJlKG4pLHRoaXMuYnVybmRvd25FcnJvcj1gYH1jYXRjaChlKXtpZih0IT09dGhpcy5idXJuZG93blJlcUlkfHxRKGUpKXJldHVybjt0aGlzLmJ1cm5kb3duRXJyb3I9JChlKX1maW5hbGx5e3Q9PT10aGlzLmJ1cm5kb3duUmVxSWQmJih0aGlzLmJ1cm5kb3duTG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaERyaWxsZG93bigpe2xldCBlPVIoKTsodGhpcy5kcmlsbGRvd25XaW5kb3chPT1lLndpbmRvd3x8dGhpcy5kcmlsbGRvd25TcGFuIT09ZS5zcGFufHx0aGlzLmRyaWxsZG93bkRyaWxsRmV0Y2hlZEZvciE9PXRoaXMuZHJpbGwpJiYodGhpcy5kcmlsbGRvd25Mb2FkZWQ9ITEpLHRoaXMuZHJpbGxkb3duV2luZG93PWUud2luZG93LHRoaXMuZHJpbGxkb3duU3Bhbj1lLnNwYW4sdGhpcy5kcmlsbGRvd25EcmlsbEZldGNoZWRGb3I9dGhpcy5kcmlsbDtsZXQgdD0rK3RoaXMuZHJpbGxkb3duUmVxSWQsbj1JZSh0aGlzLmRyaWxsKTt0aGlzLmRyaWxsZG93bkxvYWRpbmc9ITA7dHJ5e2xldCByPW4ua2luZD09PWB1c2VybW9kZWxgP3traW5kOmB1c2VybW9kZWxgLC4uLmgoZS53aW5kb3csZS5zcGFuKSx1c2VyOm4udXNlcn06bi5raW5kPT09YHVzZXJgP3traW5kOmB1c2VyYCx3aW5kb3c6ZS53aW5kb3csc3BhbjplLnNwYW4sZ3JvdXA6bi5ncm91cCxtZXRyaWNzOltgcmVxYCxgdG9raW5gLGB0b2tvdXRgLGBjb3N0YF19OntraW5kOmBncm91cGAsd2luZG93OmUud2luZG93LHNwYW46ZS5zcGFuLG1ldHJpY3M6W2ByZXFgLGB0b2tpbmAsYHRva291dGAsYGNvc3RgXX0saT1hd2FpdCBtKGIocikpO2lmKHQhPT10aGlzLmRyaWxsZG93blJlcUlkKXJldHVybjt0aGlzLmRyaWxsZG93blJvd3M9aS5yb3dzLHRoaXMuZHJpbGxkb3duTWV0cmljcz1pLm1ldHJpY3MsdGhpcy5kcmlsbGRvd25EaXNhYmxlZD0hMSx0aGlzLmRyaWxsZG93bkVycm9yPWBgLHRoaXMuZHJpbGxkb3duTG9hZGVkPSEwfWNhdGNoKGUpe2lmKHQhPT10aGlzLmRyaWxsZG93blJlcUlkfHxRKGUpKXJldHVybjtpZihlIGluc3RhbmNlb2YgTiYmZS5zdGF0dXM9PT00MDQpe3RoaXMuZHJpbGxkb3duUm93cz1bXSx0aGlzLmRyaWxsZG93bk1ldHJpY3M9W10sdGhpcy5kcmlsbGRvd25EaXNhYmxlZD0hMCx0aGlzLmRyaWxsZG93bkVycm9yPWBgLHRoaXMuZHJpbGxkb3duTG9hZGVkPSEwO3JldHVybn10aGlzLmRyaWxsZG93bkVycm9yPSQoZSl9ZmluYWxseXt0PT09dGhpcy5kcmlsbGRvd25SZXFJZCYmKHRoaXMuZHJpbGxkb3duTG9hZGluZz0hMSl9fSxzdGFydFBvbGxpbmcoKXt0aGlzLnBvbGxlcnx8KHRoaXMucG9sbGVyPUEoe2ludGVydmFsTXM6UGUsdGljazooKT0+dm9pZCB0aGlzLnJlZnJlc2goKX0pLHRoaXMucG9sbGVyLnN0YXJ0KCkpfSxzdG9wUG9sbGluZygpe3RoaXMucG9sbGVyPy5zdG9wKCksdGhpcy5wb2xsZXI9dm9pZCAwfX19KTtmdW5jdGlvbiBJZShlKXtyZXR1cm4gZT09PWBgP3traW5kOmBncm91cGB9OmUuc3RhcnRzV2l0aChgZ3JvdXA6YCk/e2tpbmQ6YHVzZXJgLGdyb3VwOmUuc2xpY2UoNil9OntraW5kOmB1c2VybW9kZWxgLHVzZXI6ZS5zbGljZSg1KX19ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGU9PT1gYWxsYD9gdG90YWxgOmUuc3RhcnRzV2l0aChgZ3JvdXA6YCl8fGUuc3RhcnRzV2l0aChgdXNlcjpgKT9lOm51bGx9ZnVuY3Rpb24gUmUoZSl7bGV0IHQ9eCgpO2lmKGU9PT1gdG90YWxgKXtsZXQgZT13ZSh0Lm92ZXJ2aWV3Py5ncm91cHM/P1tdKTtyZXR1cm4gZT4wP2U6bnVsbH1pZihlLnN0YXJ0c1dpdGgoYGdyb3VwOmApKXtsZXQgbj1lLnNsaWNlKDYpLHI9dC5vdmVydmlldz8uZ3JvdXBzLmZpbmQoZT0+ZS5uYW1lPT09bik/LmxpbWl0cz8uY29zdFBlck1vbnRoVVNEO3JldHVybiByJiZyPjA/TWF0aC5yb3VuZChyKjFlNik6bnVsbH1sZXQgbj1lLnNsaWNlKDUpLHI9dC51c2FnZT8udXNlcnMuZmluZChlPT5lLmlkPT09bik/LmxpbWl0cz8uY29zdFBlck1vbnRoVVNEO3JldHVybiByJiZyPjA/TWF0aC5yb3VuZChyKjFlNik6bnVsbH1mdW5jdGlvbiBRKGUpe3JldHVybiBlIGluc3RhbmNlb2YgTiYmKGUuc3RhdHVzPT09NDAxfHxlLnN0YXR1cz09PTQwMyl9ZnVuY3Rpb24gJChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTpTdHJpbmcoZSl9dmFyIHplPXsiYXJpYS1sYWJlbCI6YEJyZWFkY3J1bWJgLGNsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LEJlPVtgZGlzYWJsZWRgXSxWZT17Y2xhc3M6YGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZGB9LEhlPXtjbGFzczpgZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kYH0sVWU9ZCh7X19uYW1lOmBBdHRyaWJ1dGlvbkRyaWxsZG93bmAscHJvcHM6e3Jvd3M6e30sbWV0cmljczp7fSxkcmlsbDp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSx1c2VyTW9kZWxTdGF0c0VuYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sd2luZG93Ont9LHNwYW46e30sbG9hZGluZzp7dHlwZTpCb29sZWFufSxsb2FkZWQ6e3R5cGU6Qm9vbGVhbn0sZXJyb3I6e30sb25SZXRyeTp7dHlwZTpGdW5jdGlvbn19LGVtaXRzOltgdXBkYXRlOmRyaWxsYF0sc2V0dXAoZSx7ZW1pdDp1fSl7bGV0IGQ9ZSxmPXUsbT1lZSgpLGg9dygoKT0+ZC5kcmlsbD09PWBgP3traW5kOmBncm91cGB9OmQuZHJpbGwuc3RhcnRzV2l0aChgZ3JvdXA6YCk/e2tpbmQ6YHVzZXJgLGdyb3VwOmQuZHJpbGwuc2xpY2UoNil9OntraW5kOmB1c2VybW9kZWxgLHVzZXI6ZC5kcmlsbC5zbGljZSg1KX0pLF89RChgYCk7ZnVuY3Rpb24gdigpe2YoYHVwZGF0ZTpkcmlsbGAsYGApfWZ1bmN0aW9uIHkoKXtfLnZhbHVlJiZmKGB1cGRhdGU6ZHJpbGxgLGBncm91cDoke18udmFsdWV9YCl9ZnVuY3Rpb24gYihlKXtsZXQgdD1oLnZhbHVlO3Qua2luZD09PWBncm91cGA/ZihgdXBkYXRlOmRyaWxsYCxgZ3JvdXA6JHtlfWApOnQua2luZD09PWB1c2VyYCYmZC51c2VyTW9kZWxTdGF0c0VuYWJsZWQmJihfLnZhbHVlPXQuZ3JvdXAsZihgdXBkYXRlOmRyaWxsYCxgdXNlcjoke2V9YCkpfWxldCB4PXcoKCk9PmgudmFsdWUua2luZD09PWBncm91cGA/YEdyb3VwYDpoLnZhbHVlLmtpbmQ9PT1gdXNlcmA/YFVzZXJgOmBNb2RlbGApO2Z1bmN0aW9uIEEoZSl7bGV0IHQ9aC52YWx1ZTtyZXR1cm4gdC5raW5kPT09YHVzZXJtb2RlbGA/YShZLHtsYWJlbDplLmlkLGtpbmQ6YG1vZGVsYCxpZDplLmlkfSk6dC5raW5kPT09YGdyb3VwYHx8ZC51c2VyTW9kZWxTdGF0c0VuYWJsZWQ/YShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxjbGFzczpgaW5saW5lLWZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtc20gaG92ZXI6dGV4dC1wcmltYXJ5IGhvdmVyOnVuZGVybGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MGAsb25DbGljazooKT0+YihlLmlkKX0sW2UuaWQsYShGLHtpY29uOm8sY2xhc3M6YHNpemUtM2AsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9KV0pOmEoYHNwYW5gLHt9LGUuaWQpfWxldCBNPXcoKCk9Plt7aWQ6YGlkYCxoZWFkZXI6eC52YWx1ZSxhY2Nlc3NvckZuOmU9PmUuaWQsY2VsbDooe3JvdzplfSk9PkEoZS5vcmlnaW5hbCl9LC4uLmQubWV0cmljcy5tYXAoZT0+KHtpZDplLGhlYWRlcjpYW2VdPz9lLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46dD0+dC52YWx1ZXNbZV0/PzAsY2VsbDooe3Jvdzp0fSk9PntsZXQgbj10Lm9yaWdpbmFsLnZhbHVlc1tlXT8/MDtyZXR1cm4gZT09PWBjb3N0YD9WKG4pOmEoSyx7dmFsdWU6bn0pfX0pKV0pLE49dygoKT0+aC52YWx1ZS5raW5kPT09YHVzZXJgJiYoIWQudXNlck1vZGVsU3RhdHNFbmFibGVkfHxkLmRpc2FibGVkKSksUD13KCgpPT5CKHtsb2FkaW5nOmQubG9hZGluZyxoYXNEYXRhOmQubG9hZGVkLGVycm9yOmQuZXJyb3J9KSksdGU9dygoKT0+IU4udmFsdWUmJmQucm93cy5sZW5ndGg9PT0wKTtyZXR1cm4oYSx1KT0+KEUoKSxPKFMobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bQyhTKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W0MoUyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi51WzFdfHw9W1QoYEF0dHJpYnV0aW9uYCwtMSldXSksXzoxfSksQyhTKEkpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLnVbMl18fD1bVChgRHJpbGwgZnJvbSBncm91cHMgaW50byB1c2VycyBpbnRvIHRoZSBtb2RlbHMgdGhleSB1c2VkLmAsLTEpXV0pLF86MX0pLHAoYG5hdmAsemUsW3AoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsY2xhc3M6YGhvdmVyOnRleHQtZm9yZWdyb3VuZCBob3Zlcjp1bmRlcmxpbmVgLGRpc2FibGVkOmgudmFsdWUua2luZD09PWBncm91cGAsb25DbGljazp2fSxgIEFsbCBncm91cHMgYCw4LEJlKSxoLnZhbHVlLmtpbmQ9PT1gdXNlcmA/KEUoKSxnKGkse2tleTowfSxbQyhTKEYpLHtpY29uOlMobyksY2xhc3M6YHNpemUtM2AsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkscChgc3BhbmAsVmUsYyhoLnZhbHVlLmdyb3VwKSwxKV0sNjQpKTprKGBgLCEwKSxoLnZhbHVlLmtpbmQ9PT1gdXNlcm1vZGVsYD8oRSgpLGcoaSx7a2V5OjF9LFtDKFMoRikse2ljb246UyhvKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxfLnZhbHVlPyhFKCksZyhgYnV0dG9uYCx7a2V5OjAsdHlwZTpgYnV0dG9uYCxjbGFzczpgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGhvdmVyOnVuZGVybGluZWAsb25DbGljazp5fSxjKF8udmFsdWUpLDEpKTprKGBgLCEwKSxDKFMoRikse2ljb246UyhvKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxwKGBzcGFuYCxIZSxjKGgudmFsdWUudXNlciksMSldLDY0KSk6ayhgYCwhMCldKV0pLF86MX0pLEMoUyhqKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgfSx7ZGVmYXVsdDpyKCgpPT5baC52YWx1ZS5raW5kPT09YHVzZXJtb2RlbGA/KEUoKSxPKHhlLHtrZXk6MCx3aW5kb3c6ZS53aW5kb3csc3BhbjplLnNwYW59LG51bGwsOCxbYHdpbmRvd2AsYHNwYW5gXSkpOmsoYGAsITApLE4udmFsdWU/KEUoKSxPKFMoTCkse2tleToxLHZhcmlhbnQ6YHdhcm5gfSx7ZGVmYXVsdDpyKCgpPT5bQyhTKHNlKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi51WzNdfHw9W1QoYFBlci11c2VyLW1vZGVsIHN0YXRpc3RpY3MgYXJlIG9mZmAsLTEpXV0pLF86MX0pLEMoUyhhZSkse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSx7ZGVmYXVsdDpyKCgpPT5bdVs1XXx8PXAoYHNwYW5gLG51bGwsW1QoYEVuYWJsZSBgKSxwKGBjb2RlYCx7Y2xhc3M6YGZvbnQtbW9ubyB0ZXh0LXhzYH0sYGFkbWluLnN0YXRzLnVzZXJNb2RlbGApLFQoYCBpbiB0aGUgbWlkZGxld2FyZSBjb25maWcgdG8gc2VlIHBlci1tb2RlbCBhdHRyaWJ1dGlvbiBmb3IgdGhpcyB1c2VyLmApXSwtMSksQyhTKG4pLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YG91dGxpbmVgLHNpemU6YHNtYCxvbkNsaWNrOnVbMF18fD1lPT5TKG0pLmdvVG8oYGNvbmZpZ2ApfSx7ZGVmYXVsdDpyKCgpPT5bLi4udVs0XXx8PVtUKGBPcGVuIENvbmZpZ2AsLTEpXV0pLF86MX0pXSksXzoxfSldKSxfOjF9KSk6UC52YWx1ZT09PWBza2VsZXRvbmA/KEUoKSxPKFcse2tleToyLHJvd3M6NSxjb2xzOmUubWV0cmljcy5sZW5ndGgrMX0sbnVsbCw4LFtgY29sc2BdKSk6UC52YWx1ZT09PWBlcnJvcmA/KEUoKSxPKHose2tleTozLG1lc3NhZ2U6ZS5lcnJvciwib24tcmV0cnkiOmUub25SZXRyeX0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTp0ZS52YWx1ZT8oRSgpLE8oVSx7a2V5OjQsdGl0bGU6YE5vIHRyYWZmaWMgaW4gdGhpcyByYW5nZS5gfSx7ZGVmYXVsdDpyKCgpPT5bQyhxKV0pLF86MX0pKTooRSgpLE8oRyx7a2V5OjUsY29sdW1uczpNLnZhbHVlLGRhdGE6ZS5yb3dzLCJlbXB0eS1tZXNzYWdlIjpgbm9uZWB9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYF0pKV0pLF86MX0pXSksXzoxfSkpfX0pLFdlPXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy0zYH0sR2U9e2tleTowfSxLZT17Y2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxxZT17a2V5OjF9LEplPXtrZXk6MCxjbGFzczpgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxZZT17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sWGU9ZCh7X19uYW1lOmBCdXJuRG93bkNoYXJ0YCxwcm9wczp7YnVja2V0czp7fSxwb2ludHM6e30sYnVkZ2V0TWljcm9zOnt9LG5vdzp7fSxsb2FkaW5nOnt0eXBlOkJvb2xlYW59LGVycm9yOnt9LG9uUmV0cnk6e3R5cGU6RnVuY3Rpb259fSxzZXR1cChlKXtsZXQgbj1lLGE9dygoKT0+Qih7bG9hZGluZzpuLmxvYWRpbmc/PyExLGhhc0RhdGE6bi5idWNrZXRzLmxlbmd0aD4wLGVycm9yOm4uZXJyb3I/P2BgfSkpLG89dygoKT0+bi5idWNrZXRzLm1hcChlPT5tZShlLGBkYXlgKSkpLHU9dygoKT0+YmUobi5wb2ludHMpKSxkPXcoKCk9PnUudmFsdWUuYXQoLTEpPz8wKSxmPXcoKCk9Plt7bGFiZWw6YFNwZW50IChNVEQpYCxkYXRhOnUudmFsdWUsY29sb3I6YC0tY2hhcnQtY29zdGB9XSksbT13KCgpPT5uLmJ1ZGdldE1pY3Jvcz09PW51bGw/W106W3tsYWJlbDpgQnVkZ2V0YCxkYXRhOkFycmF5KHUudmFsdWUubGVuZ3RoKS5maWxsKG4uYnVkZ2V0TWljcm9zKSxjb2xvcjpgLS1kZXN0cnVjdGl2ZWB9XSksaD13KCgpPT5uLmJ1ZGdldE1pY3Jvcz09PW51bGw/bnVsbDp2ZShkLnZhbHVlLG4uYnVkZ2V0TWljcm9zLG4ubm93KSksXz13KCgpPT5uLmJ1ZGdldE1pY3JvcyE9PW51bGwmJmQudmFsdWU+PW4uYnVkZ2V0TWljcm9zKTtyZXR1cm4obix1KT0+KEUoKSxPKFMobCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bQyhTKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W0MoUyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi51WzBdfHw9W1QoYEJ1cm4tZG93bmAsLTEpXV0pLF86MX0pLEMoUyhJKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi51WzFdfHw9W1QoYEN1bXVsYXRpdmUgc3BlbmQgdGhpcyBVVEMgY2FsZW5kYXIgbW9udGggYWdhaW5zdCB0aGUgY29uZmlndXJlZCBidWRnZXQuYCwtMSldXSksXzoxfSldKSxfOjF9KSxDKFMoaikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0se2RlZmF1bHQ6cigoKT0+W2EudmFsdWU9PT1gc2tlbGV0b25gPyhFKCksTyhTZSx7a2V5OjB9KSk6YS52YWx1ZT09PWBlcnJvcmA/KEUoKSxPKHose2tleToxLG1lc3NhZ2U6ZS5lcnJvcj8/YGAsIm9uLXJldHJ5IjplLm9uUmV0cnl9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6KEUoKSxnKGkse2tleToyfSxbcChgZGl2YCxXZSxbcChgZGl2YCxudWxsLFt1WzJdfHw9cChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgU3BlbnQgc28gZmFyYCwtMSkscChgcGAse2NsYXNzOlAoW2B0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYCxfLnZhbHVlP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKX0sYyhTKFYpKGQudmFsdWUpKSwzKV0pLGUuYnVkZ2V0TWljcm9zPT09bnVsbD9rKGBgLCEwKTooRSgpLGcoYGRpdmAsR2UsW3VbM118fD1wKGBwYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBCdWRnZXRgLC0xKSxwKGBwYCxLZSxjKFMoVikoZS5idWRnZXRNaWNyb3MpKSwxKV0pKSxlLmJ1ZGdldE1pY3Jvcz09PW51bGw/ayhgYCwhMCk6KEUoKSxnKGBkaXZgLHFlLFt1WzRdfHw9cChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUHJvamVjdGVkIHJ1bi1vdXRgLC0xKSxoLnZhbHVlPT09bnVsbD8oRSgpLGcoYHBgLEplLGBub3QgZW5vdWdoIGRhdGEgeWV0YCkpOihFKCksZyhgcGAse2tleToxLGNsYXNzOlAoW2B0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYCxfLnZhbHVlP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKX0sYyhoLnZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOmBzaG9ydGAsZGF5OmBudW1lcmljYH0pKSwzKSldKSldKSxlLmJ1ZGdldE1pY3Jvcz09PW51bGw/KEUoKSxnKGBwYCxZZSxgTm8gYnVkZ2V0IGNvbmZpZ3VyZWQgZm9yIHRoaXMgc2NvcGUuYCkpOmsoYGAsITApLEMoQ2Use2xhYmVsczpvLnZhbHVlLGRhdGFzZXRzOmYudmFsdWUsImNvbXBhcmlzb24tZGF0YXNldHMiOm0udmFsdWUsInZhbHVlLWZvcm1hdHRlciI6UyhWKSxhcmlhTGFiZWw6YEN1bXVsYXRpdmUgc3BlbmQgdGhpcyBtb250aCBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIGJ1ZGdldGB9LG51bGwsOCxbYGxhYmVsc2AsYGRhdGFzZXRzYCxgY29tcGFyaXNvbi1kYXRhc2V0c2AsYHZhbHVlLWZvcm1hdHRlcmBdKV0sNjQpKV0pLF86MX0pXSksXzoxfSkpfX0pO2Z1bmN0aW9uIFplKGUpe3JldHVybiBlLmZpbHRlcihlPT5lLmZyZWUpLm1hcChlPT4oe3Rva2Vuc0luOmUudG9rZW5zSW4/PzAsdG9rZW5zT3V0OmUudG9rZW5zT3V0Pz8wfSkpfWZ1bmN0aW9uIFFlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaSBvZiBlKXIrPWkudG9rZW5zSW4qdCtpLnRva2Vuc091dCpuO3JldHVybiBNYXRoLnJvdW5kKHIpfXZhciAkZT1uZXcgU2V0KFtgZnJlZWAsYHVucHJpY2VkYF0pO2Z1bmN0aW9uIGV0KGUsdCl7bGV0IG49bnVsbDtmb3IobGV0IHIgb2YgZSl7aWYoci5yZXF1ZXN0cz09PXZvaWQgMCljb250aW51ZTtsZXQgZT10LmdldChyLmlkKTshZXx8JGUuaGFzKGUucHJpY2VTb3VyY2UpfHwobj09PW51bGx8fHIucmVxdWVzdHM+KG4ucmVxdWVzdHM/PzApKSYmKG49cil9cmV0dXJuIG4/LmlkPz9udWxsfXZhciB0dD17a2V5OjAsY2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSxudD17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0scnQ9e2tleToxLGNsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zIHRleHQtY2hhcnQtcmVxdWVzdHNgfSxpdD17a2V5OjB9LGF0PXtrZXk6MCxjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtcyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxvdD17a2V5OjEsY2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXMgdGV4dC1jaGFydC1yZXF1ZXN0c2B9LHN0PXtrZXk6MixjbGFzczpgdGV4dC14cyB0ZXh0LXN0YXR1cy13YXJuYH0sY3Q9ZCh7X19uYW1lOmBDb3N0QXZvaWRlZENhcmRgLHByb3BzOnttb2RlbHM6e30sY2F0YWxvZzp7fSxyZWZNb2RlbDp7fSxjYWNoZVN0YXRzRW5hYmxlZDp7dHlwZTpCb29sZWFufSxjYWNoZVNhdmluZ3NBdmFpbGFibGU6e3R5cGU6Qm9vbGVhbn0sY2FjaGVTYXZpbmdzTm90ZTp7fX0sZW1pdHM6W2B1cGRhdGU6cmVmTW9kZWxgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgYT1lLG89bix1PXcoKCk9PntsZXQgZT1bXTtmb3IobGV0IHQgb2YgYS5tb2RlbHMpe2xldCBuPWEuY2F0YWxvZy5nZXQodC5pZCk7IW58fG4ucHJpY2VTb3VyY2U9PT1gZnJlZWB8fG4ucHJpY2VTb3VyY2U9PT1gdW5wcmljZWRgfHxlLnB1c2goe2lkOnQuaWQscmVxdWVzdHM6dC5yZXF1ZXN0cz8/MH0pfXJldHVybiBlLnNvcnQoKGUsdCk9PnQucmVxdWVzdHMtZS5yZXF1ZXN0cyl9KSxkPXcoKCk9PmV0KGEubW9kZWxzLGEuY2F0YWxvZykpLGY9dygoKT0+YS5yZWZNb2RlbHx8ZC52YWx1ZSksbT13KCgpPT5mLnZhbHVlP2EuY2F0YWxvZy5nZXQoZi52YWx1ZSk6dm9pZCAwKSxoPXcoKCk9PntsZXQgZT1tLnZhbHVlO3JldHVybiFlfHxlLmlucHV0UGVyTVRva1VzZD09PXZvaWQgMHx8ZS5vdXRwdXRQZXJNVG9rVXNkPT09dm9pZCAwP251bGw6UWUoWmUoYS5tb2RlbHMpLGUuaW5wdXRQZXJNVG9rVXNkLGUub3V0cHV0UGVyTVRva1VzZCl9KSx2PXcoKCk9PntsZXQgZT0wO2ZvcihsZXQgdCBvZiBhLm1vZGVscyllKz10LmNhY2hlU2F2ZWRNaWNyb1VzZD8/MDtyZXR1cm4gZX0pO2Z1bmN0aW9uIHkoZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZvKGB1cGRhdGU6cmVmTW9kZWxgLGUpfXJldHVybihuLGEpPT4oRSgpLE8oUyhsKSxudWxsLHtkZWZhdWx0OnIoKCk9PltDKFModCkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IHNtOmZsZXgtcm93IHNtOml0ZW1zLXN0YXJ0IHNtOmp1c3RpZnktYmV0d2VlbmB9LHtkZWZhdWx0OnIoKCk9PltwKGBkaXZgLG51bGwsW0MoUyhzKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzBdfHw9W1QoYENvc3QgYXZvaWRlZGAsLTEpXV0pLF86MX0pLEMoUyhJKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5hWzFdfHw9W1QoYFdoYXQgZnJlZS10aWVyIHRyYWZmaWMgaW4gcmFuZ2Ugd291bGQgaGF2ZSBjb3N0IGF0IGEgcmVhbCBtb2RlbCdzIG93biByYXRlcy5gLC0xKV1dKSxfOjF9KV0pLHUudmFsdWUubGVuZ3RoPjA/KEUoKSxnKGBkaXZgLHR0LFthWzJdfHw9cChgbGFiZWxgLHtpZDpgY29zdC1hdm9pZGVkLXJlZi1sYWJlbGAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFJlZmVyZW5jZSBtb2RlbGAsLTEpLEMoUyhsZSkseyJtb2RlbC12YWx1ZSI6Zi52YWx1ZT8/dm9pZCAwLCJvblVwZGF0ZTptb2RlbFZhbHVlIjp5fSx7ZGVmYXVsdDpyKCgpPT5bQyhTKHVlKSx7ImFyaWEtbGFiZWxsZWRieSI6YGNvc3QtYXZvaWRlZC1yZWYtbGFiZWxgLGNsYXNzOmB3LTU2YH0se2RlZmF1bHQ6cigoKT0+W0MoUyhjZSkse3BsYWNlaG9sZGVyOmBQaWNrIGEgcmVmZXJlbmNlIG1vZGVsYH0pXSksXzoxfSksQyhTKGllKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsoRSghMCksZyhpLG51bGwsXyh1LnZhbHVlLGU9PihFKCksTyhTKG9lKSx7a2V5OmUuaWQsdmFsdWU6ZS5pZH0se2RlZmF1bHQ6cigoKT0+W1QoYyhlLmlkKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSkpOmsoYGAsITApXSksXzoxfSksQyhTKGopLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtYH0se2RlZmF1bHQ6cigoKT0+W3AoYGRpdmAsbnVsbCxbYVszXXx8PXAoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYENvc3QgYXZvaWRlZCAoZnJlZS10aWVyIHRyYWZmaWMpYCwtMSksaC52YWx1ZT09PW51bGw/KEUoKSxnKGBwYCxudCxjKHUudmFsdWUubGVuZ3RoPT09MD9gTm8gcHJpY2VkIG1vZGVsIHNlcnZlZCBpbiByYW5nZSB0byBjb21wYXJlIGFnYWluc3QuYDpgUGljayBhIHJlZmVyZW5jZSBtb2RlbCBhYm92ZS5gKSwxKSk6KEUoKSxnKGBwYCxydCxjKFMoVikoaC52YWx1ZSkpLDEpKV0pLGUuY2FjaGVTdGF0c0VuYWJsZWQ/KEUoKSxnKGBkaXZgLGl0LFthWzRdfHw9cChgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQ2FjaGUgc2F2aW5nc2AsLTEpLGUuY2FjaGVTYXZpbmdzQXZhaWxhYmxlPyhFKCksZyhgcGAsb3QsYyhTKFYpKHYudmFsdWUpKSwxKSk6KEUoKSxnKGBwYCxhdCxgbi9hYCkpLGUuY2FjaGVTYXZpbmdzTm90ZT8oRSgpLGcoYHBgLHN0LGMoZS5jYWNoZVNhdmluZ3NOb3RlKSwxKSk6ayhgYCwhMCldKSk6ayhgYCwhMCldKSxfOjF9KV0pLF86MX0pKX19KTtmdW5jdGlvbiBsdChlLHQpe2xldCBuPVtdO2ZvcihsZXQgciBvZiBlKXtsZXQgZT10LmdldChyLmlkKTtlJiZuLnB1c2goe2lkOnIuaWQscHJpY2VTb3VyY2U6ZS5wcmljZVNvdXJjZSxkaXNwbGF5RnJlZTplLmRpc3BsYXlGcmVlPz8hMSxyZXF1ZXN0czpyLnJlcXVlc3RzPz8wLHRva2Vuc0luOnIudG9rZW5zSW4/PzAsdG9rZW5zT3V0OnIudG9rZW5zT3V0Pz8wLGNvc3RNaWNyb1VzZDpyLmNvc3RNaWNyb1VzZD8/MCxjb250ZXh0VG9rZW5zOmUuY29udGV4dFRva2VucyxpbnB1dFBlck1Ub2tVc2Q6ZS5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm91dHB1dFBlck1Ub2tVc2QsYWxpYXNlczplLmFsaWFzZXN9KX1yZXR1cm4gbn12YXIgdXQ9e3VucHJpY2VkOjAsb3ZlcnJpZGU6MSxidWlsdGluOjIsbGl0ZWxsbTozLGZyZWU6NH07ZnVuY3Rpb24gZHQoZSl7cmV0dXJuWy4uLmVdLnNvcnQoKGUsdCk9PntsZXQgbj11dFtlLnByaWNlU291cmNlXS11dFt0LnByaWNlU291cmNlXTtyZXR1cm4gbj09PTA/dC5yZXF1ZXN0cy1lLnJlcXVlc3RzOm59KX12YXIgZnQ9e2NsYXNzOmBmbGV4IGp1c3RpZnktZW5kYH0scHQ9ZCh7X19uYW1lOmBQcmljaW5nSGVhbHRoVGFibGVgLHByb3BzOnttb2RlbHM6e30sY2F0YWxvZzp7fSxsb2FkaW5nOnt0eXBlOkJvb2xlYW59LGxvYWRlZDp7dHlwZTpCb29sZWFufSxlcnJvcjp7fSxvblJldHJ5Ont0eXBlOkZ1bmN0aW9ufX0sc2V0dXAoZSl7bGV0IG49ZSxvPXcoKCk9PmR0KGx0KG4ubW9kZWxzLG4uY2F0YWxvZykpKSx1PXcoKCk9PkIoe2xvYWRpbmc6bi5sb2FkaW5nLGhhc0RhdGE6bi5sb2FkZWQsZXJyb3I6bi5lcnJvcn0pKSxkPXcoKCk9Pm8udmFsdWUuZmlsdGVyKGU9PmUucHJpY2VTb3VyY2U9PT1gdW5wcmljZWRgKS5sZW5ndGgpLGY9e3VucHJpY2VkOmBkZXN0cnVjdGl2ZWAsZnJlZTpgc2Vjb25kYXJ5YCxvdmVycmlkZTpgb3V0bGluZWAsYnVpbHRpbjpgb3V0bGluZWAsbGl0ZWxsbTpgb3V0bGluZWB9O2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGEoSCx7YXM6YHNwYW5gLHZhcmlhbnQ6ZltlLnByaWNlU291cmNlXSxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+ZS5wcmljZVNvdXJjZSl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5pbnB1dFBlck1Ub2tVc2Q9PT12b2lkIDB8fGUub3V0cHV0UGVyTVRva1VzZD09PXZvaWQgMD9hKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGDigJRgKTphKGBzcGFuYCx7fSxmZShlLmlucHV0UGVyTVRva1VzZCxlLm91dHB1dFBlck1Ub2tVc2QpKX1sZXQgXz1be2lkOmBpZGAsaGVhZGVyOmBNb2RlbGAsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT5hKFkse2xhYmVsOmUub3JpZ2luYWwuaWQsa2luZDpgbW9kZWxgLGlkOmUub3JpZ2luYWwuaWR9KX0se2lkOmBzb3VyY2VgLGhlYWRlcjpgU291cmNlYCxhY2Nlc3NvckZuOmU9PmUucHJpY2VTb3VyY2UsY2VsbDooe3JvdzplfSk9Pm0oZS5vcmlnaW5hbCl9LHtpZDpgcHJpY2VgLGhlYWRlcjpgUHJpY2VgLGVuYWJsZVNvcnRpbmc6ITEsY2VsbDooe3JvdzplfSk9PmgoZS5vcmlnaW5hbCl9LHtpZDpgY29udGV4dGAsaGVhZGVyOmBDb250ZXh0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUuY29udGV4dFRva2Vucz8/MCxjZWxsOih7cm93OmV9KT0+YShgc3BhbmAse2NsYXNzOmB0YWJ1bGFyLW51bXNgfSxlLm9yaWdpbmFsLmNvbnRleHRUb2tlbnM9PT12b2lkIDA/YOKAlGA6ZGUoZS5vcmlnaW5hbC5jb250ZXh0VG9rZW5zKSl9LHtpZDpgcmVxdWVzdHNgLGhlYWRlcjpgUmVxdWVzdHNgLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46ZT0+ZS5yZXF1ZXN0cyxjZWxsOih7cm93OmV9KT0+YShLLHt2YWx1ZTplLm9yaWdpbmFsLnJlcXVlc3RzfSl9LHtpZDpgdG9rZW5zSW5gLGhlYWRlcjpgVG9rZW5zIGluYCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUudG9rZW5zSW4sY2VsbDooe3JvdzplfSk9PmEoSyx7dmFsdWU6ZS5vcmlnaW5hbC50b2tlbnNJbn0pfSx7aWQ6YHRva2Vuc091dGAsaGVhZGVyOmBUb2tlbnMgb3V0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUudG9rZW5zT3V0LGNlbGw6KHtyb3c6ZX0pPT5hKEsse3ZhbHVlOmUub3JpZ2luYWwudG9rZW5zT3V0fSl9LHtpZDpgY29zdGAsaGVhZGVyOmBDb3N0YCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PmUuY29zdE1pY3JvVXNkLGNlbGw6KHtyb3c6ZX0pPT5WKGUub3JpZ2luYWwuY29zdE1pY3JvVXNkKX1dO2Z1bmN0aW9uIHYoKXtyZXR1cm4gZ2UoW2BpZGAsYHByaWNlU291cmNlYCxgZGlzcGxheUZyZWVgLGByZXF1ZXN0c2AsYHRva2Vuc0luYCxgdG9rZW5zT3V0YCxgY29zdE1pY3JvVXNkYCxgY29udGV4dFRva2Vuc2AsYGlucHV0UGVyTVRva1VzZGAsYG91dHB1dFBlck1Ub2tVc2RgXSxvLnZhbHVlLm1hcChlPT5bZS5pZCxlLnByaWNlU291cmNlLGUuZGlzcGxheUZyZWUsZS5yZXF1ZXN0cyxlLnRva2Vuc0luLGUudG9rZW5zT3V0LGUuY29zdE1pY3JvVXNkLGUuY29udGV4dFRva2Vucz8/YGAsZS5pbnB1dFBlck1Ub2tVc2Q/P2BgLGUub3V0cHV0UGVyTVRva1VzZD8/YGBdKSl9cmV0dXJuKG4sYSk9PihFKCksTyhTKGwpLG51bGwse2RlZmF1bHQ6cigoKT0+W0MoUyh0KSxudWxsLHtkZWZhdWx0OnIoKCk9PltDKFMocykse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmB9LHtkZWZhdWx0OnIoKCk9PlthWzBdfHw9VChgIFByaWNpbmcgaGVhbHRoIGAsLTEpLGQudmFsdWU+MD8oRSgpLE8oUyhIKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgLGNsYXNzOmBmb250LW5vcm1hbGB9LHtkZWZhdWx0OnIoKCk9PltUKGMoZC52YWx1ZSkrYCB1bnByaWNlZGAsMSldKSxfOjF9KSk6ayhgYCwhMCldKSxfOjF9KSxDKFMoSSksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uYVsxXXx8PVtUKGBFdmVyeSBtb2RlbCBzZXJ2ZWQgaW4gcmFuZ2UsIGpvaW5lZCB3aXRoIGl0cyBiaWxsaW5nIHByaWNlIHNvdXJjZS5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLEMoUyhqKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgfSx7ZGVmYXVsdDpyKCgpPT5bdS52YWx1ZT09PWBza2VsZXRvbmA/KEUoKSxPKFcse2tleTowLHJvd3M6NSxjb2xzOl8ubGVuZ3RofSxudWxsLDgsW2Bjb2xzYF0pKTp1LnZhbHVlPT09YGVycm9yYD8oRSgpLE8oeix7a2V5OjEsbWVzc2FnZTplLmVycm9yLCJvbi1yZXRyeSI6ZS5vblJldHJ5fSxudWxsLDgsW2BtZXNzYWdlYCxgb24tcmV0cnlgXSkpOm8udmFsdWUubGVuZ3RoPT09MD8oRSgpLE8oVSx7a2V5OjIsdGl0bGU6YE5vIHRyYWZmaWMgaW4gdGhpcyByYW5nZS5gfSx7ZGVmYXVsdDpyKCgpPT5bQyhxKV0pLF86MX0pKTooRSgpLGcoaSx7a2V5OjN9LFtDKEcse2NvbHVtbnM6XyxkYXRhOm8udmFsdWUsImVtcHR5LW1lc3NhZ2UiOmBub25lYH0sbnVsbCw4LFtgZGF0YWBdKSxwKGBkaXZgLGZ0LFtDKEose2ZpbGVuYW1lOmBwcmljaW5nLWhlYWx0aC5jc3ZgLGJ1aWxkOnZ9KV0pXSw2NCkpXSksXzoxfSldKSxfOjF9KSl9fSk7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIGU9PT1gaG91cmA/e2F2YWlsYWJsZTohMSxub3RlOmBDYWNoZSBzYXZpbmdzIGFyZSBub3QgdHJhY2tlZCBwZXIgaG91ciDigJQgcGljayBhIGRheSBvciBtb250aCByYW5nZSBpbnN0ZWFkLmB9OmU9PT1gbW9udGhgP3thdmFpbGFibGU6ITAsbm90ZTpgQ292ZXJzIG9ubHkgdGhlIG1vc3QgcmVjZW50IDM1IGRheXMgKGRheS1idWNrZXQgcmV0ZW50aW9uKSwgbm90IHRoZSBmdWxsIHNlbGVjdGVkIHJhbmdlLmB9OnthdmFpbGFibGU6ITAsbm90ZTpudWxsfX12YXIgaHQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00YH0sZ3Q9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlciBzbTpqdXN0aWZ5LWJldHdlZW5gfSxfdD17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtM2B9LHZ0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LHl0PXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LGJ0PXtjbGFzczpgdGV4dC1yaWdodGB9LHh0PXtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxTdD17Y2xhc3M6YHRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sQ3Q9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHd0PXtjbGFzczpgZm9udC1tb25vIHRleHQteHNgfSxUdD17a2V5OjEsY2xhc3M6YHRleHQtc20gYnJlYWstd29yZHMgdGV4dC1kZXN0cnVjdGl2ZWB9LEV0PXtrZXk6MixjbGFzczpgdGV4dC1zbSBicmVhay13b3JkcyB0ZXh0LWRlc3RydWN0aXZlYH0sRHQ9e2tleTozLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LE90PXtrZXk6NyxjbGFzczpgdGV4dC1zbSBicmVhay13b3JkcyB0ZXh0LWRlc3RydWN0aXZlYH0sa3Q9e2NsYXNzOmBncmlkIGdyaWQtY29scy0xIGdhcC00IGxnOmdyaWQtY29scy0yYH0sQXQ9ZCh7X19uYW1lOmBTcGVuZFBhZ2VgLHNldHVwKHQpe2xldCBuPXttb2RlbDpgQnkgbW9kZWxgLHByb3ZpZGVyOmBCeSBwcm92aWRlcmAsZ3JvdXA6YEJ5IGdyb3VwYH0sYT1lZSgpLG89UigpLHM9eCgpLGw9VGUoKSxkPUZlKCkse25vdzpmLHN0YXJ0Om0sc3RvcDpofT1oZSgpLHY9dygoKT0+YS5wYXJhbXMuYnkmJkFlKGEucGFyYW1zLmJ5KT9hLnBhcmFtcy5ieTpgbW9kZWxgKSxiPXcoKCk9PmEucGFyYW1zLm1ldHJpYyYmTWUoYS5wYXJhbXMubWV0cmljKT9hLnBhcmFtcy5tZXRyaWM6YGNvc3RgKSxEPXcoKCk9PmEucGFyYW1zLnJlZj8/YGApLEE9dygoKT0+YS5wYXJhbXMuZHJpbGw/P2BgKTtmdW5jdGlvbiBqKGUpe2xldCB0PXtieTplLmJ5Pz92LnZhbHVlLG1ldHJpYzplLm1ldHJpYz8/Yi52YWx1ZSxyZWY6ZS5yZWY/P0QudmFsdWUsZHJpbGw6ZS5kcmlsbD8/QS52YWx1ZX0sbj17fTt0LmJ5IT09YG1vZGVsYCYmKG4uYnk9dC5ieSksdC5tZXRyaWMhPT1gY29zdGAmJihuLm1ldHJpYz10Lm1ldHJpYyksdC5yZWYhPT1gYCYmKG4ucmVmPXQucmVmKSx0LmRyaWxsIT09YGAmJihuLmRyaWxsPXQuZHJpbGwpLGEuZ29Ubyhgc3BlbmRgLG4pfWZ1bmN0aW9uIE0oZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZBZShlKSYmaih7Ynk6ZX0pfWZ1bmN0aW9uIE4oZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZNZShlKSYmaih7bWV0cmljOmV9KX1mdW5jdGlvbiBQKGUpe2ooe3JlZjplfSl9ZnVuY3Rpb24gRihlKXtqKHtkcmlsbDplfSl9bGV0IEk9dygoKT0+by5zY29wZSE9PWBhbGxgKTtlKFt2LGIsQV0sKFtlLHQsbl0pPT57ZC5zZXRTZWxlY3Rpb24oe2J5OmUsbWV0cmljOnQsZHJpbGw6bn0pfSksZSgoKT0+W28ucmFuZ2Usby5jbXAsby5zY29wZV0sKCk9PnZvaWQgZC5yZWZyZXNoKCkpLHUoKCk9PntkLiRwYXRjaCh7Ynk6di52YWx1ZSxtZXRyaWM6Yi52YWx1ZSxkcmlsbDpBLnZhbHVlfSksbC5lbnN1cmVMb2FkZWQoKSxkLnN0YXJ0UG9sbGluZygpLG0oKX0pLHkoKCk9PntkLnN0b3BQb2xsaW5nKCksaCgpfSk7bGV0IEw9W2AtLWNoYXJ0LXJlcXVlc3RzYCxgLS1jaGFydC10b2tlbnMtaW5gLGAtLWNoYXJ0LXRva2Vucy1vdXRgLGAtLWNoYXJ0LWNvc3RgLGAtLWNoYXJ0LXNlcmllcy1hYCxgLS1jaGFydC1zZXJpZXMtYmAsYC0tY2hhcnQtc2VyaWVzLWNgLGAtLWNoYXJ0LXNlcmllcy1kYF07ZnVuY3Rpb24gYWUoZSl7cmV0dXJuIExbZSVMLmxlbmd0aF19ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChgbW9kZWw6YCl8fGUuc3RhcnRzV2l0aChgZ3JvdXA6YCk/ZS5zbGljZSg2KTplLnN0YXJ0c1dpdGgoYHByb3ZpZGVyOmApP2Uuc2xpY2UoOSk6ZX1sZXQgZGU9dygoKT0+ZC5idWNrZXRzLm1hcChlPT5tZShlLG8ud2luZG93KSkpLGZlPXcoKCk9PntsZXQgZT1kLmJyZWFrZG93bi5tYXAoKGUsdCk9Pih7bGFiZWw6c2UoZS5zY29wZSksZGF0YTplLnBvaW50cyxjb2xvcjphZSh0KX0pKTtyZXR1cm4gZC5vdGhlclBvaW50cyYmZS5wdXNoKHtsYWJlbDpgT3RoZXJgLGRhdGE6ZC5vdGhlclBvaW50cyxjb2xvcjpgLS1tdXRlZC1mb3JlZ3JvdW5kYH0pLGV9KSxIPXcoKCk9PmQuY29tcGFyaXNvblBvaW50cz9be2xhYmVsOmBUb3RhbGAsZGF0YTpkLmNvbXBhcmlzb25Qb2ludHMsY29sb3I6YC0tZm9yZWdyb3VuZGAsbGFiZWxTdWZmaXg6YCAocHJldmlvdXMgcGVyaW9kKWB9XTpbXSksVT13KCgpPT5iLnZhbHVlPT09YGNvc3RgP1Y6cGUpLFc9dygoKT0+ZC50b3RhbFBvaW50cy5yZWR1Y2UoKGUsdCk9PmUrdCwwKSksRz13KCgpPT57aWYoby5zY29wZT09PWBhbGxgKXJldHVybiBzLnVzYWdlPy50b3RhbC5jb3N0UGVyTW9udGhNaWNyb1VzZD8/MDtpZihvLnNjb3BlLnN0YXJ0c1dpdGgoYGdyb3VwOmApKXtsZXQgZT1vLnNjb3BlLnNsaWNlKDYpO3JldHVybiBzLnVzYWdlPy5ncm91cHMuZmluZCh0PT50LmlkPT09ZSk/LmNvc3RQZXJNb250aE1pY3JvVXNkPz8wfWlmKG8uc2NvcGUuc3RhcnRzV2l0aChgdXNlcjpgKSl7bGV0IGU9by5zY29wZS5zbGljZSg1KTtyZXR1cm4gcy51c2FnZT8udXNlcnMuZmluZCh0PT50LmlkPT09ZSk/LmNvc3RQZXJNb250aE1pY3JvVXNkPz8wfXJldHVybiAwfSksSz13KCgpPT57aWYoby5zY29wZT09PWBhbGxgKXtsZXQgZT0ocy5vdmVydmlldz8uZ3JvdXBzPz9bXSkuZmlsdGVyKGU9PihlLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEPz8wKT4wKTtyZXR1cm4gZS5sZW5ndGg9PT0wP3ZvaWQgMDp7Y29zdFBlck1vbnRoVVNEOmUucmVkdWNlKChlLHQpPT5lKyh0LmxpbWl0cz8uY29zdFBlck1vbnRoVVNEPz8wKSwwKX19aWYoby5zY29wZS5zdGFydHNXaXRoKGBncm91cDpgKSl7bGV0IGU9by5zY29wZS5zbGljZSg2KTtyZXR1cm4gcy5vdmVydmlldz8uZ3JvdXBzLmZpbmQodD0+dC5uYW1lPT09ZSk/LmxpbWl0c31pZihvLnNjb3BlLnN0YXJ0c1dpdGgoYHVzZXI6YCkpe2xldCBlPW8uc2NvcGUuc2xpY2UoNSk7cmV0dXJuIHMudXNhZ2U/LnVzZXJzLmZpbmQodD0+dC5pZD09PWUpPy5saW1pdHN9fSkscT13KCgpPT5vLnNjb3BlPT09YGFsbGB8fG8uc2NvcGUuc3RhcnRzV2l0aChgZ3JvdXA6YCl8fG8uc2NvcGUuc3RhcnRzV2l0aChgdXNlcjpgKSksZ2U9dygoKT0+cy5vdmVydmlldz8uZmVhdHVyZXMudXNlck1vZGVsU3RhdHM/PyExKSxfZT13KCgpPT5zLm92ZXJ2aWV3Py5mZWF0dXJlcy5jYWNoZVN0YXRzPz8hMSksSj13KCgpPT5tdChvLndpbmRvdykpLHZlPXcoKCk9PkoudmFsdWUuYXZhaWxhYmxlKSxiZT13KCgpPT5KLnZhbHVlLm5vdGUpLFk9dygoKT0+Qih7bG9hZGluZzpkLmxvYWRpbmcsaGFzRGF0YTpkLmJ1Y2tldHMubGVuZ3RoPjAsZXJyb3I6ZC5icmVha2Rvd25FcnJvcn0pKTtmdW5jdGlvbiB4ZSgpe2xldCBlPVtkLmZldGNoUHJpY2luZ0hlYWx0aFJhbmtpbmcoKV07cmV0dXJuIGwuZXJyb3ImJmUucHVzaChsLmZldGNoKCkpLFByb21pc2UuYWxsKGUpLnRoZW4oKCk9PnZvaWQgMCl9cmV0dXJuKGUsdCk9PihFKCksZyhgZGl2YCxodCxbcChgZGl2YCxndCxbcChgZGl2YCxfdCxbcChgZGl2YCx2dCxbdFswXXx8PXAoYHNwYW5gLHtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQnJlYWtkb3duYCwtMSksQyhTKG5lKSx7Im1vZGVsLXZhbHVlIjp2LnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpNfSx7ZGVmYXVsdDpyKCgpPT5bQyhTKHRlKSxudWxsLHtkZWZhdWx0OnIoKCk9PlsoRSghMCksZyhpLG51bGwsXyhTKGtlKSxlPT4oRSgpLE8oUyhyZSkse2tleTplLHZhbHVlOmUsZGlzYWJsZWQ6SS52YWx1ZX0se2RlZmF1bHQ6cigoKT0+W1QoYyhuW2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYCxgZGlzYWJsZWRgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSxwKGBkaXZgLHl0LFt0WzFdfHw9cChgbGFiZWxgLHtpZDpgc3BlbmQtbWV0cmljLWxhYmVsYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTWV0cmljYCwtMSksQyhTKGxlKSx7Im1vZGVsLXZhbHVlIjpiLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpOfSx7ZGVmYXVsdDpyKCgpPT5bQyhTKHVlKSx7ImFyaWEtbGFiZWxsZWRieSI6YHNwZW5kLW1ldHJpYy1sYWJlbGAsY2xhc3M6YHctNDBgfSx7ZGVmYXVsdDpyKCgpPT5bQyhTKGNlKSldKSxfOjF9KSxDKFMoaWUpLG51bGwse2RlZmF1bHQ6cigoKT0+WyhFKCEwKSxnKGksbnVsbCxfKFMoamUpLGU9PihFKCksTyhTKG9lKSx7a2V5OmUsdmFsdWU6ZX0se2RlZmF1bHQ6cigoKT0+W1QoYyhTKFgpW2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYF0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0sOCxbYG1vZGVsLXZhbHVlYF0pXSldKSxwKGBkaXZgLGJ0LFtwKGBwYCx4dCxjKFMoWClbYi52YWx1ZV0pK2AgaW4gcmFuZ2VgLDEpLHAoYHBgLFN0LGMoVS52YWx1ZShXLnZhbHVlKSksMSldKV0pLEkudmFsdWU/KEUoKSxnKGBwYCxDdCxbdFsyXXx8PVQoYCBTaG93aW5nIGAsLTEpLHAoYHNwYW5gLHd0LGMoUyhvKS5zY29wZSksMSksdFszXXx8PVQoYCBkaXJlY3RseSDigJQgY2xlYXIgdGhlIHNjb3BlIGZpbHRlciB0byBicmVhayBzcGVuZCBkb3duIGJ5IG1vZGVsLCBwcm92aWRlciwgb3IgZ3JvdXAuIGAsLTEpXSkpOmsoYGAsITApLFMobCkuZXJyb3I/KEUoKSxnKGBwYCxUdCxjKFMobCkuZXJyb3IpLDEpKTprKGBgLCEwKSxTKGQpLnJhbmtpbmdFcnJvcj8oRSgpLGcoYHBgLEV0LGMoUyhkKS5yYW5raW5nRXJyb3IpLDEpKTprKGBgLCEwKSxTKG8pLmNtcFNwZWMucmVxdWVzdGVkJiZTKGQpLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj8oRSgpLGcoYHBgLER0LGMoUyhkKS5jb21wYXJpc29uVW5hdmFpbGFibGVSZWFzb24pLDEpKTprKGBgLCEwKSxZLnZhbHVlPT09YHNrZWxldG9uYD8oRSgpLE8oU2Use2tleTo0fSkpOlkudmFsdWU9PT1gZXJyb3JgPyhFKCksTyh6LHtrZXk6NSxtZXNzYWdlOlMoZCkuYnJlYWtkb3duRXJyb3IsIm9uLXJldHJ5IjpTKGQpLnJlZnJlc2h9LG51bGwsOCxbYG1lc3NhZ2VgLGBvbi1yZXRyeWBdKSk6KEUoKSxPKENlLHtrZXk6NixsYWJlbHM6ZGUudmFsdWUsZGF0YXNldHM6ZmUudmFsdWUsImNvbXBhcmlzb24tZGF0YXNldHMiOkgudmFsdWUsc3RhY2tlZDpgYCwidmFsdWUtZm9ybWF0dGVyIjpVLnZhbHVlLGFyaWFMYWJlbDpgJHtTKFgpW2IudmFsdWVdfSBicmVha2Rvd24gJHtuW3YudmFsdWVdLnRvTG93ZXJDYXNlKCl9IG92ZXIgdGltZWB9LG51bGwsOCxbYGxhYmVsc2AsYGRhdGFzZXRzYCxgY29tcGFyaXNvbi1kYXRhc2V0c2AsYHZhbHVlLWZvcm1hdHRlcmAsYGFyaWFMYWJlbGBdKSksUyhkKS5icmVha2Rvd25FcnJvciYmWS52YWx1ZT09PWByZWFkeWA/KEUoKSxnKGBwYCxPdCxjKFMoZCkuYnJlYWtkb3duRXJyb3IpLDEpKTprKGBgLCEwKSxwKGBkaXZgLGt0LFtTKGQpLmJ1cm5kb3duQXZhaWxhYmxlPyhFKCksTyhYZSx7a2V5OjAsYnVja2V0czpTKGQpLmJ1cm5kb3duQnVja2V0cyxwb2ludHM6UyhkKS5idXJuZG93blBvaW50cywiYnVkZ2V0LW1pY3JvcyI6UyhkKS5idXJuZG93bkJ1ZGdldE1pY3Jvcyxub3c6UyhmKSxsb2FkaW5nOlMoZCkuYnVybmRvd25Mb2FkaW5nLGVycm9yOlMoZCkuYnVybmRvd25FcnJvciwib24tcmV0cnkiOlMoZCkucmVmcmVzaH0sbnVsbCw4LFtgYnVja2V0c2AsYHBvaW50c2AsYGJ1ZGdldC1taWNyb3NgLGBub3dgLGBsb2FkaW5nYCxgZXJyb3JgLGBvbi1yZXRyeWBdKSk6ayhgYCwhMCkscS52YWx1ZT8oRSgpLE8oeWUse2tleToxLCJtdGQtbWljcm9zIjpHLnZhbHVlLGxpbWl0czpLLnZhbHVlLG5vdzpTKGYpfSxudWxsLDgsW2BtdGQtbWljcm9zYCxgbGltaXRzYCxgbm93YF0pKTprKGBgLCEwKV0pLEMoY3Qse21vZGVsczpTKGQpLm1vZGVsUmFua2luZyxjYXRhbG9nOlMobCkubW9kZWxzQnlJZCwicmVmLW1vZGVsIjpELnZhbHVlLCJjYWNoZS1zdGF0cy1lbmFibGVkIjpfZS52YWx1ZSwiY2FjaGUtc2F2aW5ncy1hdmFpbGFibGUiOnZlLnZhbHVlLCJjYWNoZS1zYXZpbmdzLW5vdGUiOmJlLnZhbHVlLCJvblVwZGF0ZTpyZWZNb2RlbCI6UH0sbnVsbCw4LFtgbW9kZWxzYCxgY2F0YWxvZ2AsYHJlZi1tb2RlbGAsYGNhY2hlLXN0YXRzLWVuYWJsZWRgLGBjYWNoZS1zYXZpbmdzLWF2YWlsYWJsZWAsYGNhY2hlLXNhdmluZ3Mtbm90ZWBdKSxDKHB0LHttb2RlbHM6UyhkKS5wcmljaW5nSGVhbHRoUmFua2luZyxjYXRhbG9nOlMobCkubW9kZWxzQnlJZCxsb2FkaW5nOlMoZCkucHJpY2luZ0hlYWx0aExvYWRpbmcsbG9hZGVkOlMoZCkucHJpY2luZ0hlYWx0aExvYWRlZCxlcnJvcjpTKGQpLnByaWNpbmdIZWFsdGhFcnJvcnx8UyhsKS5lcnJvciwib24tcmV0cnkiOnhlfSxudWxsLDgsW2Btb2RlbHNgLGBjYXRhbG9nYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYF0pLEMoVWUse3Jvd3M6UyhkKS5kcmlsbGRvd25Sb3dzLG1ldHJpY3M6UyhkKS5kcmlsbGRvd25NZXRyaWNzLGRyaWxsOkEudmFsdWUsZGlzYWJsZWQ6UyhkKS5kcmlsbGRvd25EaXNhYmxlZCwidXNlci1tb2RlbC1zdGF0cy1lbmFibGVkIjpnZS52YWx1ZSx3aW5kb3c6UyhvKS53aW5kb3csc3BhbjpTKG8pLnNwYW4sbG9hZGluZzpTKGQpLmRyaWxsZG93bkxvYWRpbmcsbG9hZGVkOlMoZCkuZHJpbGxkb3duTG9hZGVkLGVycm9yOlMoZCkuZHJpbGxkb3duRXJyb3IsIm9uLXJldHJ5IjpTKGQpLmZldGNoRHJpbGxkb3duLCJvblVwZGF0ZTpkcmlsbCI6Rn0sbnVsbCw4LFtgcm93c2AsYG1ldHJpY3NgLGBkcmlsbGAsYGRpc2FibGVkYCxgdXNlci1tb2RlbC1zdGF0cy1lbmFibGVkYCxgd2luZG93YCxgc3BhbmAsYGxvYWRpbmdgLGBsb2FkZWRgLGBlcnJvcmAsYG9uLXJldHJ5YF0pXSkpfX0pO2V4cG9ydHtBdCBhcyBkZWZhdWx0fTs=", + "aW1wb3J0e0FuIGFzIGUsQyBhcyB0LEQgYXMgbixFIGFzIHIsTHIgYXMgaSxNciBhcyBhLFFuIGFzIG8sUyBhcyBzLFQgYXMgYyxYdCBhcyBsLF9uIGFzIHUsYiBhcyBkLGMgYXMgZixjaSBhcyBwLGNuIGFzIG0sZCBhcyBoLGV0IGFzIGcsZiBhcyBfLGcgYXMgdixnbiBhcyB5LGlyIGFzIGIsbG4gYXMgeCxuIGFzIFMsbnIgYXMgZWUsb24gYXMgQyxzbiBhcyB3LHVuIGFzIFQsdXIgYXMgRSx2IGFzIEQsdmkgYXMgTyx3IGFzIGssd2kgYXMgQSx4IGFzIGoseSBhcyBNLHluIGFzIE4seXQgYXMgdGV9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7biBhcyBuZSxyIGFzIHJlLHQgYXMgaWV9ZnJvbSIuL3RhYnMtQ3VoNkZRMGouanMiO2ltcG9ydHtsIGFzIFAsbiBhcyBGLHQgYXMgSSx2IGFzIEx9ZnJvbSIuL2luZGV4LTg4Q1RSTkhQLmpzIjtpbXBvcnR7dCBhcyBSfWZyb20iLi9FcnJvclN0YXRlLURESk9LSmx6LmpzIjtpbXBvcnR7UyBhcyBhZSxhIGFzIG9lLGIgYXMgc2UsZiBhcyBjZSxpIGFzIHosayBhcyBCLG8gYXMgVixwIGFzIEgscyBhcyBVLHQgYXMgVyx4IGFzIEd9ZnJvbSIuL2JhZGdlLUJKTGctUjNNLmpzIjtpbXBvcnR7aSBhcyBLLG4gYXMgcSxvIGFzIGxlLHIgYXMgdWV9ZnJvbSIuL2NvbHVtbnMtQ29lY25mNzQuanMiO2ltcG9ydHthIGFzIGRlLGMgYXMgSixpIGFzIGZlLG4gYXMgcGUsbyBhcyBZLHIgYXMgbWUscyBhcyBoZSx0IGFzIGdlfWZyb20iLi9idXJuZG93bi1lR2NhLWVsYy5qcyI7aW1wb3J0e24gYXMgX2UsdCBhcyB2ZX1mcm9tIi4vVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQmgxOXlpdjguanMiO2ltcG9ydHt0IGFzIHllfWZyb20iLi9Mb2FkU3RhdGVWaWV3LUJFYnNleDdZLmpzIjtpbXBvcnR7dCBhcyBiZX1mcm9tIi4vRW50aXR5TGluay1CUjZwbGFXVi5qcyI7aW1wb3J0e24gYXMgeGUsdCBhcyBTZX1mcm9tIi4vQ2hhcnRDYXJkLUNBQ1NJWDFmLmpzIjtpbXBvcnR7dCBhcyBDZX1mcm9tIi4vQ2xhbXBlZFJhbmdlTm90aWNlLUNoX0hxeUJPLmpzIjtpbXBvcnR7dCBhcyB3ZX1mcm9tIi4vU3RhdERpc2FibGVkQWxlcnQtQkp0SFJYd0UuanMiO2ltcG9ydHt0IGFzIFRlfWZyb20iLi9jYXRhbG9nLUM5NU5UYVh0LmpzIjtpbXBvcnR7YSBhcyBYLGMgYXMgRWUsaSBhcyBEZSxsIGFzIE9lLG8gYXMgWixyIGFzIGtlLHMgYXMgQWUsdCBhcyBqZX1mcm9tIi4vc2VyaWVzLURac3VBWEhJLmpzIjtpbXBvcnR7biBhcyBNZSx0IGFzIE5lfWZyb20iLi9jaGFydC1wYWxldHRlLWhtNFpJa0FYLmpzIjt2YXIgUGU9W2Btb2RlbGAsYHByb3ZpZGVyYCxgZ3JvdXBgXTtmdW5jdGlvbiBGZShlKXtyZXR1cm4gUGUuaW5jbHVkZXMoZSl9dmFyIEllPVtgY29zdGAsYHJlcWAsYHRva2luYCxgdG9rb3V0YF0sUT17Y29zdDpgQ29zdGAscmVxOmBSZXF1ZXN0c2AsdG9raW46YFRva2VucyBpbmAsdG9rb3V0OmBUb2tlbnMgb3V0YH07ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIEllLmluY2x1ZGVzKGUpfXZhciBSZT0xMDAsJD0xMDAsemU9NmU0LEJlPXRlKGBzcGVuZGAse3N0YXRlOigpPT4oe2J5OmBtb2RlbGAsbWV0cmljOmBjb3N0YCxkcmlsbDpgYCxidWNrZXRzOltdLGJyZWFrZG93bjpbXSxvdGhlclBvaW50czpudWxsLHRvdGFsUG9pbnRzOltdLGNvbXBhcmlzb25Qb2ludHM6bnVsbCxjb21wYXJpc29uVW5hdmFpbGFibGVSZWFzb246bnVsbCxtb2RlbFJhbmtpbmc6W10scHJpY2luZ0hlYWx0aFJhbmtpbmc6W10sYnVybmRvd25CdWNrZXRzOltdLGJ1cm5kb3duUG9pbnRzOltdLGJ1cm5kb3duQnVkZ2V0TWljcm9zOm51bGwsZHJpbGxkb3duUm93czpbXSxkcmlsbGRvd25NZXRyaWNzOltdLGRyaWxsZG93bkRpc2FibGVkOiExLGxvYWRpbmc6ITEsYnJlYWtkb3duRXJyb3I6YGAscmFua2luZ0Vycm9yOmBgLHByaWNpbmdIZWFsdGhFcnJvcjpgYCxkcmlsbGRvd25FcnJvcjpgYCxidXJuZG93bkVycm9yOmBgLHByaWNpbmdIZWFsdGhMb2FkaW5nOiExLGRyaWxsZG93bkxvYWRpbmc6ITEsYnVybmRvd25Mb2FkaW5nOiExLHByaWNpbmdIZWFsdGhMb2FkZWQ6ITEsZHJpbGxkb3duTG9hZGVkOiExLHByaWNpbmdIZWFsdGhXaW5kb3c6bnVsbCxwcmljaW5nSGVhbHRoU3BhbjpudWxsLGRyaWxsZG93bldpbmRvdzpudWxsLGRyaWxsZG93blNwYW46bnVsbCxkcmlsbGRvd25EcmlsbEZldGNoZWRGb3I6bnVsbCxicmVha2Rvd25CeUZldGNoZWRGb3I6bnVsbCxicmVha2Rvd25NZXRyaWNGZXRjaGVkRm9yOm51bGwsYnJlYWtkb3duV2luZG93Om51bGwsYnJlYWtkb3duU3BhbjpudWxsLGJyZWFrZG93blNjb3BlOm51bGwsYnJlYWtkb3duUmVxSWQ6MCxyYW5raW5nUmVxSWQ6MCxwcmljaW5nSGVhbHRoUmVxSWQ6MCxidXJuZG93blJlcUlkOjAsZHJpbGxkb3duUmVxSWQ6MCxyZWZyZXNoUmVxSWQ6MCxwb2xsZXI6dm9pZCAwfSksZ2V0dGVyczp7YnVybmRvd25BdmFpbGFibGU6KCk9PlZlKEkoKS5zY29wZSkhPT1udWxsfSxhY3Rpb25zOntzZXRTZWxlY3Rpb24oZSl7bGV0IHQ9ITE7ZS5ieSE9PXZvaWQgMCYmZS5ieSE9PXRoaXMuYnkmJih0aGlzLmJ5PWUuYnksdD0hMCksZS5tZXRyaWMhPT12b2lkIDAmJmUubWV0cmljIT09dGhpcy5tZXRyaWMmJih0aGlzLm1ldHJpYz1lLm1ldHJpYyx0PSEwKSxlLmRyaWxsIT09dm9pZCAwJiZlLmRyaWxsIT09dGhpcy5kcmlsbCYmKHRoaXMuZHJpbGw9ZS5kcmlsbCx0PSEwKSx0JiZ0aGlzLnJlZnJlc2goKX0sYXN5bmMgcmVmcmVzaCgpe2lmKCF0KCkuaXNBdXRoZW50aWNhdGVkKXJldHVybjtsZXQgZT0rK3RoaXMucmVmcmVzaFJlcUlkO3RoaXMubG9hZGluZz0hMDt0cnl7YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZmV0Y2hNb2RlbFJhbmtpbmcoKS50aGVuKCgpPT50aGlzLmZldGNoQnJlYWtkb3duKCkpLHRoaXMuZmV0Y2hQcmljaW5nSGVhbHRoUmFua2luZygpLHRoaXMuZmV0Y2hCdXJuZG93bigpLHRoaXMuZmV0Y2hEcmlsbGRvd24oKV0pfWZpbmFsbHl7ZT09PXRoaXMucmVmcmVzaFJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19LGFzeW5jIGZldGNoTW9kZWxSYW5raW5nKCl7bGV0IGU9SSgpLHQ9Kyt0aGlzLnJhbmtpbmdSZXFJZDt0cnl7bGV0IG49YXdhaXQgZChgL2FkbWluL2FwaS91c2FnZS9tb2RlbHM/bWV0cmljPSR7dGhpcy5tZXRyaWN9JndpbmRvdz0ke2Uud2luZG93fSZzcGFuPSR7ZS5zcGFufSZsaW1pdD0ke1JlfSZkZXRhaWw9MWApO2lmKHQhPT10aGlzLnJhbmtpbmdSZXFJZClyZXR1cm47dGhpcy5tb2RlbFJhbmtpbmc9bi5tb2RlbHMsdGhpcy5yYW5raW5nRXJyb3I9YGB9Y2F0Y2goZSl7aWYodCE9PXRoaXMucmFua2luZ1JlcUlkfHxqKGUpKXJldHVybjt0aGlzLnJhbmtpbmdFcnJvcj1zKGUpfX0sYXN5bmMgZmV0Y2hQcmljaW5nSGVhbHRoUmFua2luZygpe2xldCBlPUkoKTsodGhpcy5wcmljaW5nSGVhbHRoV2luZG93IT09ZS53aW5kb3d8fHRoaXMucHJpY2luZ0hlYWx0aFNwYW4hPT1lLnNwYW4pJiYodGhpcy5wcmljaW5nSGVhbHRoTG9hZGVkPSExKSx0aGlzLnByaWNpbmdIZWFsdGhXaW5kb3c9ZS53aW5kb3csdGhpcy5wcmljaW5nSGVhbHRoU3Bhbj1lLnNwYW47bGV0IHQ9Kyt0aGlzLnByaWNpbmdIZWFsdGhSZXFJZDt0aGlzLnByaWNpbmdIZWFsdGhMb2FkaW5nPSEwO3RyeXtsZXQgbj1hd2FpdCBkKGAvYWRtaW4vYXBpL3VzYWdlL21vZGVscz9tZXRyaWM9cmVxJndpbmRvdz0ke2Uud2luZG93fSZzcGFuPSR7ZS5zcGFufSZsaW1pdD0ke1JlfSZkZXRhaWw9MWApO2lmKHQhPT10aGlzLnByaWNpbmdIZWFsdGhSZXFJZClyZXR1cm47dGhpcy5wcmljaW5nSGVhbHRoUmFua2luZz1uLm1vZGVscyx0aGlzLnByaWNpbmdIZWFsdGhFcnJvcj1gYCx0aGlzLnByaWNpbmdIZWFsdGhMb2FkZWQ9ITB9Y2F0Y2goZSl7aWYodCE9PXRoaXMucHJpY2luZ0hlYWx0aFJlcUlkfHxqKGUpKXJldHVybjt0aGlzLnByaWNpbmdIZWFsdGhFcnJvcj1zKGUpfWZpbmFsbHl7dD09PXRoaXMucHJpY2luZ0hlYWx0aFJlcUlkJiYodGhpcy5wcmljaW5nSGVhbHRoTG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaEJyZWFrZG93bigpe2xldCBlPUkoKTsodGhpcy5icmVha2Rvd25CeUZldGNoZWRGb3IhPT10aGlzLmJ5fHx0aGlzLmJyZWFrZG93bk1ldHJpY0ZldGNoZWRGb3IhPT10aGlzLm1ldHJpY3x8dGhpcy5icmVha2Rvd25XaW5kb3chPT1lLndpbmRvd3x8dGhpcy5icmVha2Rvd25TcGFuIT09ZS5zcGFufHx0aGlzLmJyZWFrZG93blNjb3BlIT09ZS5zY29wZSkmJih0aGlzLmJ1Y2tldHM9W10pLHRoaXMuYnJlYWtkb3duQnlGZXRjaGVkRm9yPXRoaXMuYnksdGhpcy5icmVha2Rvd25NZXRyaWNGZXRjaGVkRm9yPXRoaXMubWV0cmljLHRoaXMuYnJlYWtkb3duV2luZG93PWUud2luZG93LHRoaXMuYnJlYWtkb3duU3Bhbj1lLnNwYW4sdGhpcy5icmVha2Rvd25TY29wZT1lLnNjb3BlO2xldCB0PSsrdGhpcy5icmVha2Rvd25SZXFJZDt0cnl7aWYoZS5zY29wZT09PWBhbGxgP2F3YWl0IHRoaXMuZmV0Y2hCcmVha2Rvd25GbGVldFdpZGUoZS53aW5kb3csZS5zcGFuLHQpOmUuc2NvcGUuc3RhcnRzV2l0aChgZ3JvdXA6YCl8fGUuc2NvcGUuc3RhcnRzV2l0aChgdXNlcjpgKT9hd2FpdCB0aGlzLmZldGNoQnJlYWtkb3duU2luZ2xlU2NvcGUoZS5zY29wZSxlLndpbmRvdyxlLnNwYW4sdCk6YXdhaXQgdGhpcy5mZXRjaEJyZWFrZG93blByb3ZpZGVyU2NvcGUoZS5zY29wZS5zbGljZSg5KSxlLndpbmRvdyxlLnNwYW4sdCksdCE9PXRoaXMuYnJlYWtkb3duUmVxSWQpcmV0dXJuO3RoaXMuYnJlYWtkb3duRXJyb3I9YGAsZS5jbXBTcGVjLnJlcXVlc3RlZD9hd2FpdCB0aGlzLmZldGNoQ29tcGFyaXNvbihlLnNjb3BlLGUud2luZG93LGUuc3BhbixlLmNtcFNwZWMub2Zmc2V0LHQpOih0aGlzLmNvbXBhcmlzb25Qb2ludHM9bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1udWxsKX1jYXRjaChlKXtpZih0IT09dGhpcy5icmVha2Rvd25SZXFJZHx8aihlKSlyZXR1cm47dGhpcy5icmVha2Rvd25FcnJvcj1zKGUpfX0sYXN5bmMgZmV0Y2hCcmVha2Rvd25GbGVldFdpZGUoZSx0LG4pe2xldCByPWF3YWl0IHRoaXMuZmV0Y2hTZXJpZXMoW2B0b3RhbGBdLHRoaXMubWV0cmljLGUsdCwwKTtpZihuIT09dGhpcy5icmVha2Rvd25SZXFJZClyZXR1cm47dGhpcy5idWNrZXRzPXIuYnVja2V0cztsZXQgaT1yLnNlcmllcy5maW5kKGU9PmUuc2NvcGU9PT1gdG90YWxgKT8ucG9pbnRzPz9BcnJheShyLmJ1Y2tldHMubGVuZ3RoKS5maWxsKDApO2lmKHRoaXMudG90YWxQb2ludHM9aSx0aGlzLmJ5PT09YG1vZGVsYCl7bGV0IHI9dGhpcy5tb2RlbFJhbmtpbmcuc2xpY2UoMCwxMCkubWFwKGU9PmBtb2RlbDoke2UuaWR9YCk7aWYoci5sZW5ndGg9PT0wKXt0aGlzLmJyZWFrZG93bj1bXSx0aGlzLm90aGVyUG9pbnRzPWplKGksW10pO3JldHVybn1sZXQgYT1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKHIsdGhpcy5tZXRyaWMsZSx0LDApO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjtsZXQgbz1rZShhLnNlcmllcywxMCk7dGhpcy5icmVha2Rvd249byx0aGlzLm90aGVyUG9pbnRzPWplKGksbyk7cmV0dXJufWlmKHRoaXMuYnk9PT1gcHJvdmlkZXJgKXtsZXQgcj10aGlzLm1vZGVsUmFua2luZy5zbGljZSgwLCQpLm1hcChlPT5gbW9kZWw6JHtlLmlkfWApO2lmKHIubGVuZ3RoPT09MCl7dGhpcy5icmVha2Rvd249W10sdGhpcy5vdGhlclBvaW50cz1udWxsO3JldHVybn1sZXQgaT1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKHIsdGhpcy5tZXRyaWMsZSx0LDApO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjt0aGlzLmJyZWFrZG93bj1EZShpLnNlcmllcyksdGhpcy5vdGhlclBvaW50cz1udWxsO3JldHVybn1sZXQgYT1hd2FpdCBkKF8oe2tpbmQ6YGdyb3VwYCx3aW5kb3c6ZSxzcGFuOnQsbWV0cmljczpbdGhpcy5tZXRyaWNdfSkpO2lmKG4hPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjtsZXQgbz1hLnJvd3Muc2xpY2UoMCwkKS5tYXAoZT0+YGdyb3VwOiR7ZS5pZH1gKTtpZihvLmxlbmd0aD09PTApe3RoaXMuYnJlYWtkb3duPVtdLHRoaXMub3RoZXJQb2ludHM9bnVsbDtyZXR1cm59bGV0IHM9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhvLHRoaXMubWV0cmljLGUsdCwwKTtuPT09dGhpcy5icmVha2Rvd25SZXFJZCYmKHRoaXMuYnJlYWtkb3duPXMuc2VyaWVzLHRoaXMub3RoZXJQb2ludHM9bnVsbCl9LGFzeW5jIGZldGNoQnJlYWtkb3duU2luZ2xlU2NvcGUoZSx0LG4scil7bGV0IGk9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhbZV0sdGhpcy5tZXRyaWMsdCxuLDApO2lmKHIhPT10aGlzLmJyZWFrZG93blJlcUlkKXJldHVybjt0aGlzLmJ1Y2tldHM9aS5idWNrZXRzO2xldCBhPWkuc2VyaWVzLmZpbmQodD0+dC5zY29wZT09PWUpPy5wb2ludHM/P0FycmF5KGkuYnVja2V0cy5sZW5ndGgpLmZpbGwoMCk7dGhpcy5icmVha2Rvd249W3tzY29wZTplLHBvaW50czphfV0sdGhpcy5vdGhlclBvaW50cz1udWxsLHRoaXMudG90YWxQb2ludHM9YX0sYXN5bmMgZmV0Y2hCcmVha2Rvd25Qcm92aWRlclNjb3BlKGUsdCxuLHIpe2xldCBpPXRoaXMubW9kZWxSYW5raW5nLmZpbHRlcih0PT50LmlkLnN0YXJ0c1dpdGgoYCR7ZX0vYCkpLnNsaWNlKDAsJCkubWFwKGU9PmBtb2RlbDoke2UuaWR9YCk7aWYoaS5sZW5ndGg9PT0wKXt0aGlzLmJ1Y2tldHM9W10sdGhpcy5icmVha2Rvd249W10sdGhpcy5vdGhlclBvaW50cz1udWxsLHRoaXMudG90YWxQb2ludHM9W107cmV0dXJufWxldCBhPWF3YWl0IHRoaXMuZmV0Y2hTZXJpZXMoaSx0aGlzLm1ldHJpYyx0LG4sMCk7aWYociE9PXRoaXMuYnJlYWtkb3duUmVxSWQpcmV0dXJuO3RoaXMuYnVja2V0cz1hLmJ1Y2tldHM7bGV0W29dPURlKGEuc2VyaWVzKSxzPW8/LnBvaW50cz8/QXJyYXkoYS5idWNrZXRzLmxlbmd0aCkuZmlsbCgwKTt0aGlzLmJyZWFrZG93bj1be3Njb3BlOmBwcm92aWRlcjoke2V9YCxwb2ludHM6c31dLHRoaXMub3RoZXJQb2ludHM9bnVsbCx0aGlzLnRvdGFsUG9pbnRzPXN9LGFzeW5jIGZldGNoQ29tcGFyaXNvbihlLHQsbixyLGkpe2xldCBhPWU9PT1gYWxsYD9gdG90YWxgOmUuc3RhcnRzV2l0aChgcHJvdmlkZXI6YCk/bnVsbDplO2lmKGE9PT1udWxsKXt0aGlzLmNvbXBhcmlzb25Qb2ludHM9bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1gQ29tcGFyaXNvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBhIHNpbmdsZS1wcm92aWRlciBzY29wZS5gO3JldHVybn1sZXQgbz1hd2FpdCB0aGlzLmZldGNoU2VyaWVzKFthXSx0aGlzLm1ldHJpYyx0LG4scik7aT09PXRoaXMuYnJlYWtkb3duUmVxSWQmJih0aGlzLmNvbXBhcmlzb25Qb2ludHM9by5zZXJpZXMuZmluZChlPT5lLnNjb3BlPT09YSk/LnBvaW50cz8/bnVsbCx0aGlzLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbj1udWxsKX0sYXN5bmMgZmV0Y2hTZXJpZXMoZSx0LG4scixpKXtyZXR1cm4gZChoKHtzY29wZTplLG1ldHJpYzp0LHdpbmRvdzpuLHNwYW46cixvZmZzZXQ6aXx8dm9pZCAwfSkpfSxhc3luYyBmZXRjaEJ1cm5kb3duKCl7bGV0IGU9SSgpLHQ9Kyt0aGlzLmJ1cm5kb3duUmVxSWQsbj1WZShlLnNjb3BlKTtpZihuPT09bnVsbCl7dGhpcy5idXJuZG93bkJ1Y2tldHM9W10sdGhpcy5idXJuZG93blBvaW50cz1bXSx0aGlzLmJ1cm5kb3duQnVkZ2V0TWljcm9zPW51bGwsdGhpcy5idXJuZG93bkVycm9yPWBgLHRoaXMuYnVybmRvd25Mb2FkaW5nPSExO3JldHVybn10aGlzLmJ1cm5kb3duTG9hZGluZz0hMDt0cnl7bGV0IGU9cGUobmV3IERhdGUpLHI9YXdhaXQgdGhpcy5mZXRjaFNlcmllcyhbbl0sYGNvc3RgLGBkYXlgLGUsMCk7aWYodCE9PXRoaXMuYnVybmRvd25SZXFJZClyZXR1cm47dGhpcy5idXJuZG93bkJ1Y2tldHM9ci5idWNrZXRzLHRoaXMuYnVybmRvd25Qb2ludHM9ci5zZXJpZXMuZmluZChlPT5lLnNjb3BlPT09bik/LnBvaW50cz8/QXJyYXkoci5idWNrZXRzLmxlbmd0aCkuZmlsbCgwKSx0aGlzLmJ1cm5kb3duQnVkZ2V0TWljcm9zPUhlKG4pLHRoaXMuYnVybmRvd25FcnJvcj1gYH1jYXRjaChlKXtpZih0IT09dGhpcy5idXJuZG93blJlcUlkfHxqKGUpKXJldHVybjt0aGlzLmJ1cm5kb3duRXJyb3I9cyhlKX1maW5hbGx5e3Q9PT10aGlzLmJ1cm5kb3duUmVxSWQmJih0aGlzLmJ1cm5kb3duTG9hZGluZz0hMSl9fSxhc3luYyBmZXRjaERyaWxsZG93bigpe2xldCBlPUkoKTsodGhpcy5kcmlsbGRvd25XaW5kb3chPT1lLndpbmRvd3x8dGhpcy5kcmlsbGRvd25TcGFuIT09ZS5zcGFufHx0aGlzLmRyaWxsZG93bkRyaWxsRmV0Y2hlZEZvciE9PXRoaXMuZHJpbGwpJiYodGhpcy5kcmlsbGRvd25Mb2FkZWQ9ITEpLHRoaXMuZHJpbGxkb3duV2luZG93PWUud2luZG93LHRoaXMuZHJpbGxkb3duU3Bhbj1lLnNwYW4sdGhpcy5kcmlsbGRvd25EcmlsbEZldGNoZWRGb3I9dGhpcy5kcmlsbDtsZXQgdD0rK3RoaXMuZHJpbGxkb3duUmVxSWQsbj1YKHRoaXMuZHJpbGwpO3RoaXMuZHJpbGxkb3duTG9hZGluZz0hMDt0cnl7bGV0IHI9bi5raW5kPT09YHVzZXJtb2RlbGA/e2tpbmQ6YHVzZXJtb2RlbGAsLi4uZihlLndpbmRvdyxlLnNwYW4pLHVzZXI6bi51c2VyfTpuLmtpbmQ9PT1gdXNlcmA/e2tpbmQ6YHVzZXJgLHdpbmRvdzplLndpbmRvdyxzcGFuOmUuc3Bhbixncm91cDpuLmdyb3VwLG1ldHJpY3M6W2ByZXFgLGB0b2tpbmAsYHRva291dGAsYGNvc3RgXX06e2tpbmQ6YGdyb3VwYCx3aW5kb3c6ZS53aW5kb3csc3BhbjplLnNwYW4sbWV0cmljczpbYHJlcWAsYHRva2luYCxgdG9rb3V0YCxgY29zdGBdfSxpPWF3YWl0IGQoXyhyKSk7aWYodCE9PXRoaXMuZHJpbGxkb3duUmVxSWQpcmV0dXJuO3RoaXMuZHJpbGxkb3duUm93cz1pLnJvd3MsdGhpcy5kcmlsbGRvd25NZXRyaWNzPWkubWV0cmljcyx0aGlzLmRyaWxsZG93bkRpc2FibGVkPSExLHRoaXMuZHJpbGxkb3duRXJyb3I9YGAsdGhpcy5kcmlsbGRvd25Mb2FkZWQ9ITB9Y2F0Y2goZSl7aWYodCE9PXRoaXMuZHJpbGxkb3duUmVxSWR8fGooZSkpcmV0dXJuO2lmKGUgaW5zdGFuY2VvZiBNJiZlLnN0YXR1cz09PTQwNCl7dGhpcy5kcmlsbGRvd25Sb3dzPVtdLHRoaXMuZHJpbGxkb3duTWV0cmljcz1bXSx0aGlzLmRyaWxsZG93bkRpc2FibGVkPSEwLHRoaXMuZHJpbGxkb3duRXJyb3I9YGAsdGhpcy5kcmlsbGRvd25Mb2FkZWQ9ITA7cmV0dXJufXRoaXMuZHJpbGxkb3duRXJyb3I9cyhlKX1maW5hbGx5e3Q9PT10aGlzLmRyaWxsZG93blJlcUlkJiYodGhpcy5kcmlsbGRvd25Mb2FkaW5nPSExKX19LHN0YXJ0UG9sbGluZygpe3RoaXMucG9sbGVyfHwodGhpcy5wb2xsZXI9RCh7aW50ZXJ2YWxNczp6ZSx0aWNrOigpPT52b2lkIHRoaXMucmVmcmVzaCgpfSksdGhpcy5wb2xsZXIuc3RhcnQoKSl9LHN0b3BQb2xsaW5nKCl7dGhpcy5wb2xsZXI/LnN0b3AoKSx0aGlzLnBvbGxlcj12b2lkIDB9fX0pO2Z1bmN0aW9uIFZlKGUpe3JldHVybiBlPT09YGFsbGA/YHRvdGFsYDplLnN0YXJ0c1dpdGgoYGdyb3VwOmApfHxlLnN0YXJ0c1dpdGgoYHVzZXI6YCk/ZTpudWxsfWZ1bmN0aW9uIEhlKGUpe2xldCB0PXYoKSxuPUVlKGUsdC5vdmVydmlldz8uZ3JvdXBzPz9bXSx0LnVzYWdlPy51c2Vycz8/W10pPy5jb3N0UGVyTW9udGhVU0Q7cmV0dXJuIG4mJm4+MD9zZShuKTpudWxsfXZhciBVZT17ImFyaWEtbGFiZWwiOmBCcmVhZGNydW1iYCxjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxXZT1bYGRpc2FibGVkYF0sR2U9e2NsYXNzOmBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmRgfSxLZT17Y2xhc3M6YGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZGB9LHFlPU4oe19fbmFtZTpgQXR0cmlidXRpb25EcmlsbGRvd25gLHByb3BzOntyb3dzOnt9LG1ldHJpY3M6e30sZHJpbGw6e30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdXNlck1vZGVsU3RhdHNFbmFibGVkOnt0eXBlOkJvb2xlYW59LHdpbmRvdzp7fSxzcGFuOnt9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbn0sbG9hZGVkOnt0eXBlOkJvb2xlYW59LGVycm9yOnt9LG9uUmV0cnk6e3R5cGU6RnVuY3Rpb259fSxlbWl0czpbYHVwZGF0ZTpkcmlsbGBdLHNldHVwKHQse2VtaXQ6YX0pe2xldCBvPXQscz1hLGQ9QygoKT0+WChvLmRyaWxsKSksZj1wKGBgKTtmdW5jdGlvbiBoKCl7cyhgdXBkYXRlOmRyaWxsYCxgYCl9ZnVuY3Rpb24gXygpe2YudmFsdWUmJnMoYHVwZGF0ZTpkcmlsbGAsWihgZ3JvdXBgLGYudmFsdWUpKX1mdW5jdGlvbiB2KGUpe2xldCB0PWQudmFsdWU7dC5raW5kPT09YGdyb3VwYD9zKGB1cGRhdGU6ZHJpbGxgLFooYGdyb3VwYCxlKSk6dC5raW5kPT09YHVzZXJgJiZvLnVzZXJNb2RlbFN0YXRzRW5hYmxlZCYmKGYudmFsdWU9dC5ncm91cCxzKGB1cGRhdGU6ZHJpbGxgLFooYHVzZXJgLGUpKSl9bGV0IFM9QygoKT0+ZC52YWx1ZS5raW5kPT09YGdyb3VwYD9gR3JvdXBgOmQudmFsdWUua2luZD09PWB1c2VyYD9gVXNlcmA6YE1vZGVsYCk7ZnVuY3Rpb24gZWUodCl7bGV0IG49ZC52YWx1ZTtyZXR1cm4gbi5raW5kPT09YHVzZXJtb2RlbGA/ZShiZSx7bGFiZWw6dC5pZCxraW5kOmBtb2RlbGAsaWQ6dC5pZH0pOm4ua2luZD09PWBncm91cGB8fG8udXNlck1vZGVsU3RhdHNFbmFibGVkP2UoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsY2xhc3M6YGlubGluZS1mbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkLXNtIGhvdmVyOnRleHQtcHJpbWFyeSBob3Zlcjp1bmRlcmxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTBgLG9uQ2xpY2s6KCk9PnYodC5pZCl9LFt0LmlkLGUoTCx7aWNvbjpnLGNsYXNzOmBzaXplLTNgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSldKTplKGBzcGFuYCx7fSx0LmlkKX1sZXQgRT1DKCgpPT5be2lkOmBpZGAsaGVhZGVyOlMudmFsdWUsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6ZX0pPT5lZShlLm9yaWdpbmFsKX0sLi4uby5tZXRyaWNzLm1hcCh0PT4oe2lkOnQsaGVhZGVyOlFbdF0/P3QsbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5lLnZhbHVlc1t0XT8/MCxjZWxsOih7cm93Om59KT0+e2xldCByPW4ub3JpZ2luYWwudmFsdWVzW3RdPz8wO3JldHVybiB0PT09YGNvc3RgP1Uocik6ZShsZSx7dmFsdWU6cn0pfX0pKV0pLEQ9QygoKT0+ZC52YWx1ZS5raW5kPT09YHVzZXJgJiYoIW8udXNlck1vZGVsU3RhdHNFbmFibGVkfHxvLmRpc2FibGVkKSksaj1DKCgpPT5HKHtsb2FkaW5nOm8ubG9hZGluZyxoYXNEYXRhOm8ubG9hZGVkLGVycm9yOm8uZXJyb3J9KSksTT1DKCgpPT4hRC52YWx1ZSYmby5yb3dzLmxlbmd0aD09PTApO3JldHVybihlLGEpPT4oYigpLG0oTyhuKSxudWxsLHtkZWZhdWx0OmkoKCk9Plt1KE8oYyksbnVsbCx7ZGVmYXVsdDppKCgpPT5bdShPKGspLG51bGwse2RlZmF1bHQ6aSgoKT0+Wy4uLmFbMF18fD1beShgQXR0cmlidXRpb25gLC0xKV1dKSxfOjF9KSx1KE8oUCksbnVsbCx7ZGVmYXVsdDppKCgpPT5bLi4uYVsxXXx8PVt5KGBEcmlsbCBmcm9tIGdyb3VwcyBpbnRvIHVzZXJzIGludG8gdGhlIG1vZGVscyB0aGV5IHVzZWQuYCwtMSldXSksXzoxfSksdyhgbmF2YCxVZSxbdyhgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxjbGFzczpgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGhvdmVyOnVuZGVybGluZWAsZGlzYWJsZWQ6ZC52YWx1ZS5raW5kPT09YGdyb3VwYCxvbkNsaWNrOmh9LGAgQWxsIGdyb3VwcyBgLDgsV2UpLGQudmFsdWUua2luZD09PWB1c2VyYD8oYigpLFQobCx7a2V5OjB9LFt1KE8oTCkse2ljb246TyhnKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSx3KGBzcGFuYCxHZSxBKGQudmFsdWUuZ3JvdXApLDEpXSw2NCkpOngoYGAsITApLGQudmFsdWUua2luZD09PWB1c2VybW9kZWxgPyhiKCksVChsLHtrZXk6MX0sW3UoTyhMKSx7aWNvbjpPKGcpLGNsYXNzOmBzaXplLTNgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLGYudmFsdWU/KGIoKSxUKGBidXR0b25gLHtrZXk6MCx0eXBlOmBidXR0b25gLGNsYXNzOmBob3Zlcjp0ZXh0LWZvcmVncm91bmQgaG92ZXI6dW5kZXJsaW5lYCxvbkNsaWNrOl99LEEoZi52YWx1ZSksMSkpOngoYGAsITApLHUoTyhMKSx7aWNvbjpPKGcpLGNsYXNzOmBzaXplLTNgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLHcoYHNwYW5gLEtlLEEoZC52YWx1ZS51c2VyKSwxKV0sNjQpKTp4KGBgLCEwKV0pXSksXzoxfSksdShPKHIpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LHtkZWZhdWx0OmkoKCk9PltkLnZhbHVlLmtpbmQ9PT1gdXNlcm1vZGVsYD8oYigpLG0oQ2Use2tleTowLHdpbmRvdzp0LndpbmRvdyxzcGFuOnQuc3Bhbn0sbnVsbCw4LFtgd2luZG93YCxgc3BhbmBdKSk6eChgYCwhMCksRC52YWx1ZT8oYigpLG0od2Use2tleToxLHRpdGxlOmBQZXItdXNlci1tb2RlbCBzdGF0aXN0aWNzIGFyZSBvZmZgLCJjb25maWcta2V5IjpgYWRtaW4uc3RhdHMudXNlck1vZGVsYCxwdXJwb3NlOmB0byBzZWUgcGVyLW1vZGVsIGF0dHJpYnV0aW9uIGZvciB0aGlzIHVzZXIuYH0pKTpqLnZhbHVlPT09YHNrZWxldG9uYD8oYigpLG0oYWUse2tleToyLHJvd3M6NSxjb2xzOnQubWV0cmljcy5sZW5ndGgrMX0sbnVsbCw4LFtgY29sc2BdKSk6ai52YWx1ZT09PWBlcnJvcmA/KGIoKSxtKFIse2tleTozLG1lc3NhZ2U6dC5lcnJvciwib24tcmV0cnkiOnQub25SZXRyeX0sbnVsbCw4LFtgbWVzc2FnZWAsYG9uLXJldHJ5YF0pKTpNLnZhbHVlPyhiKCksbShCLHtrZXk6NCx0aXRsZTpgTm8gdHJhZmZpYyBpbiB0aGlzIHJhbmdlLmB9LHtkZWZhdWx0OmkoKCk9Plt1KHZlKV0pLF86MX0pKTooYigpLG0oSyx7a2V5OjUsY29sdW1uczpFLnZhbHVlLGRhdGE6dC5yb3dzLCJlbXB0eS1tZXNzYWdlIjpgbm9uZWB9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYF0pKV0pLF86MX0pXSksXzoxfSkpfX0pLEplPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LFllPXtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy0zYH0sWGU9e2tleTowLGNsYXNzOmB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFplPU4oe19fbmFtZTpgQnVybkRvd25DaGFydGAscHJvcHM6e2J1Y2tldHM6e30scG9pbnRzOnt9LGJ1ZGdldE1pY3Jvczp7fSxub3c6e30sbG9hZGluZzp7dHlwZTpCb29sZWFufSxlcnJvcjp7fSxvblJldHJ5Ont0eXBlOkZ1bmN0aW9ufX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUMoKCk9Pkcoe2xvYWRpbmc6dC5sb2FkaW5nPz8hMSxoYXNEYXRhOnQuYnVja2V0cy5sZW5ndGg+MCxlcnJvcjp0LmVycm9yPz9gYH0pKSxyPUMoKCk9PnQuYnVja2V0cy5tYXAoZT0+eihlLGBkYXlgKSkpLGE9QygoKT0+Z2UodC5wb2ludHMpKSxvPUMoKCk9PmEudmFsdWUuYXQoLTEpPz8wKSxzPUMoKCk9Plt7bGFiZWw6YFNwZW50IChNVEQpYCxkYXRhOmEudmFsdWUsY29sb3I6YC0tY2hhcnQtY29zdGB9XSksYz1DKCgpPT50LmJ1ZGdldE1pY3Jvcz09PW51bGw/W106W3tsYWJlbDpgQnVkZ2V0YCxkYXRhOkFycmF5KGEudmFsdWUubGVuZ3RoKS5maWxsKHQuYnVkZ2V0TWljcm9zKSxjb2xvcjpgLS1kZXN0cnVjdGl2ZWB9XSksbD1DKCgpPT50LmJ1ZGdldE1pY3Jvcz09PW51bGw/bnVsbDptZShvLnZhbHVlLHQuYnVkZ2V0TWljcm9zLHQubm93KSksZD1DKCgpPT50LmJ1ZGdldE1pY3JvcyE9PW51bGwmJm8udmFsdWU+PXQuYnVkZ2V0TWljcm9zKTtyZXR1cm4odCxhKT0+KGIoKSxtKFNlLHt0aXRsZTpgQnVybi1kb3duYCxkZXNjcmlwdGlvbjpgQ3VtdWxhdGl2ZSBzcGVuZCB0aGlzIFVUQyBjYWxlbmRhciBtb250aCBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIGJ1ZGdldC5gLHN0YXRlOm4udmFsdWUsZXJyb3I6ZS5lcnJvcj8/YGAsIm9uLXJldHJ5IjplLm9uUmV0cnl9LHtkZWZhdWx0OmkoKCk9Plt3KGBkaXZgLEplLFt3KGBkaXZgLFllLFt1KEose2xhYmVsOmBTcGVudCBzbyBmYXJgLHRvbmU6ZC52YWx1ZT9gZGVzdHJ1Y3RpdmVgOmBkZWZhdWx0YH0se2RlZmF1bHQ6aSgoKT0+W3koQShPKFUpKG8udmFsdWUpKSwxKV0pLF86MX0sOCxbYHRvbmVgXSksZS5idWRnZXRNaWNyb3M9PT1udWxsP3goYGAsITApOihiKCksbShKLHtrZXk6MCxsYWJlbDpgQnVkZ2V0YH0se2RlZmF1bHQ6aSgoKT0+W3koQShPKFUpKGUuYnVkZ2V0TWljcm9zKSksMSldKSxfOjF9KSksZS5idWRnZXRNaWNyb3M9PT1udWxsP3goYGAsITApOihiKCksbShKLHtrZXk6MSxsYWJlbDpgUHJvamVjdGVkIHJ1bi1vdXRgLHRvbmU6ZC52YWx1ZT9gZGVzdHJ1Y3RpdmVgOmBkZWZhdWx0YCxoaW50OmwudmFsdWU9PT1udWxsP08oX2UpOnZvaWQgMH0se2RlZmF1bHQ6aSgoKT0+W3koQShsLnZhbHVlPT09bnVsbD9gYDpPKEgpKGwudmFsdWUpKSwxKV0pLF86MX0sOCxbYHRvbmVgLGBoaW50YF0pKV0pLGUuYnVkZ2V0TWljcm9zPT09bnVsbD8oYigpLFQoYHBgLFhlLGBObyBidWRnZXQgY29uZmlndXJlZCBmb3IgdGhpcyBzY29wZS5gKSk6eChgYCwhMCksdSh4ZSx7bGFiZWxzOnIudmFsdWUsZGF0YXNldHM6cy52YWx1ZSwiY29tcGFyaXNvbi1kYXRhc2V0cyI6Yy52YWx1ZSwidmFsdWUtZm9ybWF0dGVyIjpPKFUpLGFyaWFMYWJlbDpgQ3VtdWxhdGl2ZSBzcGVuZCB0aGlzIG1vbnRoIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgYnVkZ2V0YH0sbnVsbCw4LFtgbGFiZWxzYCxgZGF0YXNldHNgLGBjb21wYXJpc29uLWRhdGFzZXRzYCxgdmFsdWUtZm9ybWF0dGVyYF0pXSldKSxfOjF9LDgsW2BzdGF0ZWAsYGVycm9yYCxgb24tcmV0cnlgXSkpfX0pO2Z1bmN0aW9uIFFlKGUpe3JldHVybiBlLmZpbHRlcihlPT5lLmZyZWUpLm1hcChlPT4oe3Rva2Vuc0luOmUudG9rZW5zSW4/PzAsdG9rZW5zT3V0OmUudG9rZW5zT3V0Pz8wfSkpfWZ1bmN0aW9uICRlKGUsdCxuKXtsZXQgcj0wO2ZvcihsZXQgaSBvZiBlKXIrPWkudG9rZW5zSW4qdCtpLnRva2Vuc091dCpuO3JldHVybiBNYXRoLnJvdW5kKHIpfXZhciBldD1uZXcgU2V0KFtgZnJlZWAsYHVucHJpY2VkYF0pO2Z1bmN0aW9uIHR0KGUsdCl7bGV0IG49bnVsbDtmb3IobGV0IHIgb2YgZSl7aWYoci5yZXF1ZXN0cz09PXZvaWQgMCljb250aW51ZTtsZXQgZT10LmdldChyLmlkKTshZXx8ZXQuaGFzKGUucHJpY2VTb3VyY2UpfHwobj09PW51bGx8fHIucmVxdWVzdHM+KG4ucmVxdWVzdHM/PzApKSYmKG49cil9cmV0dXJuIG4/LmlkPz9udWxsfXZhciBudD17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0scnQ9e2tleToxLGNsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zIHRleHQtY2hhcnQtcmVxdWVzdHNgfSxpdD17a2V5OjB9LGF0PXtrZXk6MCxjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtcyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxvdD17a2V5OjEsY2xhc3M6YHRleHQtbGcgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXMgdGV4dC1jaGFydC1yZXF1ZXN0c2B9LHN0PXtrZXk6MixjbGFzczpgdGV4dC14cyB0ZXh0LXN0YXR1cy13YXJuYH0sY3Q9Tih7X19uYW1lOmBDb3N0QXZvaWRlZENhcmRgLHByb3BzOnttb2RlbHM6e30sY2F0YWxvZzp7fSxyZWZNb2RlbDp7fSxjYWNoZVN0YXRzRW5hYmxlZDp7dHlwZTpCb29sZWFufSxjYWNoZVNhdmluZ3NBdmFpbGFibGU6e3R5cGU6Qm9vbGVhbn0sY2FjaGVTYXZpbmdzTm90ZTp7fX0sZW1pdHM6W2B1cGRhdGU6cmVmTW9kZWxgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgYT1lLG89dCxzPUMoKCk9PntsZXQgZT1bXTtmb3IobGV0IHQgb2YgYS5tb2RlbHMpe2xldCBuPWEuY2F0YWxvZy5nZXQodC5pZCk7IW58fG4ucHJpY2VTb3VyY2U9PT1gZnJlZWB8fG4ucHJpY2VTb3VyY2U9PT1gdW5wcmljZWRgfHxlLnB1c2goe2lkOnQuaWQscmVxdWVzdHM6dC5yZXF1ZXN0cz8/MH0pfXJldHVybiBlLnNvcnQoKGUsdCk9PnQucmVxdWVzdHMtZS5yZXF1ZXN0cyl9KSxsPUMoKCk9PnMudmFsdWUubWFwKGU9Pih7dmFsdWU6ZS5pZCxsYWJlbDplLmlkfSkpKSxkPUMoKCk9PnR0KGEubW9kZWxzLGEuY2F0YWxvZykpLGY9QygoKT0+YS5yZWZNb2RlbHx8ZC52YWx1ZSkscD1DKCgpPT5mLnZhbHVlP2EuY2F0YWxvZy5nZXQoZi52YWx1ZSk6dm9pZCAwKSxoPUMoKCk9PntsZXQgZT1wLnZhbHVlO3JldHVybiFlfHxlLmlucHV0UGVyTVRva1VzZD09PXZvaWQgMHx8ZS5vdXRwdXRQZXJNVG9rVXNkPT09dm9pZCAwP251bGw6JGUoUWUoYS5tb2RlbHMpLGUuaW5wdXRQZXJNVG9rVXNkLGUub3V0cHV0UGVyTVRva1VzZCl9KSxnPUMoKCk9PntsZXQgZT0wO2ZvcihsZXQgdCBvZiBhLm1vZGVscyllKz10LmNhY2hlU2F2ZWRNaWNyb1VzZD8/MDtyZXR1cm4gZX0pO2Z1bmN0aW9uIF8oZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZvKGB1cGRhdGU6cmVmTW9kZWxgLGUpfXJldHVybih0LGEpPT4oYigpLG0oTyhuKSxudWxsLHtkZWZhdWx0OmkoKCk9Plt1KE8oYykse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IHNtOmZsZXgtcm93IHNtOml0ZW1zLXN0YXJ0IHNtOmp1c3RpZnktYmV0d2VlbmB9LHtkZWZhdWx0OmkoKCk9Plt3KGBkaXZgLG51bGwsW3UoTyhrKSxudWxsLHtkZWZhdWx0OmkoKCk9PlsuLi5hWzBdfHw9W3koYENvc3QgYXZvaWRlZGAsLTEpXV0pLF86MX0pLHUoTyhQKSxudWxsLHtkZWZhdWx0OmkoKCk9PlsuLi5hWzFdfHw9W3koYFdoYXQgZnJlZS10aWVyIHRyYWZmaWMgaW4gcmFuZ2Ugd291bGQgaGF2ZSBjb3N0IGF0IGEgcmVhbCBtb2RlbCdzIG93biByYXRlcy5gLC0xKV1dKSxfOjF9KV0pLHMudmFsdWUubGVuZ3RoPjA/KGIoKSxtKEYse2tleTowLGxhYmVsOmBSZWZlcmVuY2UgbW9kZWxgLCJtb2RlbC12YWx1ZSI6Zi52YWx1ZT8/YGAsb3B0aW9uczpsLnZhbHVlLHBsYWNlaG9sZGVyOmBQaWNrIGEgcmVmZXJlbmNlIG1vZGVsYCwidHJpZ2dlci1jbGFzcyI6YHctNTZgLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpffSxudWxsLDgsW2Btb2RlbC12YWx1ZWAsYG9wdGlvbnNgXSkpOngoYGAsITApXSksXzoxfSksdShPKHIpLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtYH0se2RlZmF1bHQ6aSgoKT0+W3coYGRpdmAsbnVsbCxbYVsyXXx8PXcoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYENvc3QgYXZvaWRlZCAoZnJlZS10aWVyIHRyYWZmaWMpYCwtMSksaC52YWx1ZT09PW51bGw/KGIoKSxUKGBwYCxudCxBKHMudmFsdWUubGVuZ3RoPT09MD9gTm8gcHJpY2VkIG1vZGVsIHNlcnZlZCBpbiByYW5nZSB0byBjb21wYXJlIGFnYWluc3QuYDpgUGljayBhIHJlZmVyZW5jZSBtb2RlbCBhYm92ZS5gKSwxKSk6KGIoKSxUKGBwYCxydCxBKE8oVSkoaC52YWx1ZSkpLDEpKV0pLGUuY2FjaGVTdGF0c0VuYWJsZWQ/KGIoKSxUKGBkaXZgLGl0LFthWzNdfHw9dyhgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQ2FjaGUgc2F2aW5nc2AsLTEpLGUuY2FjaGVTYXZpbmdzQXZhaWxhYmxlPyhiKCksVChgcGAsb3QsQShPKFUpKGcudmFsdWUpKSwxKSk6KGIoKSxUKGBwYCxhdCxgbi9hYCkpLGUuY2FjaGVTYXZpbmdzTm90ZT8oYigpLFQoYHBgLHN0LEEoZS5jYWNoZVNhdmluZ3NOb3RlKSwxKSk6eChgYCwhMCldKSk6eChgYCwhMCldKSxfOjF9KV0pLF86MX0pKX19KTtmdW5jdGlvbiBsdChlLHQpe2xldCBuPVtdO2ZvcihsZXQgciBvZiBlKXtsZXQgZT10LmdldChyLmlkKTtlJiZuLnB1c2goe2lkOnIuaWQscHJpY2VTb3VyY2U6ZS5wcmljZVNvdXJjZSxkaXNwbGF5RnJlZTplLmRpc3BsYXlGcmVlPz8hMSxyZXF1ZXN0czpyLnJlcXVlc3RzPz8wLHRva2Vuc0luOnIudG9rZW5zSW4/PzAsdG9rZW5zT3V0OnIudG9rZW5zT3V0Pz8wLGNvc3RNaWNyb1VzZDpyLmNvc3RNaWNyb1VzZD8/MCxjb250ZXh0VG9rZW5zOmUuY29udGV4dFRva2VucyxpbnB1dFBlck1Ub2tVc2Q6ZS5pbnB1dFBlck1Ub2tVc2Qsb3V0cHV0UGVyTVRva1VzZDplLm91dHB1dFBlck1Ub2tVc2QsYWxpYXNlczplLmFsaWFzZXN9KX1yZXR1cm4gbn12YXIgdXQ9e3VucHJpY2VkOjAsb3ZlcnJpZGU6MSxidWlsdGluOjIsbGl0ZWxsbTozLGZyZWU6NH07ZnVuY3Rpb24gZHQoZSl7cmV0dXJuWy4uLmVdLnNvcnQoKGUsdCk9PntsZXQgbj11dFtlLnByaWNlU291cmNlXS11dFt0LnByaWNlU291cmNlXTtyZXR1cm4gbj09PTA/dC5yZXF1ZXN0cy1lLnJlcXVlc3RzOm59KX12YXIgZnQ9e2NsYXNzOmBmbGV4IGp1c3RpZnktZW5kYH0scHQ9Tih7X19uYW1lOmBQcmljaW5nSGVhbHRoVGFibGVgLHByb3BzOnttb2RlbHM6e30sY2F0YWxvZzp7fSxsb2FkaW5nOnt0eXBlOkJvb2xlYW59LGxvYWRlZDp7dHlwZTpCb29sZWFufSxlcnJvcjp7fSxvblJldHJ5Ont0eXBlOkZ1bmN0aW9ufX0sc2V0dXAodCl7bGV0IGE9dCxvPUMoKCk9PmR0KGx0KGEubW9kZWxzLGEuY2F0YWxvZykpKSxzPUMoKCk9Pkcoe2xvYWRpbmc6YS5sb2FkaW5nLGhhc0RhdGE6YS5sb2FkZWQsZXJyb3I6YS5lcnJvcn0pKSxsPUMoKCk9Pm8udmFsdWUuZmlsdGVyKGU9PmUucHJpY2VTb3VyY2U9PT1gdW5wcmljZWRgKS5sZW5ndGgpLGQ9e3VucHJpY2VkOmBkZXN0cnVjdGl2ZWAsZnJlZTpgc2Vjb25kYXJ5YCxvdmVycmlkZTpgb3V0bGluZWAsYnVpbHRpbjpgb3V0bGluZWAsbGl0ZWxsbTpgb3V0bGluZWB9O2Z1bmN0aW9uIGYodCl7cmV0dXJuIGUoVyx7YXM6YHNwYW5gLHZhcmlhbnQ6ZFt0LnByaWNlU291cmNlXSxjbGFzczpgZm9udC1ub3JtYWxgfSwoKT0+dC5wcmljZVNvdXJjZSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5pbnB1dFBlck1Ub2tVc2Q9PT12b2lkIDB8fHQub3V0cHV0UGVyTVRva1VzZD09PXZvaWQgMD9lKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGDigJRgKTplKGBzcGFuYCx7fSxjZSh0LmlucHV0UGVyTVRva1VzZCx0Lm91dHB1dFBlck1Ub2tVc2QpKX1sZXQgaD1be2lkOmBpZGAsaGVhZGVyOmBNb2RlbGAsYWNjZXNzb3JGbjplPT5lLmlkLGNlbGw6KHtyb3c6dH0pPT5lKGJlLHtsYWJlbDp0Lm9yaWdpbmFsLmlkLGtpbmQ6YG1vZGVsYCxpZDp0Lm9yaWdpbmFsLmlkfSl9LHtpZDpgc291cmNlYCxoZWFkZXI6YFNvdXJjZWAsYWNjZXNzb3JGbjplPT5lLnByaWNlU291cmNlLGNlbGw6KHtyb3c6ZX0pPT5mKGUub3JpZ2luYWwpfSx7aWQ6YHByaWNlYCxoZWFkZXI6YFByaWNlYCxlbmFibGVTb3J0aW5nOiExLGNlbGw6KHtyb3c6ZX0pPT5wKGUub3JpZ2luYWwpfSxxKGBjb250ZXh0YCxgQ29udGV4dGAsZT0+ZS5jb250ZXh0VG9rZW5zLFYpLC4uLnVlKCldO2Z1bmN0aW9uIGcoKXtyZXR1cm4gZmUoW2BpZGAsYHByaWNlU291cmNlYCxgZGlzcGxheUZyZWVgLGByZXF1ZXN0c2AsYHRva2Vuc0luYCxgdG9rZW5zT3V0YCxgY29zdE1pY3JvVXNkYCxgY29udGV4dFRva2Vuc2AsYGlucHV0UGVyTVRva1VzZGAsYG91dHB1dFBlck1Ub2tVc2RgXSxvLnZhbHVlLm1hcChlPT5bZS5pZCxlLnByaWNlU291cmNlLGUuZGlzcGxheUZyZWUsZS5yZXF1ZXN0cyxlLnRva2Vuc0luLGUudG9rZW5zT3V0LGUuY29zdE1pY3JvVXNkLGUuY29udGV4dFRva2Vucz8/YGAsZS5pbnB1dFBlck1Ub2tVc2Q/P2BgLGUub3V0cHV0UGVyTVRva1VzZD8/YGBdKSl9cmV0dXJuKGUsYSk9PihiKCksbShPKG4pLG51bGwse2RlZmF1bHQ6aSgoKT0+W3UoTyhjKSxudWxsLHtkZWZhdWx0OmkoKCk9Plt1KE8oaykse2NsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMmB9LHtkZWZhdWx0OmkoKCk9PlthWzBdfHw9eShgIFByaWNpbmcgaGVhbHRoIGAsLTEpLGwudmFsdWU+MD8oYigpLG0oTyhXKSx7a2V5OjAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgLGNsYXNzOmBmb250LW5vcm1hbGB9LHtkZWZhdWx0OmkoKCk9Plt5KEEobC52YWx1ZSkrYCB1bnByaWNlZGAsMSldKSxfOjF9KSk6eChgYCwhMCldKSxfOjF9KSx1KE8oUCksbnVsbCx7ZGVmYXVsdDppKCgpPT5bLi4uYVsxXXx8PVt5KGBFdmVyeSBtb2RlbCBzZXJ2ZWQgaW4gcmFuZ2UsIGpvaW5lZCB3aXRoIGl0cyBiaWxsaW5nIHByaWNlIHNvdXJjZS5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLHUoTyhyKSx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgfSx7ZGVmYXVsdDppKCgpPT5bdSh5ZSx7c3RhdGU6cy52YWx1ZSxlcnJvcjp0LmVycm9yLCJvbi1yZXRyeSI6dC5vblJldHJ5LHNrZWxldG9uOmB0YWJsZWAscm93czo1LGNvbHM6aC5sZW5ndGgsZW1wdHk6by52YWx1ZS5sZW5ndGg9PT0wfSx7ZW1wdHk6aSgoKT0+W3UoQix7dGl0bGU6YE5vIHRyYWZmaWMgaW4gdGhpcyByYW5nZS5gfSx7ZGVmYXVsdDppKCgpPT5bdSh2ZSldKSxfOjF9KV0pLGRlZmF1bHQ6aSgoKT0+W3UoSyx7Y29sdW1uczpoLGRhdGE6by52YWx1ZSwiZW1wdHktbWVzc2FnZSI6YG5vbmVgfSxudWxsLDgsW2BkYXRhYF0pLHcoYGRpdmAsZnQsW3UoWSx7ZmlsZW5hbWU6YHByaWNpbmctaGVhbHRoLmNzdmAsYnVpbGQ6Z30pXSldKSxfOjF9LDgsW2BzdGF0ZWAsYGVycm9yYCxgb24tcmV0cnlgLGBjb2xzYCxgZW1wdHlgXSldKSxfOjF9KV0pLF86MX0pKX19KTtmdW5jdGlvbiBtdChlKXtyZXR1cm4gZT09PWBob3VyYD97YXZhaWxhYmxlOiExLG5vdGU6YENhY2hlIHNhdmluZ3MgYXJlIG5vdCB0cmFja2VkIHBlciBob3VyIOKAlCBwaWNrIGEgZGF5IG9yIG1vbnRoIHJhbmdlIGluc3RlYWQuYH06ZT09PWBtb250aGA/e2F2YWlsYWJsZTohMCxub3RlOmBDb3ZlcnMgb25seSB0aGUgbW9zdCByZWNlbnQgMzUgZGF5cyAoZGF5LWJ1Y2tldCByZXRlbnRpb24pLCBub3QgdGhlIGZ1bGwgc2VsZWN0ZWQgcmFuZ2UuYH06e2F2YWlsYWJsZTohMCxub3RlOm51bGx9fXZhciBodD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTRgfSxndD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTQgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyIHNtOmp1c3RpZnktYmV0d2VlbmB9LF90PXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zYH0sdnQ9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0seXQ9e2NsYXNzOmB0ZXh0LXJpZ2h0YH0sYnQ9e2NsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LHh0PXtjbGFzczpgdGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0YWJ1bGFyLW51bXNgfSxTdD17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sQ3Q9e2NsYXNzOmBmb250LW1vbm8gdGV4dC14c2B9LHd0PXtrZXk6MSxjbGFzczpgdGV4dC1zbSBicmVhay13b3JkcyB0ZXh0LWRlc3RydWN0aXZlYH0sVHQ9e2tleToyLGNsYXNzOmB0ZXh0LXNtIGJyZWFrLXdvcmRzIHRleHQtZGVzdHJ1Y3RpdmVgfSxFdD17a2V5OjMsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sRHQ9e2tleTo0LGNsYXNzOmB0ZXh0LXNtIGJyZWFrLXdvcmRzIHRleHQtZGVzdHJ1Y3RpdmVgfSxPdD17Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQgbGc6Z3JpZC1jb2xzLTJgfSxrdD1OKHtfX25hbWU6YFNwZW5kUGFnZWAsc2V0dXAoZSl7bGV0IHQ9e21vZGVsOmBCeSBtb2RlbGAscHJvdmlkZXI6YEJ5IHByb3ZpZGVyYCxncm91cDpgQnkgZ3JvdXBgfSxuPUllLm1hcChlPT4oe3ZhbHVlOmUsbGFiZWw6UVtlXX0pKSxyPVMoKSxzPUkoKSxjPXYoKSxkPVRlKCksZj1CZSgpLHtub3c6cCxzdGFydDpoLHN0b3A6Z309ZGUoKSxfPUMoKCk9PnIucGFyYW1zLmJ5JiZGZShyLnBhcmFtcy5ieSk/ci5wYXJhbXMuYnk6YG1vZGVsYCksRD1DKCgpPT5yLnBhcmFtcy5tZXRyaWMmJkxlKHIucGFyYW1zLm1ldHJpYyk/ci5wYXJhbXMubWV0cmljOmBjb3N0YCksaz1DKCgpPT5yLnBhcmFtcy5yZWY/P2BgKSxqPUMoKCk9PnIucGFyYW1zLmRyaWxsPz9gYCk7ZnVuY3Rpb24gTShlKXtsZXQgdD17Ynk6ZS5ieT8/Xy52YWx1ZSxtZXRyaWM6ZS5tZXRyaWM/P0QudmFsdWUscmVmOmUucmVmPz9rLnZhbHVlLGRyaWxsOmUuZHJpbGw/P2oudmFsdWV9LG49e307dC5ieSE9PWBtb2RlbGAmJihuLmJ5PXQuYnkpLHQubWV0cmljIT09YGNvc3RgJiYobi5tZXRyaWM9dC5tZXRyaWMpLHQucmVmIT09YGAmJihuLnJlZj10LnJlZiksdC5kcmlsbCE9PWBgJiYobi5kcmlsbD10LmRyaWxsKSxyLmdvVG8oYHNwZW5kYCxuKX1mdW5jdGlvbiBOKGUpe3R5cGVvZiBlPT1gc3RyaW5nYCYmRmUoZSkmJk0oe2J5OmV9KX1mdW5jdGlvbiB0ZShlKXt0eXBlb2YgZT09YHN0cmluZ2AmJkxlKGUpJiZNKHttZXRyaWM6ZX0pfWZ1bmN0aW9uIFAoZSl7TSh7cmVmOmV9KX1mdW5jdGlvbiBMKGUpe00oe2RyaWxsOmV9KX1sZXQgUj1DKCgpPT5zLnNjb3BlIT09YGFsbGApO2EoW18sRCxqXSwoW2UsdCxuXSk9PntmLnNldFNlbGVjdGlvbih7Ynk6ZSxtZXRyaWM6dCxkcmlsbDpufSl9KSxhKCgpPT5bcy5yYW5nZSxzLmNtcCxzLnNjb3BlXSwoKT0+dm9pZCBmLnJlZnJlc2goKSksbygoKT0+e2YuJHBhdGNoKHtieTpfLnZhbHVlLG1ldHJpYzpELnZhbHVlLGRyaWxsOmoudmFsdWV9KSxkLmVuc3VyZUxvYWRlZCgpLGYuc3RhcnRQb2xsaW5nKCksaCgpfSksZWUoKCk9PntmLnN0b3BQb2xsaW5nKCksZygpfSk7ZnVuY3Rpb24gYWUoZSl7cmV0dXJuIE9lKGUpfWxldCBzZT1DKCgpPT5mLmJ1Y2tldHMubWFwKGU9PnooZSxzLndpbmRvdykpKSxjZT1DKCgpPT57bGV0IGU9Zi5icmVha2Rvd24ubWFwKChlLHQpPT4oe2xhYmVsOmFlKGUuc2NvcGUpLGRhdGE6ZS5wb2ludHMsY29sb3I6TWUodCxOZSl9KSk7cmV0dXJuIGYub3RoZXJQb2ludHMmJmUucHVzaCh7bGFiZWw6YE90aGVyYCxkYXRhOmYub3RoZXJQb2ludHMsY29sb3I6YC0tbXV0ZWQtZm9yZWdyb3VuZGB9KSxlfSksQj1DKCgpPT5mLmNvbXBhcmlzb25Qb2ludHM/W3tsYWJlbDpgVG90YWxgLGRhdGE6Zi5jb21wYXJpc29uUG9pbnRzLGNvbG9yOmAtLWZvcmVncm91bmRgLGxhYmVsU3VmZml4OmAgKHByZXZpb3VzIHBlcmlvZClgfV06W10pLFY9QygoKT0+RC52YWx1ZT09PWBjb3N0YD9VOm9lKSxIPUMoKCk9PmYudG90YWxQb2ludHMucmVkdWNlKChlLHQpPT5lK3QsMCkpLFc9QygoKT0+e2xldCBlPUFlKHMuc2NvcGUpO3JldHVybiBlP2Uua2luZD09PWBncm91cGA/Yy51c2FnZT8uZ3JvdXBzLmZpbmQodD0+dC5pZD09PWUuaWQpPy5jb3N0UGVyTW9udGhNaWNyb1VzZD8/MDplLmtpbmQ9PT1gdXNlcmA/Yy51c2FnZT8udXNlcnMuZmluZCh0PT50LmlkPT09ZS5pZCk/LmNvc3RQZXJNb250aE1pY3JvVXNkPz8wOjA6Yy51c2FnZT8udG90YWwuY29zdFBlck1vbnRoTWljcm9Vc2Q/PzB9KSxLPUMoKCk9PkVlKHMuc2NvcGUsYy5vdmVydmlldz8uZ3JvdXBzPz9bXSxjLnVzYWdlPy51c2Vycz8/W10pKSxxPUMoKCk9PntsZXQgZT1BZShzLnNjb3BlKTtyZXR1cm4hZXx8ZS5raW5kPT09YGdyb3VwYHx8ZS5raW5kPT09YHVzZXJgfSksbGU9QygoKT0+Yy5vdmVydmlldz8uZmVhdHVyZXMudXNlck1vZGVsU3RhdHM/PyExKSx1ZT1DKCgpPT5jLm92ZXJ2aWV3Py5mZWF0dXJlcy5jYWNoZVN0YXRzPz8hMSksSj1DKCgpPT5tdChzLndpbmRvdykpLGZlPUMoKCk9PkoudmFsdWUuYXZhaWxhYmxlKSxwZT1DKCgpPT5KLnZhbHVlLm5vdGUpLFk9QygoKT0+Ryh7bG9hZGluZzpmLmxvYWRpbmcsaGFzRGF0YTpmLmJ1Y2tldHMubGVuZ3RoPjAsZXJyb3I6Zi5icmVha2Rvd25FcnJvcn0pKTtmdW5jdGlvbiBtZSgpe2xldCBlPVtmLmZldGNoUHJpY2luZ0hlYWx0aFJhbmtpbmcoKV07cmV0dXJuIGQuZXJyb3ImJmUucHVzaChkLmZldGNoKCkpLFByb21pc2UuYWxsKGUpLnRoZW4oKCk9PnZvaWQgMCl9cmV0dXJuKGUscik9PihiKCksVChgZGl2YCxodCxbdyhgZGl2YCxndCxbdyhgZGl2YCxfdCxbdyhgZGl2YCx2dCxbclswXXx8PXcoYHNwYW5gLHtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQnJlYWtkb3duYCwtMSksdShPKHJlKSx7Im1vZGVsLXZhbHVlIjpfLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpOfSx7ZGVmYXVsdDppKCgpPT5bdShPKG5lKSxudWxsLHtkZWZhdWx0OmkoKCk9PlsoYighMCksVChsLG51bGwsRShPKFBlKSxlPT4oYigpLG0oTyhpZSkse2tleTplLHZhbHVlOmUsZGlzYWJsZWQ6Ui52YWx1ZX0se2RlZmF1bHQ6aSgoKT0+W3koQSh0W2VdKSwxKV0pLF86Mn0sMTAzMixbYHZhbHVlYCxgZGlzYWJsZWRgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSx1KEYse2xhYmVsOmBNZXRyaWNgLCJtb2RlbC12YWx1ZSI6RC52YWx1ZSxvcHRpb25zOk8obiksInRyaWdnZXItY2xhc3MiOmB3LTQwYCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dGV9LG51bGwsOCxbYG1vZGVsLXZhbHVlYCxgb3B0aW9uc2BdKV0pLHcoYGRpdmAseXQsW3coYHBgLGJ0LEEoTyhRKVtELnZhbHVlXSkrYCBpbiByYW5nZWAsMSksdyhgcGAseHQsQShWLnZhbHVlKEgudmFsdWUpKSwxKV0pXSksUi52YWx1ZT8oYigpLFQoYHBgLFN0LFtyWzFdfHw9eShgIFNob3dpbmcgYCwtMSksdyhgc3BhbmAsQ3QsQShPKHMpLnNjb3BlKSwxKSxyWzJdfHw9eShgIGRpcmVjdGx5IOKAlCBjbGVhciB0aGUgc2NvcGUgZmlsdGVyIHRvIGJyZWFrIHNwZW5kIGRvd24gYnkgbW9kZWwsIHByb3ZpZGVyLCBvciBncm91cC4gYCwtMSldKSk6eChgYCwhMCksTyhkKS5lcnJvcj8oYigpLFQoYHBgLHd0LEEoTyhkKS5lcnJvciksMSkpOngoYGAsITApLE8oZikucmFua2luZ0Vycm9yPyhiKCksVChgcGAsVHQsQShPKGYpLnJhbmtpbmdFcnJvciksMSkpOngoYGAsITApLE8ocykuY21wU3BlYy5yZXF1ZXN0ZWQmJk8oZikuY29tcGFyaXNvblVuYXZhaWxhYmxlUmVhc29uPyhiKCksVChgcGAsRXQsQShPKGYpLmNvbXBhcmlzb25VbmF2YWlsYWJsZVJlYXNvbiksMSkpOngoYGAsITApLHUoU2Use2JhcmU6YGAsc3RhdGU6WS52YWx1ZSxlcnJvcjpPKGYpLmJyZWFrZG93bkVycm9yLCJvbi1yZXRyeSI6TyhmKS5yZWZyZXNoLGxhYmVsczpzZS52YWx1ZSxkYXRhc2V0czpjZS52YWx1ZSwiY29tcGFyaXNvbi1kYXRhc2V0cyI6Qi52YWx1ZSxzdGFja2VkOmBgLCJ2YWx1ZS1mb3JtYXR0ZXIiOlYudmFsdWUsImFyaWEtbGFiZWwiOmAke08oUSlbRC52YWx1ZV19IGJyZWFrZG93biAke3RbXy52YWx1ZV0udG9Mb3dlckNhc2UoKX0gb3ZlciB0aW1lYH0sbnVsbCw4LFtgc3RhdGVgLGBlcnJvcmAsYG9uLXJldHJ5YCxgbGFiZWxzYCxgZGF0YXNldHNgLGBjb21wYXJpc29uLWRhdGFzZXRzYCxgdmFsdWUtZm9ybWF0dGVyYCxgYXJpYS1sYWJlbGBdKSxPKGYpLmJyZWFrZG93bkVycm9yJiZZLnZhbHVlPT09YHJlYWR5YD8oYigpLFQoYHBgLER0LEEoTyhmKS5icmVha2Rvd25FcnJvciksMSkpOngoYGAsITApLHcoYGRpdmAsT3QsW08oZikuYnVybmRvd25BdmFpbGFibGU/KGIoKSxtKFplLHtrZXk6MCxidWNrZXRzOk8oZikuYnVybmRvd25CdWNrZXRzLHBvaW50czpPKGYpLmJ1cm5kb3duUG9pbnRzLCJidWRnZXQtbWljcm9zIjpPKGYpLmJ1cm5kb3duQnVkZ2V0TWljcm9zLG5vdzpPKHApLGxvYWRpbmc6TyhmKS5idXJuZG93bkxvYWRpbmcsZXJyb3I6TyhmKS5idXJuZG93bkVycm9yLCJvbi1yZXRyeSI6TyhmKS5yZWZyZXNofSxudWxsLDgsW2BidWNrZXRzYCxgcG9pbnRzYCxgYnVkZ2V0LW1pY3Jvc2AsYG5vd2AsYGxvYWRpbmdgLGBlcnJvcmAsYG9uLXJldHJ5YF0pKTp4KGBgLCEwKSxxLnZhbHVlPyhiKCksbShoZSx7a2V5OjEsIm10ZC1taWNyb3MiOlcudmFsdWUsbGltaXRzOksudmFsdWUsbm93Ok8ocCl9LG51bGwsOCxbYG10ZC1taWNyb3NgLGBsaW1pdHNgLGBub3dgXSkpOngoYGAsITApXSksdShjdCx7bW9kZWxzOk8oZikubW9kZWxSYW5raW5nLGNhdGFsb2c6TyhkKS5tb2RlbHNCeUlkLCJyZWYtbW9kZWwiOmsudmFsdWUsImNhY2hlLXN0YXRzLWVuYWJsZWQiOnVlLnZhbHVlLCJjYWNoZS1zYXZpbmdzLWF2YWlsYWJsZSI6ZmUudmFsdWUsImNhY2hlLXNhdmluZ3Mtbm90ZSI6cGUudmFsdWUsIm9uVXBkYXRlOnJlZk1vZGVsIjpQfSxudWxsLDgsW2Btb2RlbHNgLGBjYXRhbG9nYCxgcmVmLW1vZGVsYCxgY2FjaGUtc3RhdHMtZW5hYmxlZGAsYGNhY2hlLXNhdmluZ3MtYXZhaWxhYmxlYCxgY2FjaGUtc2F2aW5ncy1ub3RlYF0pLHUocHQse21vZGVsczpPKGYpLnByaWNpbmdIZWFsdGhSYW5raW5nLGNhdGFsb2c6TyhkKS5tb2RlbHNCeUlkLGxvYWRpbmc6TyhmKS5wcmljaW5nSGVhbHRoTG9hZGluZyxsb2FkZWQ6TyhmKS5wcmljaW5nSGVhbHRoTG9hZGVkLGVycm9yOk8oZikucHJpY2luZ0hlYWx0aEVycm9yfHxPKGQpLmVycm9yLCJvbi1yZXRyeSI6bWV9LG51bGwsOCxbYG1vZGVsc2AsYGNhdGFsb2dgLGBsb2FkaW5nYCxgbG9hZGVkYCxgZXJyb3JgXSksdShxZSx7cm93czpPKGYpLmRyaWxsZG93blJvd3MsbWV0cmljczpPKGYpLmRyaWxsZG93bk1ldHJpY3MsZHJpbGw6ai52YWx1ZSxkaXNhYmxlZDpPKGYpLmRyaWxsZG93bkRpc2FibGVkLCJ1c2VyLW1vZGVsLXN0YXRzLWVuYWJsZWQiOmxlLnZhbHVlLHdpbmRvdzpPKHMpLndpbmRvdyxzcGFuOk8ocykuc3Bhbixsb2FkaW5nOk8oZikuZHJpbGxkb3duTG9hZGluZyxsb2FkZWQ6TyhmKS5kcmlsbGRvd25Mb2FkZWQsZXJyb3I6TyhmKS5kcmlsbGRvd25FcnJvciwib24tcmV0cnkiOk8oZikuZmV0Y2hEcmlsbGRvd24sIm9uVXBkYXRlOmRyaWxsIjpMfSxudWxsLDgsW2Byb3dzYCxgbWV0cmljc2AsYGRyaWxsYCxgZGlzYWJsZWRgLGB1c2VyLW1vZGVsLXN0YXRzLWVuYWJsZWRgLGB3aW5kb3dgLGBzcGFuYCxgbG9hZGluZ2AsYGxvYWRlZGAsYGVycm9yYCxgb24tcmV0cnlgXSldKSl9fSk7ZXhwb3J0e2t0IGFzIGRlZmF1bHR9Ow==", ), }, - "TargetsPage-DYUVhhsj.js": { + "StatDisabledAlert-BJtHRXwE.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsQyBhcyB0LEZyIGFzIG4sSnQgYXMgcixPbiBhcyBpLFFyIGFzIGEsUyBhcyBvLFNpIGFzIHMsVCBhcyBjLF9uIGFzIGwsYiBhcyB1LGMgYXMgZCxjbiBhcyBmLGYgYXMgcCxnIGFzIG0sZ2kgYXMgaCxobiBhcyBnLGlpIGFzIF8saW4gYXMgdixtbiBhcyB5LG4gYXMgYixuciBhcyB4LG9pIGFzIFMsb24gYXMgQyxzbiBhcyB3LHcgYXMgVH1mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO2ltcG9ydHtjIGFzIEUsZyBhcyBELGggYXMgTyx0IGFzIGt9ZnJvbSIuL2luZGV4LWR5d1M4T3BULmpzIjtpbXBvcnR7dCBhcyBBfWZyb20iLi9FcnJvclN0YXRlLXltNmVTbGoyLmpzIjtpbXBvcnR7XyBhcyBqLGwgYXMgTSxzIGFzIE4sdCBhcyBQLHYgYXMgRn1mcm9tIi4vYmFkZ2UtRFVpQlREeUEuanMiO2ltcG9ydHtvIGFzIEksdCBhcyBMfWZyb20iLi9EYXRhVGFibGUtQ1F4UlZEU1kuanMiO2ltcG9ydHt0IGFzIFJ9ZnJvbSIuL0NvbXBhY3ROdW1iZXItcHI4Y0o0Y3YuanMiO2ltcG9ydHtuIGFzIHosdCBhcyBCfWZyb20iLi91c2VTZWFyY2hRdWVyeS1iUVpQNFRzWi5qcyI7aW1wb3J0e3QgYXMgVn1mcm9tIi4vQ2xhbXBlZFJhbmdlTm90aWNlLUQyd2FsblhmLmpzIjtmdW5jdGlvbiBIKGUsdCxuKXtyZXR1cm57aWQ6ZSxoZWFkZXI6dCxhY2Nlc3NvckZuOm4sbWV0YTp7YWxpZ246YHJpZ2h0YH0sY2VsbDooe3JvdzplfSk9PmkoUix7dmFsdWU6bihlLm9yaWdpbmFsKX0pfX12YXIgVT1gbm90IG9ic2VydmVkIHlldCDigJQgbm8gdHJhZmZpYyBhbmQgcHJvYmVzIGRpc2FibGVkIG9yIG5vdCB5ZXQgcnVuYDtmdW5jdGlvbiBXKGUpe2xldCB0PU4oZS5sYXN0Q2hlY2spO3JldHVybiB0P2B1bmhlYWx0aHkgKCR7dH0pYDpgdW5oZWFsdGh5YH1mdW5jdGlvbiBHKGUpe2xldCB0PWUuY29uc2VjdXRpdmVGYWlsdXJlcz09PTE/YGZhaWx1cmVgOmBmYWlsdXJlc2Asbj1lLnNvdXJjZT9gIHZpYSAke2Uuc291cmNlfWA6YGAscj1gJHtlLmNvbnNlY3V0aXZlRmFpbHVyZXN9IGNvbnNlY3V0aXZlICR7dH0ke259YDtyZXR1cm4gZS5sYXN0RXJyb3I/YCR7cn06ICR7ZS5sYXN0RXJyb3J9YDpyfWZ1bmN0aW9uIEsoZSl7bGV0IHQ9TihlLmxhc3RDaGVjayk7cmV0dXJuIHQ/ZS5zb3VyY2U/YCR7dH0gdmlhICR7ZS5zb3VyY2V9YDp0OmUuc291cmNlP2B2aWEgJHtlLnNvdXJjZX1gOmBgfWZ1bmN0aW9uIHEoZSl7aWYoZS5jb25zZWN1dGl2ZUZhaWx1cmVzPD0wJiYhZS5sYXN0RXJyb3IpcmV0dXJuIFU7bGV0IHQ9ZS5jb25zZWN1dGl2ZUZhaWx1cmVzPT09MT9gZmFpbHVyZWA6YGZhaWx1cmVzYCxuPWUuc291cmNlP2AgdmlhICR7ZS5zb3VyY2V9YDpgYCxyPWAke2UuY29uc2VjdXRpdmVGYWlsdXJlc30gJHt0fSBzbyBmYXIke259YDtyZXR1cm4gZS5sYXN0RXJyb3I/YCR7cn06ICR7ZS5sYXN0RXJyb3J9YDpyfWZ1bmN0aW9uIEooZSl7aWYoZS5zdGF0ZT09PWB1bmhlYWx0aHlgKXJldHVybiBpKFAse2FzOmBzcGFuYCx2YXJpYW50OmBkZXN0cnVjdGl2ZWAsY2xhc3M6YGZvbnQtbm9ybWFsYCx0aXRsZTpHKGUpfSwoKT0+VyhlKSk7aWYoZS5zdGF0ZT09PWBoZWFsdGh5YCl7bGV0IHQ9ZS5sYXRlbmN5TXM9PT12b2lkIDA/YGA6YCDCtyAke00oZS5sYXRlbmN5TXMpfWA7cmV0dXJuIGkoYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTpLKGUpfSxgaGVhbHRoeSR7dH1gKX1yZXR1cm4gaShQLHthczpgc3BhbmAsdmFyaWFudDpgb3V0bGluZWAsY2xhc3M6YGZvbnQtbm9ybWFsYCx0aXRsZTpxKGUpfSwoKT0+YHVua25vd25gKX1mdW5jdGlvbiBZKGUpe3JldHVyblt7aWQ6YG5hbWVgLGhlYWRlcjpgTmFtZWAsYWNjZXNzb3JGbjplPT5lLm5hbWUsY2VsbDooe3Jvdzp0fSk9PmU/aShgYnV0dG9uYCx7dHlwZTpgYnV0dG9uYCxjbGFzczpgY3Vyc29yLXBvaW50ZXIgcm91bmRlZC1zbSBmb250LW1lZGl1bSBob3Zlcjp0ZXh0LXByaW1hcnkgaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwYCx0aXRsZTpgVmlldyAke3Qub3JpZ2luYWwubmFtZX0ncyBjYWxsZXJzYCxvbkNsaWNrOm49PntuLnN0b3BQcm9wYWdhdGlvbigpLGUodC5vcmlnaW5hbCl9fSx0Lm9yaWdpbmFsLm5hbWUpOmkoYHNwYW5gLHtjbGFzczpgZm9udC1tZWRpdW1gfSx0Lm9yaWdpbmFsLm5hbWUpfSx7aWQ6YHVybGAsaGVhZGVyOmBVUkxgLGFjY2Vzc29yRm46ZT0+ZS51cmwsY2VsbDooe3JvdzplfSk9PmkoYHNwYW5gLHtjbGFzczpgYmxvY2sgbWF4LXcteHMgdHJ1bmNhdGUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTplLm9yaWdpbmFsLnVybH0sZS5vcmlnaW5hbC51cmwpfSx7aWQ6YGhlYWx0aGAsaGVhZGVyOmBIZWFsdGhgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT5lLmhlYWx0aC5zdGF0ZSxjZWxsOih7cm93OmV9KT0+SihlLm9yaWdpbmFsLmhlYWx0aCl9LHtpZDpgYWNjZXNzYCxoZWFkZXI6YEFjY2Vzc2AsZW5hYmxlU29ydGluZzohMSxhY2Nlc3NvckZuOmU9PihlLmFjY2Vzcz8/W10pLmpvaW4oYCwgYCksY2VsbDooe3JvdzplfSk9PntsZXQgdD1lLm9yaWdpbmFsLmFjY2VzcztyZXR1cm4gdD09bnVsbD9pKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBBbGwgZ3JvdXBzYCk6dC5sZW5ndGg9PT0wP2koYHNwYW5gLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE5vIGdyb3Vwc2ApOmkoYGRpdmAse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBnYXAtMS41YH0sdC5tYXAoZT0+aShQLHtrZXk6ZSxhczpgc3BhbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpgZm9udC1tb25vIGZvbnQtbm9ybWFsYH0sKCk9PmUpKSl9fSxIKGByZXFNaW5gLGByZXEvbWluYCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyTWludXRlKSxIKGByZXFEYXlgLGByZXEvZGF5YCxlPT5lLmNvdW50ZXJzLnJlcXVlc3RzUGVyRGF5KSxIKGByZXFNb250aGAsYHJlcS9tb250aGAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1Blck1vbnRoKV19ZnVuY3Rpb24gWChlLHQpe3JldHVybmAke2V9LyR7dH1gfWZ1bmN0aW9uIFooZSl7bGV0IHQ9ZS5pbmRleE9mKGAvYCk7aWYodD09PS0xKXJldHVybiBudWxsO2xldCBuPWUuc2xpY2UoMCx0KSxyPWUuc2xpY2UodCsxKTtyZXR1cm4gcj09PWBgfHxuIT09YG1jcGAmJm4hPT1gYWdlbnRgP251bGw6e2tpbmQ6bixuYW1lOnJ9fWZ1bmN0aW9uIGVlKGUsdCl7bGV0IG49WihlKTtpZihuKXJldHVybntraW5kOmByZWZgLHJlZjpYKG4ua2luZCxuLm5hbWUpLG5hbWU6bi5uYW1lfTtpZih0PT09bnVsbClyZXR1cm57a2luZDpgcGVuZGluZ2B9O2xldCByPXQubWNwU2VydmVycy5zb21lKHQ9PnQubmFtZT09PWUpLGk9dC5hZ2VudHMuc29tZSh0PT50Lm5hbWU9PT1lKTtyZXR1cm4gciYmaT97a2luZDpgbm90aWNlYCxtZXNzYWdlOmAiJHtlfSIgbWF0Y2hlcyBib3RoIGFuIE1DUCBzZXJ2ZXIgYW5kIGFuIGFnZW50IOKAlCB1c2UgIm1jcC8ke2V9IiBvciAiYWdlbnQvJHtlfSIgdG8gcGljayBvbmUuYH06cj97a2luZDpgcmVmYCxyZWY6WChgbWNwYCxlKSxuYW1lOmV9Omk/e2tpbmQ6YHJlZmAscmVmOlgoYGFnZW50YCxlKSxuYW1lOmV9OntraW5kOmBub3RpY2VgLG1lc3NhZ2U6YE5vIE1DUCBzZXJ2ZXIgb3IgYWdlbnQgbmFtZWQgIiR7ZX0iIGlzIGNvbmZpZ3VyZWQuYH19ZnVuY3Rpb24gUShlKXtsZXQgdD1lLmluZGV4T2YoYC9gKTtpZih0PT09LTEpcmV0dXJue2tpbmQ6YGAsdGFyZ2V0OmBgLGNhbGxlcjplfTtsZXQgbj1lLnNsaWNlKDAsdCkscj1lLnNsaWNlKHQrMSksaT1yLmluZGV4T2YoYC9gKTtyZXR1cm4gaT09PS0xP3traW5kOm4sdGFyZ2V0OnIsY2FsbGVyOmBgfTp7a2luZDpuLHRhcmdldDpyLnNsaWNlKDAsaSksY2FsbGVyOnIuc2xpY2UoaSsxKX19ZnVuY3Rpb24gdGUoZSl7bGV0IHQ9W107cmV0dXJuIGUmJnQucHVzaCh7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+e2xldCB0PVEoZS5pZCk7cmV0dXJuYCR7dC5raW5kfS8ke3QudGFyZ2V0fWB9LGNlbGw6KHtyb3c6ZX0pPT57bGV0IHQ9UShlLm9yaWdpbmFsLmlkKTtyZXR1cm4gaShgc3BhbmAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgJHt0LmtpbmR9LyR7dC50YXJnZXR9YCl9fSksdC5wdXNoKHtpZDpgY2FsbGVyYCxoZWFkZXI6YENhbGxlcmAsYWNjZXNzb3JGbjplPT5RKGUuaWQpLmNhbGxlcnx8ZS5pZCxjZWxsOih7cm93OmV9KT0+e2xldCB0PVEoZS5vcmlnaW5hbC5pZCkuY2FsbGVyO3JldHVybiBpKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sdHx8ZS5vcmlnaW5hbC5pZCl9fSksdC5wdXNoKHtpZDpgcmVxdWVzdHNgLGhlYWRlcjpgUmVxdWVzdHNgLG1ldGE6e2FsaWduOmByaWdodGB9LGFjY2Vzc29yRm46ZT0+ZS52YWx1ZXMucmVxPz8wLGNlbGw6KHtyb3c6ZX0pPT5pKFIse3ZhbHVlOmUub3JpZ2luYWwudmFsdWVzLnJlcT8/MH0pfSksdH12YXIgJD1sKHtfX25hbWU6YFRhcmdldENhbGxlcnNgLHByb3BzOnt0YXJnZXQ6e30sdGl0bGU6e30sbGltaXQ6e2RlZmF1bHQ6MTB9fSxzZXR1cChyKXtsZXQgaT1yLGE9aygpLGw9UyhbXSksZj1TKCExKSxtPVMoITEpLF89UyhgYCksYj0wO2FzeW5jIGZ1bmN0aW9uIHcoKXtsZXQgZT0rK2I7Zi52YWx1ZT0hMCxsLnZhbHVlPVtdLG0udmFsdWU9ITEsXy52YWx1ZT1gYDt0cnl7bGV0e3dpbmRvdzp0LHNwYW46bn09ZChhLndpbmRvdyxhLnNwYW4pLHI9YXdhaXQgdShwKHtraW5kOmB0YXJnZXRjYWxsZXJgLHdpbmRvdzp0LHNwYW46bixtZXRyaWNzOltgcmVxYF0sbGltaXQ6aS5saW1pdCx0YXJnZXQ6aS50YXJnZXR9KSk7aWYoZSE9PWIpcmV0dXJuO2wudmFsdWU9ci5yb3dzLG0udmFsdWU9ITB9Y2F0Y2godCl7aWYoZSE9PWIpcmV0dXJuO18udmFsdWU9dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZTpTdHJpbmcodCl9ZmluYWxseXtlPT09YiYmKGYudmFsdWU9ITEpfX1lKFsoKT0+aS50YXJnZXQsKCk9PmEud2luZG93LCgpPT5hLnNwYW5dLCgpPT52b2lkIHcoKSx7aW1tZWRpYXRlOiEwfSk7bGV0IEQ9digoKT0+dGUoIWkudGFyZ2V0KSksTz12KCgpPT5qKHtsb2FkaW5nOmYudmFsdWUsaGFzRGF0YTptLnZhbHVlLGVycm9yOl8udmFsdWV9KSk7cmV0dXJuKGUsaSk9Pih4KCksQyhoKGMpLG51bGwse2RlZmF1bHQ6bigoKT0+W2coaCh0KSxudWxsLHtkZWZhdWx0Om4oKCk9PltnKGgobyksbnVsbCx7ZGVmYXVsdDpuKCgpPT5beShzKHIudGl0bGUpLDEpXSksXzoxfSksZyhoKEUpLG51bGwse2RlZmF1bHQ6bigoKT0+Wy4uLmlbMF18fD1beShgUmFua2VkIGJ5IHJlcXVlc3RzLCBtb3N0IHJlY2VudCBkYXkvbW9udGggd2luZG93IGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgcmFuZ2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSxnKGgoVCkse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0zYH0se2RlZmF1bHQ6bigoKT0+W2coVix7d2luZG93OmgoYSkud2luZG93LHNwYW46aChhKS5zcGFufSxudWxsLDgsW2B3aW5kb3dgLGBzcGFuYF0pLE8udmFsdWU9PT1gc2tlbGV0b25gPyh4KCksQyhJLHtrZXk6MCxyb3dzOjUsY29sczpELnZhbHVlLmxlbmd0aH0sbnVsbCw4LFtgY29sc2BdKSk6Ty52YWx1ZT09PWBlcnJvcmA/KHgoKSxDKEEse2tleToxLG1lc3NhZ2U6Xy52YWx1ZSwib24tcmV0cnkiOnd9LG51bGwsOCxbYG1lc3NhZ2VgXSkpOih4KCksQyhMLHtrZXk6Mixjb2x1bW5zOkQudmFsdWUsZGF0YTpsLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpgbm8gY2FsbGVycyByZWNvcmRlZCBpbiB0aGlzIHdpbmRvd2B9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYF0pKV0pLF86MX0pXSksXzoxfSkpfX0pLG5lPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LHJlPWwoe19fbmFtZTpgVGFyZ2V0c1ZpZXdgLGVtaXRzOltgc2VsZWN0YF0sc2V0dXAoZSx7ZW1pdDppfSl7bGV0IHM9bSgpLGw9digoKT0+cy50YXJnZXRzKSx1PWk7ZnVuY3Rpb24gZChlKXtyZXR1cm4gdD0+dShgc2VsZWN0YCxYKGUsdC5uYW1lKSx0Lm5hbWUpfWxldHtxdWVyeTpwLG5vcm1hbGl6ZWQ6XyxoYXNRdWVyeTpifT1CKCk7ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXy52YWx1ZSl9bGV0IHc9digoKT0+e2xldCBlPWwudmFsdWU/Lm1jcFNlcnZlcnM/P1tdO3JldHVybiBiLnZhbHVlP2UuZmlsdGVyKFMpOmV9KSxEPXYoKCk9PntsZXQgZT1sLnZhbHVlPy5hZ2VudHM/P1tdO3JldHVybiBiLnZhbHVlP2UuZmlsdGVyKFMpOmV9KTtmdW5jdGlvbiBPKGUsdCl7cmV0dXJuIGU/Yi52YWx1ZSYmdD09PTA/YG5vIHRhcmdldHMgbWF0Y2ggIiR7cC52YWx1ZX0iYDpgbm9uZWA6YG5vbmUgY29uZmlndXJlZGB9bGV0IGs9digoKT0+TyhsLnZhbHVlPy5tY3BTZXJ2ZXJzLmxlbmd0aD8/MCx3LnZhbHVlLmxlbmd0aCkpLE09digoKT0+TyhsLnZhbHVlPy5hZ2VudHMubGVuZ3RoPz8wLEQudmFsdWUubGVuZ3RoKSksTj12KCgpPT5qKHtsb2FkaW5nOiEwLGhhc0RhdGE6cy50YXJnZXRzIT09bnVsbCxlcnJvcjpzLmVycm9yfSkpLFA9digoKT0+Ti52YWx1ZT09PWByZWFkeWAmJihsLnZhbHVlPy5tY3BTZXJ2ZXJzLmxlbmd0aD8/MCk9PT0wJiYobC52YWx1ZT8uYWdlbnRzLmxlbmd0aD8/MCk9PT0wKSxSPVkoZChgbWNwYCkpLFY9WShkKGBhZ2VudGApKTtyZXR1cm4oZSxpKT0+KHgoKSxmKGBkaXZgLG5lLFtnKHose21vZGVsVmFsdWU6aChwKSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6aVswXXx8PWU9PmEocCk/cC52YWx1ZT1lOm51bGwscGxhY2Vob2xkZXI6YEZpbHRlciBNQ1Agc2VydmVycyBvciBhZ2VudHNgLGNsYXNzOmBtYXgtdy1zbWB9LG51bGwsOCxbYG1vZGVsVmFsdWVgXSksUC52YWx1ZT8oeCgpLEMoaChjKSx7a2V5OjB9LHtkZWZhdWx0Om4oKCk9PltnKGgoVCksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bZyhGLHt0aXRsZTpgTm8gTUNQIHNlcnZlcnMgb3IgYWdlbnRzIGNvbmZpZ3VyZWQuYCxkZXNjcmlwdGlvbjpgQWRkIGFuIG1jcFNlcnZlcnMgb3IgYWdlbnRzIGVudHJ5IHRvIHRoZSBtaWRkbGV3YXJlIGNvbmZpZyB0byBzZWUgdGhlbSBoZXJlLmB9KV0pLF86MX0pXSksXzoxfSkpOih4KCksZihyLHtrZXk6MX0sW2coaChjKSxudWxsLHtkZWZhdWx0Om4oKCk9PltnKGgodCksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bZyhoKG8pLG51bGwse2RlZmF1bHQ6bigoKT0+Wy4uLmlbMV18fD1beShgTUNQIHNlcnZlcnNgLC0xKV1dKSxfOjF9KSxnKGgoRSksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bLi4uaVsyXXx8PVt5KGAgQ29uZmlndXJlZCBNQ1AgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLiBDbGljayBhIG5hbWUgdG8gc2VlIGl0cyBjYWxsZXJzLiBgLC0xKV1dKSxfOjF9KV0pLF86MX0pLGcoaChUKSxudWxsLHtkZWZhdWx0Om4oKCk9PltOLnZhbHVlPT09YHNrZWxldG9uYD8oeCgpLEMoSSx7a2V5OjAscm93czozLGNvbHM6aChSKS5sZW5ndGh9LG51bGwsOCxbYGNvbHNgXSkpOk4udmFsdWU9PT1gZXJyb3JgPyh4KCksQyhBLHtrZXk6MSxtZXNzYWdlOmgocykuZXJyb3J9LG51bGwsOCxbYG1lc3NhZ2VgXSkpOih4KCksQyhMLHtrZXk6Mixjb2x1bW5zOmgoUiksZGF0YTp3LnZhbHVlLCJlbXB0eS1tZXNzYWdlIjprLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSkpXSksXzoxfSldKSxfOjF9KSxnKGgoYyksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bZyhoKHQpLG51bGwse2RlZmF1bHQ6bigoKT0+W2coaChvKSxudWxsLHtkZWZhdWx0Om4oKCk9PlsuLi5pWzNdfHw9W3koYEFnZW50c2AsLTEpXV0pLF86MX0pLGcoaChFKSxudWxsLHtkZWZhdWx0Om4oKCk9PlsuLi5pWzRdfHw9W3koYCBDb25maWd1cmVkIEEyQSBhZ2VudCBwcm94eSB0YXJnZXRzLCB0aGUgZ3JvdXBzIGFsbG93ZWQgdG8gcmVhY2ggdGhlbSwgYW5kIHRoZWlyIHJlcXVlc3QgY291bnRlcnMuIENsaWNrIGEgbmFtZSB0byBzZWUgaXRzIGNhbGxlcnMuIGAsLTEpXV0pLF86MX0pXSksXzoxfSksZyhoKFQpLG51bGwse2RlZmF1bHQ6bigoKT0+W04udmFsdWU9PT1gc2tlbGV0b25gPyh4KCksQyhJLHtrZXk6MCxyb3dzOjMsY29sczpoKFYpLmxlbmd0aH0sbnVsbCw4LFtgY29sc2BdKSk6Ti52YWx1ZT09PWBlcnJvcmA/KHgoKSxDKEEse2tleToxLG1lc3NhZ2U6aChzKS5lcnJvcn0sbnVsbCw4LFtgbWVzc2FnZWBdKSk6KHgoKSxDKEwse2tleToyLGNvbHVtbnM6aChWKSxkYXRhOkQudmFsdWUsImVtcHR5LW1lc3NhZ2UiOk0udmFsdWV9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYCxgZW1wdHktbWVzc2FnZWBdKSldKSxfOjF9KV0pLF86MX0pXSw2NCkpXSkpfX0pLGllPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNmB9LGFlPWwoe19fbmFtZTpgVGFyZ2V0c1BhZ2VgLHNldHVwKGUpe2xldCB0PWIoKSxyPW0oKSxpPXYoKCk9PnQucGFyYW1zLnRhcmdldD8/YGApLGE9digoKT0+aS52YWx1ZT09PWBgP251bGw6ZWUoaS52YWx1ZSxyLnRhcmdldHMpKSxvPV8oe30pLGM9digoKT0+e2xldCBlPWEudmFsdWU7cmV0dXJuIG9baS52YWx1ZV0/PyhlPy5raW5kPT09YHJlZmA/ZS5uYW1lOmkudmFsdWUpfSk7ZnVuY3Rpb24gbChlLG4pe29bZV09bix0LmdvVG8oYHRhcmdldHNgLHsuLi50LnBhcmFtcyx0YXJnZXQ6ZX0pfXJldHVybihlLHQpPT4oeCgpLGYoYGRpdmAsaWUsW2cocmUse29uU2VsZWN0Omx9KSxhLnZhbHVlPy5raW5kPT09YHJlZmA/KHgoKSxDKCQse2tleTowLHRhcmdldDphLnZhbHVlLnJlZix0aXRsZTpgQ2FsbGVycyBvZiAke2MudmFsdWV9YH0sbnVsbCw4LFtgdGFyZ2V0YCxgdGl0bGVgXSkpOmEudmFsdWU/LmtpbmQ9PT1gbm90aWNlYD8oeCgpLEMoaChEKSx7a2V5OjEsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgfSx7ZGVmYXVsdDpuKCgpPT5bZyhoKE8pLG51bGwse2RlZmF1bHQ6bigoKT0+W3kocyhhLnZhbHVlLm1lc3NhZ2UpLDEpXSksXzoxfSldKSxfOjF9KSk6dyhgYCwhMCksZygkLHt0aXRsZTpgVG9wIGNhbGxlcnMsIGFjcm9zcyBldmVyeSB0YXJnZXRgfSldKSl9fSk7ZXhwb3J0e2FlIGFzIGRlZmF1bHR9Ow==", + "aW1wb3J0e0xyIGFzIGUsTyBhcyB0LF9uIGFzIG4sY24gYXMgcixnbiBhcyBpLGlyIGFzIGEsbiBhcyBvLHNuIGFzIHMsdmkgYXMgYyx3aSBhcyBsLHluIGFzIHV9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7XyBhcyBkLGcgYXMgZixoIGFzIHB9ZnJvbSIuL2luZGV4LTg4Q1RSTkhQLmpzIjt2YXIgbT17Y2xhc3M6YGZvbnQtbW9ubyB0ZXh0LXhzYH0saD11KHtfX25hbWU6YFN0YXREaXNhYmxlZEFsZXJ0YCxwcm9wczp7dGl0bGU6e30sY29uZmlnS2V5Ont9LHB1cnBvc2U6e319LHNldHVwKHUpe2xldCBoPXUsZz1vKCk7cmV0dXJuKG8sdSk9PihhKCkscihjKGQpLHt2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6ZSgoKT0+W24oYyhwKSxudWxsLHtkZWZhdWx0OmUoKCk9PltpKGwoaC50aXRsZSksMSldKSxfOjF9KSxuKGMoZikse2NsYXNzOmBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTJgfSx7ZGVmYXVsdDplKCgpPT5bcyhgc3BhbmAsbnVsbCxbdVsxXXx8PWkoYEVuYWJsZSBgLC0xKSxzKGBjb2RlYCxtLGwoaC5jb25maWdLZXkpLDEpLGkoYCBpbiB0aGUgbWlkZGxld2FyZSBjb25maWcgYCtsKGgucHVycG9zZSksMSldKSxuKGModCkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6dVswXXx8PWU9PmMoZykuZ29UbyhgY29uZmlnYCl9LHtkZWZhdWx0OmUoKCk9PlsuLi51WzJdfHw9W2koYE9wZW4gQ29uZmlnYCwtMSldXSksXzoxfSldKSxfOjF9KV0pLF86MX0pKX19KTtleHBvcnR7aCBhcyB0fTs=", ), }, - "TimeSeriesChart-BFcT6woA.js": { + "TargetsPage-BL0aofsX.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0FyIGFzIGUsS24gYXMgdCxPbiBhcyBuLFNpIGFzIHIsU3IgYXMgaSxVbiBhcyBhLFhuIGFzIG8sWXIgYXMgcyxfbiBhcyBjLGFuIGFzIGwsY24gYXMgdSxkaSBhcyBkLGVyIGFzIGYsZ2kgYXMgcCxobiBhcyBtLGluIGFzIGgsbGkgYXMgZyxuciBhcyBfLG9pIGFzIHYsdCBhcyB5fWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e2MgYXMgYn1mcm9tIi4vYmFkZ2UtRFVpQlREeUEuanMiO3ZhciB4PXtjbGFzczpgaC03MiB3LWZ1bGxgfSxTPWMoe19fbmFtZTpgU2tlbGV0b25DaGFydGAsc2V0dXAoZSl7cmV0dXJuKGUsdCk9PihfKCksdShgZGl2YCx4LFttKHAoeSkse2NsYXNzOmBoLWZ1bGwgdy1mdWxsYH0pXSkpfX0pO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIGUrLjV8MH12YXIgdz0oZSx0LG4pPT5NYXRoLm1heChNYXRoLm1pbihlLG4pLHQpO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIHcoQyhlKjIuNTUpLDAsMjU1KX1mdW5jdGlvbiBFKGUpe3JldHVybiB3KEMoZSoyNTUpLDAsMjU1KX1mdW5jdGlvbiBEKGUpe3JldHVybiB3KEMoZS8yLjU1KS8xMDAsMCwxKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4gdyhDKGUqMTAwKSwwLDEwMCl9dmFyIE89ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxBOjEwLEI6MTEsQzoxMixEOjEzLEU6MTQsRjoxNSxhOjEwLGI6MTEsYzoxMixkOjEzLGU6MTQsZjoxNX0sdGU9Wy4uLmAwMTIzNDU2Nzg5QUJDREVGYF0sbmU9ZT0+dGVbZSYxNV0scmU9ZT0+dGVbKGUmMjQwKT4+NF0rdGVbZSYxNV0saWU9ZT0+KGUmMjQwKT4+ND09KGUmMTUpLGFlPWU9PmllKGUucikmJmllKGUuZykmJmllKGUuYikmJmllKGUuYSk7ZnVuY3Rpb24gb2UoZSl7dmFyIHQ9ZS5sZW5ndGgsbjtyZXR1cm4gZVswXT09PWAjYCYmKHQ9PT00fHx0PT09NT9uPXtyOjI1NSZPW2VbMV1dKjE3LGc6MjU1Jk9bZVsyXV0qMTcsYjoyNTUmT1tlWzNdXSoxNyxhOnQ9PT01P09bZVs0XV0qMTc6MjU1fToodD09PTd8fHQ9PT05KSYmKG49e3I6T1tlWzFdXTw8NHxPW2VbMl1dLGc6T1tlWzNdXTw8NHxPW2VbNF1dLGI6T1tlWzVdXTw8NHxPW2VbNl1dLGE6dD09PTk/T1tlWzddXTw8NHxPW2VbOF1dOjI1NX0pKSxufXZhciBzZT0oZSx0KT0+ZTwyNTU/dChlKTpgYDtmdW5jdGlvbiBjZShlKXt2YXIgdD1hZShlKT9uZTpyZTtyZXR1cm4gZT9gI2ArdChlLnIpK3QoZS5nKSt0KGUuYikrc2UoZS5hLHQpOnZvaWQgMH12YXIgbGU9L14oaHNsYT98aHdifGhzdilcKFxzKihbLSsuZVxkXSspKD86ZGVnKT9bXHMsXSsoWy0rLmVcZF0rKSVbXHMsXSsoWy0rLmVcZF0rKSUoPzpbXHMsXSsoWy0rLmVcZF0rKSglKT8pP1xzKlwpJC87ZnVuY3Rpb24gdWUoZSx0LG4pe2xldCByPXQqTWF0aC5taW4obiwxLW4pLGk9KHQsaT0odCtlLzMwKSUxMik9Pm4tcipNYXRoLm1heChNYXRoLm1pbihpLTMsOS1pLDEpLC0xKTtyZXR1cm5baSgwKSxpKDgpLGkoNCldfWZ1bmN0aW9uIGRlKGUsdCxuKXtsZXQgcj0ocixpPShyK2UvNjApJTYpPT5uLW4qdCpNYXRoLm1heChNYXRoLm1pbihpLDQtaSwxKSwwKTtyZXR1cm5bcig1KSxyKDMpLHIoMSldfWZ1bmN0aW9uIGZlKGUsdCxuKXtsZXQgcj11ZShlLDEsLjUpLGk7Zm9yKHQrbj4xJiYoaT0xLyh0K24pLHQqPWksbio9aSksaT0wO2k8MztpKyspcltpXSo9MS10LW4scltpXSs9dDtyZXR1cm4gcn1mdW5jdGlvbiBwZShlLHQsbixyLGkpe3JldHVybiBlPT09aT8odC1uKS9yKyh0PG4/NjowKTp0PT09aT8obi1lKS9yKzI6KGUtdCkvcis0fWZ1bmN0aW9uIG1lKGUpe2xldCB0PWUuci8yNTUsbj1lLmcvMjU1LHI9ZS5iLzI1NSxpPU1hdGgubWF4KHQsbixyKSxhPU1hdGgubWluKHQsbixyKSxvPShpK2EpLzIscyxjLGw7cmV0dXJuIGkhPT1hJiYobD1pLWEsYz1vPi41P2wvKDItaS1hKTpsLyhpK2EpLHM9cGUodCxuLHIsbCxpKSxzPXMqNjArLjUpLFtzfDAsY3x8MCxvXX1mdW5jdGlvbiBoZShlLHQsbixyKXtyZXR1cm4oQXJyYXkuaXNBcnJheSh0KT9lKHRbMF0sdFsxXSx0WzJdKTplKHQsbixyKSkubWFwKEUpfWZ1bmN0aW9uIGdlKGUsdCxuKXtyZXR1cm4gaGUodWUsZSx0LG4pfWZ1bmN0aW9uIF9lKGUsdCxuKXtyZXR1cm4gaGUoZmUsZSx0LG4pfWZ1bmN0aW9uIHZlKGUsdCxuKXtyZXR1cm4gaGUoZGUsZSx0LG4pfWZ1bmN0aW9uIHllKGUpe3JldHVybihlJTM2MCszNjApJTM2MH1mdW5jdGlvbiBiZShlKXtsZXQgdD1sZS5leGVjKGUpLG49MjU1LHI7aWYoIXQpcmV0dXJuO3RbNV0hPT1yJiYobj10WzZdP1QoK3RbNV0pOkUoK3RbNV0pKTtsZXQgaT15ZSgrdFsyXSksYT10WzNdLzEwMCxvPXRbNF0vMTAwO3JldHVybiByPXRbMV09PT1gaHdiYD9fZShpLGEsbyk6dFsxXT09PWBoc3ZgP3ZlKGksYSxvKTpnZShpLGEsbykse3I6clswXSxnOnJbMV0sYjpyWzJdLGE6bn19ZnVuY3Rpb24geGUoZSx0KXt2YXIgbj1tZShlKTtuWzBdPXllKG5bMF0rdCksbj1nZShuKSxlLnI9blswXSxlLmc9blsxXSxlLmI9blsyXX1mdW5jdGlvbiBTZShlKXtpZighZSlyZXR1cm47bGV0IHQ9bWUoZSksbj10WzBdLHI9ZWUodFsxXSksaT1lZSh0WzJdKTtyZXR1cm4gZS5hPDI1NT9gaHNsYSgke259LCAke3J9JSwgJHtpfSUsICR7RChlLmEpfSlgOmBoc2woJHtufSwgJHtyfSUsICR7aX0lKWB9dmFyIENlPXt4OmBkYXJrYCxaOmBsaWdodGAsWTpgcmVgLFg6YGJsdWAsVzpgZ3JgLFY6YG1lZGl1bWAsVTpgc2xhdGVgLEE6YGVlYCxUOmBvbGAsUzpgb3JgLEI6YHJhYCxDOmBsYXRlZ2AsRDpgaWdodHNgLFI6YGluYCxROmB0dXJxdW9pc2AsRTpgaGlgLFA6YHJvYCxPOmBhbGAsTjpgbGVgLE06YGRlYCxMOmB5ZWxsb2AsRjpgZW5gLEs6YGNoYCxHOmBhcmtzYCxIOmBlYWAsSTpgaWdodGdgLEo6YHdoYH0sd2U9e09pY2VYZTpgZjBmOGZmYCxhbnRpcXVld0V0ZTpgZmFlYmQ3YCxhcXVhOmBmZmZmYCxhcXVhbWFyUmU6YDdmZmZkNGAsYXp1WTpgZjBmZmZmYCxiZWlnZTpgZjVmNWRjYCxiaXNxdWU6YGZmZTRjNGAsYmxhY2s6YDBgLGJsYW5LZWRPbW9uZDpgZmZlYmNkYCxYZTpgZmZgLFhldmlUZXQ6YDhhMmJlMmAsYlB3bjpgYTUyYTJhYCxidXJseXdvb2Q6YGRlYjg4N2AsY2FNdFhlOmA1ZjllYTBgLEthcnRZdXNlOmA3ZmZmMDBgLEtvY1RhdGU6YGQyNjkxZWAsY1NPOmBmZjdmNTBgLGNTbmZsb3dlclhlOmA2NDk1ZWRgLGNTbnNpbGs6YGZmZjhkY2AsY3JpbXNvbjpgZGMxNDNjYCxjeWFuOmBmZmZmYCx4WGU6YDhiYCx4Y3lhbjpgOGI4YmAseGdUTW5QZDpgYjg4NjBiYCx4V2F5OmBhOWE5YTlgLHhnWUY6YDY0MDBgLHhnWXk6YGE5YTlhOWAseGtoYWtpOmBiZGI3NmJgLHhtYWdGdGE6YDhiMDA4YmAseFRpdmVnWUY6YDU1NmIyZmAseFNhbmdlOmBmZjhjMDBgLHhTY0VkOmA5OTMyY2NgLHhZZDpgOGIwMDAwYCx4c09tb246YGU5OTY3YWAseHNIZ1lGOmA4ZmJjOGZgLHhVWGU6YDQ4M2Q4YmAseFVXYXk6YDJmNGY0ZmAseFVnWXk6YDJmNGY0ZmAseFFlOmBjZWQxYCx4dmlUZXQ6YDk0MDBkM2AsZEFwcFJrOmBmZjE0OTNgLGRBcHNreVhlOmBiZmZmYCxkaW1XYXk6YDY5Njk2OWAsZGltZ1l5OmA2OTY5NjlgLGRvZGdlclhlOmAxZTkwZmZgLGZpWWJyaWNrOmBiMjIyMjJgLGZsU093RXRlOmBmZmZhZjBgLGZvWXN0V0FuOmAyMjhiMjJgLGZ1S3NpYTpgZmYwMGZmYCxnYVJzYlNvOmBkY2RjZGNgLGdob3N0d0V0ZTpgZjhmOGZmYCxnVGQ6YGZmZDcwMGAsZ1RNblBkOmBkYWE1MjBgLFdheTpgODA4MDgwYCxnWUY6YDgwMDBgLGdZRkx3OmBhZGZmMmZgLGdZeTpgODA4MDgwYCxob25leU13OmBmMGZmZjBgLGhvdHBSazpgZmY2OWI0YCxSZGlhbllkOmBjZDVjNWNgLFJkaWdvOmA0YjAwODJgLGl2U3k6YGZmZmZmMGAsa2hha2k6YGYwZTY4Y2AsbGF2Rk1yOmBlNmU2ZmFgLGxhdkZNclhzaDpgZmZmMGY1YCxsYXduZ1lGOmA3Y2ZjMDBgLE5tb25jRWZmb246YGZmZmFjZGAsWlhlOmBhZGQ4ZTZgLFpjU086YGYwODA4MGAsWmN5YW46YGUwZmZmZmAsWmdUTW5QZEx3OmBmYWZhZDJgLFpXYXk6YGQzZDNkM2AsWmdZRjpgOTBlZTkwYCxaZ1l5OmBkM2QzZDNgLFpwUms6YGZmYjZjMWAsWnNPbW9uOmBmZmEwN2FgLFpzSGdZRjpgMjBiMmFhYCxac2t5WGU6YDg3Y2VmYWAsWlVXYXk6YDc3ODg5OWAsWlVnWXk6YDc3ODg5OWAsWnN0QWxYZTpgYjBjNGRlYCxaTHc6YGZmZmZlMGAsbGltZTpgZmYwMGAsbGltZWdZRjpgMzJjZDMyYCxsUkY6YGZhZjBlNmAsbWFnRnRhOmBmZjAwZmZgLG1hUG9uOmA4MDAwMDBgLFZhcXVhbWFyUmU6YDY2Y2RhYWAsVlhlOmBjZGAsVlNjRWQ6YGJhNTVkM2AsVnB1cnBOOmA5MzcwZGJgLFZzSGdZRjpgM2NiMzcxYCxWVVhlOmA3YjY4ZWVgLFZzcHJSZ2dZRjpgZmE5YWAsVlFlOmA0OGQxY2NgLFZ2aVRldFlkOmBjNzE1ODVgLG1pZG5pZ2h0WGU6YDE5MTk3MGAsbVJ0Y1lhbTpgZjVmZmZhYCxtaXN0eVBzZTpgZmZlNGUxYCxtb2NjYXNSOmBmZmU0YjVgLG5hdmFqb3dFdGU6YGZmZGVhZGAsbmF2eTpgODBgLFRkbGFjZTpgZmRmNWU2YCxUaXZlOmA4MDgwMDBgLFRpdmVkQmI6YDZiOGUyM2AsU2FuZ2U6YGZmYTUwMGAsU2FuZ2VZZDpgZmY0NTAwYCxTY0VkOmBkYTcwZDZgLHBPZWdUTW5QZDpgZWVlOGFhYCxwT2VnWUY6YDk4ZmI5OGAscE9lUWU6YGFmZWVlZWAscE9ldmlUZXRZZDpgZGI3MDkzYCxwYXBheWF3RXA6YGZmZWZkNWAscEhLcHVmZjpgZmZkYWI5YCxwZXJ1OmBjZDg1M2ZgLHBSazpgZmZjMGNiYCxwbHVtOmBkZGEwZGRgLHBvd01yWGU6YGIwZTBlNmAscHVycE46YDgwMDA4MGAsWWJlY2NhcHVycE46YDY2MzM5OWAsWWQ6YGZmMDAwMGAsUHN5YnJvd246YGJjOGY4ZmAsUHlPWGU6YDQxNjllMWAsc2FkZE5iUHduOmA4YjQ1MTNgLHNPbW9uOmBmYTgwNzJgLHNhbmR5YlB3bjpgZjRhNDYwYCxzSGdZRjpgMmU4YjU3YCxzSHNoZWxsOmBmZmY1ZWVgLHNpRm5hOmBhMDUyMmRgLHNpbHZlcjpgYzBjMGMwYCxza3lYZTpgODdjZWViYCxVWGU6YDZhNWFjZGAsVVdheTpgNzA4MDkwYCxVZ1l5OmA3MDgwOTBgLHNub3c6YGZmZmFmYWAsc3ByUmdnWUY6YGZmN2ZgLHN0QWxYZTpgNDY4MmI0YCx0YW46YGQyYjQ4Y2AsdGVPOmA4MDgwYCx0RXN0TjpgZDhiZmQ4YCx0b21hdG86YGZmNjM0N2AsUWU6YDQwZTBkMGAsdmlUZXQ6YGVlODJlZWAsSkh0OmBmNWRlYjNgLHdFdGU6YGZmZmZmZmAsd0V0ZXNtb2tlOmBmNWY1ZjVgLEx3OmBmZmZmMDBgLEx3Z1lGOmA5YWNkMzJgfTtmdW5jdGlvbiBUZSgpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMod2UpLG49T2JqZWN0LmtleXMoQ2UpLHIsaSxhLG8scztmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtmb3Iobz1zPXRbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWE9bltpXSxzPXMucmVwbGFjZShhLENlW2FdKTthPXBhcnNlSW50KHdlW29dLDE2KSxlW3NdPVthPj4xNiYyNTUsYT4+OCYyNTUsYSYyNTVdfXJldHVybiBlfXZhciBFZTtmdW5jdGlvbiBEZShlKXtFZXx8KEVlPVRlKCksRWUudHJhbnNwYXJlbnQ9WzAsMCwwLDBdKTtsZXQgdD1FZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB0JiZ7cjp0WzBdLGc6dFsxXSxiOnRbMl0sYTp0Lmxlbmd0aD09PTQ/dFszXToyNTV9fXZhciBPZT0vXnJnYmE/XChccyooWy0rLlxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpP1tccyxdKyhbLSsuZVxkXSspKCUpPyg/OltccywvXSsoWy0rLmVcZF0rKSglKT8pP1xzKlwpJC87ZnVuY3Rpb24ga2UoZSl7bGV0IHQ9T2UuZXhlYyhlKSxuPTI1NSxyLGksYTtpZih0KXtpZih0WzddIT09cil7bGV0IGU9K3RbN107bj10WzhdP1QoZSk6dyhlKjI1NSwwLDI1NSl9cmV0dXJuIHI9K3RbMV0saT0rdFszXSxhPSt0WzVdLHI9MjU1Jih0WzJdP1Qocik6dyhyLDAsMjU1KSksaT0yNTUmKHRbNF0/VChpKTp3KGksMCwyNTUpKSxhPTI1NSYodFs2XT9UKGEpOncoYSwwLDI1NSkpLHtyLGc6aSxiOmEsYTpufX19ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIGUmJihlLmE8MjU1P2ByZ2JhKCR7ZS5yfSwgJHtlLmd9LCAke2UuYn0sICR7RChlLmEpfSlgOmByZ2IoJHtlLnJ9LCAke2UuZ30sICR7ZS5ifSlgKX12YXIgamU9ZT0+ZTw9LjAwMzEzMDg/ZSoxMi45MjplKiooMS8yLjQpKjEuMDU1LS4wNTUsTWU9ZT0+ZTw9LjA0MDQ1P2UvMTIuOTI6KChlKy4wNTUpLzEuMDU1KSoqMi40O2Z1bmN0aW9uIE5lKGUsdCxuKXtsZXQgcj1NZShEKGUucikpLGk9TWUoRChlLmcpKSxhPU1lKEQoZS5iKSk7cmV0dXJue3I6RShqZShyK24qKE1lKEQodC5yKSktcikpKSxnOkUoamUoaStuKihNZShEKHQuZykpLWkpKSksYjpFKGplKGErbiooTWUoRCh0LmIpKS1hKSkpLGE6ZS5hK24qKHQuYS1lLmEpfX1mdW5jdGlvbiBQZShlLHQsbil7aWYoZSl7bGV0IHI9bWUoZSk7clt0XT1NYXRoLm1heCgwLE1hdGgubWluKHJbdF0rclt0XSpuLHQ9PT0wPzM2MDoxKSkscj1nZShyKSxlLnI9clswXSxlLmc9clsxXSxlLmI9clsyXX19ZnVuY3Rpb24gRmUoZSx0KXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbih0fHx7fSxlKX1mdW5jdGlvbiBJZShlKXt2YXIgdD17cjowLGc6MCxiOjAsYToyNTV9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoPj0zJiYodD17cjplWzBdLGc6ZVsxXSxiOmVbMl0sYToyNTV9LGUubGVuZ3RoPjMmJih0LmE9RShlWzNdKSkpOih0PUZlKGUse3I6MCxnOjAsYjowLGE6MX0pLHQuYT1FKHQuYSkpLHR9ZnVuY3Rpb24gTGUoZSl7cmV0dXJuIGUuY2hhckF0KDApPT09YHJgP2tlKGUpOmJlKGUpfXZhciBSZT1jbGFzcyBle2NvbnN0cnVjdG9yKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O2xldCBuPXR5cGVvZiB0LHI7bj09PWBvYmplY3RgP3I9SWUodCk6bj09PWBzdHJpbmdgJiYocj1vZSh0KXx8RGUodCl8fExlKHQpKSx0aGlzLl9yZ2I9cix0aGlzLl92YWxpZD0hIXJ9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuX3ZhbGlkfWdldCByZ2IoKXt2YXIgZT1GZSh0aGlzLl9yZ2IpO3JldHVybiBlJiYoZS5hPUQoZS5hKSksZX1zZXQgcmdiKGUpe3RoaXMuX3JnYj1JZShlKX1yZ2JTdHJpbmcoKXtyZXR1cm4gdGhpcy5fdmFsaWQ/QWUodGhpcy5fcmdiKTp2b2lkIDB9aGV4U3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbGlkP2NlKHRoaXMuX3JnYik6dm9pZCAwfWhzbFN0cmluZygpe3JldHVybiB0aGlzLl92YWxpZD9TZSh0aGlzLl9yZ2IpOnZvaWQgMH1taXgoZSx0KXtpZihlKXtsZXQgbj10aGlzLnJnYixyPWUucmdiLGksYT10PT09aT8uNTp0LG89MiphLTEscz1uLmEtci5hLGM9KChvKnM9PT0tMT9vOihvK3MpLygxK28qcykpKzEpLzI7aT0xLWMsbi5yPTI1NSZjKm4ucitpKnIucisuNSxuLmc9MjU1JmMqbi5nK2kqci5nKy41LG4uYj0yNTUmYypuLmIraSpyLmIrLjUsbi5hPWEqbi5hKygxLWEpKnIuYSx0aGlzLnJnYj1ufXJldHVybiB0aGlzfWludGVycG9sYXRlKGUsdCl7cmV0dXJuIGUmJih0aGlzLl9yZ2I9TmUodGhpcy5fcmdiLGUuX3JnYix0KSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgZSh0aGlzLnJnYil9YWxwaGEoZSl7cmV0dXJuIHRoaXMuX3JnYi5hPUUoZSksdGhpc31jbGVhcmVyKGUpe2xldCB0PXRoaXMuX3JnYjtyZXR1cm4gdC5hKj0xLWUsdGhpc31ncmV5c2NhbGUoKXtsZXQgZT10aGlzLl9yZ2I7cmV0dXJuIGUucj1lLmc9ZS5iPUMoZS5yKi4zK2UuZyouNTkrZS5iKi4xMSksdGhpc31vcGFxdWVyKGUpe2xldCB0PXRoaXMuX3JnYjtyZXR1cm4gdC5hKj0xK2UsdGhpc31uZWdhdGUoKXtsZXQgZT10aGlzLl9yZ2I7cmV0dXJuIGUucj0yNTUtZS5yLGUuZz0yNTUtZS5nLGUuYj0yNTUtZS5iLHRoaXN9bGlnaHRlbihlKXtyZXR1cm4gUGUodGhpcy5fcmdiLDIsZSksdGhpc31kYXJrZW4oZSl7cmV0dXJuIFBlKHRoaXMuX3JnYiwyLC1lKSx0aGlzfXNhdHVyYXRlKGUpe3JldHVybiBQZSh0aGlzLl9yZ2IsMSxlKSx0aGlzfWRlc2F0dXJhdGUoZSl7cmV0dXJuIFBlKHRoaXMuX3JnYiwxLC1lKSx0aGlzfXJvdGF0ZShlKXtyZXR1cm4geGUodGhpcy5fcmdiLGUpLHRoaXN9fTtmdW5jdGlvbiBrKCl7fXZhciB6ZT0oKCk9PntsZXQgZT0wO3JldHVybigpPT5lKyt9KSgpO2Z1bmN0aW9uIEEoZSl7cmV0dXJuIGU9PW51bGx9ZnVuY3Rpb24gaihlKXtpZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2xldCB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gdC5zbGljZSgwLDcpPT09YFtvYmplY3RgJiZ0LnNsaWNlKC02KT09PWBBcnJheV1gfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGUhPT1udWxsJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1gW29iamVjdCBPYmplY3RdYH1mdW5jdGlvbiBOKGUpe3JldHVybih0eXBlb2YgZT09YG51bWJlcmB8fGUgaW5zdGFuY2VvZiBOdW1iZXIpJiZpc0Zpbml0ZSgrZSl9ZnVuY3Rpb24gUChlLHQpe3JldHVybiBOKGUpP2U6dH1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIGU9PT12b2lkIDA/dDplfXZhciBCZT0oZSx0KT0+dHlwZW9mIGU9PWBzdHJpbmdgJiZlLmVuZHNXaXRoKGAlYCk/cGFyc2VGbG9hdChlKS8xMDAqdDorZTtmdW5jdGlvbiBJKGUsdCxuKXtpZihlJiZ0eXBlb2YgZS5jYWxsPT1gZnVuY3Rpb25gKXJldHVybiBlLmFwcGx5KG4sdCl9ZnVuY3Rpb24gTChlLHQsbixyKXtsZXQgaSxhLG87aWYoaihlKSl7aWYoYT1lLmxlbmd0aCxyKWZvcihpPWEtMTtpPj0wO2ktLSl0LmNhbGwobixlW2ldLGkpO2Vsc2UgZm9yKGk9MDtpPGE7aSsrKXQuY2FsbChuLGVbaV0saSl9ZWxzZSBpZihNKGUpKWZvcihvPU9iamVjdC5rZXlzKGUpLGE9by5sZW5ndGgsaT0wO2k8YTtpKyspdC5jYWxsKG4sZVtvW2ldXSxvW2ldKX1mdW5jdGlvbiBWZShlLHQpe2xldCBuLHIsaSxhO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilpZihpPWVbbl0sYT10W25dLGkuZGF0YXNldEluZGV4IT09YS5kYXRhc2V0SW5kZXh8fGkuaW5kZXghPT1hLmluZGV4KXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEhlKGUpe2lmKGooZSkpcmV0dXJuIGUubWFwKEhlKTtpZihNKGUpKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLG49T2JqZWN0LmtleXMoZSkscj1uLmxlbmd0aCxpPTA7Zm9yKDtpPHI7KytpKXRbbltpXV09SGUoZVtuW2ldXSk7cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gVWUoZSl7cmV0dXJuW2BfX3Byb3RvX19gLGBwcm90b3R5cGVgLGBjb25zdHJ1Y3RvcmBdLmluZGV4T2YoZSk9PT0tMX1mdW5jdGlvbiBXZShlLHQsbixyKXtpZighVWUoZSkpcmV0dXJuO2xldCBpPXRbZV0sYT1uW2VdO00oaSkmJk0oYSk/R2UoaSxhLHIpOnRbZV09SGUoYSl9ZnVuY3Rpb24gR2UoZSx0LG4pe2xldCByPWoodCk/dDpbdF0saT1yLmxlbmd0aDtpZighTShlKSlyZXR1cm4gZTtufHw9e307bGV0IGE9bi5tZXJnZXJ8fFdlLG87Zm9yKGxldCB0PTA7dDxpOysrdCl7aWYobz1yW3RdLCFNKG8pKWNvbnRpbnVlO2xldCBpPU9iamVjdC5rZXlzKG8pO2ZvcihsZXQgdD0wLHI9aS5sZW5ndGg7dDxyOysrdClhKGlbdF0sZSxvLG4pfXJldHVybiBlfWZ1bmN0aW9uIEtlKGUsdCl7cmV0dXJuIEdlKGUsdCx7bWVyZ2VyOnFlfSl9ZnVuY3Rpb24gcWUoZSx0LG4pe2lmKCFVZShlKSlyZXR1cm47bGV0IHI9dFtlXSxpPW5bZV07TShyKSYmTShpKT9LZShyLGkpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfHwodFtlXT1IZShpKSl9dmFyIEplPXsiIjplPT5lLHg6ZT0+ZS54LHk6ZT0+ZS55fTtmdW5jdGlvbiBZZShlKXtsZXQgdD1lLnNwbGl0KGAuYCksbj1bXSxyPWBgO2ZvcihsZXQgZSBvZiB0KXIrPWUsci5lbmRzV2l0aChgXFxgKT9yPXIuc2xpY2UoMCwtMSkrYC5gOihuLnB1c2gocikscj1gYCk7cmV0dXJuIG59ZnVuY3Rpb24gWGUoZSl7bGV0IHQ9WWUoZSk7cmV0dXJuIGU9Pntmb3IobGV0IG4gb2YgdCl7aWYobj09PWBgKWJyZWFrO2UmJj1lW25dfXJldHVybiBlfX1mdW5jdGlvbiBaZShlLHQpe3JldHVybihKZVt0XXx8KEplW3RdPVhlKHQpKSkoZSl9ZnVuY3Rpb24gUWUoZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX12YXIgJGU9ZT0+ZSE9PXZvaWQgMCxldD1lPT50eXBlb2YgZT09YGZ1bmN0aW9uYCx0dD0oZSx0KT0+e2lmKGUuc2l6ZSE9PXQuc2l6ZSlyZXR1cm4hMTtmb3IobGV0IG4gb2YgZSlpZighdC5oYXMobikpcmV0dXJuITE7cmV0dXJuITB9O2Z1bmN0aW9uIG50KGUpe3JldHVybiBlLnR5cGU9PT1gbW91c2V1cGB8fGUudHlwZT09PWBjbGlja2B8fGUudHlwZT09PWBjb250ZXh0bWVudWB9dmFyIFI9TWF0aC5QSSx6PTIqUixydD16K1IsaXQ9MS8wLGF0PVIvMTgwLEI9Ui8yLG90PVIvNCxzdD1SKjIvMyxjdD1NYXRoLmxvZzEwLGx0PU1hdGguc2lnbjtmdW5jdGlvbiB1dChlLHQsbil7cmV0dXJuIE1hdGguYWJzKGUtdCk8bn1mdW5jdGlvbiBkdChlKXtsZXQgdD1NYXRoLnJvdW5kKGUpO2U9dXQoZSx0LGUvMWUzKT90OmU7bGV0IG49MTAqKk1hdGguZmxvb3IoY3QoZSkpLHI9ZS9uO3JldHVybihyPD0xPzE6cjw9Mj8yOnI8PTU/NToxMCkqbn1mdW5jdGlvbiBmdChlKXtsZXQgdD1bXSxuPU1hdGguc3FydChlKSxyO2ZvcihyPTE7cjxuO3IrKyllJXI9PT0wJiYodC5wdXNoKHIpLHQucHVzaChlL3IpKTtyZXR1cm4gbj09PShufDApJiZ0LnB1c2gobiksdC5zb3J0KChlLHQpPT5lLXQpLnBvcCgpLHR9ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIHR5cGVvZiBlPT1gc3ltYm9sYHx8dHlwZW9mIGU9PWBvYmplY3RgJiYhIWUmJiEoU3ltYm9sLnRvUHJpbWl0aXZlIGluIGV8fGB0b1N0cmluZ2BpbiBlfHxgdmFsdWVPZmBpbiBlKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4hcHQoZSkmJiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gaHQoZSx0KXtsZXQgbj1NYXRoLnJvdW5kKGUpO3JldHVybiBuLXQ8PWUmJm4rdD49ZX1mdW5jdGlvbiBndChlLHQsbil7bGV0IHIsaSxhO2ZvcihyPTAsaT1lLmxlbmd0aDtyPGk7cisrKWE9ZVtyXVtuXSxpc05hTihhKXx8KHQubWluPU1hdGgubWluKHQubWluLGEpLHQubWF4PU1hdGgubWF4KHQubWF4LGEpKX1mdW5jdGlvbiBfdChlKXtyZXR1cm4gUi8xODAqZX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gMTgwL1IqZX1mdW5jdGlvbiB5dChlKXtpZighTihlKSlyZXR1cm47bGV0IHQ9MSxuPTA7Zm9yKDtNYXRoLnJvdW5kKGUqdCkvdCE9PWU7KXQqPTEwLG4rKztyZXR1cm4gbn1mdW5jdGlvbiBidChlLHQpe2xldCBuPXQueC1lLngscj10LnktZS55LGk9TWF0aC5zcXJ0KG4qbityKnIpLGE9TWF0aC5hdGFuMihyLG4pO3JldHVybiBhPC0uNSpSJiYoYSs9eikse2FuZ2xlOmEsZGlzdGFuY2U6aX19ZnVuY3Rpb24geHQoZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KCh0LngtZS54KSoqMisodC55LWUueSkqKjIpfWZ1bmN0aW9uIFN0KGUsdCl7cmV0dXJuKGUtdCtydCklei1SfWZ1bmN0aW9uIFYoZSl7cmV0dXJuKGUleit6KSV6fWZ1bmN0aW9uIEN0KGUsdCxuLHIpe2xldCBpPVYoZSksYT1WKHQpLG89VihuKSxzPVYoYS1pKSxjPVYoby1pKSxsPVYoaS1hKSx1PVYoaS1vKTtyZXR1cm4gaT09PWF8fGk9PT1vfHxyJiZhPT09b3x8cz5jJiZsPHV9ZnVuY3Rpb24gSChlLHQsbil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4obixlKSl9ZnVuY3Rpb24gd3QoZSl7cmV0dXJuIEgoZSwtMzI3NjgsMzI3NjcpfWZ1bmN0aW9uIFR0KGUsdCxuLHI9MWUtNil7cmV0dXJuIGU+PU1hdGgubWluKHQsbiktciYmZTw9TWF0aC5tYXgodCxuKStyfWZ1bmN0aW9uIEV0KGUsdCxuKXtufHw9KG49PmVbbl08dCk7bGV0IHI9ZS5sZW5ndGgtMSxpPTAsYTtmb3IoO3ItaT4xOylhPWkrcj4+MSxuKGEpP2k9YTpyPWE7cmV0dXJue2xvOmksaGk6cn19dmFyIER0PShlLHQsbixyKT0+RXQoZSxuLHI/cj0+e2xldCBpPWVbcl1bdF07cmV0dXJuIGk8bnx8aT09PW4mJmVbcisxXVt0XT09PW59OnI9PmVbcl1bdF08biksT3Q9KGUsdCxuKT0+RXQoZSxuLHI9PmVbcl1bdF0+PW4pO2Z1bmN0aW9uIGt0KGUsdCxuKXtsZXQgcj0wLGk9ZS5sZW5ndGg7Zm9yKDtyPGkmJmVbcl08dDspcisrO2Zvcig7aT5yJiZlW2ktMV0+bjspaS0tO3JldHVybiByPjB8fGk8ZS5sZW5ndGg/ZS5zbGljZShyLGkpOmV9dmFyIEF0PVtgcHVzaGAsYHBvcGAsYHNoaWZ0YCxgc3BsaWNlYCxgdW5zaGlmdGBdO2Z1bmN0aW9uIGp0KGUsdCl7aWYoZS5fY2hhcnRqcyl7ZS5fY2hhcnRqcy5saXN0ZW5lcnMucHVzaCh0KTtyZXR1cm59T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9jaGFydGpzIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6e2xpc3RlbmVyczpbdF19fSksQXQuZm9yRWFjaCh0PT57bGV0IG49YF9vbkRhdGFgK1FlKHQpLHI9ZVt0XTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZSguLi50KXtsZXQgaT1yLmFwcGx5KHRoaXMsdCk7cmV0dXJuIGUuX2NoYXJ0anMubGlzdGVuZXJzLmZvckVhY2goZT0+e3R5cGVvZiBlW25dPT1gZnVuY3Rpb25gJiZlW25dKC4uLnQpfSksaX19KX0pfWZ1bmN0aW9uIE10KGUsdCl7bGV0IG49ZS5fY2hhcnRqcztpZighbilyZXR1cm47bGV0IHI9bi5saXN0ZW5lcnMsaT1yLmluZGV4T2YodCk7aSE9PS0xJiZyLnNwbGljZShpLDEpLCEoci5sZW5ndGg+MCkmJihBdC5mb3JFYWNoKHQ9PntkZWxldGUgZVt0XX0pLGRlbGV0ZSBlLl9jaGFydGpzKX1mdW5jdGlvbiBOdChlKXtsZXQgdD1uZXcgU2V0KGUpO3JldHVybiB0LnNpemU9PT1lLmxlbmd0aD9lOkFycmF5LmZyb20odCl9dmFyIFB0PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+YHVgP2Z1bmN0aW9uKGUpe3JldHVybiBlKCl9OndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV9KCk7ZnVuY3Rpb24gRnQoZSx0KXtsZXQgbj1bXSxyPSExO3JldHVybiBmdW5jdGlvbiguLi5pKXtuPWkscnx8KHI9ITAsUHQuY2FsbCh3aW5kb3csKCk9PntyPSExLGUuYXBwbHkodCxuKX0pKX19ZnVuY3Rpb24gSXQoZSx0KXtsZXQgbjtyZXR1cm4gZnVuY3Rpb24oLi4ucil7cmV0dXJuIHQ/KGNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoZSx0LHIpKTplLmFwcGx5KHRoaXMsciksdH19dmFyIEx0PWU9PmU9PT1gc3RhcnRgP2BsZWZ0YDplPT09YGVuZGA/YHJpZ2h0YDpgY2VudGVyYCxVPShlLHQsbik9PmU9PT1gc3RhcnRgP3Q6ZT09PWBlbmRgP246KHQrbikvMixSdD0oZSx0LG4scik9PmU9PT0ocj9gbGVmdGA6YHJpZ2h0YCk/bjplPT09YGNlbnRlcmA/KHQrbikvMjp0O2Z1bmN0aW9uIHp0KGUsdCxuKXtsZXQgcj10Lmxlbmd0aCxpPTAsYT1yO2lmKGUuX3NvcnRlZCl7bGV0e2lTY2FsZTpvLHZTY2FsZTpzLF9wYXJzZWQ6Y309ZSxsPWUuZGF0YXNldCYmZS5kYXRhc2V0Lm9wdGlvbnM/ZS5kYXRhc2V0Lm9wdGlvbnMuc3BhbkdhcHM6bnVsbCx1PW8uYXhpcyx7bWluOmQsbWF4OmYsbWluRGVmaW5lZDpwLG1heERlZmluZWQ6bX09by5nZXRVc2VyQm91bmRzKCk7aWYocCl7aWYoaT1NYXRoLm1pbihEdChjLHUsZCkubG8sbj9yOkR0KHQsdSxvLmdldFBpeGVsRm9yVmFsdWUoZCkpLmxvKSxsKXtsZXQgZT1jLnNsaWNlKDAsaSsxKS5yZXZlcnNlKCkuZmluZEluZGV4KGU9PiFBKGVbcy5heGlzXSkpO2ktPU1hdGgubWF4KDAsZSl9aT1IKGksMCxyLTEpfWlmKG0pe2xldCBlPU1hdGgubWF4KER0KGMsby5heGlzLGYsITApLmhpKzEsbj8wOkR0KHQsdSxvLmdldFBpeGVsRm9yVmFsdWUoZiksITApLmhpKzEpO2lmKGwpe2xldCB0PWMuc2xpY2UoZS0xKS5maW5kSW5kZXgoZT0+IUEoZVtzLmF4aXNdKSk7ZSs9TWF0aC5tYXgoMCx0KX1hPUgoZSxpLHIpLWl9ZWxzZSBhPXItaX1yZXR1cm57c3RhcnQ6aSxjb3VudDphfX1mdW5jdGlvbiBCdChlKXtsZXR7eFNjYWxlOnQseVNjYWxlOm4sX3NjYWxlUmFuZ2VzOnJ9PWUsaT17eG1pbjp0Lm1pbix4bWF4OnQubWF4LHltaW46bi5taW4seW1heDpuLm1heH07aWYoIXIpcmV0dXJuIGUuX3NjYWxlUmFuZ2VzPWksITA7bGV0IGE9ci54bWluIT09dC5taW58fHIueG1heCE9PXQubWF4fHxyLnltaW4hPT1uLm1pbnx8ci55bWF4IT09bi5tYXg7cmV0dXJuIE9iamVjdC5hc3NpZ24ocixpKSxhfXZhciBWdD1lPT5lPT09MHx8ZT09PTEsSHQ9KGUsdCxuKT0+LSgyKiooMTAqLS1lKSpNYXRoLnNpbigoZS10KSp6L24pKSxVdD0oZSx0LG4pPT4yKiooLTEwKmUpKk1hdGguc2luKChlLXQpKnovbikrMSxXdD17bGluZWFyOmU9PmUsZWFzZUluUXVhZDplPT5lKmUsZWFzZU91dFF1YWQ6ZT0+LWUqKGUtMiksZWFzZUluT3V0UXVhZDplPT4oZS89LjUpPDE/LjUqZSplOi0uNSooLS1lKihlLTIpLTEpLGVhc2VJbkN1YmljOmU9PmUqZSplLGVhc2VPdXRDdWJpYzplPT4tLWUqZSplKzEsZWFzZUluT3V0Q3ViaWM6ZT0+KGUvPS41KTwxPy41KmUqZSplOi41KigoZS09MikqZSplKzIpLGVhc2VJblF1YXJ0OmU9PmUqZSplKmUsZWFzZU91dFF1YXJ0OmU9Pi0oLS1lKmUqZSplLTEpLGVhc2VJbk91dFF1YXJ0OmU9PihlLz0uNSk8MT8uNSplKmUqZSplOi0uNSooKGUtPTIpKmUqZSplLTIpLGVhc2VJblF1aW50OmU9PmUqZSplKmUqZSxlYXNlT3V0UXVpbnQ6ZT0+LS1lKmUqZSplKmUrMSxlYXNlSW5PdXRRdWludDplPT4oZS89LjUpPDE/LjUqZSplKmUqZSplOi41KigoZS09MikqZSplKmUqZSsyKSxlYXNlSW5TaW5lOmU9Pi1NYXRoLmNvcyhlKkIpKzEsZWFzZU91dFNpbmU6ZT0+TWF0aC5zaW4oZSpCKSxlYXNlSW5PdXRTaW5lOmU9Pi0uNSooTWF0aC5jb3MoUiplKS0xKSxlYXNlSW5FeHBvOmU9PmU9PT0wPzA6MioqKDEwKihlLTEpKSxlYXNlT3V0RXhwbzplPT5lPT09MT8xOi0oMioqKC0xMCplKSkrMSxlYXNlSW5PdXRFeHBvOmU9PlZ0KGUpP2U6ZTwuNT8uNSoyKiooMTAqKGUqMi0xKSk6LjUqKC0oMioqKC0xMCooZSoyLTEpKSkrMiksZWFzZUluQ2lyYzplPT5lPj0xP2U6LShNYXRoLnNxcnQoMS1lKmUpLTEpLGVhc2VPdXRDaXJjOmU9Pk1hdGguc3FydCgxLSAtLWUqZSksZWFzZUluT3V0Q2lyYzplPT4oZS89LjUpPDE/LS41KihNYXRoLnNxcnQoMS1lKmUpLTEpOi41KihNYXRoLnNxcnQoMS0oZS09MikqZSkrMSksZWFzZUluRWxhc3RpYzplPT5WdChlKT9lOkh0KGUsLjA3NSwuMyksZWFzZU91dEVsYXN0aWM6ZT0+VnQoZSk/ZTpVdChlLC4wNzUsLjMpLGVhc2VJbk91dEVsYXN0aWMoZSl7bGV0IHQ9LjExMjUsbj0uNDU7cmV0dXJuIFZ0KGUpP2U6ZTwuNT8uNSpIdChlKjIsdCxuKTouNSsuNSpVdChlKjItMSx0LG4pfSxlYXNlSW5CYWNrKGUpe3JldHVybiBlKmUqKDIuNzAxNTgqZS0xLjcwMTU4KX0sZWFzZU91dEJhY2soZSl7cmV0dXJuLS1lKmUqKDIuNzAxNTgqZSsxLjcwMTU4KSsxfSxlYXNlSW5PdXRCYWNrKGUpe2xldCB0PTEuNzAxNTg7cmV0dXJuKGUvPS41KTwxPy41KihlKmUqKCgodCo9MS41MjUpKzEpKmUtdCkpOi41KigoZS09MikqZSooKCh0Kj0xLjUyNSkrMSkqZSt0KSsyKX0sZWFzZUluQm91bmNlOmU9PjEtV3QuZWFzZU91dEJvdW5jZSgxLWUpLGVhc2VPdXRCb3VuY2UoZSl7bGV0IHQ9Ny41NjI1LG49Mi43NTtyZXR1cm4gZTwxL24/dCplKmU6ZTwyL24/dCooZS09MS41L24pKmUrLjc1OmU8Mi41L24/dCooZS09Mi4yNS9uKSplKy45Mzc1OnQqKGUtPTIuNjI1L24pKmUrLjk4NDM3NX0sZWFzZUluT3V0Qm91bmNlOmU9PmU8LjU/V3QuZWFzZUluQm91bmNlKGUqMikqLjU6V3QuZWFzZU91dEJvdW5jZShlKjItMSkqLjUrLjV9O2Z1bmN0aW9uIEd0KGUpe2lmKGUmJnR5cGVvZiBlPT1gb2JqZWN0YCl7bGV0IHQ9ZS50b1N0cmluZygpO3JldHVybiB0PT09YFtvYmplY3QgQ2FudmFzUGF0dGVybl1gfHx0PT09YFtvYmplY3QgQ2FudmFzR3JhZGllbnRdYH1yZXR1cm4hMX1mdW5jdGlvbiBLdChlKXtyZXR1cm4gR3QoZSk/ZTpuZXcgUmUoZSl9ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIEd0KGUpP2U6bmV3IFJlKGUpLnNhdHVyYXRlKC41KS5kYXJrZW4oLjEpLmhleFN0cmluZygpfXZhciBKdD1bYHhgLGB5YCxgYm9yZGVyV2lkdGhgLGByYWRpdXNgLGB0ZW5zaW9uYF0sWXQ9W2Bjb2xvcmAsYGJvcmRlckNvbG9yYCxgYmFja2dyb3VuZENvbG9yYF07ZnVuY3Rpb24gWHQoZSl7ZS5zZXQoYGFuaW1hdGlvbmAse2RlbGF5OnZvaWQgMCxkdXJhdGlvbjoxZTMsZWFzaW5nOmBlYXNlT3V0UXVhcnRgLGZuOnZvaWQgMCxmcm9tOnZvaWQgMCxsb29wOnZvaWQgMCx0bzp2b2lkIDAsdHlwZTp2b2lkIDB9KSxlLmRlc2NyaWJlKGBhbmltYXRpb25gLHtfZmFsbGJhY2s6ITEsX2luZGV4YWJsZTohMSxfc2NyaXB0YWJsZTplPT5lIT09YG9uUHJvZ3Jlc3NgJiZlIT09YG9uQ29tcGxldGVgJiZlIT09YGZuYH0pLGUuc2V0KGBhbmltYXRpb25zYCx7Y29sb3JzOnt0eXBlOmBjb2xvcmAscHJvcGVydGllczpZdH0sbnVtYmVyczp7dHlwZTpgbnVtYmVyYCxwcm9wZXJ0aWVzOkp0fX0pLGUuZGVzY3JpYmUoYGFuaW1hdGlvbnNgLHtfZmFsbGJhY2s6YGFuaW1hdGlvbmB9KSxlLnNldChgdHJhbnNpdGlvbnNgLHthY3RpdmU6e2FuaW1hdGlvbjp7ZHVyYXRpb246NDAwfX0scmVzaXplOnthbmltYXRpb246e2R1cmF0aW9uOjB9fSxzaG93OnthbmltYXRpb25zOntjb2xvcnM6e2Zyb206YHRyYW5zcGFyZW50YH0sdmlzaWJsZTp7dHlwZTpgYm9vbGVhbmAsZHVyYXRpb246MH19fSxoaWRlOnthbmltYXRpb25zOntjb2xvcnM6e3RvOmB0cmFuc3BhcmVudGB9LHZpc2libGU6e3R5cGU6YGJvb2xlYW5gLGVhc2luZzpgbGluZWFyYCxmbjplPT5lfDB9fX19KX1mdW5jdGlvbiBadChlKXtlLnNldChgbGF5b3V0YCx7YXV0b1BhZGRpbmc6ITAscGFkZGluZzp7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9fSl9dmFyIFF0PW5ldyBNYXA7ZnVuY3Rpb24gJHQoZSx0KXt0fHw9e307bGV0IG49ZStKU09OLnN0cmluZ2lmeSh0KSxyPVF0LmdldChuKTtyZXR1cm4gcnx8KHI9bmV3IEludGwuTnVtYmVyRm9ybWF0KGUsdCksUXQuc2V0KG4scikpLHJ9ZnVuY3Rpb24gZW4oZSx0LG4pe3JldHVybiAkdCh0LG4pLmZvcm1hdChlKX12YXIgdG49e3ZhbHVlcyhlKXtyZXR1cm4gaihlKT9lOmBgK2V9LG51bWVyaWMoZSx0LG4pe2lmKGU9PT0wKXJldHVybmAwYDtsZXQgcj10aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLGksYT1lO2lmKG4ubGVuZ3RoPjEpe2xldCB0PU1hdGgubWF4KE1hdGguYWJzKG5bMF0udmFsdWUpLE1hdGguYWJzKG5bbi5sZW5ndGgtMV0udmFsdWUpKTsodDwxZS00fHx0PjB4MzhkN2VhNGM2ODAwMCkmJihpPWBzY2llbnRpZmljYCksYT1ubihlLG4pfWxldCBvPWN0KE1hdGguYWJzKGEpKSxzPWlzTmFOKG8pPzE6TWF0aC5tYXgoTWF0aC5taW4oLTEqTWF0aC5mbG9vcihvKSwyMCksMCksYz17bm90YXRpb246aSxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6cyxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6c307cmV0dXJuIE9iamVjdC5hc3NpZ24oYyx0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KSxlbihlLHIsYyl9LGxvZ2FyaXRobWljKGUsdCxuKXtpZihlPT09MClyZXR1cm5gMGA7bGV0IHI9blt0XS5zaWduaWZpY2FuZHx8ZS8xMCoqTWF0aC5mbG9vcihjdChlKSk7cmV0dXJuWzEsMiwzLDUsMTAsMTVdLmluY2x1ZGVzKHIpfHx0Pi44Km4ubGVuZ3RoP3RuLm51bWVyaWMuY2FsbCh0aGlzLGUsdCxuKTpgYH19O2Z1bmN0aW9uIG5uKGUsdCl7bGV0IG49dC5sZW5ndGg+Mz90WzJdLnZhbHVlLXRbMV0udmFsdWU6dFsxXS52YWx1ZS10WzBdLnZhbHVlO3JldHVybiBNYXRoLmFicyhuKT49MSYmZSE9PU1hdGguZmxvb3IoZSkmJihuPWUtTWF0aC5mbG9vcihlKSksbn12YXIgcm49e2Zvcm1hdHRlcnM6dG59O2Z1bmN0aW9uIGFuKGUpe2Uuc2V0KGBzY2FsZWAse2Rpc3BsYXk6ITAsb2Zmc2V0OiExLHJldmVyc2U6ITEsYmVnaW5BdFplcm86ITEsYm91bmRzOmB0aWNrc2AsY2xpcDohMCxncmFjZTowLGdyaWQ6e2Rpc3BsYXk6ITAsbGluZVdpZHRoOjEsZHJhd09uQ2hhcnRBcmVhOiEwLGRyYXdUaWNrczohMCx0aWNrTGVuZ3RoOjgsdGlja1dpZHRoOihlLHQpPT50LmxpbmVXaWR0aCx0aWNrQ29sb3I6KGUsdCk9PnQuY29sb3Isb2Zmc2V0OiExfSxib3JkZXI6e2Rpc3BsYXk6ITAsZGFzaDpbXSxkYXNoT2Zmc2V0OjAsd2lkdGg6MX0sdGl0bGU6e2Rpc3BsYXk6ITEsdGV4dDpgYCxwYWRkaW5nOnt0b3A6NCxib3R0b206NH19LHRpY2tzOnttaW5Sb3RhdGlvbjowLG1heFJvdGF0aW9uOjUwLG1pcnJvcjohMSx0ZXh0U3Ryb2tlV2lkdGg6MCx0ZXh0U3Ryb2tlQ29sb3I6YGAscGFkZGluZzozLGRpc3BsYXk6ITAsYXV0b1NraXA6ITAsYXV0b1NraXBQYWRkaW5nOjMsbGFiZWxPZmZzZXQ6MCxjYWxsYmFjazpybi5mb3JtYXR0ZXJzLnZhbHVlcyxtaW5vcjp7fSxtYWpvcjp7fSxhbGlnbjpgY2VudGVyYCxjcm9zc0FsaWduOmBuZWFyYCxzaG93TGFiZWxCYWNrZHJvcDohMSxiYWNrZHJvcENvbG9yOmByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpYCxiYWNrZHJvcFBhZGRpbmc6Mn19KSxlLnJvdXRlKGBzY2FsZS50aWNrc2AsYGNvbG9yYCxgYCxgY29sb3JgKSxlLnJvdXRlKGBzY2FsZS5ncmlkYCxgY29sb3JgLGBgLGBib3JkZXJDb2xvcmApLGUucm91dGUoYHNjYWxlLmJvcmRlcmAsYGNvbG9yYCxgYCxgYm9yZGVyQ29sb3JgKSxlLnJvdXRlKGBzY2FsZS50aXRsZWAsYGNvbG9yYCxgYCxgY29sb3JgKSxlLmRlc2NyaWJlKGBzY2FsZWAse19mYWxsYmFjazohMSxfc2NyaXB0YWJsZTplPT4hZS5zdGFydHNXaXRoKGBiZWZvcmVgKSYmIWUuc3RhcnRzV2l0aChgYWZ0ZXJgKSYmZSE9PWBjYWxsYmFja2AmJmUhPT1gcGFyc2VyYCxfaW5kZXhhYmxlOmU9PmUhPT1gYm9yZGVyRGFzaGAmJmUhPT1gdGlja0JvcmRlckRhc2hgJiZlIT09YGRhc2hgfSksZS5kZXNjcmliZShgc2NhbGVzYCx7X2ZhbGxiYWNrOmBzY2FsZWB9KSxlLmRlc2NyaWJlKGBzY2FsZS50aWNrc2Ase19zY3JpcHRhYmxlOmU9PmUhPT1gYmFja2Ryb3BQYWRkaW5nYCYmZSE9PWBjYWxsYmFja2AsX2luZGV4YWJsZTplPT5lIT09YGJhY2tkcm9wUGFkZGluZ2B9KX12YXIgb249T2JqZWN0LmNyZWF0ZShudWxsKSxzbj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGNuKGUsdCl7aWYoIXQpcmV0dXJuIGU7bGV0IG49dC5zcGxpdChgLmApO2ZvcihsZXQgdD0wLHI9bi5sZW5ndGg7dDxyOysrdCl7bGV0IHI9blt0XTtlPWVbcl18fChlW3JdPU9iamVjdC5jcmVhdGUobnVsbCkpfXJldHVybiBlfWZ1bmN0aW9uIGxuKGUsdCxuKXtyZXR1cm4gdHlwZW9mIHQ9PWBzdHJpbmdgP0dlKGNuKGUsdCksbik6R2UoY24oZSxgYCksdCl9dmFyIFc9bmV3IGNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5hbmltYXRpb249dm9pZCAwLHRoaXMuYmFja2dyb3VuZENvbG9yPWByZ2JhKDAsMCwwLDAuMSlgLHRoaXMuYm9yZGVyQ29sb3I9YHJnYmEoMCwwLDAsMC4xKWAsdGhpcy5jb2xvcj1gIzY2NmAsdGhpcy5kYXRhc2V0cz17fSx0aGlzLmRldmljZVBpeGVsUmF0aW89ZT0+ZS5jaGFydC5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCksdGhpcy5lbGVtZW50cz17fSx0aGlzLmV2ZW50cz1bYG1vdXNlbW92ZWAsYG1vdXNlb3V0YCxgY2xpY2tgLGB0b3VjaHN0YXJ0YCxgdG91Y2htb3ZlYF0sdGhpcy5mb250PXtmYW1pbHk6YCdIZWx2ZXRpY2EgTmV1ZScsICdIZWx2ZXRpY2EnLCAnQXJpYWwnLCBzYW5zLXNlcmlmYCxzaXplOjEyLHN0eWxlOmBub3JtYWxgLGxpbmVIZWlnaHQ6MS4yLHdlaWdodDpudWxsfSx0aGlzLmhvdmVyPXt9LHRoaXMuaG92ZXJCYWNrZ3JvdW5kQ29sb3I9KGUsdCk9PnF0KHQuYmFja2dyb3VuZENvbG9yKSx0aGlzLmhvdmVyQm9yZGVyQ29sb3I9KGUsdCk9PnF0KHQuYm9yZGVyQ29sb3IpLHRoaXMuaG92ZXJDb2xvcj0oZSx0KT0+cXQodC5jb2xvciksdGhpcy5pbmRleEF4aXM9YHhgLHRoaXMuaW50ZXJhY3Rpb249e21vZGU6YG5lYXJlc3RgLGludGVyc2VjdDohMCxpbmNsdWRlSW52aXNpYmxlOiExfSx0aGlzLm1haW50YWluQXNwZWN0UmF0aW89ITAsdGhpcy5vbkhvdmVyPW51bGwsdGhpcy5vbkNsaWNrPW51bGwsdGhpcy5wYXJzaW5nPSEwLHRoaXMucGx1Z2lucz17fSx0aGlzLnJlc3BvbnNpdmU9ITAsdGhpcy5zY2FsZT12b2lkIDAsdGhpcy5zY2FsZXM9e30sdGhpcy5zaG93TGluZT0hMCx0aGlzLmRyYXdBY3RpdmVFbGVtZW50c09uVG9wPSEwLHRoaXMuZGVzY3JpYmUoZSksdGhpcy5hcHBseSh0KX1zZXQoZSx0KXtyZXR1cm4gbG4odGhpcyxlLHQpfWdldChlKXtyZXR1cm4gY24odGhpcyxlKX1kZXNjcmliZShlLHQpe3JldHVybiBsbihzbixlLHQpfW92ZXJyaWRlKGUsdCl7cmV0dXJuIGxuKG9uLGUsdCl9cm91dGUoZSx0LG4scil7bGV0IGk9Y24odGhpcyxlKSxhPWNuKHRoaXMsbiksbz1gX2ArdDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLHtbb106e3ZhbHVlOmlbdF0sd3JpdGFibGU6ITB9LFt0XTp7ZW51bWVyYWJsZTohMCxnZXQoKXtsZXQgZT10aGlzW29dLHQ9YVtyXTtyZXR1cm4gTShlKT9PYmplY3QuYXNzaWduKHt9LHQsZSk6RihlLHQpfSxzZXQoZSl7dGhpc1tvXT1lfX19KX1hcHBseShlKXtlLmZvckVhY2goZT0+ZSh0aGlzKSl9fSh7X3NjcmlwdGFibGU6ZT0+IWUuc3RhcnRzV2l0aChgb25gKSxfaW5kZXhhYmxlOmU9PmUhPT1gZXZlbnRzYCxob3Zlcjp7X2ZhbGxiYWNrOmBpbnRlcmFjdGlvbmB9LGludGVyYWN0aW9uOntfc2NyaXB0YWJsZTohMSxfaW5kZXhhYmxlOiExfX0sW1h0LFp0LGFuXSk7ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIWV8fEEoZS5zaXplKXx8QShlLmZhbWlseSk/bnVsbDooZS5zdHlsZT9lLnN0eWxlK2AgYDpgYCkrKGUud2VpZ2h0P2Uud2VpZ2h0K2AgYDpgYCkrZS5zaXplK2BweCBgK2UuZmFtaWx5fWZ1bmN0aW9uIGRuKGUsdCxuLHIsaSl7bGV0IGE9dFtpXTtyZXR1cm4gYXx8KGE9dFtpXT1lLm1lYXN1cmVUZXh0KGkpLndpZHRoLG4ucHVzaChpKSksYT5yJiYocj1hKSxyfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3J8fD17fTtsZXQgaT1yLmRhdGE9ci5kYXRhfHx7fSxhPXIuZ2FyYmFnZUNvbGxlY3Q9ci5nYXJiYWdlQ29sbGVjdHx8W107ci5mb250IT09dCYmKGk9ci5kYXRhPXt9LGE9ci5nYXJiYWdlQ29sbGVjdD1bXSxyLmZvbnQ9dCksZS5zYXZlKCksZS5mb250PXQ7bGV0IG89MCxzPW4ubGVuZ3RoLGMsbCx1LGQsZjtmb3IoYz0wO2M8cztjKyspaWYoZD1uW2NdLGQhPW51bGwmJiFqKGQpKW89ZG4oZSxpLGEsbyxkKTtlbHNlIGlmKGooZCkpZm9yKGw9MCx1PWQubGVuZ3RoO2w8dTtsKyspZj1kW2xdLGYhPW51bGwmJiFqKGYpJiYobz1kbihlLGksYSxvLGYpKTtlLnJlc3RvcmUoKTtsZXQgcD1hLmxlbmd0aC8yO2lmKHA+bi5sZW5ndGgpe2ZvcihjPTA7YzxwO2MrKylkZWxldGUgaVthW2NdXTthLnNwbGljZSgwLHApfXJldHVybiBvfWZ1bmN0aW9uIHBuKGUsdCxuKXtsZXQgcj1lLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvLGk9bj09PTA/MDpNYXRoLm1heChuLzIsLjUpO3JldHVybiBNYXRoLnJvdW5kKCh0LWkpKnIpL3IraX1mdW5jdGlvbiBtbihlLHQpeyF0JiYhZXx8KHR8fD1lLmdldENvbnRleHQoYDJkYCksdC5zYXZlKCksdC5yZXNldFRyYW5zZm9ybSgpLHQuY2xlYXJSZWN0KDAsMCxlLndpZHRoLGUuaGVpZ2h0KSx0LnJlc3RvcmUoKSl9ZnVuY3Rpb24gaG4oZSx0LG4scil7Z24oZSx0LG4scixudWxsKX1mdW5jdGlvbiBnbihlLHQsbixyLGkpe2xldCBhLG8scyxjLGwsdSxkLGYscD10LnBvaW50U3R5bGUsbT10LnJvdGF0aW9uLGg9dC5yYWRpdXMsZz0obXx8MCkqYXQ7aWYocCYmdHlwZW9mIHA9PWBvYmplY3RgJiYoYT1wLnRvU3RyaW5nKCksYT09PWBbb2JqZWN0IEhUTUxJbWFnZUVsZW1lbnRdYHx8YT09PWBbb2JqZWN0IEhUTUxDYW52YXNFbGVtZW50XWApKXtlLnNhdmUoKSxlLnRyYW5zbGF0ZShuLHIpLGUucm90YXRlKGcpLGUuZHJhd0ltYWdlKHAsLXAud2lkdGgvMiwtcC5oZWlnaHQvMixwLndpZHRoLHAuaGVpZ2h0KSxlLnJlc3RvcmUoKTtyZXR1cm59aWYoIShpc05hTihoKXx8aDw9MCkpe3N3aXRjaChlLmJlZ2luUGF0aCgpLHApe2RlZmF1bHQ6aT9lLmVsbGlwc2UobixyLGkvMixoLDAsMCx6KTplLmFyYyhuLHIsaCwwLHopLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWB0cmlhbmdsZWA6dT1pP2kvMjpoLGUubW92ZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGcrPXN0LGUubGluZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGcrPXN0LGUubGluZVRvKG4rTWF0aC5zaW4oZykqdSxyLU1hdGguY29zKGcpKmgpLGUuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZWByZWN0Um91bmRlZGA6bD1oKi41MTYsYz1oLWwsbz1NYXRoLmNvcyhnK290KSpjLGQ9TWF0aC5jb3MoZytvdCkqKGk/aS8yLWw6Yykscz1NYXRoLnNpbihnK290KSpjLGY9TWF0aC5zaW4oZytvdCkqKGk/aS8yLWw6YyksZS5hcmMobi1kLHItcyxsLGctUixnLUIpLGUuYXJjKG4rZixyLW8sbCxnLUIsZyksZS5hcmMobitkLHIrcyxsLGcsZytCKSxlLmFyYyhuLWYscitvLGwsZytCLGcrUiksZS5jbG9zZVBhdGgoKTticmVhaztjYXNlYHJlY3RgOmlmKCFtKXtjPU1hdGguU1FSVDFfMipoLHU9aT9pLzI6YyxlLnJlY3Qobi11LHItYywyKnUsMipjKTticmVha31nKz1vdDtjYXNlYHJlY3RSb3RgOmQ9TWF0aC5jb3MoZykqKGk/aS8yOmgpLG89TWF0aC5jb3MoZykqaCxzPU1hdGguc2luKGcpKmgsZj1NYXRoLnNpbihnKSooaT9pLzI6aCksZS5tb3ZlVG8obi1kLHItcyksZS5saW5lVG8obitmLHItbyksZS5saW5lVG8obitkLHIrcyksZS5saW5lVG8obi1mLHIrbyksZS5jbG9zZVBhdGgoKTticmVhaztjYXNlYGNyb3NzUm90YDpnKz1vdDtjYXNlYGNyb3NzYDpkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZCxyK3MpLGUubW92ZVRvKG4rZixyLW8pLGUubGluZVRvKG4tZixyK28pO2JyZWFrO2Nhc2Vgc3RhcmA6ZD1NYXRoLmNvcyhnKSooaT9pLzI6aCksbz1NYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxmPU1hdGguc2luKGcpKihpP2kvMjpoKSxlLm1vdmVUbyhuLWQsci1zKSxlLmxpbmVUbyhuK2QscitzKSxlLm1vdmVUbyhuK2Ysci1vKSxlLmxpbmVUbyhuLWYscitvKSxnKz1vdCxkPU1hdGguY29zKGcpKihpP2kvMjpoKSxvPU1hdGguY29zKGcpKmgscz1NYXRoLnNpbihnKSpoLGY9TWF0aC5zaW4oZykqKGk/aS8yOmgpLGUubW92ZVRvKG4tZCxyLXMpLGUubGluZVRvKG4rZCxyK3MpLGUubW92ZVRvKG4rZixyLW8pLGUubGluZVRvKG4tZixyK28pO2JyZWFrO2Nhc2VgbGluZWA6bz1pP2kvMjpNYXRoLmNvcyhnKSpoLHM9TWF0aC5zaW4oZykqaCxlLm1vdmVUbyhuLW8sci1zKSxlLmxpbmVUbyhuK28scitzKTticmVhaztjYXNlYGRhc2hgOmUubW92ZVRvKG4sciksZS5saW5lVG8obitNYXRoLmNvcyhnKSooaT9pLzI6aCkscitNYXRoLnNpbihnKSpoKTticmVhaztjYXNlITE6ZS5jbG9zZVBhdGgoKX1lLmZpbGwoKSx0LmJvcmRlcldpZHRoPjAmJmUuc3Ryb2tlKCl9fWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBufHw9LjUsIXR8fGUmJmUueD50LmxlZnQtbiYmZS54PHQucmlnaHQrbiYmZS55PnQudG9wLW4mJmUueTx0LmJvdHRvbStufWZ1bmN0aW9uIF9uKGUsdCl7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSxlLnJlY3QodC5sZWZ0LHQudG9wLHQucmlnaHQtdC5sZWZ0LHQuYm90dG9tLXQudG9wKSxlLmNsaXAoKX1mdW5jdGlvbiB2bihlKXtlLnJlc3RvcmUoKX1mdW5jdGlvbiB5bihlLHQsbixyLGkpe2lmKCF0KXJldHVybiBlLmxpbmVUbyhuLngsbi55KTtpZihpPT09YG1pZGRsZWApe2xldCByPSh0Lngrbi54KS8yO2UubGluZVRvKHIsdC55KSxlLmxpbmVUbyhyLG4ueSl9ZWxzZSBpPT09YGFmdGVyYD09ISFyP2UubGluZVRvKG4ueCx0LnkpOmUubGluZVRvKHQueCxuLnkpO2UubGluZVRvKG4ueCxuLnkpfWZ1bmN0aW9uIGJuKGUsdCxuLHIpe2lmKCF0KXJldHVybiBlLmxpbmVUbyhuLngsbi55KTtlLmJlemllckN1cnZlVG8ocj90LmNwMXg6dC5jcDJ4LHI/dC5jcDF5OnQuY3AyeSxyP24uY3AyeDpuLmNwMXgscj9uLmNwMnk6bi5jcDF5LG4ueCxuLnkpfWZ1bmN0aW9uIHhuKGUsdCl7dC50cmFuc2xhdGlvbiYmZS50cmFuc2xhdGUodC50cmFuc2xhdGlvblswXSx0LnRyYW5zbGF0aW9uWzFdKSxBKHQucm90YXRpb24pfHxlLnJvdGF0ZSh0LnJvdGF0aW9uKSx0LmNvbG9yJiYoZS5maWxsU3R5bGU9dC5jb2xvciksdC50ZXh0QWxpZ24mJihlLnRleHRBbGlnbj10LnRleHRBbGlnbiksdC50ZXh0QmFzZWxpbmUmJihlLnRleHRCYXNlbGluZT10LnRleHRCYXNlbGluZSl9ZnVuY3Rpb24gU24oZSx0LG4scixpKXtpZihpLnN0cmlrZXRocm91Z2h8fGkudW5kZXJsaW5lKXtsZXQgYT1lLm1lYXN1cmVUZXh0KHIpLG89dC1hLmFjdHVhbEJvdW5kaW5nQm94TGVmdCxzPXQrYS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0LGM9bi1hLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50LGw9bithLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCx1PWkuc3RyaWtldGhyb3VnaD8oYytsKS8yOmw7ZS5zdHJva2VTdHlsZT1lLmZpbGxTdHlsZSxlLmJlZ2luUGF0aCgpLGUubGluZVdpZHRoPWkuZGVjb3JhdGlvbldpZHRofHwyLGUubW92ZVRvKG8sdSksZS5saW5lVG8ocyx1KSxlLnN0cm9rZSgpfX1mdW5jdGlvbiBDbihlLHQpe2xldCBuPWUuZmlsbFN0eWxlO2UuZmlsbFN0eWxlPXQuY29sb3IsZS5maWxsUmVjdCh0LmxlZnQsdC50b3AsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9bn1mdW5jdGlvbiB3bihlLHQsbixyLGksYT17fSl7bGV0IG89aih0KT90Olt0XSxzPWEuc3Ryb2tlV2lkdGg+MCYmYS5zdHJva2VDb2xvciE9PWBgLGMsbDtmb3IoZS5zYXZlKCksZS5mb250PWkuc3RyaW5nLHhuKGUsYSksYz0wO2M8by5sZW5ndGg7KytjKWw9b1tjXSxhLmJhY2tkcm9wJiZDbihlLGEuYmFja2Ryb3ApLHMmJihhLnN0cm9rZUNvbG9yJiYoZS5zdHJva2VTdHlsZT1hLnN0cm9rZUNvbG9yKSxBKGEuc3Ryb2tlV2lkdGgpfHwoZS5saW5lV2lkdGg9YS5zdHJva2VXaWR0aCksZS5zdHJva2VUZXh0KGwsbixyLGEubWF4V2lkdGgpKSxlLmZpbGxUZXh0KGwsbixyLGEubWF4V2lkdGgpLFNuKGUsbixyLGwsYSkscis9TnVtYmVyKGkubGluZUhlaWdodCk7ZS5yZXN0b3JlKCl9ZnVuY3Rpb24gVG4oZSx0KXtsZXR7eDpuLHk6cix3OmksaDphLHJhZGl1czpvfT10O2UuYXJjKG4rby50b3BMZWZ0LHIrby50b3BMZWZ0LG8udG9wTGVmdCwxLjUqUixSLCEwKSxlLmxpbmVUbyhuLHIrYS1vLmJvdHRvbUxlZnQpLGUuYXJjKG4rby5ib3R0b21MZWZ0LHIrYS1vLmJvdHRvbUxlZnQsby5ib3R0b21MZWZ0LFIsQiwhMCksZS5saW5lVG8obitpLW8uYm90dG9tUmlnaHQscithKSxlLmFyYyhuK2ktby5ib3R0b21SaWdodCxyK2Etby5ib3R0b21SaWdodCxvLmJvdHRvbVJpZ2h0LEIsMCwhMCksZS5saW5lVG8obitpLHIrby50b3BSaWdodCksZS5hcmMobitpLW8udG9wUmlnaHQscitvLnRvcFJpZ2h0LG8udG9wUmlnaHQsMCwtQiwhMCksZS5saW5lVG8obitvLnRvcExlZnQscil9dmFyIEVuPS9eKG5vcm1hbHwoXGQrKD86XC5cZCspPykocHh8ZW18JSk/KSQvLERuPS9eKG5vcm1hbHxpdGFsaWN8aW5pdGlhbHxpbmhlcml0fHVuc2V0fChvYmxpcXVlKCAtP1swLTldP1swLTldZGVnKT8pKSQvO2Z1bmN0aW9uIE9uKGUsdCl7bGV0IG49KGBgK2UpLm1hdGNoKEVuKTtpZighbnx8blsxXT09PWBub3JtYWxgKXJldHVybiB0KjEuMjtzd2l0Y2goZT0rblsyXSxuWzNdKXtjYXNlYHB4YDpyZXR1cm4gZTtjYXNlYCVgOmUvPTEwMH1yZXR1cm4gdCplfXZhciBrbj1lPT4rZXx8MDtmdW5jdGlvbiBBbihlLHQpe2xldCBuPXt9LHI9TSh0KSxpPXI/T2JqZWN0LmtleXModCk6dCxhPU0oZSk/cj9uPT5GKGVbbl0sZVt0W25dXSk6dD0+ZVt0XTooKT0+ZTtmb3IobGV0IGUgb2YgaSluW2VdPWtuKGEoZSkpO3JldHVybiBufWZ1bmN0aW9uIGpuKGUpe3JldHVybiBBbihlLHt0b3A6YHlgLHJpZ2h0OmB4YCxib3R0b206YHlgLGxlZnQ6YHhgfSl9ZnVuY3Rpb24gTW4oZSl7cmV0dXJuIEFuKGUsW2B0b3BMZWZ0YCxgdG9wUmlnaHRgLGBib3R0b21MZWZ0YCxgYm90dG9tUmlnaHRgXSl9ZnVuY3Rpb24gSyhlKXtsZXQgdD1qbihlKTtyZXR1cm4gdC53aWR0aD10LmxlZnQrdC5yaWdodCx0LmhlaWdodD10LnRvcCt0LmJvdHRvbSx0fWZ1bmN0aW9uIHEoZSx0KXtlfHw9e30sdHx8PVcuZm9udDtsZXQgbj1GKGUuc2l6ZSx0LnNpemUpO3R5cGVvZiBuPT1gc3RyaW5nYCYmKG49cGFyc2VJbnQobiwxMCkpO2xldCByPUYoZS5zdHlsZSx0LnN0eWxlKTtyJiYhKGBgK3IpLm1hdGNoKERuKSYmKGNvbnNvbGUud2FybihgSW52YWxpZCBmb250IHN0eWxlIHNwZWNpZmllZDogImArcitgImApLHI9dm9pZCAwKTtsZXQgaT17ZmFtaWx5OkYoZS5mYW1pbHksdC5mYW1pbHkpLGxpbmVIZWlnaHQ6T24oRihlLmxpbmVIZWlnaHQsdC5saW5lSGVpZ2h0KSxuKSxzaXplOm4sc3R5bGU6cix3ZWlnaHQ6RihlLndlaWdodCx0LndlaWdodCksc3RyaW5nOmBgfTtyZXR1cm4gaS5zdHJpbmc9dW4oaSksaX1mdW5jdGlvbiBObihlLHQsbixyKXtsZXQgaT0hMCxhLG8scztmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSlpZihzPWVbYV0scyE9PXZvaWQgMCYmKHQhPT12b2lkIDAmJnR5cGVvZiBzPT1gZnVuY3Rpb25gJiYocz1zKHQpLGk9ITEpLG4hPT12b2lkIDAmJmoocykmJihzPXNbbiVzLmxlbmd0aF0saT0hMSkscyE9PXZvaWQgMCkpcmV0dXJuIHImJiFpJiYoci5jYWNoZWFibGU9ITEpLHN9ZnVuY3Rpb24gUG4oZSx0LG4pe2xldHttaW46cixtYXg6aX09ZSxhPUJlKHQsKGktcikvMiksbz0oZSx0KT0+biYmZT09PTA/MDplK3Q7cmV0dXJue21pbjpvKHIsLU1hdGguYWJzKGEpKSxtYXg6byhpLGEpfX1mdW5jdGlvbiBGbihlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoZSksdCl9ZnVuY3Rpb24gSW4oZSx0PVtgYF0sbixyLGk9KCk9PmVbMF0pe2xldCBhPW58fGU7cmV0dXJuIHI9PT12b2lkIDAmJihyPVFuKGBfZmFsbGJhY2tgLGUpKSxuZXcgUHJveHkoe1tTeW1ib2wudG9TdHJpbmdUYWddOmBPYmplY3RgLF9jYWNoZWFibGU6ITAsX3Njb3BlczplLF9yb290U2NvcGVzOmEsX2ZhbGxiYWNrOnIsX2dldFRhcmdldDppLG92ZXJyaWRlOm49PkluKFtuLC4uLmVdLHQsYSxyKX0se2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSB0Ll9rZXlzLGRlbGV0ZSBlWzBdW25dLCEwfSxnZXQobixyKXtyZXR1cm4gVm4obixyLCgpPT5abihyLHQsZSxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpe3JldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLl9zY29wZXNbMF0sdCl9LGdldFByb3RvdHlwZU9mKCl7cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoZVswXSl9LGhhcyhlLHQpe3JldHVybiAkbihlKS5pbmNsdWRlcyh0KX0sb3duS2V5cyhlKXtyZXR1cm4gJG4oZSl9LHNldChlLHQsbil7bGV0IHI9ZS5fc3RvcmFnZXx8PWkoKTtyZXR1cm4gZVt0XT1yW3RdPW4sZGVsZXRlIGUuX2tleXMsITB9fSl9ZnVuY3Rpb24gTG4oZSx0LG4scil7bGV0IGk9e19jYWNoZWFibGU6ITEsX3Byb3h5OmUsX2NvbnRleHQ6dCxfc3ViUHJveHk6bixfc3RhY2s6bmV3IFNldCxfZGVzY3JpcHRvcnM6Um4oZSxyKSxzZXRDb250ZXh0OnQ9PkxuKGUsdCxuLHIpLG92ZXJyaWRlOmk9PkxuKGUub3ZlcnJpZGUoaSksdCxuLHIpfTtyZXR1cm4gbmV3IFByb3h5KGkse2RlbGV0ZVByb3BlcnR5KHQsbil7cmV0dXJuIGRlbGV0ZSB0W25dLGRlbGV0ZSBlW25dLCEwfSxnZXQoZSx0LG4pe3JldHVybiBWbihlLHQsKCk9PkhuKGUsdCxuKSl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pe3JldHVybiB0Ll9kZXNjcmlwdG9ycy5hbGxLZXlzP1JlZmxlY3QuaGFzKGUsbik/e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTp2b2lkIDA6UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxuKX0sZ2V0UHJvdG90eXBlT2YoKXtyZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihlKX0saGFzKHQsbil7cmV0dXJuIFJlZmxlY3QuaGFzKGUsbil9LG93bktleXMoKXtyZXR1cm4gUmVmbGVjdC5vd25LZXlzKGUpfSxzZXQodCxuLHIpe3JldHVybiBlW25dPXIsZGVsZXRlIHRbbl0sITB9fSl9ZnVuY3Rpb24gUm4oZSx0PXtzY3JpcHRhYmxlOiEwLGluZGV4YWJsZTohMH0pe2xldHtfc2NyaXB0YWJsZTpuPXQuc2NyaXB0YWJsZSxfaW5kZXhhYmxlOnI9dC5pbmRleGFibGUsX2FsbEtleXM6aT10LmFsbEtleXN9PWU7cmV0dXJue2FsbEtleXM6aSxzY3JpcHRhYmxlOm4saW5kZXhhYmxlOnIsaXNTY3JpcHRhYmxlOmV0KG4pP246KCk9Pm4saXNJbmRleGFibGU6ZXQocik/cjooKT0+cn19dmFyIHpuPShlLHQpPT5lP2UrUWUodCk6dCxCbj0oZSx0KT0+TSh0KSYmZSE9PWBhZGFwdGVyc2AmJihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsfHx0LmNvbnN0cnVjdG9yPT09T2JqZWN0KTtmdW5jdGlvbiBWbihlLHQsbil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fHQ9PT1gY29uc3RydWN0b3JgKXJldHVybiBlW3RdO2xldCByPW4oKTtyZXR1cm4gZVt0XT1yLHJ9ZnVuY3Rpb24gSG4oZSx0LG4pe2xldHtfcHJveHk6cixfY29udGV4dDppLF9zdWJQcm94eTphLF9kZXNjcmlwdG9yczpvfT1lLHM9clt0XTtyZXR1cm4gZXQocykmJm8uaXNTY3JpcHRhYmxlKHQpJiYocz1Vbih0LHMsZSxuKSksaihzKSYmcy5sZW5ndGgmJihzPVduKHQscyxlLG8uaXNJbmRleGFibGUpKSxCbih0LHMpJiYocz1MbihzLGksYSYmYVt0XSxvKSksc31mdW5jdGlvbiBVbihlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfc3RhY2s6c309bjtpZihzLmhhcyhlKSl0aHJvdyBFcnJvcihgUmVjdXJzaW9uIGRldGVjdGVkOiBgK0FycmF5LmZyb20ocykuam9pbihgLT5gKStgLT5gK2UpO3MuYWRkKGUpO2xldCBjPXQoYSxvfHxyKTtyZXR1cm4gcy5kZWxldGUoZSksQm4oZSxjKSYmKGM9Sm4oaS5fc2NvcGVzLGksZSxjKSksY31mdW5jdGlvbiBXbihlLHQsbixyKXtsZXR7X3Byb3h5OmksX2NvbnRleHQ6YSxfc3ViUHJveHk6byxfZGVzY3JpcHRvcnM6c309bjtpZihhLmluZGV4IT09dm9pZCAwJiZyKGUpKXJldHVybiB0W2EuaW5kZXgldC5sZW5ndGhdO2lmKE0odFswXSkpe2xldCBuPXQscj1pLl9zY29wZXMuZmlsdGVyKGU9PmUhPT1uKTt0PVtdO2ZvcihsZXQgYyBvZiBuKXtsZXQgbj1KbihyLGksZSxjKTt0LnB1c2goTG4obixhLG8mJm9bZV0scykpfX1yZXR1cm4gdH1mdW5jdGlvbiBHbihlLHQsbil7cmV0dXJuIGV0KGUpP2UodCxuKTplfXZhciBLbj0oZSx0KT0+ZT09PSEwP3Q6dHlwZW9mIGU9PWBzdHJpbmdgP1plKHQsZSk6dm9pZCAwO2Z1bmN0aW9uIHFuKGUsdCxuLHIsaSl7Zm9yKGxldCBhIG9mIHQpe2xldCB0PUtuKG4sYSk7aWYodCl7ZS5hZGQodCk7bGV0IGE9R24odC5fZmFsbGJhY2ssbixpKTtpZihhIT09dm9pZCAwJiZhIT09biYmYSE9PXIpcmV0dXJuIGF9ZWxzZSBpZih0PT09ITEmJnIhPT12b2lkIDAmJm4hPT1yKXJldHVybiBudWxsfXJldHVybiExfWZ1bmN0aW9uIEpuKGUsdCxuLHIpe2xldCBpPXQuX3Jvb3RTY29wZXMsYT1Hbih0Ll9mYWxsYmFjayxuLHIpLG89Wy4uLmUsLi4uaV0scz1uZXcgU2V0O3MuYWRkKHIpO2xldCBjPVluKHMsbyxuLGF8fG4scik7cmV0dXJuIGM9PT1udWxsfHxhIT09dm9pZCAwJiZhIT09biYmKGM9WW4ocyxvLGEsYyxyKSxjPT09bnVsbCk/ITE6SW4oQXJyYXkuZnJvbShzKSxbYGBdLGksYSwoKT0+WG4odCxuLHIpKX1mdW5jdGlvbiBZbihlLHQsbixyLGkpe2Zvcig7bjspbj1xbihlLHQsbixyLGkpO3JldHVybiBufWZ1bmN0aW9uIFhuKGUsdCxuKXtsZXQgcj1lLl9nZXRUYXJnZXQoKTt0IGluIHJ8fChyW3RdPXt9KTtsZXQgaT1yW3RdO3JldHVybiBqKGkpJiZNKG4pP246aXx8e319ZnVuY3Rpb24gWm4oZSx0LG4scil7bGV0IGk7Zm9yKGxldCBhIG9mIHQpaWYoaT1Rbih6bihhLGUpLG4pLGkhPT12b2lkIDApcmV0dXJuIEJuKGUsaSk/Sm4obixyLGUsaSk6aX1mdW5jdGlvbiBRbihlLHQpe2ZvcihsZXQgbiBvZiB0KXtpZighbiljb250aW51ZTtsZXQgdD1uW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHR9fWZ1bmN0aW9uICRuKGUpe2xldCB0PWUuX2tleXM7cmV0dXJuIHR8fD1lLl9rZXlzPWVyKGUuX3Njb3BlcyksdH1mdW5jdGlvbiBlcihlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKS5maWx0ZXIoZT0+IWUuc3RhcnRzV2l0aChgX2ApKSl0LmFkZChlKTtyZXR1cm4gQXJyYXkuZnJvbSh0KX12YXIgdHI9MioqLTUyfHwxZS0xNCxucj0oZSx0KT0+dDxlLmxlbmd0aCYmIWVbdF0uc2tpcCYmZVt0XSxycj1lPT5lPT09YHhgP2B5YDpgeGA7ZnVuY3Rpb24gaXIoZSx0LG4scil7bGV0IGk9ZS5za2lwP3Q6ZSxhPXQsbz1uLnNraXA/dDpuLHM9eHQoYSxpKSxjPXh0KG8sYSksbD1zLyhzK2MpLHU9Yy8ocytjKTtsPWlzTmFOKGwpPzA6bCx1PWlzTmFOKHUpPzA6dTtsZXQgZD1yKmwsZj1yKnU7cmV0dXJue3ByZXZpb3VzOnt4OmEueC1kKihvLngtaS54KSx5OmEueS1kKihvLnktaS55KX0sbmV4dDp7eDphLngrZiooby54LWkueCkseTphLnkrZiooby55LWkueSl9fX1mdW5jdGlvbiBhcihlLHQsbil7bGV0IHI9ZS5sZW5ndGgsaSxhLG8scyxjLGw9bnIoZSwwKTtmb3IobGV0IHU9MDt1PHItMTsrK3UpaWYoYz1sLGw9bnIoZSx1KzEpLCEoIWN8fCFsKSl7aWYodXQodFt1XSwwLHRyKSl7blt1XT1uW3UrMV09MDtjb250aW51ZX1pPW5bdV0vdFt1XSxhPW5bdSsxXS90W3VdLHM9aSoqMithKioyLCEoczw9OSkmJihvPTMvTWF0aC5zcXJ0KHMpLG5bdV09aSpvKnRbdV0sblt1KzFdPWEqbyp0W3VdKX19ZnVuY3Rpb24gb3IoZSx0LG49YHhgKXtsZXQgcj1ycihuKSxpPWUubGVuZ3RoLGEsbyxzLGM9bnIoZSwwKTtmb3IobGV0IGw9MDtsPGk7KytsKXtpZihvPXMscz1jLGM9bnIoZSxsKzEpLCFzKWNvbnRpbnVlO2xldCBpPXNbbl0sdT1zW3JdO28mJihhPShpLW9bbl0pLzMsc1tgY3AxJHtufWBdPWktYSxzW2BjcDEke3J9YF09dS1hKnRbbF0pLGMmJihhPShjW25dLWkpLzMsc1tgY3AyJHtufWBdPWkrYSxzW2BjcDIke3J9YF09dSthKnRbbF0pfX1mdW5jdGlvbiBzcihlLHQ9YHhgKXtsZXQgbj1ycih0KSxyPWUubGVuZ3RoLGk9QXJyYXkocikuZmlsbCgwKSxhPUFycmF5KHIpLG8scyxjLGw9bnIoZSwwKTtmb3Iobz0wO288cjsrK28paWYocz1jLGM9bCxsPW5yKGUsbysxKSxjKXtpZihsKXtsZXQgZT1sW3RdLWNbdF07aVtvXT1lPT09MD8wOihsW25dLWNbbl0pL2V9YVtvXT1zP2w/bHQoaVtvLTFdKT09PWx0KGlbb10pPyhpW28tMV0raVtvXSkvMjowOmlbby0xXTppW29dfWFyKGUsaSxhKSxvcihlLGEsdCl9ZnVuY3Rpb24gY3IoZSx0LG4pe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihlLG4pLHQpfWZ1bmN0aW9uIGxyKGUsdCl7bGV0IG4scixpLGEsbyxzPUcoZVswXSx0KTtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilvPWEsYT1zLHM9bjxyLTEmJkcoZVtuKzFdLHQpLGEmJihpPWVbbl0sbyYmKGkuY3AxeD1jcihpLmNwMXgsdC5sZWZ0LHQucmlnaHQpLGkuY3AxeT1jcihpLmNwMXksdC50b3AsdC5ib3R0b20pKSxzJiYoaS5jcDJ4PWNyKGkuY3AyeCx0LmxlZnQsdC5yaWdodCksaS5jcDJ5PWNyKGkuY3AyeSx0LnRvcCx0LmJvdHRvbSkpKX1mdW5jdGlvbiB1cihlLHQsbixyLGkpe2xldCBhLG8scyxjO2lmKHQuc3BhbkdhcHMmJihlPWUuZmlsdGVyKGU9PiFlLnNraXApKSx0LmN1YmljSW50ZXJwb2xhdGlvbk1vZGU9PT1gbW9ub3RvbmVgKXNyKGUsaSk7ZWxzZXtsZXQgbj1yP2VbZS5sZW5ndGgtMV06ZVswXTtmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSlzPWVbYV0sYz1pcihuLHMsZVtNYXRoLm1pbihhKzEsby0rIXIpJW9dLHQudGVuc2lvbikscy5jcDF4PWMucHJldmlvdXMueCxzLmNwMXk9Yy5wcmV2aW91cy55LHMuY3AyeD1jLm5leHQueCxzLmNwMnk9Yy5uZXh0Lnksbj1zfXQuY2FwQmV6aWVyUG9pbnRzJiZscihlLG4pfWZ1bmN0aW9uIGRyKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8YHVgJiZ0eXBlb2YgZG9jdW1lbnQ8YHVgfWZ1bmN0aW9uIGZyKGUpe2xldCB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC50b1N0cmluZygpPT09YFtvYmplY3QgU2hhZG93Um9vdF1gJiYodD10Lmhvc3QpLHR9ZnVuY3Rpb24gcHIoZSx0LG4pe2xldCByO3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/KHI9cGFyc2VJbnQoZSwxMCksZS5pbmRleE9mKGAlYCkhPT0tMSYmKHI9ci8xMDAqdC5wYXJlbnROb2RlW25dKSk6cj1lLHJ9dmFyIG1yPWU9PmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk7ZnVuY3Rpb24gaHIoZSx0KXtyZXR1cm4gbXIoZSkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgZ3I9W2B0b3BgLGByaWdodGAsYGJvdHRvbWAsYGxlZnRgXTtmdW5jdGlvbiBfcihlLHQsbil7bGV0IHI9e307bj1uP2AtYCtuOmBgO2ZvcihsZXQgaT0wO2k8NDtpKyspe2xldCBhPWdyW2ldO3JbYV09cGFyc2VGbG9hdChlW3QrYC1gK2Erbl0pfHwwfXJldHVybiByLndpZHRoPXIubGVmdCtyLnJpZ2h0LHIuaGVpZ2h0PXIudG9wK3IuYm90dG9tLHJ9dmFyIHZyPShlLHQsbik9PihlPjB8fHQ+MCkmJighbnx8IW4uc2hhZG93Um9vdCk7ZnVuY3Rpb24geXIoZSx0KXtsZXQgbj1lLnRvdWNoZXMscj1uJiZuLmxlbmd0aD9uWzBdOmUse29mZnNldFg6aSxvZmZzZXRZOmF9PXIsbz0hMSxzLGM7aWYodnIoaSxhLGUudGFyZ2V0KSlzPWksYz1hO2Vsc2V7bGV0IGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzPXIuY2xpZW50WC1lLmxlZnQsYz1yLmNsaWVudFktZS50b3Asbz0hMH1yZXR1cm57eDpzLHk6Yyxib3g6b319ZnVuY3Rpb24gYnIoZSx0KXtpZihgbmF0aXZlYGluIGUpcmV0dXJuIGU7bGV0e2NhbnZhczpuLGN1cnJlbnREZXZpY2VQaXhlbFJhdGlvOnJ9PXQsaT1tcihuKSxhPWkuYm94U2l6aW5nPT09YGJvcmRlci1ib3hgLG89X3IoaSxgcGFkZGluZ2ApLHM9X3IoaSxgYm9yZGVyYCxgd2lkdGhgKSx7eDpjLHk6bCxib3g6dX09eXIoZSxuKSxkPW8ubGVmdCsodSYmcy5sZWZ0KSxmPW8udG9wKyh1JiZzLnRvcCkse3dpZHRoOnAsaGVpZ2h0Om19PXQ7cmV0dXJuIGEmJihwLT1vLndpZHRoK3Mud2lkdGgsbS09by5oZWlnaHQrcy5oZWlnaHQpLHt4Ok1hdGgucm91bmQoKGMtZCkvcCpuLndpZHRoL3IpLHk6TWF0aC5yb3VuZCgobC1mKS9tKm4uaGVpZ2h0L3IpfX1mdW5jdGlvbiB4cihlLHQsbil7bGV0IHIsaTtpZih0PT09dm9pZCAwfHxuPT09dm9pZCAwKXtsZXQgYT1lJiZmcihlKTtpZighYSl0PWUuY2xpZW50V2lkdGgsbj1lLmNsaWVudEhlaWdodDtlbHNle2xldCBlPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1tcihhKSxzPV9yKG8sYGJvcmRlcmAsYHdpZHRoYCksYz1fcihvLGBwYWRkaW5nYCk7dD1lLndpZHRoLWMud2lkdGgtcy53aWR0aCxuPWUuaGVpZ2h0LWMuaGVpZ2h0LXMuaGVpZ2h0LHI9cHIoby5tYXhXaWR0aCxhLGBjbGllbnRXaWR0aGApLGk9cHIoby5tYXhIZWlnaHQsYSxgY2xpZW50SGVpZ2h0YCl9fXJldHVybnt3aWR0aDp0LGhlaWdodDpuLG1heFdpZHRoOnJ8fGl0LG1heEhlaWdodDppfHxpdH19dmFyIFNyPWU9Pk1hdGgucm91bmQoZSoxMCkvMTA7ZnVuY3Rpb24gQ3IoZSx0LG4scil7bGV0IGk9bXIoZSksYT1fcihpLGBtYXJnaW5gKSxvPXByKGkubWF4V2lkdGgsZSxgY2xpZW50V2lkdGhgKXx8aXQscz1wcihpLm1heEhlaWdodCxlLGBjbGllbnRIZWlnaHRgKXx8aXQsYz14cihlLHQsbikse3dpZHRoOmwsaGVpZ2h0OnV9PWM7aWYoaS5ib3hTaXppbmc9PT1gY29udGVudC1ib3hgKXtsZXQgZT1fcihpLGBib3JkZXJgLGB3aWR0aGApLHQ9X3IoaSxgcGFkZGluZ2ApO2wtPXQud2lkdGgrZS53aWR0aCx1LT10LmhlaWdodCtlLmhlaWdodH1yZXR1cm4gbD1NYXRoLm1heCgwLGwtYS53aWR0aCksdT1NYXRoLm1heCgwLHI/bC9yOnUtYS5oZWlnaHQpLGw9U3IoTWF0aC5taW4obCxvLGMubWF4V2lkdGgpKSx1PVNyKE1hdGgubWluKHUscyxjLm1heEhlaWdodCkpLGwmJiF1JiYodT1TcihsLzIpKSwodCE9PXZvaWQgMHx8biE9PXZvaWQgMCkmJnImJmMuaGVpZ2h0JiZ1PmMuaGVpZ2h0JiYodT1jLmhlaWdodCxsPVNyKE1hdGguZmxvb3IodSpyKSkpLHt3aWR0aDpsLGhlaWdodDp1fX1mdW5jdGlvbiB3cihlLHQsbil7bGV0IHI9dHx8MSxpPVNyKGUuaGVpZ2h0KnIpLGE9U3IoZS53aWR0aCpyKTtlLmhlaWdodD1TcihlLmhlaWdodCksZS53aWR0aD1TcihlLndpZHRoKTtsZXQgbz1lLmNhbnZhcztyZXR1cm4gby5zdHlsZSYmKG58fCFvLnN0eWxlLmhlaWdodCYmIW8uc3R5bGUud2lkdGgpJiYoby5zdHlsZS5oZWlnaHQ9YCR7ZS5oZWlnaHR9cHhgLG8uc3R5bGUud2lkdGg9YCR7ZS53aWR0aH1weGApLGUuY3VycmVudERldmljZVBpeGVsUmF0aW8hPT1yfHxvLmhlaWdodCE9PWl8fG8ud2lkdGghPT1hPyhlLmN1cnJlbnREZXZpY2VQaXhlbFJhdGlvPXIsby5oZWlnaHQ9aSxvLndpZHRoPWEsZS5jdHguc2V0VHJhbnNmb3JtKHIsMCwwLHIsMCwwKSwhMCk6ITF9dmFyIFRyPWZ1bmN0aW9uKCl7bGV0IGU9ITE7dHJ5e2xldCB0PXtnZXQgcGFzc2l2ZSgpe3JldHVybiBlPSEwLCExfX07ZHIoKSYmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGB0ZXN0YCxudWxsLHQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGB0ZXN0YCxudWxsLHQpKX1jYXRjaHt9cmV0dXJuIGV9KCk7ZnVuY3Rpb24gRXIoZSx0KXtsZXQgbj1ocihlLHQpLHI9biYmbi5tYXRjaCgvXihcZCspKFwuXGQrKT9weCQvKTtyZXR1cm4gcj8rclsxXTp2b2lkIDB9ZnVuY3Rpb24gRHIoZSx0LG4scil7cmV0dXJue3g6ZS54K24qKHQueC1lLngpLHk6ZS55K24qKHQueS1lLnkpfX1mdW5jdGlvbiBPcihlLHQsbixyKXtyZXR1cm57eDplLngrbioodC54LWUueCkseTpyPT09YG1pZGRsZWA/bjwuNT9lLnk6dC55OnI9PT1gYWZ0ZXJgP248MT9lLnk6dC55Om4+MD90Lnk6ZS55fX1mdW5jdGlvbiBrcihlLHQsbixyKXtsZXQgaT17eDplLmNwMngseTplLmNwMnl9LGE9e3g6dC5jcDF4LHk6dC5jcDF5fSxvPURyKGUsaSxuKSxzPURyKGksYSxuKSxjPURyKGEsdCxuKTtyZXR1cm4gRHIoRHIobyxzLG4pLERyKHMsYyxuKSxuKX12YXIgQXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57eChuKXtyZXR1cm4gZStlK3Qtbn0sc2V0V2lkdGgoZSl7dD1lfSx0ZXh0QWxpZ24oZSl7cmV0dXJuIGU9PT1gY2VudGVyYD9lOmU9PT1gcmlnaHRgP2BsZWZ0YDpgcmlnaHRgfSx4UGx1cyhlLHQpe3JldHVybiBlLXR9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZS10fX19LGpyPWZ1bmN0aW9uKCl7cmV0dXJue3goZSl7cmV0dXJuIGV9LHNldFdpZHRoKGUpe30sdGV4dEFsaWduKGUpe3JldHVybiBlfSx4UGx1cyhlLHQpe3JldHVybiBlK3R9LGxlZnRGb3JMdHIoZSx0KXtyZXR1cm4gZX19fTtmdW5jdGlvbiBNcihlLHQsbil7cmV0dXJuIGU/QXIodCxuKTpqcigpfWZ1bmN0aW9uIE5yKGUsdCl7bGV0IG4scjsodD09PWBsdHJgfHx0PT09YHJ0bGApJiYobj1lLmNhbnZhcy5zdHlsZSxyPVtuLmdldFByb3BlcnR5VmFsdWUoYGRpcmVjdGlvbmApLG4uZ2V0UHJvcGVydHlQcmlvcml0eShgZGlyZWN0aW9uYCldLG4uc2V0UHJvcGVydHkoYGRpcmVjdGlvbmAsdCxgaW1wb3J0YW50YCksZS5wcmV2VGV4dERpcmVjdGlvbj1yKX1mdW5jdGlvbiBQcihlLHQpe3QhPT12b2lkIDAmJihkZWxldGUgZS5wcmV2VGV4dERpcmVjdGlvbixlLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eShgZGlyZWN0aW9uYCx0WzBdLHRbMV0pKX1mdW5jdGlvbiBGcihlKXtyZXR1cm4gZT09PWBhbmdsZWA/e2JldHdlZW46Q3QsY29tcGFyZTpTdCxub3JtYWxpemU6Vn06e2JldHdlZW46VHQsY29tcGFyZTooZSx0KT0+ZS10LG5vcm1hbGl6ZTplPT5lfX1mdW5jdGlvbiBJcih7c3RhcnQ6ZSxlbmQ6dCxjb3VudDpuLGxvb3A6cixzdHlsZTppfSl7cmV0dXJue3N0YXJ0OmUlbixlbmQ6dCVuLGxvb3A6ciYmKHQtZSsxKSVuPT09MCxzdHlsZTppfX1mdW5jdGlvbiBMcihlLHQsbil7bGV0e3Byb3BlcnR5OnIsc3RhcnQ6aSxlbmQ6YX09bix7YmV0d2VlbjpvLG5vcm1hbGl6ZTpzfT1GcihyKSxjPXQubGVuZ3RoLHtzdGFydDpsLGVuZDp1LGxvb3A6ZH09ZSxmLHA7aWYoZCl7Zm9yKGwrPWMsdSs9YyxmPTAscD1jO2Y8cCYmbyhzKHRbbCVjXVtyXSksaSxhKTsrK2YpbC0tLHUtLTtsJT1jLHUlPWN9cmV0dXJuIHU8bCYmKHUrPWMpLHtzdGFydDpsLGVuZDp1LGxvb3A6ZCxzdHlsZTplLnN0eWxlfX1mdW5jdGlvbiBScihlLHQsbil7aWYoIW4pcmV0dXJuW2VdO2xldHtwcm9wZXJ0eTpyLHN0YXJ0OmksZW5kOmF9PW4sbz10Lmxlbmd0aCx7Y29tcGFyZTpzLGJldHdlZW46Yyxub3JtYWxpemU6bH09RnIocikse3N0YXJ0OnUsZW5kOmQsbG9vcDpmLHN0eWxlOnB9PUxyKGUsdCxuKSxtPVtdLGg9ITEsZz1udWxsLF8sdix5LGI9KCk9PmMoaSx5LF8pJiZzKGkseSkhPT0wLHg9KCk9PnMoYSxfKT09PTB8fGMoYSx5LF8pLFM9KCk9Pmh8fGIoKSxDPSgpPT4haHx8eCgpO2ZvcihsZXQgZT11LG49dTtlPD1kOysrZSl2PXRbZSVvXSwhdi5za2lwJiYoXz1sKHZbcl0pLF8hPT15JiYoaD1jKF8saSxhKSxnPT09bnVsbCYmUygpJiYoZz1zKF8saSk9PT0wP2U6biksZyE9PW51bGwmJkMoKSYmKG0ucHVzaChJcih7c3RhcnQ6ZyxlbmQ6ZSxsb29wOmYsY291bnQ6byxzdHlsZTpwfSkpLGc9bnVsbCksbj1lLHk9XykpO3JldHVybiBnIT09bnVsbCYmbS5wdXNoKElyKHtzdGFydDpnLGVuZDpkLGxvb3A6Zixjb3VudDpvLHN0eWxlOnB9KSksbX1mdW5jdGlvbiB6cihlLHQpe2xldCBuPVtdLHI9ZS5zZWdtZW50cztmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IGE9UnIocltpXSxlLnBvaW50cyx0KTthLmxlbmd0aCYmbi5wdXNoKC4uLmEpfXJldHVybiBufWZ1bmN0aW9uIEJyKGUsdCxuLHIpe2xldCBpPTAsYT10LTE7aWYobiYmIXIpZm9yKDtpPHQmJiFlW2ldLnNraXA7KWkrKztmb3IoO2k8dCYmZVtpXS5za2lwOylpKys7Zm9yKGklPXQsbiYmKGErPWkpO2E+aSYmZVthJXRdLnNraXA7KWEtLTtyZXR1cm4gYSU9dCx7c3RhcnQ6aSxlbmQ6YX19ZnVuY3Rpb24gVnIoZSx0LG4scil7bGV0IGk9ZS5sZW5ndGgsYT1bXSxvPXQscz1lW3RdLGM7Zm9yKGM9dCsxO2M8PW47KytjKXtsZXQgbj1lW2MlaV07bi5za2lwfHxuLnN0b3A/cy5za2lwfHwocj0hMSxhLnB1c2goe3N0YXJ0OnQlaSxlbmQ6KGMtMSklaSxsb29wOnJ9KSx0PW89bi5zdG9wP2M6bnVsbCk6KG89YyxzLnNraXAmJih0PWMpKSxzPW59cmV0dXJuIG8hPT1udWxsJiZhLnB1c2goe3N0YXJ0OnQlaSxlbmQ6byVpLGxvb3A6cn0pLGF9ZnVuY3Rpb24gSHIoZSx0KXtsZXQgbj1lLnBvaW50cyxyPWUub3B0aW9ucy5zcGFuR2FwcyxpPW4ubGVuZ3RoO2lmKCFpKXJldHVybltdO2xldCBhPSEhZS5fbG9vcCx7c3RhcnQ6byxlbmQ6c309QnIobixpLGEscik7cmV0dXJuIHI9PT0hMD9VcihlLFt7c3RhcnQ6byxlbmQ6cyxsb29wOmF9XSxuLHQpOlVyKGUsVnIobixvLHM8bz9zK2k6cywhIWUuX2Z1bGxMb29wJiZvPT09MCYmcz09PWktMSksbix0KX1mdW5jdGlvbiBVcihlLHQsbixyKXtyZXR1cm4hcnx8IXIuc2V0Q29udGV4dHx8IW4/dDpXcihlLHQsbixyKX1mdW5jdGlvbiBXcihlLHQsbixyKXtsZXQgaT1lLl9jaGFydC5nZXRDb250ZXh0KCksYT1HcihlLm9wdGlvbnMpLHtfZGF0YXNldEluZGV4Om8sb3B0aW9uczp7c3BhbkdhcHM6c319PWUsYz1uLmxlbmd0aCxsPVtdLHU9YSxkPXRbMF0uc3RhcnQsZj1kO2Z1bmN0aW9uIHAoZSx0LHIsaSl7bGV0IGE9cz8tMToxO2lmKGUhPT10KXtmb3IoZSs9YztuW2UlY10uc2tpcDspZS09YTtmb3IoO25bdCVjXS5za2lwOyl0Kz1hO2UlYyE9PXQlYyYmKGwucHVzaCh7c3RhcnQ6ZSVjLGVuZDp0JWMsbG9vcDpyLHN0eWxlOml9KSx1PWksZD10JWMpfX1mb3IobGV0IGUgb2YgdCl7ZD1zP2Q6ZS5zdGFydDtsZXQgdD1uW2QlY10sYTtmb3IoZj1kKzE7Zjw9ZS5lbmQ7ZisrKXtsZXQgcz1uW2YlY107YT1HcihyLnNldENvbnRleHQoRm4oaSx7dHlwZTpgc2VnbWVudGAscDA6dCxwMTpzLHAwRGF0YUluZGV4OihmLTEpJWMscDFEYXRhSW5kZXg6ZiVjLGRhdGFzZXRJbmRleDpvfSkpKSxLcihhLHUpJiZwKGQsZi0xLGUubG9vcCx1KSx0PXMsdT1hfWQ8Zi0xJiZwKGQsZi0xLGUubG9vcCx1KX1yZXR1cm4gbH1mdW5jdGlvbiBHcihlKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOmUuYmFja2dyb3VuZENvbG9yLGJvcmRlckNhcFN0eWxlOmUuYm9yZGVyQ2FwU3R5bGUsYm9yZGVyRGFzaDplLmJvcmRlckRhc2gsYm9yZGVyRGFzaE9mZnNldDplLmJvcmRlckRhc2hPZmZzZXQsYm9yZGVySm9pblN0eWxlOmUuYm9yZGVySm9pblN0eWxlLGJvcmRlcldpZHRoOmUuYm9yZGVyV2lkdGgsYm9yZGVyQ29sb3I6ZS5ib3JkZXJDb2xvcn19ZnVuY3Rpb24gS3IoZSx0KXtpZighdClyZXR1cm4hMTtsZXQgbj1bXSxyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEd0KHQpPyhuLmluY2x1ZGVzKHQpfHxuLnB1c2godCksbi5pbmRleE9mKHQpKTp0fTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSxyKSE9PUpTT04uc3RyaW5naWZ5KHQscil9ZnVuY3Rpb24gcXIoZSx0LG4pe3JldHVybiBlLm9wdGlvbnMuY2xpcD9lW25dOnRbbl19ZnVuY3Rpb24gSnIoZSx0KXtsZXR7eFNjYWxlOm4seVNjYWxlOnJ9PWU7cmV0dXJuIG4mJnI/e2xlZnQ6cXIobix0LGBsZWZ0YCkscmlnaHQ6cXIobix0LGByaWdodGApLHRvcDpxcihyLHQsYHRvcGApLGJvdHRvbTpxcihyLHQsYGJvdHRvbWApfTp0fWZ1bmN0aW9uIFlyKGUsdCl7bGV0IG49dC5fY2xpcDtpZihuLmRpc2FibGVkKXJldHVybiExO2xldCByPUpyKHQsZS5jaGFydEFyZWEpO3JldHVybntsZWZ0Om4ubGVmdD09PSExPzA6ci5sZWZ0LShuLmxlZnQ9PT0hMD8wOm4ubGVmdCkscmlnaHQ6bi5yaWdodD09PSExP2Uud2lkdGg6ci5yaWdodCsobi5yaWdodD09PSEwPzA6bi5yaWdodCksdG9wOm4udG9wPT09ITE/MDpyLnRvcC0obi50b3A9PT0hMD8wOm4udG9wKSxib3R0b206bi5ib3R0b209PT0hMT9lLmhlaWdodDpyLmJvdHRvbSsobi5ib3R0b209PT0hMD8wOm4uYm90dG9tKX19dmFyIEo9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX2NoYXJ0cz1uZXcgTWFwLHRoaXMuX3J1bm5pbmc9ITEsdGhpcy5fbGFzdERhdGU9dm9pZCAwfV9ub3RpZnkoZSx0LG4scil7bGV0IGk9dC5saXN0ZW5lcnNbcl0sYT10LmR1cmF0aW9uO2kuZm9yRWFjaChyPT5yKHtjaGFydDplLGluaXRpYWw6dC5pbml0aWFsLG51bVN0ZXBzOmEsY3VycmVudFN0ZXA6TWF0aC5taW4obi10LnN0YXJ0LGEpfSkpfV9yZWZyZXNoKCl7dGhpcy5fcmVxdWVzdHx8PSh0aGlzLl9ydW5uaW5nPSEwLFB0LmNhbGwod2luZG93LCgpPT57dGhpcy5fdXBkYXRlKCksdGhpcy5fcmVxdWVzdD1udWxsLHRoaXMuX3J1bm5pbmcmJnRoaXMuX3JlZnJlc2goKX0pKX1fdXBkYXRlKGU9RGF0ZS5ub3coKSl7bGV0IHQ9MDt0aGlzLl9jaGFydHMuZm9yRWFjaCgobixyKT0+e2lmKCFuLnJ1bm5pbmd8fCFuLml0ZW1zLmxlbmd0aClyZXR1cm47bGV0IGk9bi5pdGVtcyxhPWkubGVuZ3RoLTEsbz0hMSxzO2Zvcig7YT49MDstLWEpcz1pW2FdLHMuX2FjdGl2ZT8ocy5fdG90YWw+bi5kdXJhdGlvbiYmKG4uZHVyYXRpb249cy5fdG90YWwpLHMudGljayhlKSxvPSEwKTooaVthXT1pW2kubGVuZ3RoLTFdLGkucG9wKCkpO28mJihyLmRyYXcoKSx0aGlzLl9ub3RpZnkocixuLGUsYHByb2dyZXNzYCkpLGkubGVuZ3RofHwobi5ydW5uaW5nPSExLHRoaXMuX25vdGlmeShyLG4sZSxgY29tcGxldGVgKSxuLmluaXRpYWw9ITEpLHQrPWkubGVuZ3RofSksdGhpcy5fbGFzdERhdGU9ZSx0PT09MCYmKHRoaXMuX3J1bm5pbmc9ITEpfV9nZXRBbmltcyhlKXtsZXQgdD10aGlzLl9jaGFydHMsbj10LmdldChlKTtyZXR1cm4gbnx8KG49e3J1bm5pbmc6ITEsaW5pdGlhbDohMCxpdGVtczpbXSxsaXN0ZW5lcnM6e2NvbXBsZXRlOltdLHByb2dyZXNzOltdfX0sdC5zZXQoZSxuKSksbn1saXN0ZW4oZSx0LG4pe3RoaXMuX2dldEFuaW1zKGUpLmxpc3RlbmVyc1t0XS5wdXNoKG4pfWFkZChlLHQpeyF0fHwhdC5sZW5ndGh8fHRoaXMuX2dldEFuaW1zKGUpLml0ZW1zLnB1c2goLi4udCl9aGFzKGUpe3JldHVybiB0aGlzLl9nZXRBbmltcyhlKS5pdGVtcy5sZW5ndGg+MH1zdGFydChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3QmJih0LnJ1bm5pbmc9ITAsdC5zdGFydD1EYXRlLm5vdygpLHQuZHVyYXRpb249dC5pdGVtcy5yZWR1Y2UoKGUsdCk9Pk1hdGgubWF4KGUsdC5fZHVyYXRpb24pLDApLHRoaXMuX3JlZnJlc2goKSl9cnVubmluZyhlKXtpZighdGhpcy5fcnVubmluZylyZXR1cm4hMTtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO3JldHVybiEoIXR8fCF0LnJ1bm5pbmd8fCF0Lml0ZW1zLmxlbmd0aCl9c3RvcChlKXtsZXQgdD10aGlzLl9jaGFydHMuZ2V0KGUpO2lmKCF0fHwhdC5pdGVtcy5sZW5ndGgpcmV0dXJuO2xldCBuPXQuaXRlbXMscj1uLmxlbmd0aC0xO2Zvcig7cj49MDstLXIpbltyXS5jYW5jZWwoKTt0Lml0ZW1zPVtdLHRoaXMuX25vdGlmeShlLHQsRGF0ZS5ub3coKSxgY29tcGxldGVgKX1yZW1vdmUoZSl7cmV0dXJuIHRoaXMuX2NoYXJ0cy5kZWxldGUoZSl9fSxYcj1gdHJhbnNwYXJlbnRgLFpyPXtib29sZWFuKGUsdCxuKXtyZXR1cm4gbj4uNT90OmV9LGNvbG9yKGUsdCxuKXtsZXQgcj1LdChlfHxYciksaT1yLnZhbGlkJiZLdCh0fHxYcik7cmV0dXJuIGkmJmkudmFsaWQ/aS5taXgocixuKS5oZXhTdHJpbmcoKTp0fSxudW1iZXIoZSx0LG4pe3JldHVybiBlKyh0LWUpKm59fSxRcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixyKXtsZXQgaT10W25dO3I9Tm4oW2UudG8scixpLGUuZnJvbV0pO2xldCBhPU5uKFtlLmZyb20saSxyXSk7dGhpcy5fYWN0aXZlPSEwLHRoaXMuX2ZuPWUuZm58fFpyW2UudHlwZXx8dHlwZW9mIGFdLHRoaXMuX2Vhc2luZz1XdFtlLmVhc2luZ118fFd0LmxpbmVhcix0aGlzLl9zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCkrKGUuZGVsYXl8fDApKSx0aGlzLl9kdXJhdGlvbj10aGlzLl90b3RhbD1NYXRoLmZsb29yKGUuZHVyYXRpb24pLHRoaXMuX2xvb3A9ISFlLmxvb3AsdGhpcy5fdGFyZ2V0PXQsdGhpcy5fcHJvcD1uLHRoaXMuX2Zyb209YSx0aGlzLl90bz1yLHRoaXMuX3Byb21pc2VzPXZvaWQgMH1hY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXVwZGF0ZShlLHQsbil7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9ub3RpZnkoITEpO2xldCByPXRoaXMuX3RhcmdldFt0aGlzLl9wcm9wXSxpPW4tdGhpcy5fc3RhcnQsYT10aGlzLl9kdXJhdGlvbi1pO3RoaXMuX3N0YXJ0PW4sdGhpcy5fZHVyYXRpb249TWF0aC5mbG9vcihNYXRoLm1heChhLGUuZHVyYXRpb24pKSx0aGlzLl90b3RhbCs9aSx0aGlzLl9sb29wPSEhZS5sb29wLHRoaXMuX3RvPU5uKFtlLnRvLHQscixlLmZyb21dKSx0aGlzLl9mcm9tPU5uKFtlLmZyb20scix0XSl9fWNhbmNlbCgpe3RoaXMuX2FjdGl2ZSYmKHRoaXMudGljayhEYXRlLm5vdygpKSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbm90aWZ5KCExKSl9dGljayhlKXtsZXQgdD1lLXRoaXMuX3N0YXJ0LG49dGhpcy5fZHVyYXRpb24scj10aGlzLl9wcm9wLGk9dGhpcy5fZnJvbSxhPXRoaXMuX2xvb3Asbz10aGlzLl90byxzO2lmKHRoaXMuX2FjdGl2ZT1pIT09byYmKGF8fHQ8biksIXRoaXMuX2FjdGl2ZSl7dGhpcy5fdGFyZ2V0W3JdPW8sdGhpcy5fbm90aWZ5KCEwKTtyZXR1cm59aWYodDwwKXt0aGlzLl90YXJnZXRbcl09aTtyZXR1cm59cz10L24lMixzPWEmJnM+MT8yLXM6cyxzPXRoaXMuX2Vhc2luZyhNYXRoLm1pbigxLE1hdGgubWF4KDAscykpKSx0aGlzLl90YXJnZXRbcl09dGhpcy5fZm4oaSxvLHMpfXdhaXQoKXtsZXQgZT10aGlzLl9wcm9taXNlc3x8PVtdO3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2UucHVzaCh7cmVzOnQscmVqOm59KX0pfV9ub3RpZnkoZSl7bGV0IHQ9ZT9gcmVzYDpgcmVqYCxuPXRoaXMuX3Byb21pc2VzfHxbXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyluW2VdW3RdKCl9fSwkcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2NoYXJ0PWUsdGhpcy5fcHJvcGVydGllcz1uZXcgTWFwLHRoaXMuY29uZmlndXJlKHQpfWNvbmZpZ3VyZShlKXtpZighTShlKSlyZXR1cm47bGV0IHQ9T2JqZWN0LmtleXMoVy5hbmltYXRpb24pLG49dGhpcy5fcHJvcGVydGllcztPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKHI9PntsZXQgaT1lW3JdO2lmKCFNKGkpKXJldHVybjtsZXQgYT17fTtmb3IobGV0IGUgb2YgdClhW2VdPWlbZV07KGooaS5wcm9wZXJ0aWVzKSYmaS5wcm9wZXJ0aWVzfHxbcl0pLmZvckVhY2goZT0+eyhlPT09cnx8IW4uaGFzKGUpKSYmbi5zZXQoZSxhKX0pfSl9X2FuaW1hdGVPcHRpb25zKGUsdCl7bGV0IG49dC5vcHRpb25zLHI9dGkoZSxuKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9jcmVhdGVBbmltYXRpb25zKHIsbik7cmV0dXJuIG4uJHNoYXJlZCYmZWkoZS5vcHRpb25zLiRhbmltYXRpb25zLG4pLnRoZW4oKCk9PntlLm9wdGlvbnM9bn0sKCk9Pnt9KSxpfV9jcmVhdGVBbmltYXRpb25zKGUsdCl7bGV0IG49dGhpcy5fcHJvcGVydGllcyxyPVtdLGk9ZS4kYW5pbWF0aW9uc3x8PXt9LGE9T2JqZWN0LmtleXModCksbz1EYXRlLm5vdygpLHM7Zm9yKHM9YS5sZW5ndGgtMTtzPj0wOy0tcyl7bGV0IGM9YVtzXTtpZihjLmNoYXJBdCgwKT09PWAkYCljb250aW51ZTtpZihjPT09YG9wdGlvbnNgKXtyLnB1c2goLi4udGhpcy5fYW5pbWF0ZU9wdGlvbnMoZSx0KSk7Y29udGludWV9bGV0IGw9dFtjXSx1PWlbY10sZD1uLmdldChjKTtpZih1KXtpZihkJiZ1LmFjdGl2ZSgpKXt1LnVwZGF0ZShkLGwsbyk7Y29udGludWV9dS5jYW5jZWwoKX1pZighZHx8IWQuZHVyYXRpb24pe2VbY109bDtjb250aW51ZX1pW2NdPXU9bmV3IFFyKGQsZSxjLGwpLHIucHVzaCh1KX1yZXR1cm4gcn11cGRhdGUoZSx0KXtpZih0aGlzLl9wcm9wZXJ0aWVzLnNpemU9PT0wKXtPYmplY3QuYXNzaWduKGUsdCk7cmV0dXJufWxldCBuPXRoaXMuX2NyZWF0ZUFuaW1hdGlvbnMoZSx0KTtpZihuLmxlbmd0aClyZXR1cm4gSi5hZGQodGhpcy5fY2hhcnQsbiksITB9fTtmdW5jdGlvbiBlaShlLHQpe2xldCBuPVtdLHI9T2JqZWN0LmtleXModCk7Zm9yKGxldCB0PTA7dDxyLmxlbmd0aDt0Kyspe2xldCBpPWVbclt0XV07aSYmaS5hY3RpdmUoKSYmbi5wdXNoKGkud2FpdCgpKX1yZXR1cm4gUHJvbWlzZS5hbGwobil9ZnVuY3Rpb24gdGkoZSx0KXtpZighdClyZXR1cm47bGV0IG49ZS5vcHRpb25zO2lmKCFuKXtlLm9wdGlvbnM9dDtyZXR1cm59cmV0dXJuIG4uJHNoYXJlZCYmKGUub3B0aW9ucz1uPU9iamVjdC5hc3NpZ24oe30sbix7JHNoYXJlZDohMSwkYW5pbWF0aW9uczp7fX0pKSxufWZ1bmN0aW9uIG5pKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zfHx7fSxyPW4ucmV2ZXJzZSxpPW4ubWluPT09dm9pZCAwP3Q6MCxhPW4ubWF4PT09dm9pZCAwP3Q6MDtyZXR1cm57c3RhcnQ6cj9hOmksZW5kOnI/aTphfX1mdW5jdGlvbiByaShlLHQsbil7aWYobj09PSExKXJldHVybiExO2xldCByPW5pKGUsbiksaT1uaSh0LG4pO3JldHVybnt0b3A6aS5lbmQscmlnaHQ6ci5lbmQsYm90dG9tOmkuc3RhcnQsbGVmdDpyLnN0YXJ0fX1mdW5jdGlvbiBpaShlKXtsZXQgdCxuLHIsaTtyZXR1cm4gTShlKT8odD1lLnRvcCxuPWUucmlnaHQscj1lLmJvdHRvbSxpPWUubGVmdCk6dD1uPXI9aT1lLHt0b3A6dCxyaWdodDpuLGJvdHRvbTpyLGxlZnQ6aSxkaXNhYmxlZDplPT09ITF9fWZ1bmN0aW9uIGFpKGUsdCl7bGV0IG49W10scj1lLl9nZXRTb3J0ZWREYXRhc2V0TWV0YXModCksaSxhO2ZvcihpPTAsYT1yLmxlbmd0aDtpPGE7KytpKW4ucHVzaChyW2ldLmluZGV4KTtyZXR1cm4gbn1mdW5jdGlvbiBvaShlLHQsbixyPXt9KXtsZXQgaT1lLmtleXMsYT1yLm1vZGU9PT1gc2luZ2xlYCxvLHMsYyxsO2lmKHQ9PT1udWxsKXJldHVybjtsZXQgdT0hMTtmb3Iobz0wLHM9aS5sZW5ndGg7bzxzOysrbyl7aWYoYz0raVtvXSxjPT09bil7aWYodT0hMCxyLmFsbCljb250aW51ZTticmVha31sPWUudmFsdWVzW2NdLE4obCkmJihhfHx0PT09MHx8bHQodCk9PT1sdChsKSkmJih0Kz1sKX1yZXR1cm4hdSYmIXIuYWxsPzA6dH1mdW5jdGlvbiBzaShlLHQpe2xldHtpU2NhbGU6bix2U2NhbGU6cn09dCxpPW4uYXhpcz09PWB4YD9geGA6YHlgLGE9ci5heGlzPT09YHhgP2B4YDpgeWAsbz1PYmplY3Qua2V5cyhlKSxzPUFycmF5KG8ubGVuZ3RoKSxjLGwsdTtmb3IoYz0wLGw9by5sZW5ndGg7YzxsOysrYyl1PW9bY10sc1tjXT17W2ldOnUsW2FdOmVbdV19O3JldHVybiBzfWZ1bmN0aW9uIGNpKGUsdCl7bGV0IG49ZSYmZS5vcHRpb25zLnN0YWNrZWQ7cmV0dXJuIG58fG49PT12b2lkIDAmJnQuc3RhY2shPT12b2lkIDB9ZnVuY3Rpb24gbGkoZSx0LG4pe3JldHVybmAke2UuaWR9LiR7dC5pZH0uJHtuLnN0YWNrfHxuLnR5cGV9YH1mdW5jdGlvbiB1aShlKXtsZXR7bWluOnQsbWF4Om4sbWluRGVmaW5lZDpyLG1heERlZmluZWQ6aX09ZS5nZXRVc2VyQm91bmRzKCk7cmV0dXJue21pbjpyP3Q6LTEvMCxtYXg6aT9uOjEvMH19ZnVuY3Rpb24gZGkoZSx0LG4pe2xldCByPWVbdF18fChlW3RdPXt9KTtyZXR1cm4gcltuXXx8KHJbbl09e30pfWZ1bmN0aW9uIGZpKGUsdCxuLHIpe2ZvcihsZXQgaSBvZiB0LmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKHIpLnJldmVyc2UoKSl7bGV0IHQ9ZVtpLmluZGV4XTtpZihuJiZ0PjB8fCFuJiZ0PDApcmV0dXJuIGkuaW5kZXh9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcGkoZSx0KXtsZXR7Y2hhcnQ6bixfY2FjaGVkTWV0YTpyfT1lLGk9bi5fc3RhY2tzfHw9e30se2lTY2FsZTphLHZTY2FsZTpvLGluZGV4OnN9PXIsYz1hLmF4aXMsbD1vLmF4aXMsdT1saShhLG8sciksZD10Lmxlbmd0aCxmO2ZvcihsZXQgZT0wO2U8ZDsrK2Upe2xldCBuPXRbZV0se1tjXTphLFtsXTpkfT1uLHA9bi5fc3RhY2tzfHw9e307Zj1wW2xdPWRpKGksdSxhKSxmW3NdPWQsZi5fdG9wPWZpKGYsbywhMCxyLnR5cGUpLGYuX2JvdHRvbT1maShmLG8sITEsci50eXBlKTtsZXQgbT1mLl92aXN1YWxWYWx1ZXN8fChmLl92aXN1YWxWYWx1ZXM9e30pO21bc109ZH19ZnVuY3Rpb24gbWkoZSx0KXtsZXQgbj1lLnNjYWxlcztyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9Pm5bZV0uYXhpcz09PXQpLnNoaWZ0KCl9ZnVuY3Rpb24gaGkoZSx0KXtyZXR1cm4gRm4oZSx7YWN0aXZlOiExLGRhdGFzZXQ6dm9pZCAwLGRhdGFzZXRJbmRleDp0LGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YXNldGB9KX1mdW5jdGlvbiBnaShlLHQsbil7cmV0dXJuIEZuKGUse2FjdGl2ZTohMSxkYXRhSW5kZXg6dCxwYXJzZWQ6dm9pZCAwLHJhdzp2b2lkIDAsZWxlbWVudDpuLGluZGV4OnQsbW9kZTpgZGVmYXVsdGAsdHlwZTpgZGF0YWB9KX1mdW5jdGlvbiBfaShlLHQpe2xldCBuPWUuY29udHJvbGxlci5pbmRleCxyPWUudlNjYWxlJiZlLnZTY2FsZS5heGlzO2lmKHIpe3R8fD1lLl9wYXJzZWQ7Zm9yKGxldCBlIG9mIHQpe2xldCB0PWUuX3N0YWNrcztpZighdHx8dFtyXT09PXZvaWQgMHx8dFtyXVtuXT09PXZvaWQgMClyZXR1cm47ZGVsZXRlIHRbcl1bbl0sdFtyXS5fdmlzdWFsVmFsdWVzIT09dm9pZCAwJiZ0W3JdLl92aXN1YWxWYWx1ZXNbbl0hPT12b2lkIDAmJmRlbGV0ZSB0W3JdLl92aXN1YWxWYWx1ZXNbbl19fX12YXIgdmk9ZT0+ZT09PWByZXNldGB8fGU9PT1gbm9uZWAseWk9KGUsdCk9PnQ/ZTpPYmplY3QuYXNzaWduKHt9LGUpLGJpPShlLHQsbik9PmUmJiF0LmhpZGRlbiYmdC5fc3RhY2tlZCYme2tleXM6YWkobiwhMCksdmFsdWVzOm51bGx9LHhpPWNsYXNze3N0YXRpYyBkZWZhdWx0cz17fTtzdGF0aWMgZGF0YXNldEVsZW1lbnRUeXBlPW51bGw7c3RhdGljIGRhdGFFbGVtZW50VHlwZT1udWxsO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jaGFydD1lLHRoaXMuX2N0eD1lLmN0eCx0aGlzLmluZGV4PXQsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e30sdGhpcy5fY2FjaGVkTWV0YT10aGlzLmdldE1ldGEoKSx0aGlzLl90eXBlPXRoaXMuX2NhY2hlZE1ldGEudHlwZSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuX3BhcnNpbmc9ITEsdGhpcy5fZGF0YT12b2lkIDAsdGhpcy5fb2JqZWN0RGF0YT12b2lkIDAsdGhpcy5fc2hhcmVkT3B0aW9ucz12b2lkIDAsdGhpcy5fZHJhd1N0YXJ0PXZvaWQgMCx0aGlzLl9kcmF3Q291bnQ9dm9pZCAwLHRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZz0hMSx0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbj0hMSx0aGlzLiRjb250ZXh0PXZvaWQgMCx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFzZXRFbGVtZW50VHlwZSx0aGlzLmRhdGFFbGVtZW50VHlwZT1uZXcudGFyZ2V0LmRhdGFFbGVtZW50VHlwZSx0aGlzLmluaXRpYWxpemUoKX1pbml0aWFsaXplKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLmNvbmZpZ3VyZSgpLHRoaXMubGlua1NjYWxlcygpLGUuX3N0YWNrZWQ9Y2koZS52U2NhbGUsZSksdGhpcy5hZGRFbGVtZW50cygpLHRoaXMub3B0aW9ucy5maWxsJiYhdGhpcy5jaGFydC5pc1BsdWdpbkVuYWJsZWQoYGZpbGxlcmApJiZjb25zb2xlLndhcm4oYFRyaWVkIHRvIHVzZSB0aGUgJ2ZpbGwnIG9wdGlvbiB3aXRob3V0IHRoZSAnRmlsbGVyJyBwbHVnaW4gZW5hYmxlZC4gUGxlYXNlIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlICdGaWxsZXInIHBsdWdpbiBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBkaXNhYmxlZCBpbiB0aGUgb3B0aW9uc2ApfXVwZGF0ZUluZGV4KGUpe3RoaXMuaW5kZXghPT1lJiZfaSh0aGlzLl9jYWNoZWRNZXRhKSx0aGlzLmluZGV4PWV9bGlua1NjYWxlcygpe2xldCBlPXRoaXMuY2hhcnQsdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0oZSx0LG4scik9PmU9PT1geGA/dDplPT09YHJgP3I6bixpPXQueEF4aXNJRD1GKG4ueEF4aXNJRCxtaShlLGB4YCkpLGE9dC55QXhpc0lEPUYobi55QXhpc0lELG1pKGUsYHlgKSksbz10LnJBeGlzSUQ9RihuLnJBeGlzSUQsbWkoZSxgcmApKSxzPXQuaW5kZXhBeGlzLGM9dC5pQXhpc0lEPXIocyxpLGEsbyksbD10LnZBeGlzSUQ9cihzLGEsaSxvKTt0LnhTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoaSksdC55U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGEpLHQuclNjYWxlPXRoaXMuZ2V0U2NhbGVGb3JJZChvKSx0LmlTY2FsZT10aGlzLmdldFNjYWxlRm9ySWQoYyksdC52U2NhbGU9dGhpcy5nZXRTY2FsZUZvcklkKGwpfWdldERhdGFzZXQoKXtyZXR1cm4gdGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW3RoaXMuaW5kZXhdfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5jaGFydC5nZXREYXRhc2V0TWV0YSh0aGlzLmluZGV4KX1nZXRTY2FsZUZvcklkKGUpe3JldHVybiB0aGlzLmNoYXJ0LnNjYWxlc1tlXX1fZ2V0T3RoZXJTY2FsZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3JldHVybiBlPT09dC5pU2NhbGU/dC52U2NhbGU6dC5pU2NhbGV9cmVzZXQoKXt0aGlzLl91cGRhdGUoYHJlc2V0YCl9X2Rlc3Ryb3koKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhO3RoaXMuX2RhdGEmJk10KHRoaXMuX2RhdGEsdGhpcyksZS5fc3RhY2tlZCYmX2koZSl9X2RhdGFDaGVjaygpe2xldCBlPXRoaXMuZ2V0RGF0YXNldCgpLHQ9ZS5kYXRhfHw9W10sbj10aGlzLl9kYXRhO2lmKE0odCkpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGE7dGhpcy5fZGF0YT1zaSh0LGUpfWVsc2UgaWYobiE9PXQpe2lmKG4pe010KG4sdGhpcyk7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTtfaShlKSxlLl9wYXJzZWQ9W119dCYmT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmanQodCx0aGlzKSx0aGlzLl9zeW5jTGlzdD1bXSx0aGlzLl9kYXRhPXR9fWFkZEVsZW1lbnRzKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTt0aGlzLl9kYXRhQ2hlY2soKSx0aGlzLmRhdGFzZXRFbGVtZW50VHlwZSYmKGUuZGF0YXNldD1uZXcgdGhpcy5kYXRhc2V0RWxlbWVudFR5cGUpfWJ1aWxkT3JVcGRhdGVFbGVtZW50cyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLG49dGhpcy5nZXREYXRhc2V0KCkscj0hMTt0aGlzLl9kYXRhQ2hlY2soKTtsZXQgaT10Ll9zdGFja2VkO3QuX3N0YWNrZWQ9Y2kodC52U2NhbGUsdCksdC5zdGFjayE9PW4uc3RhY2smJihyPSEwLF9pKHQpLHQuc3RhY2s9bi5zdGFjayksdGhpcy5fcmVzeW5jRWxlbWVudHMoZSksKHJ8fGkhPT10Ll9zdGFja2VkKSYmKHBpKHRoaXMsdC5fcGFyc2VkKSx0Ll9zdGFja2VkPWNpKHQudlNjYWxlLHQpKX1jb25maWd1cmUoKXtsZXQgZT10aGlzLmNoYXJ0LmNvbmZpZyx0PWUuZGF0YXNldFNjb3BlS2V5cyh0aGlzLl90eXBlKSxuPWUuZ2V0T3B0aW9uU2NvcGVzKHRoaXMuZ2V0RGF0YXNldCgpLHQsITApO3RoaXMub3B0aW9ucz1lLmNyZWF0ZVJlc29sdmVyKG4sdGhpcy5nZXRDb250ZXh0KCkpLHRoaXMuX3BhcnNpbmc9dGhpcy5vcHRpb25zLnBhcnNpbmcsdGhpcy5fY2FjaGVkRGF0YU9wdHM9e319cGFyc2UoZSx0KXtsZXR7X2NhY2hlZE1ldGE6bixfZGF0YTpyfT10aGlzLHtpU2NhbGU6aSxfc3RhY2tlZDphfT1uLG89aS5heGlzLHM9ZT09PTAmJnQ9PT1yLmxlbmd0aHx8bi5fc29ydGVkLGM9ZT4wJiZuLl9wYXJzZWRbZS0xXSxsLHUsZDtpZih0aGlzLl9wYXJzaW5nPT09ITEpbi5fcGFyc2VkPXIsbi5fc29ydGVkPSEwLGQ9cjtlbHNle2Q9aihyW2VdKT90aGlzLnBhcnNlQXJyYXlEYXRhKG4scixlLHQpOk0ocltlXSk/dGhpcy5wYXJzZU9iamVjdERhdGEobixyLGUsdCk6dGhpcy5wYXJzZVByaW1pdGl2ZURhdGEobixyLGUsdCk7bGV0IGk9KCk9PnVbb109PT1udWxsfHxjJiZ1W29dPGNbb107Zm9yKGw9MDtsPHQ7KytsKW4uX3BhcnNlZFtsK2VdPXU9ZFtsXSxzJiYoaSgpJiYocz0hMSksYz11KTtuLl9zb3J0ZWQ9c31hJiZwaSh0aGlzLGQpfXBhcnNlUHJpbWl0aXZlRGF0YShlLHQsbixyKXtsZXR7aVNjYWxlOmksdlNjYWxlOmF9PWUsbz1pLmF4aXMscz1hLmF4aXMsYz1pLmdldExhYmVscygpLGw9aT09PWEsdT1BcnJheShyKSxkLGYscDtmb3IoZD0wLGY9cjtkPGY7KytkKXA9ZCtuLHVbZF09e1tvXTpsfHxpLnBhcnNlKGNbcF0scCksW3NdOmEucGFyc2UodFtwXSxwKX07cmV0dXJuIHV9cGFyc2VBcnJheURhdGEoZSx0LG4scil7bGV0e3hTY2FsZTppLHlTY2FsZTphfT1lLG89QXJyYXkocikscyxjLGwsdTtmb3Iocz0wLGM9cjtzPGM7KytzKWw9cytuLHU9dFtsXSxvW3NdPXt4OmkucGFyc2UodVswXSxsKSx5OmEucGFyc2UodVsxXSxsKX07cmV0dXJuIG99cGFyc2VPYmplY3REYXRhKGUsdCxuLHIpe2xldHt4U2NhbGU6aSx5U2NhbGU6YX09ZSx7eEF4aXNLZXk6bz1geGAseUF4aXNLZXk6cz1geWB9PXRoaXMuX3BhcnNpbmcsYz1BcnJheShyKSxsLHUsZCxmO2ZvcihsPTAsdT1yO2w8dTsrK2wpZD1sK24sZj10W2RdLGNbbF09e3g6aS5wYXJzZShaZShmLG8pLGQpLHk6YS5wYXJzZShaZShmLHMpLGQpfTtyZXR1cm4gY31nZXRQYXJzZWQoZSl7cmV0dXJuIHRoaXMuX2NhY2hlZE1ldGEuX3BhcnNlZFtlXX1nZXREYXRhRWxlbWVudChlKXtyZXR1cm4gdGhpcy5fY2FjaGVkTWV0YS5kYXRhW2VdfWFwcGx5U3RhY2soZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWRNZXRhLGE9dFtlLmF4aXNdO3JldHVybiBvaSh7a2V5czphaShyLCEwKSx2YWx1ZXM6dC5fc3RhY2tzW2UuYXhpc10uX3Zpc3VhbFZhbHVlc30sYSxpLmluZGV4LHttb2RlOm59KX11cGRhdGVSYW5nZUZyb21QYXJzZWQoZSx0LG4scil7bGV0IGk9blt0LmF4aXNdLGE9aT09PW51bGw/TmFOOmksbz1yJiZuLl9zdGFja3NbdC5heGlzXTtyJiZvJiYoci52YWx1ZXM9byxhPW9pKHIsaSx0aGlzLl9jYWNoZWRNZXRhLmluZGV4KSksZS5taW49TWF0aC5taW4oZS5taW4sYSksZS5tYXg9TWF0aC5tYXgoZS5tYXgsYSl9Z2V0TWluTWF4KGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uX3BhcnNlZCxpPW4uX3NvcnRlZCYmZT09PW4uaVNjYWxlLGE9ci5sZW5ndGgsbz10aGlzLl9nZXRPdGhlclNjYWxlKGUpLHM9YmkodCxuLHRoaXMuY2hhcnQpLGM9e21pbjoxLzAsbWF4Oi0xLzB9LHttaW46bCxtYXg6dX09dWkobyksZCxmO2Z1bmN0aW9uIHAoKXtmPXJbZF07bGV0IHQ9ZltvLmF4aXNdO3JldHVybiFOKGZbZS5heGlzXSl8fGw+dHx8dTx0fWZvcihkPTA7ZDxhJiYhKCFwKCkmJih0aGlzLnVwZGF0ZVJhbmdlRnJvbVBhcnNlZChjLGUsZixzKSxpKSk7KytkKTtpZihpKXtmb3IoZD1hLTE7ZD49MDstLWQpaWYoIXAoKSl7dGhpcy51cGRhdGVSYW5nZUZyb21QYXJzZWQoYyxlLGYscyk7YnJlYWt9fXJldHVybiBjfWdldEFsbFBhcnNlZFZhbHVlcyhlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLl9wYXJzZWQsbj1bXSxyLGksYTtmb3Iocj0wLGk9dC5sZW5ndGg7cjxpOysrcilhPXRbcl1bZS5heGlzXSxOKGEpJiZuLnB1c2goYSk7cmV0dXJuIG59Z2V0TWF4T3ZlcmZsb3coKXtyZXR1cm4hMX1nZXRMYWJlbEFuZFZhbHVlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEsbj10LmlTY2FsZSxyPXQudlNjYWxlLGk9dGhpcy5nZXRQYXJzZWQoZSk7cmV0dXJue2xhYmVsOm4/YGArbi5nZXRMYWJlbEZvclZhbHVlKGlbbi5heGlzXSk6YGAsdmFsdWU6cj9gYCtyLmdldExhYmVsRm9yVmFsdWUoaVtyLmF4aXNdKTpgYH19X3VwZGF0ZShlKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhO3RoaXMudXBkYXRlKGV8fGBkZWZhdWx0YCksdC5fY2xpcD1paShGKHRoaXMub3B0aW9ucy5jbGlwLHJpKHQueFNjYWxlLHQueVNjYWxlLHRoaXMuZ2V0TWF4T3ZlcmZsb3coKSkpKX11cGRhdGUoZSl7fWRyYXcoKXtsZXQgZT10aGlzLl9jdHgsdD10aGlzLmNoYXJ0LG49dGhpcy5fY2FjaGVkTWV0YSxyPW4uZGF0YXx8W10saT10LmNoYXJ0QXJlYSxhPVtdLG89dGhpcy5fZHJhd1N0YXJ0fHwwLHM9dGhpcy5fZHJhd0NvdW50fHxyLmxlbmd0aC1vLGM9dGhpcy5vcHRpb25zLmRyYXdBY3RpdmVFbGVtZW50c09uVG9wLGw7Zm9yKG4uZGF0YXNldCYmbi5kYXRhc2V0LmRyYXcoZSxpLG8scyksbD1vO2w8bytzOysrbCl7bGV0IHQ9cltsXTt0LmhpZGRlbnx8KHQuYWN0aXZlJiZjP2EucHVzaCh0KTp0LmRyYXcoZSxpKSl9Zm9yKGw9MDtsPGEubGVuZ3RoOysrbClhW2xdLmRyYXcoZSxpKX1nZXRTdHlsZShlLHQpe2xldCBuPXQ/YGFjdGl2ZWA6YGRlZmF1bHRgO3JldHVybiBlPT09dm9pZCAwJiZ0aGlzLl9jYWNoZWRNZXRhLmRhdGFzZXQ/dGhpcy5yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKG4pOnRoaXMucmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlfHwwLG4pfWdldENvbnRleHQoZSx0LG4pe2xldCByPXRoaXMuZ2V0RGF0YXNldCgpLGk7aWYoZT49MCYmZTx0aGlzLl9jYWNoZWRNZXRhLmRhdGEubGVuZ3RoKXtsZXQgdD10aGlzLl9jYWNoZWRNZXRhLmRhdGFbZV07aT10LiRjb250ZXh0fHw9Z2kodGhpcy5nZXRDb250ZXh0KCksZSx0KSxpLnBhcnNlZD10aGlzLmdldFBhcnNlZChlKSxpLnJhdz1yLmRhdGFbZV0saS5pbmRleD1pLmRhdGFJbmRleD1lfWVsc2UgaT10aGlzLiRjb250ZXh0fHw9aGkodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcy5pbmRleCksaS5kYXRhc2V0PXIsaS5pbmRleD1pLmRhdGFzZXRJbmRleD10aGlzLmluZGV4O3JldHVybiBpLmFjdGl2ZT0hIXQsaS5tb2RlPW4saX1yZXNvbHZlRGF0YXNldEVsZW1lbnRPcHRpb25zKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhc2V0RWxlbWVudFR5cGUuaWQsZSl9cmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyhlLHQpe3JldHVybiB0aGlzLl9yZXNvbHZlRWxlbWVudE9wdGlvbnModGhpcy5kYXRhRWxlbWVudFR5cGUuaWQsdCxlKX1fcmVzb2x2ZUVsZW1lbnRPcHRpb25zKGUsdD1gZGVmYXVsdGAsbil7bGV0IHI9dD09PWBhY3RpdmVgLGk9dGhpcy5fY2FjaGVkRGF0YU9wdHMsYT1lK2AtYCt0LG89aVthXSxzPXRoaXMuZW5hYmxlT3B0aW9uU2hhcmluZyYmJGUobik7aWYobylyZXR1cm4geWkobyxzKTtsZXQgYz10aGlzLmNoYXJ0LmNvbmZpZyxsPWMuZGF0YXNldEVsZW1lbnRTY29wZUtleXModGhpcy5fdHlwZSxlKSx1PXI/W2Ake2V9SG92ZXJgLGBob3ZlcmAsZSxgYF06W2UsYGBdLGQ9Yy5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksbCksZj1PYmplY3Qua2V5cyhXLmVsZW1lbnRzW2VdKSxwPWMucmVzb2x2ZU5hbWVkT3B0aW9ucyhkLGYsKCk9PnRoaXMuZ2V0Q29udGV4dChuLHIsdCksdSk7cmV0dXJuIHAuJHNoYXJlZCYmKHAuJHNoYXJlZD1zLGlbYV09T2JqZWN0LmZyZWV6ZSh5aShwLHMpKSkscH1fcmVzb2x2ZUFuaW1hdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuY2hhcnQsaT10aGlzLl9jYWNoZWREYXRhT3B0cyxhPWBhbmltYXRpb24tJHt0fWAsbz1pW2FdO2lmKG8pcmV0dXJuIG87bGV0IHM7aWYoci5vcHRpb25zLmFuaW1hdGlvbiE9PSExKXtsZXQgcj10aGlzLmNoYXJ0LmNvbmZpZyxpPXIuZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyh0aGlzLl90eXBlLHQpLGE9ci5nZXRPcHRpb25TY29wZXModGhpcy5nZXREYXRhc2V0KCksaSk7cz1yLmNyZWF0ZVJlc29sdmVyKGEsdGhpcy5nZXRDb250ZXh0KGUsbix0KSl9bGV0IGM9bmV3ICRyKHIscyYmcy5hbmltYXRpb25zKTtyZXR1cm4gcyYmcy5fY2FjaGVhYmxlJiYoaVthXT1PYmplY3QuZnJlZXplKGMpKSxjfWdldFNoYXJlZE9wdGlvbnMoZSl7aWYoZS4kc2hhcmVkKXJldHVybiB0aGlzLl9zaGFyZWRPcHRpb25zfHw9T2JqZWN0LmFzc2lnbih7fSxlKX1pbmNsdWRlT3B0aW9ucyhlLHQpe3JldHVybiF0fHx2aShlKXx8dGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkfV9nZXRTaGFyZWRPcHRpb25zKGUsdCl7bGV0IG49dGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKGUsdCkscj10aGlzLl9zaGFyZWRPcHRpb25zLGk9dGhpcy5nZXRTaGFyZWRPcHRpb25zKG4pLGE9dGhpcy5pbmNsdWRlT3B0aW9ucyh0LGkpfHxpIT09cjtyZXR1cm4gdGhpcy51cGRhdGVTaGFyZWRPcHRpb25zKGksdCxuKSx7c2hhcmVkT3B0aW9uczppLGluY2x1ZGVPcHRpb25zOmF9fXVwZGF0ZUVsZW1lbnQoZSx0LG4scil7dmkocik/T2JqZWN0LmFzc2lnbihlLG4pOnRoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQscikudXBkYXRlKGUsbil9dXBkYXRlU2hhcmVkT3B0aW9ucyhlLHQsbil7ZSYmIXZpKHQpJiZ0aGlzLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAsdCkudXBkYXRlKGUsbil9X3NldFN0eWxlKGUsdCxuLHIpe2UuYWN0aXZlPXI7bGV0IGk9dGhpcy5nZXRTdHlsZSh0LHIpO3RoaXMuX3Jlc29sdmVBbmltYXRpb25zKHQsbixyKS51cGRhdGUoZSx7b3B0aW9uczohciYmdGhpcy5nZXRTaGFyZWRPcHRpb25zKGkpfHxpfSl9cmVtb3ZlSG92ZXJTdHlsZShlLHQsbil7dGhpcy5fc2V0U3R5bGUoZSxuLGBhY3RpdmVgLCExKX1zZXRIb3ZlclN0eWxlKGUsdCxuKXt0aGlzLl9zZXRTdHlsZShlLG4sYGFjdGl2ZWAsITApfV9yZW1vdmVEYXRhc2V0SG92ZXJTdHlsZSgpe2xldCBlPXRoaXMuX2NhY2hlZE1ldGEuZGF0YXNldDtlJiZ0aGlzLl9zZXRTdHlsZShlLHZvaWQgMCxgYWN0aXZlYCwhMSl9X3NldERhdGFzZXRIb3ZlclN0eWxlKCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YS5kYXRhc2V0O2UmJnRoaXMuX3NldFN0eWxlKGUsdm9pZCAwLGBhY3RpdmVgLCEwKX1fcmVzeW5jRWxlbWVudHMoZSl7bGV0IHQ9dGhpcy5fZGF0YSxuPXRoaXMuX2NhY2hlZE1ldGEuZGF0YTtmb3IobGV0W2UsdCxuXW9mIHRoaXMuX3N5bmNMaXN0KXRoaXNbZV0odCxuKTt0aGlzLl9zeW5jTGlzdD1bXTtsZXQgcj1uLmxlbmd0aCxpPXQubGVuZ3RoLGE9TWF0aC5taW4oaSxyKTthJiZ0aGlzLnBhcnNlKDAsYSksaT5yP3RoaXMuX2luc2VydEVsZW1lbnRzKHIsaS1yLGUpOmk8ciYmdGhpcy5fcmVtb3ZlRWxlbWVudHMoaSxyLWkpfV9pbnNlcnRFbGVtZW50cyhlLHQsbj0hMCl7bGV0IHI9dGhpcy5fY2FjaGVkTWV0YSxpPXIuZGF0YSxhPWUrdCxvLHM9ZT0+e2ZvcihlLmxlbmd0aCs9dCxvPWUubGVuZ3RoLTE7bz49YTtvLS0pZVtvXT1lW28tdF19O2ZvcihzKGkpLG89ZTtvPGE7KytvKWlbb109bmV3IHRoaXMuZGF0YUVsZW1lbnRUeXBlO3RoaXMuX3BhcnNpbmcmJnMoci5fcGFyc2VkKSx0aGlzLnBhcnNlKGUsdCksbiYmdGhpcy51cGRhdGVFbGVtZW50cyhpLGUsdCxgcmVzZXRgKX11cGRhdGVFbGVtZW50cyhlLHQsbixyKXt9X3JlbW92ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fY2FjaGVkTWV0YTtpZih0aGlzLl9wYXJzaW5nKXtsZXQgcj1uLl9wYXJzZWQuc3BsaWNlKGUsdCk7bi5fc3RhY2tlZCYmX2kobixyKX1uLmRhdGEuc3BsaWNlKGUsdCl9X3N5bmMoZSl7aWYodGhpcy5fcGFyc2luZyl0aGlzLl9zeW5jTGlzdC5wdXNoKGUpO2Vsc2V7bGV0W3QsbixyXT1lO3RoaXNbdF0obixyKX10aGlzLmNoYXJ0Ll9kYXRhQ2hhbmdlcy5wdXNoKFt0aGlzLmluZGV4LC4uLmVdKX1fb25EYXRhUHVzaCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg7dGhpcy5fc3luYyhbYF9pbnNlcnRFbGVtZW50c2AsdGhpcy5nZXREYXRhc2V0KCkuZGF0YS5sZW5ndGgtZSxlXSl9X29uRGF0YVBvcCgpe3RoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLHRoaXMuX2NhY2hlZE1ldGEuZGF0YS5sZW5ndGgtMSwxXSl9X29uRGF0YVNoaWZ0KCl7dGhpcy5fc3luYyhbYF9yZW1vdmVFbGVtZW50c2AsMCwxXSl9X29uRGF0YVNwbGljZShlLHQpe3QmJnRoaXMuX3N5bmMoW2BfcmVtb3ZlRWxlbWVudHNgLGUsdF0pO2xldCBuPWFyZ3VtZW50cy5sZW5ndGgtMjtuJiZ0aGlzLl9zeW5jKFtgX2luc2VydEVsZW1lbnRzYCxlLG5dKX1fb25EYXRhVW5zaGlmdCgpe3RoaXMuX3N5bmMoW2BfaW5zZXJ0RWxlbWVudHNgLDAsYXJndW1lbnRzLmxlbmd0aF0pfX0sU2k9Y2xhc3MgZXh0ZW5kcyB4aXtzdGF0aWMgaWQ9YGxpbmVgO3N0YXRpYyBkZWZhdWx0cz17ZGF0YXNldEVsZW1lbnRUeXBlOmBsaW5lYCxkYXRhRWxlbWVudFR5cGU6YHBvaW50YCxzaG93TGluZTohMCxzcGFuR2FwczohMX07c3RhdGljIG92ZXJyaWRlcz17c2NhbGVzOntfaW5kZXhfOnt0eXBlOmBjYXRlZ29yeWB9LF92YWx1ZV86e3R5cGU6YGxpbmVhcmB9fX07aW5pdGlhbGl6ZSgpe3RoaXMuZW5hYmxlT3B0aW9uU2hhcmluZz0hMCx0aGlzLnN1cHBvcnRzRGVjaW1hdGlvbj0hMCxzdXBlci5pbml0aWFsaXplKCl9dXBkYXRlKGUpe2xldCB0PXRoaXMuX2NhY2hlZE1ldGEse2RhdGFzZXQ6bixkYXRhOnI9W10sX2RhdGFzZXQ6aX09dCxhPXRoaXMuY2hhcnQuX2FuaW1hdGlvbnNEaXNhYmxlZCx7c3RhcnQ6byxjb3VudDpzfT16dCh0LHIsYSk7dGhpcy5fZHJhd1N0YXJ0PW8sdGhpcy5fZHJhd0NvdW50PXMsQnQodCkmJihvPTAscz1yLmxlbmd0aCksbi5fY2hhcnQ9dGhpcy5jaGFydCxuLl9kYXRhc2V0SW5kZXg9dGhpcy5pbmRleCxuLl9kZWNpbWF0ZWQ9ISFpLl9kZWNpbWF0ZWQsbi5wb2ludHM9cjtsZXQgYz10aGlzLnJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMoZSk7dGhpcy5vcHRpb25zLnNob3dMaW5lfHwoYy5ib3JkZXJXaWR0aD0wKSxjLnNlZ21lbnQ9dGhpcy5vcHRpb25zLnNlZ21lbnQsdGhpcy51cGRhdGVFbGVtZW50KG4sdm9pZCAwLHthbmltYXRlZDohYSxvcHRpb25zOmN9LGUpLHRoaXMudXBkYXRlRWxlbWVudHMocixvLHMsZSl9dXBkYXRlRWxlbWVudHMoZSx0LG4scil7bGV0IGk9cj09PWByZXNldGAse2lTY2FsZTphLHZTY2FsZTpvLF9zdGFja2VkOnMsX2RhdGFzZXQ6Y309dGhpcy5fY2FjaGVkTWV0YSx7c2hhcmVkT3B0aW9uczpsLGluY2x1ZGVPcHRpb25zOnV9PXRoaXMuX2dldFNoYXJlZE9wdGlvbnModCxyKSxkPWEuYXhpcyxmPW8uYXhpcyx7c3BhbkdhcHM6cCxzZWdtZW50Om19PXRoaXMub3B0aW9ucyxoPW10KHApP3A6MS8wLGc9dGhpcy5jaGFydC5fYW5pbWF0aW9uc0Rpc2FibGVkfHxpfHxyPT09YG5vbmVgLF89dCtuLHY9ZS5sZW5ndGgseT10PjAmJnRoaXMuZ2V0UGFyc2VkKHQtMSk7Zm9yKGxldCBuPTA7bjx2Oysrbil7bGV0IHA9ZVtuXSx2PWc/cDp7fTtpZihuPHR8fG4+PV8pe3Yuc2tpcD0hMDtjb250aW51ZX1sZXQgYj10aGlzLmdldFBhcnNlZChuKSx4PUEoYltmXSksUz12W2RdPWEuZ2V0UGl4ZWxGb3JWYWx1ZShiW2RdLG4pLEM9dltmXT1pfHx4P28uZ2V0QmFzZVBpeGVsKCk6by5nZXRQaXhlbEZvclZhbHVlKHM/dGhpcy5hcHBseVN0YWNrKG8sYixzKTpiW2ZdLG4pO3Yuc2tpcD1pc05hTihTKXx8aXNOYU4oQyl8fHgsdi5zdG9wPW4+MCYmTWF0aC5hYnMoYltkXS15W2RdKT5oLG0mJih2LnBhcnNlZD1iLHYucmF3PWMuZGF0YVtuXSksdSYmKHYub3B0aW9ucz1sfHx0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMobixwLmFjdGl2ZT9gYWN0aXZlYDpyKSksZ3x8dGhpcy51cGRhdGVFbGVtZW50KHAsbix2LHIpLHk9Yn19Z2V0TWF4T3ZlcmZsb3coKXtsZXQgZT10aGlzLl9jYWNoZWRNZXRhLHQ9ZS5kYXRhc2V0LG49dC5vcHRpb25zJiZ0Lm9wdGlvbnMuYm9yZGVyV2lkdGh8fDAscj1lLmRhdGF8fFtdO2lmKCFyLmxlbmd0aClyZXR1cm4gbjtsZXQgaT1yWzBdLnNpemUodGhpcy5yZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zKDApKSxhPXJbci5sZW5ndGgtMV0uc2l6ZSh0aGlzLnJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMoci5sZW5ndGgtMSkpO3JldHVybiBNYXRoLm1heChuLGksYSkvMn1kcmF3KCl7bGV0IGU9dGhpcy5fY2FjaGVkTWV0YTtlLmRhdGFzZXQudXBkYXRlQ29udHJvbFBvaW50cyh0aGlzLmNoYXJ0LmNoYXJ0QXJlYSxlLmlTY2FsZS5heGlzKSxzdXBlci5kcmF3KCl9fTtmdW5jdGlvbiBDaSgpe3Rocm93IEVycm9yKGBUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQ6IENoZWNrIHRoYXQgYSBjb21wbGV0ZSBkYXRlIGFkYXB0ZXIgaXMgcHJvdmlkZWQuYCl9dmFyIHdpPXtfZGF0ZTpjbGFzcyBle3N0YXRpYyBvdmVycmlkZSh0KXtPYmplY3QuYXNzaWduKGUucHJvdG90eXBlLHQpfW9wdGlvbnM7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fHt9fWluaXQoKXt9Zm9ybWF0cygpe3JldHVybiBDaSgpfXBhcnNlKCl7cmV0dXJuIENpKCl9Zm9ybWF0KCl7cmV0dXJuIENpKCl9YWRkKCl7cmV0dXJuIENpKCl9ZGlmZigpe3JldHVybiBDaSgpfXN0YXJ0T2YoKXtyZXR1cm4gQ2koKX1lbmRPZigpe3JldHVybiBDaSgpfX19O2Z1bmN0aW9uIFRpKGUsdCxuLHIpe2xldHtjb250cm9sbGVyOmksZGF0YTphLF9zb3J0ZWQ6b309ZSxzPWkuX2NhY2hlZE1ldGEuaVNjYWxlLGM9ZS5kYXRhc2V0JiZlLmRhdGFzZXQub3B0aW9ucz9lLmRhdGFzZXQub3B0aW9ucy5zcGFuR2FwczpudWxsO2lmKHMmJnQ9PT1zLmF4aXMmJnQhPT1gcmAmJm8mJmEubGVuZ3RoKXtsZXQgbz1zLl9yZXZlcnNlUGl4ZWxzP090OkR0O2lmKCFyKXtsZXQgcj1vKGEsdCxuKTtpZihjKXtsZXR7dlNjYWxlOnR9PWkuX2NhY2hlZE1ldGEse19wYXJzZWQ6bn09ZSxhPW4uc2xpY2UoMCxyLmxvKzEpLnJldmVyc2UoKS5maW5kSW5kZXgoZT0+IUEoZVt0LmF4aXNdKSk7ci5sby09TWF0aC5tYXgoMCxhKTtsZXQgbz1uLnNsaWNlKHIuaGkpLmZpbmRJbmRleChlPT4hQShlW3QuYXhpc10pKTtyLmhpKz1NYXRoLm1heCgwLG8pfXJldHVybiByfWlmKGkuX3NoYXJlZE9wdGlvbnMpe2xldCBlPWFbMF0scj10eXBlb2YgZS5nZXRSYW5nZT09YGZ1bmN0aW9uYCYmZS5nZXRSYW5nZSh0KTtpZihyKXtsZXQgZT1vKGEsdCxuLXIpLGk9byhhLHQsbityKTtyZXR1cm57bG86ZS5sbyxoaTppLmhpfX19fXJldHVybntsbzowLGhpOmEubGVuZ3RoLTF9fWZ1bmN0aW9uIEVpKGUsdCxuLHIsaSl7bGV0IGE9ZS5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCksbz1uW3RdO2ZvcihsZXQgZT0wLG49YS5sZW5ndGg7ZTxuOysrZSl7bGV0e2luZGV4Om4sZGF0YTpzfT1hW2VdLHtsbzpjLGhpOmx9PVRpKGFbZV0sdCxvLGkpO2ZvcihsZXQgZT1jO2U8PWw7KytlKXtsZXQgdD1zW2VdO3Quc2tpcHx8cih0LG4sZSl9fX1mdW5jdGlvbiBEaShlKXtsZXQgdD1lLmluZGV4T2YoYHhgKSE9PS0xLG49ZS5pbmRleE9mKGB5YCkhPT0tMTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtsZXQgaT10P01hdGguYWJzKGUueC1yLngpOjAsYT1uP01hdGguYWJzKGUueS1yLnkpOjA7cmV0dXJuIE1hdGguc3FydChpKioyK2EqKjIpfX1mdW5jdGlvbiBPaShlLHQsbixyLGkpe2xldCBhPVtdO3JldHVybiFpJiYhZS5pc1BvaW50SW5BcmVhKHQpfHxFaShlLG4sdCxmdW5jdGlvbihuLG8scyl7IWkmJiFHKG4sZS5jaGFydEFyZWEsMCl8fG4uaW5SYW5nZSh0LngsdC55LHIpJiZhLnB1c2goe2VsZW1lbnQ6bixkYXRhc2V0SW5kZXg6byxpbmRleDpzfSl9LCEwKSxhfWZ1bmN0aW9uIGtpKGUsdCxuLHIpe2xldCBpPVtdO2Z1bmN0aW9uIGEoZSxuLGEpe2xldHtzdGFydEFuZ2xlOm8sZW5kQW5nbGU6c309ZS5nZXRQcm9wcyhbYHN0YXJ0QW5nbGVgLGBlbmRBbmdsZWBdLHIpLHthbmdsZTpjfT1idChlLHt4OnQueCx5OnQueX0pO0N0KGMsbyxzKSYmaS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4Om4saW5kZXg6YX0pfXJldHVybiBFaShlLG4sdCxhKSxpfWZ1bmN0aW9uIEFpKGUsdCxuLHIsaSxhKXtsZXQgbz1bXSxzPURpKG4pLGM9MS8wO2Z1bmN0aW9uIGwobixsLHUpe2xldCBkPW4uaW5SYW5nZSh0LngsdC55LGkpO2lmKHImJiFkKXJldHVybjtsZXQgZj1uLmdldENlbnRlclBvaW50KGkpO2lmKCEoYXx8ZS5pc1BvaW50SW5BcmVhKGYpKSYmIWQpcmV0dXJuO2xldCBwPXModCxmKTtwPGM/KG89W3tlbGVtZW50Om4sZGF0YXNldEluZGV4OmwsaW5kZXg6dX1dLGM9cCk6cD09PWMmJm8ucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpsLGluZGV4OnV9KX1yZXR1cm4gRWkoZSxuLHQsbCksb31mdW5jdGlvbiBqaShlLHQsbixyLGksYSl7cmV0dXJuIWEmJiFlLmlzUG9pbnRJbkFyZWEodCk/W106bj09PWByYCYmIXI/a2koZSx0LG4saSk6QWkoZSx0LG4scixpLGEpfWZ1bmN0aW9uIE1pKGUsdCxuLHIsaSl7bGV0IGE9W10sbz1uPT09YHhgP2BpblhSYW5nZWA6YGluWVJhbmdlYCxzPSExO3JldHVybiBFaShlLG4sdCwoZSxyLGMpPT57ZVtvXSYmZVtvXSh0W25dLGkpJiYoYS5wdXNoKHtlbGVtZW50OmUsZGF0YXNldEluZGV4OnIsaW5kZXg6Y30pLHN8fD1lLmluUmFuZ2UodC54LHQueSxpKSl9KSxyJiYhcz9bXTphfXZhciBOaT17ZXZhbHVhdGVJbnRlcmFjdGlvbkl0ZW1zOkVpLG1vZGVzOntpbmRleChlLHQsbixyKXtsZXQgaT1icih0LGUpLGE9bi5heGlzfHxgeGAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/T2koZSxpLGEscixvKTpqaShlLGksYSwhMSxyLG8pLGM9W107cmV0dXJuIHMubGVuZ3RoPyhlLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKS5mb3JFYWNoKGU9PntsZXQgdD1zWzBdLmluZGV4LG49ZS5kYXRhW3RdO24mJiFuLnNraXAmJmMucHVzaCh7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDplLmluZGV4LGluZGV4OnR9KX0pLGMpOltdfSxkYXRhc2V0KGUsdCxuLHIpe2xldCBpPWJyKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExLHM9bi5pbnRlcnNlY3Q/T2koZSxpLGEscixvKTpqaShlLGksYSwhMSxyLG8pO2lmKHMubGVuZ3RoPjApe2xldCB0PXNbMF0uZGF0YXNldEluZGV4LG49ZS5nZXREYXRhc2V0TWV0YSh0KS5kYXRhO3M9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDsrK2Upcy5wdXNoKHtlbGVtZW50Om5bZV0sZGF0YXNldEluZGV4OnQsaW5kZXg6ZX0pfXJldHVybiBzfSxwb2ludChlLHQsbixyKXtyZXR1cm4gT2koZSxicih0LGUpLG4uYXhpc3x8YHh5YCxyLG4uaW5jbHVkZUludmlzaWJsZXx8ITEpfSxuZWFyZXN0KGUsdCxuLHIpe2xldCBpPWJyKHQsZSksYT1uLmF4aXN8fGB4eWAsbz1uLmluY2x1ZGVJbnZpc2libGV8fCExO3JldHVybiBqaShlLGksYSxuLmludGVyc2VjdCxyLG8pfSx4KGUsdCxuLHIpe3JldHVybiBNaShlLGJyKHQsZSksYHhgLG4uaW50ZXJzZWN0LHIpfSx5KGUsdCxuLHIpe3JldHVybiBNaShlLGJyKHQsZSksYHlgLG4uaW50ZXJzZWN0LHIpfX19LFBpPVtgbGVmdGAsYHRvcGAsYHJpZ2h0YCxgYm90dG9tYF07ZnVuY3Rpb24gRmkoZSx0KXtyZXR1cm4gZS5maWx0ZXIoZT0+ZS5wb3M9PT10KX1mdW5jdGlvbiBJaShlLHQpe3JldHVybiBlLmZpbHRlcihlPT5QaS5pbmRleE9mKGUucG9zKT09PS0xJiZlLmJveC5heGlzPT09dCl9ZnVuY3Rpb24gTGkoZSx0KXtyZXR1cm4gZS5zb3J0KChlLG4pPT57bGV0IHI9dD9uOmUsaT10P2U6bjtyZXR1cm4gci53ZWlnaHQ9PT1pLndlaWdodD9yLmluZGV4LWkuaW5kZXg6ci53ZWlnaHQtaS53ZWlnaHR9KX1mdW5jdGlvbiBSaShlKXtsZXQgdD1bXSxuLHIsaSxhLG8scztmb3Iobj0wLHI9KGV8fFtdKS5sZW5ndGg7bjxyOysrbilpPWVbbl0se3Bvc2l0aW9uOmEsb3B0aW9uczp7c3RhY2s6byxzdGFja1dlaWdodDpzPTF9fT1pLHQucHVzaCh7aW5kZXg6bixib3g6aSxwb3M6YSxob3Jpem9udGFsOmkuaXNIb3Jpem9udGFsKCksd2VpZ2h0Omkud2VpZ2h0LHN0YWNrOm8mJmErbyxzdGFja1dlaWdodDpzfSk7cmV0dXJuIHR9ZnVuY3Rpb24gemkoZSl7bGV0IHQ9e307Zm9yKGxldCBuIG9mIGUpe2xldHtzdGFjazplLHBvczpyLHN0YWNrV2VpZ2h0Oml9PW47aWYoIWV8fCFQaS5pbmNsdWRlcyhyKSljb250aW51ZTtsZXQgYT10W2VdfHwodFtlXT17Y291bnQ6MCxwbGFjZWQ6MCx3ZWlnaHQ6MCxzaXplOjB9KTthLmNvdW50KyssYS53ZWlnaHQrPWl9cmV0dXJuIHR9ZnVuY3Rpb24gQmkoZSx0KXtsZXQgbj16aShlKSx7dkJveE1heFdpZHRoOnIsaEJveE1heEhlaWdodDppfT10LGEsbyxzO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKXtzPWVbYV07bGV0e2Z1bGxTaXplOm99PXMuYm94LGM9bltzLnN0YWNrXSxsPWMmJnMuc3RhY2tXZWlnaHQvYy53ZWlnaHQ7cy5ob3Jpem9udGFsPyhzLndpZHRoPWw/bCpyOm8mJnQuYXZhaWxhYmxlV2lkdGgscy5oZWlnaHQ9aSk6KHMud2lkdGg9cixzLmhlaWdodD1sP2wqaTpvJiZ0LmF2YWlsYWJsZUhlaWdodCl9cmV0dXJuIG59ZnVuY3Rpb24gVmkoZSl7bGV0IHQ9UmkoZSksbj1MaSh0LmZpbHRlcihlPT5lLmJveC5mdWxsU2l6ZSksITApLHI9TGkoRmkodCxgbGVmdGApLCEwKSxpPUxpKEZpKHQsYHJpZ2h0YCkpLGE9TGkoRmkodCxgdG9wYCksITApLG89TGkoRmkodCxgYm90dG9tYCkpLHM9SWkodCxgeGApLGM9SWkodCxgeWApO3JldHVybntmdWxsU2l6ZTpuLGxlZnRBbmRUb3A6ci5jb25jYXQoYSkscmlnaHRBbmRCb3R0b206aS5jb25jYXQoYykuY29uY2F0KG8pLmNvbmNhdChzKSxjaGFydEFyZWE6RmkodCxgY2hhcnRBcmVhYCksdmVydGljYWw6ci5jb25jYXQoaSkuY29uY2F0KGMpLGhvcml6b250YWw6YS5jb25jYXQobykuY29uY2F0KHMpfX1mdW5jdGlvbiBIaShlLHQsbixyKXtyZXR1cm4gTWF0aC5tYXgoZVtuXSx0W25dKStNYXRoLm1heChlW3JdLHRbcl0pfWZ1bmN0aW9uIFVpKGUsdCl7ZS50b3A9TWF0aC5tYXgoZS50b3AsdC50b3ApLGUubGVmdD1NYXRoLm1heChlLmxlZnQsdC5sZWZ0KSxlLmJvdHRvbT1NYXRoLm1heChlLmJvdHRvbSx0LmJvdHRvbSksZS5yaWdodD1NYXRoLm1heChlLnJpZ2h0LHQucmlnaHQpfWZ1bmN0aW9uIFdpKGUsdCxuLHIpe2xldHtwb3M6aSxib3g6YX09bixvPWUubWF4UGFkZGluZztpZighTShpKSl7bi5zaXplJiYoZVtpXS09bi5zaXplKTtsZXQgdD1yW24uc3RhY2tdfHx7c2l6ZTowLGNvdW50OjF9O3Quc2l6ZT1NYXRoLm1heCh0LnNpemUsbi5ob3Jpem9udGFsP2EuaGVpZ2h0OmEud2lkdGgpLG4uc2l6ZT10LnNpemUvdC5jb3VudCxlW2ldKz1uLnNpemV9YS5nZXRQYWRkaW5nJiZVaShvLGEuZ2V0UGFkZGluZygpKTtsZXQgcz1NYXRoLm1heCgwLHQub3V0ZXJXaWR0aC1IaShvLGUsYGxlZnRgLGByaWdodGApKSxjPU1hdGgubWF4KDAsdC5vdXRlckhlaWdodC1IaShvLGUsYHRvcGAsYGJvdHRvbWApKSxsPXMhPT1lLncsdT1jIT09ZS5oO3JldHVybiBlLnc9cyxlLmg9YyxuLmhvcml6b250YWw/e3NhbWU6bCxvdGhlcjp1fTp7c2FtZTp1LG90aGVyOmx9fWZ1bmN0aW9uIEdpKGUpe2xldCB0PWUubWF4UGFkZGluZztmdW5jdGlvbiBuKG4pe2xldCByPU1hdGgubWF4KHRbbl0tZVtuXSwwKTtyZXR1cm4gZVtuXSs9cixyfWUueSs9bihgdG9wYCksZS54Kz1uKGBsZWZ0YCksbihgcmlnaHRgKSxuKGBib3R0b21gKX1mdW5jdGlvbiBLaShlLHQpe2xldCBuPXQubWF4UGFkZGluZztmdW5jdGlvbiByKGUpe2xldCByPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH07cmV0dXJuIGUuZm9yRWFjaChlPT57cltlXT1NYXRoLm1heCh0W2VdLG5bZV0pfSkscn1yZXR1cm4gcihlP1tgbGVmdGAsYHJpZ2h0YF06W2B0b3BgLGBib3R0b21gXSl9ZnVuY3Rpb24gcWkoZSx0LG4scil7bGV0IGk9W10sYSxvLHMsYyxsLHU7Zm9yKGE9MCxvPWUubGVuZ3RoLGw9MDthPG87KythKXtzPWVbYV0sYz1zLmJveCxjLnVwZGF0ZShzLndpZHRofHx0Lncscy5oZWlnaHR8fHQuaCxLaShzLmhvcml6b250YWwsdCkpO2xldHtzYW1lOm8sb3RoZXI6ZH09V2kodCxuLHMscik7bHw9byYmaS5sZW5ndGgsdXx8PWQsYy5mdWxsU2l6ZXx8aS5wdXNoKHMpfXJldHVybiBsJiZxaShpLHQsbixyKXx8dX1mdW5jdGlvbiBKaShlLHQsbixyLGkpe2UudG9wPW4sZS5sZWZ0PXQsZS5yaWdodD10K3IsZS5ib3R0b209bitpLGUud2lkdGg9cixlLmhlaWdodD1pfWZ1bmN0aW9uIFlpKGUsdCxuLHIpe2xldCBpPW4ucGFkZGluZyx7eDphLHk6b309dDtmb3IobGV0IHMgb2YgZSl7bGV0IGU9cy5ib3gsYz1yW3Muc3RhY2tdfHx7Y291bnQ6MSxwbGFjZWQ6MCx3ZWlnaHQ6MX0sbD1zLnN0YWNrV2VpZ2h0L2Mud2VpZ2h0fHwxO2lmKHMuaG9yaXpvbnRhbCl7bGV0IHI9dC53KmwsYT1jLnNpemV8fGUuaGVpZ2h0OyRlKGMuc3RhcnQpJiYobz1jLnN0YXJ0KSxlLmZ1bGxTaXplP0ppKGUsaS5sZWZ0LG8sbi5vdXRlcldpZHRoLWkucmlnaHQtaS5sZWZ0LGEpOkppKGUsdC5sZWZ0K2MucGxhY2VkLG8scixhKSxjLnN0YXJ0PW8sYy5wbGFjZWQrPXIsbz1lLmJvdHRvbX1lbHNle2xldCByPXQuaCpsLG89Yy5zaXplfHxlLndpZHRoOyRlKGMuc3RhcnQpJiYoYT1jLnN0YXJ0KSxlLmZ1bGxTaXplP0ppKGUsYSxpLnRvcCxvLG4ub3V0ZXJIZWlnaHQtaS5ib3R0b20taS50b3ApOkppKGUsYSx0LnRvcCtjLnBsYWNlZCxvLHIpLGMuc3RhcnQ9YSxjLnBsYWNlZCs9cixhPWUucmlnaHR9fXQueD1hLHQueT1vfXZhciBYaT17YWRkQm94KGUsdCl7ZS5ib3hlc3x8PVtdLHQuZnVsbFNpemU9dC5mdWxsU2l6ZXx8ITEsdC5wb3NpdGlvbj10LnBvc2l0aW9ufHxgdG9wYCx0LndlaWdodD10LndlaWdodHx8MCx0Ll9sYXllcnM9dC5fbGF5ZXJzfHxmdW5jdGlvbigpe3JldHVyblt7ejowLGRyYXcoZSl7dC5kcmF3KGUpfX1dfSxlLmJveGVzLnB1c2godCl9LHJlbW92ZUJveChlLHQpe2xldCBuPWUuYm94ZXM/ZS5ib3hlcy5pbmRleE9mKHQpOi0xO24hPT0tMSYmZS5ib3hlcy5zcGxpY2UobiwxKX0sY29uZmlndXJlKGUsdCxuKXt0LmZ1bGxTaXplPW4uZnVsbFNpemUsdC5wb3NpdGlvbj1uLnBvc2l0aW9uLHQud2VpZ2h0PW4ud2VpZ2h0fSx1cGRhdGUoZSx0LG4scil7aWYoIWUpcmV0dXJuO2xldCBpPUsoZS5vcHRpb25zLmxheW91dC5wYWRkaW5nKSxhPU1hdGgubWF4KHQtaS53aWR0aCwwKSxvPU1hdGgubWF4KG4taS5oZWlnaHQsMCkscz1WaShlLmJveGVzKSxjPXMudmVydGljYWwsbD1zLmhvcml6b250YWw7TChlLmJveGVzLGU9Pnt0eXBlb2YgZS5iZWZvcmVMYXlvdXQ9PWBmdW5jdGlvbmAmJmUuYmVmb3JlTGF5b3V0KCl9KTtsZXQgdT1jLnJlZHVjZSgoZSx0KT0+dC5ib3gub3B0aW9ucyYmdC5ib3gub3B0aW9ucy5kaXNwbGF5PT09ITE/ZTplKzEsMCl8fDEsZD1PYmplY3QuZnJlZXplKHtvdXRlcldpZHRoOnQsb3V0ZXJIZWlnaHQ6bixwYWRkaW5nOmksYXZhaWxhYmxlV2lkdGg6YSxhdmFpbGFibGVIZWlnaHQ6byx2Qm94TWF4V2lkdGg6YS8yL3UsaEJveE1heEhlaWdodDpvLzJ9KSxmPU9iamVjdC5hc3NpZ24oe30saSk7VWkoZixLKHIpKTtsZXQgcD1PYmplY3QuYXNzaWduKHttYXhQYWRkaW5nOmYsdzphLGg6byx4OmkubGVmdCx5OmkudG9wfSxpKSxtPUJpKGMuY29uY2F0KGwpLGQpO3FpKHMuZnVsbFNpemUscCxkLG0pLHFpKGMscCxkLG0pLHFpKGwscCxkLG0pJiZxaShjLHAsZCxtKSxHaShwKSxZaShzLmxlZnRBbmRUb3AscCxkLG0pLHAueCs9cC53LHAueSs9cC5oLFlpKHMucmlnaHRBbmRCb3R0b20scCxkLG0pLGUuY2hhcnRBcmVhPXtsZWZ0OnAubGVmdCx0b3A6cC50b3AscmlnaHQ6cC5sZWZ0K3Audyxib3R0b206cC50b3ArcC5oLGhlaWdodDpwLmgsd2lkdGg6cC53fSxMKHMuY2hhcnRBcmVhLHQ9PntsZXQgbj10LmJveDtPYmplY3QuYXNzaWduKG4sZS5jaGFydEFyZWEpLG4udXBkYXRlKHAudyxwLmgse2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfSl9KX19LFppPWNsYXNze2FjcXVpcmVDb250ZXh0KGUsdCl7fXJlbGVhc2VDb250ZXh0KGUpe3JldHVybiExfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe31yZW1vdmVFdmVudExpc3RlbmVyKGUsdCxuKXt9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiAxfWdldE1heGltdW1TaXplKGUsdCxuLHIpe3JldHVybiB0PU1hdGgubWF4KDAsdHx8ZS53aWR0aCksbnx8PWUuaGVpZ2h0LHt3aWR0aDp0LGhlaWdodDpNYXRoLm1heCgwLHI/TWF0aC5mbG9vcih0L3IpOm4pfX1pc0F0dGFjaGVkKGUpe3JldHVybiEwfXVwZGF0ZUNvbmZpZyhlKXt9fSxRaT1jbGFzcyBleHRlbmRzIFppe2FjcXVpcmVDb250ZXh0KGUpe3JldHVybiBlJiZlLmdldENvbnRleHQmJmUuZ2V0Q29udGV4dChgMmRgKXx8bnVsbH11cGRhdGVDb25maWcoZSl7ZS5vcHRpb25zLmFuaW1hdGlvbj0hMX19LCRpPWAkY2hhcnRqc2AsZWE9e3RvdWNoc3RhcnQ6YG1vdXNlZG93bmAsdG91Y2htb3ZlOmBtb3VzZW1vdmVgLHRvdWNoZW5kOmBtb3VzZXVwYCxwb2ludGVyZW50ZXI6YG1vdXNlZW50ZXJgLHBvaW50ZXJkb3duOmBtb3VzZWRvd25gLHBvaW50ZXJtb3ZlOmBtb3VzZW1vdmVgLHBvaW50ZXJ1cDpgbW91c2V1cGAscG9pbnRlcmxlYXZlOmBtb3VzZW91dGAscG9pbnRlcm91dDpgbW91c2VvdXRgfSx0YT1lPT5lPT09bnVsbHx8ZT09PWBgO2Z1bmN0aW9uIG5hKGUsdCl7bGV0IG49ZS5zdHlsZSxyPWUuZ2V0QXR0cmlidXRlKGBoZWlnaHRgKSxpPWUuZ2V0QXR0cmlidXRlKGB3aWR0aGApO2lmKGVbJGldPXtpbml0aWFsOntoZWlnaHQ6cix3aWR0aDppLHN0eWxlOntkaXNwbGF5Om4uZGlzcGxheSxoZWlnaHQ6bi5oZWlnaHQsd2lkdGg6bi53aWR0aH19fSxuLmRpc3BsYXk9bi5kaXNwbGF5fHxgYmxvY2tgLG4uYm94U2l6aW5nPW4uYm94U2l6aW5nfHxgYm9yZGVyLWJveGAsdGEoaSkpe2xldCB0PUVyKGUsYHdpZHRoYCk7dCE9PXZvaWQgMCYmKGUud2lkdGg9dCl9aWYodGEocikpe2lmKGUuc3R5bGUuaGVpZ2h0PT09YGApZS5oZWlnaHQ9ZS53aWR0aC8odHx8Mik7ZWxzZXtsZXQgdD1FcihlLGBoZWlnaHRgKTt0IT09dm9pZCAwJiYoZS5oZWlnaHQ9dCl9fXJldHVybiBlfXZhciByYT1Ucj97cGFzc2l2ZTohMH06ITE7ZnVuY3Rpb24gaWEoZSx0LG4pe2UmJmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4scmEpfWZ1bmN0aW9uIGFhKGUsdCxuKXtlJiZlLmNhbnZhcyYmZS5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scmEpfWZ1bmN0aW9uIG9hKGUsdCl7bGV0IG49ZWFbZS50eXBlXXx8ZS50eXBlLHt4OnIseTppfT1icihlLHQpO3JldHVybnt0eXBlOm4sY2hhcnQ6dCxuYXRpdmU6ZSx4OnI9PT12b2lkIDA/bnVsbDpyLHk6aT09PXZvaWQgMD9udWxsOml9fWZ1bmN0aW9uIHNhKGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYobj09PXR8fG4uY29udGFpbnModCkpcmV0dXJuITB9ZnVuY3Rpb24gY2EoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD1zYShuLmFkZGVkTm9kZXMsciksdCYmPSFzYShuLnJlbW92ZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9ZnVuY3Rpb24gbGEoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKXR8fD1zYShuLnJlbW92ZWROb2RlcyxyKSx0JiY9IXNhKG4uYWRkZWROb2RlcyxyKTt0JiZuKCl9KTtyZXR1cm4gaS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9dmFyIHVhPW5ldyBNYXAsZGE9MDtmdW5jdGlvbiBmYSgpe2xldCBlPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO2UhPT1kYSYmKGRhPWUsdWEuZm9yRWFjaCgodCxuKT0+e24uY3VycmVudERldmljZVBpeGVsUmF0aW8hPT1lJiZ0KCl9KSl9ZnVuY3Rpb24gcGEoZSx0KXt1YS5zaXplfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxmYSksdWEuc2V0KGUsdCl9ZnVuY3Rpb24gbWEoZSl7dWEuZGVsZXRlKGUpLHVhLnNpemV8fHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLGZhKX1mdW5jdGlvbiBoYShlLHQsbil7bGV0IHI9ZS5jYW52YXMsaT1yJiZmcihyKTtpZighaSlyZXR1cm47bGV0IGE9RnQoKGUsdCk9PntsZXQgcj1pLmNsaWVudFdpZHRoO24oZSx0KSxyPGkuY2xpZW50V2lkdGgmJm4oKX0sd2luZG93KSxvPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0IHQ9ZVswXSxuPXQuY29udGVudFJlY3Qud2lkdGgscj10LmNvbnRlbnRSZWN0LmhlaWdodDsobiE9PTB8fHIhPT0wKSYmYShuLHIpfSk7cmV0dXJuIG8ub2JzZXJ2ZShpKSxwYShlLGEpLG99ZnVuY3Rpb24gZ2EoZSx0LG4pe24mJm4uZGlzY29ubmVjdCgpLHQ9PT1gcmVzaXplYCYmbWEoZSl9ZnVuY3Rpb24gX2EoZSx0LG4pe2xldCByPWUuY2FudmFzLGk9RnQodD0+e2UuY3R4IT09bnVsbCYmbihvYSh0LGUpKX0sZSk7cmV0dXJuIGlhKHIsdCxpKSxpfXZhciB2YT1jbGFzcyBleHRlbmRzIFppe2FjcXVpcmVDb250ZXh0KGUsdCl7bGV0IG49ZSYmZS5nZXRDb250ZXh0JiZlLmdldENvbnRleHQoYDJkYCk7cmV0dXJuIG4mJm4uY2FudmFzPT09ZT8obmEoZSx0KSxuKTpudWxsfXJlbGVhc2VDb250ZXh0KGUpe2xldCB0PWUuY2FudmFzO2lmKCF0WyRpXSlyZXR1cm4hMTtsZXQgbj10WyRpXS5pbml0aWFsO1tgaGVpZ2h0YCxgd2lkdGhgXS5mb3JFYWNoKGU9PntsZXQgcj1uW2VdO0Eocik/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6dC5zZXRBdHRyaWJ1dGUoZSxyKX0pO2xldCByPW4uc3R5bGV8fHt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGU9Pnt0LnN0eWxlW2VdPXJbZV19KSx0LndpZHRoPXQud2lkdGgsZGVsZXRlIHRbJGldLCEwfWFkZEV2ZW50TGlzdGVuZXIoZSx0LG4pe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQpO2xldCByPWUuJHByb3hpZXN8fD17fTtyW3RdPSh7YXR0YWNoOmNhLGRldGFjaDpsYSxyZXNpemU6aGF9W3RdfHxfYSkoZSx0LG4pfXJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0KXtsZXQgbj1lLiRwcm94aWVzfHw9e30scj1uW3RdO3ImJigoe2F0dGFjaDpnYSxkZXRhY2g6Z2EscmVzaXplOmdhfVt0XXx8YWEpKGUsdCxyKSxuW3RdPXZvaWQgMCl9Z2V0RGV2aWNlUGl4ZWxSYXRpbygpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb31nZXRNYXhpbXVtU2l6ZShlLHQsbixyKXtyZXR1cm4gQ3IoZSx0LG4scil9aXNBdHRhY2hlZChlKXtsZXQgdD1lJiZmcihlKTtyZXR1cm4hISh0JiZ0LmlzQ29ubmVjdGVkKX19O2Z1bmN0aW9uIHlhKGUpe3JldHVybiFkcigpfHx0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPGB1YCYmZSBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcz9RaTp2YX12YXIgYmE9Y2xhc3N7c3RhdGljIGRlZmF1bHRzPXt9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXZvaWQgMDt4O3k7YWN0aXZlPSExO29wdGlvbnM7JGFuaW1hdGlvbnM7dG9vbHRpcFBvc2l0aW9uKGUpe2xldHt4OnQseTpufT10aGlzLmdldFByb3BzKFtgeGAsYHlgXSxlKTtyZXR1cm57eDp0LHk6bn19aGFzVmFsdWUoKXtyZXR1cm4gbXQodGhpcy54KSYmbXQodGhpcy55KX1nZXRQcm9wcyhlLHQpe2xldCBuPXRoaXMuJGFuaW1hdGlvbnM7aWYoIXR8fCFuKXJldHVybiB0aGlzO2xldCByPXt9O3JldHVybiBlLmZvckVhY2goZT0+e3JbZV09bltlXSYmbltlXS5hY3RpdmUoKT9uW2VdLl90bzp0aGlzW2VdfSkscn19O2Z1bmN0aW9uIHhhKGUsdCl7bGV0IG49ZS5vcHRpb25zLnRpY2tzLHI9U2EoZSksaT1NYXRoLm1pbihuLm1heFRpY2tzTGltaXR8fHIsciksYT1uLm1ham9yLmVuYWJsZWQ/d2EodCk6W10sbz1hLmxlbmd0aCxzPWFbMF0sYz1hW28tMV0sbD1bXTtpZihvPmkpcmV0dXJuIFRhKHQsbCxhLG8vaSksbDtsZXQgdT1DYShhLHQsaSk7aWYobz4wKXtsZXQgZSxuLHI9bz4xP01hdGgucm91bmQoKGMtcykvKG8tMSkpOm51bGw7Zm9yKEVhKHQsbCx1LEEocik/MDpzLXIscyksZT0wLG49by0xO2U8bjtlKyspRWEodCxsLHUsYVtlXSxhW2UrMV0pO3JldHVybiBFYSh0LGwsdSxjLEEocik/dC5sZW5ndGg6YytyKSxsfXJldHVybiBFYSh0LGwsdSksbH1mdW5jdGlvbiBTYShlKXtsZXQgdD1lLm9wdGlvbnMub2Zmc2V0LG49ZS5fdGlja1NpemUoKSxyPWUuX2xlbmd0aC9uKyArIXQsaT1lLl9tYXhMZW5ndGgvbjtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLm1pbihyLGkpKX1mdW5jdGlvbiBDYShlLHQsbil7bGV0IHI9RGEoZSksaT10Lmxlbmd0aC9uO2lmKCFyKXJldHVybiBNYXRoLm1heChpLDEpO2xldCBhPWZ0KHIpO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGgtMTtlPHQ7ZSsrKXtsZXQgdD1hW2VdO2lmKHQ+aSlyZXR1cm4gdH1yZXR1cm4gTWF0aC5tYXgoaSwxKX1mdW5jdGlvbiB3YShlKXtsZXQgdD1bXSxuLHI7Zm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXS5tYWpvciYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIFRhKGUsdCxuLHIpe2xldCBpPTAsYT1uWzBdLG87Zm9yKHI9TWF0aC5jZWlsKHIpLG89MDtvPGUubGVuZ3RoO28rKylvPT09YSYmKHQucHVzaChlW29dKSxpKyssYT1uW2kqcl0pfWZ1bmN0aW9uIEVhKGUsdCxuLHIsaSl7bGV0IGE9RihyLDApLG89TWF0aC5taW4oRihpLGUubGVuZ3RoKSxlLmxlbmd0aCkscz0wLGMsbCx1O2ZvcihuPU1hdGguY2VpbChuKSxpJiYoYz1pLXIsbj1jL01hdGguZmxvb3IoYy9uKSksdT1hO3U8MDspcysrLHU9TWF0aC5yb3VuZChhK3Mqbik7Zm9yKGw9TWF0aC5tYXgoYSwwKTtsPG87bCsrKWw9PT11JiYodC5wdXNoKGVbbF0pLHMrKyx1PU1hdGgucm91bmQoYStzKm4pKX1mdW5jdGlvbiBEYShlKXtsZXQgdD1lLmxlbmd0aCxuLHI7aWYodDwyKXJldHVybiExO2ZvcihyPWVbMF0sbj0xO248dDsrK24paWYoZVtuXS1lW24tMV0hPT1yKXJldHVybiExO3JldHVybiByfXZhciBPYT1lPT5lPT09YGxlZnRgP2ByaWdodGA6ZT09PWByaWdodGA/YGxlZnRgOmUsa2E9KGUsdCxuKT0+dD09PWB0b3BgfHx0PT09YGxlZnRgP2VbdF0rbjplW3RdLW4sQWE9KGUsdCk9Pk1hdGgubWluKHR8fGUsZSk7ZnVuY3Rpb24gamEoZSx0KXtsZXQgbj1bXSxyPWUubGVuZ3RoL3QsaT1lLmxlbmd0aCxhPTA7Zm9yKDthPGk7YSs9ciluLnB1c2goZVtNYXRoLmZsb29yKGEpXSk7cmV0dXJuIG59ZnVuY3Rpb24gTWEoZSx0LG4pe2xldCByPWUudGlja3MubGVuZ3RoLGk9TWF0aC5taW4odCxyLTEpLGE9ZS5fc3RhcnRQaXhlbCxvPWUuX2VuZFBpeGVsLHM9MWUtNixjPWUuZ2V0UGl4ZWxGb3JUaWNrKGkpLGw7aWYoIShuJiYobD1yPT09MT9NYXRoLm1heChjLWEsby1jKTp0PT09MD8oZS5nZXRQaXhlbEZvclRpY2soMSktYykvMjooYy1lLmdldFBpeGVsRm9yVGljayhpLTEpKS8yLGMrPWk8dD9sOi1sLGM8YS1zfHxjPm8rcykpKXJldHVybiBjfWZ1bmN0aW9uIE5hKGUsdCl7TChlLGU9PntsZXQgbj1lLmdjLHI9bi5sZW5ndGgvMixpO2lmKHI+dCl7Zm9yKGk9MDtpPHI7KytpKWRlbGV0ZSBlLmRhdGFbbltpXV07bi5zcGxpY2UoMCxyKX19KX1mdW5jdGlvbiBQYShlKXtyZXR1cm4gZS5kcmF3VGlja3M/ZS50aWNrTGVuZ3RoOjB9ZnVuY3Rpb24gRmEoZSx0KXtpZighZS5kaXNwbGF5KXJldHVybiAwO2xldCBuPXEoZS5mb250LHQpLHI9SyhlLnBhZGRpbmcpO3JldHVybihqKGUudGV4dCk/ZS50ZXh0Lmxlbmd0aDoxKSpuLmxpbmVIZWlnaHQrci5oZWlnaHR9ZnVuY3Rpb24gSWEoZSx0KXtyZXR1cm4gRm4oZSx7c2NhbGU6dCx0eXBlOmBzY2FsZWB9KX1mdW5jdGlvbiBMYShlLHQsbil7cmV0dXJuIEZuKGUse3RpY2s6bixpbmRleDp0LHR5cGU6YHRpY2tgfSl9ZnVuY3Rpb24gUmEoZSx0LG4pe2xldCByPUx0KGUpO3JldHVybihuJiZ0IT09YHJpZ2h0YHx8IW4mJnQ9PT1gcmlnaHRgKSYmKHI9T2EocikpLHJ9ZnVuY3Rpb24gemEoZSx0LG4scil7bGV0e3RvcDppLGxlZnQ6YSxib3R0b206byxyaWdodDpzLGNoYXJ0OmN9PWUse2NoYXJ0QXJlYTpsLHNjYWxlczp1fT1jLGQ9MCxmLHAsbSxoPW8taSxnPXMtYTtpZihlLmlzSG9yaXpvbnRhbCgpKXtpZihwPVUocixhLHMpLE0obikpe2xldCBlPU9iamVjdC5rZXlzKG4pWzBdLHI9bltlXTttPXVbZV0uZ2V0UGl4ZWxGb3JWYWx1ZShyKStoLXR9ZWxzZSBtPW49PT1gY2VudGVyYD8obC5ib3R0b20rbC50b3ApLzIraC10OmthKGUsbix0KTtmPXMtYX1lbHNle2lmKE0obikpe2xldCBlPU9iamVjdC5rZXlzKG4pWzBdLHI9bltlXTtwPXVbZV0uZ2V0UGl4ZWxGb3JWYWx1ZShyKS1nK3R9ZWxzZSBwPW49PT1gY2VudGVyYD8obC5sZWZ0K2wucmlnaHQpLzItZyt0OmthKGUsbix0KTttPVUocixvLGkpLGQ9bj09PWBsZWZ0YD8tQjpCfXJldHVybnt0aXRsZVg6cCx0aXRsZVk6bSxtYXhXaWR0aDpmLHJvdGF0aW9uOmR9fXZhciBCYT1jbGFzcyBlIGV4dGVuZHMgYmF7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmlkPWUuaWQsdGhpcy50eXBlPWUudHlwZSx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuY3R4PWUuY3R4LHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLnRvcD12b2lkIDAsdGhpcy5ib3R0b209dm9pZCAwLHRoaXMubGVmdD12b2lkIDAsdGhpcy5yaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuX21hcmdpbnM9e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSx0aGlzLm1heFdpZHRoPXZvaWQgMCx0aGlzLm1heEhlaWdodD12b2lkIDAsdGhpcy5wYWRkaW5nVG9wPXZvaWQgMCx0aGlzLnBhZGRpbmdCb3R0b209dm9pZCAwLHRoaXMucGFkZGluZ0xlZnQ9dm9pZCAwLHRoaXMucGFkZGluZ1JpZ2h0PXZvaWQgMCx0aGlzLmF4aXM9dm9pZCAwLHRoaXMubGFiZWxSb3RhdGlvbj12b2lkIDAsdGhpcy5taW49dm9pZCAwLHRoaXMubWF4PXZvaWQgMCx0aGlzLl9yYW5nZT12b2lkIDAsdGhpcy50aWNrcz1bXSx0aGlzLl9ncmlkTGluZUl0ZW1zPW51bGwsdGhpcy5fbGFiZWxJdGVtcz1udWxsLHRoaXMuX2xhYmVsU2l6ZXM9bnVsbCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9tYXhMZW5ndGg9MCx0aGlzLl9sb25nZXN0VGV4dENhY2hlPXt9LHRoaXMuX3N0YXJ0UGl4ZWw9dm9pZCAwLHRoaXMuX2VuZFBpeGVsPXZvaWQgMCx0aGlzLl9yZXZlcnNlUGl4ZWxzPSExLHRoaXMuX3VzZXJNYXg9dm9pZCAwLHRoaXMuX3VzZXJNaW49dm9pZCAwLHRoaXMuX3N1Z2dlc3RlZE1heD12b2lkIDAsdGhpcy5fc3VnZ2VzdGVkTWluPXZvaWQgMCx0aGlzLl90aWNrc0xlbmd0aD0wLHRoaXMuX2JvcmRlclZhbHVlPTAsdGhpcy5fY2FjaGU9e30sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZD0hMSx0aGlzLiRjb250ZXh0PXZvaWQgMH1pbml0KGUpe3RoaXMub3B0aW9ucz1lLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHRoaXMuYXhpcz1lLmF4aXMsdGhpcy5fdXNlck1pbj10aGlzLnBhcnNlKGUubWluKSx0aGlzLl91c2VyTWF4PXRoaXMucGFyc2UoZS5tYXgpLHRoaXMuX3N1Z2dlc3RlZE1pbj10aGlzLnBhcnNlKGUuc3VnZ2VzdGVkTWluKSx0aGlzLl9zdWdnZXN0ZWRNYXg9dGhpcy5wYXJzZShlLnN1Z2dlc3RlZE1heCl9cGFyc2UoZSx0KXtyZXR1cm4gZX1nZXRVc2VyQm91bmRzKCl7bGV0e191c2VyTWluOmUsX3VzZXJNYXg6dCxfc3VnZ2VzdGVkTWluOm4sX3N1Z2dlc3RlZE1heDpyfT10aGlzO3JldHVybiBlPVAoZSwxLzApLHQ9UCh0LC0xLzApLG49UChuLDEvMCkscj1QKHIsLTEvMCkse21pbjpQKGUsbiksbWF4OlAodCxyKSxtaW5EZWZpbmVkOk4oZSksbWF4RGVmaW5lZDpOKHQpfX1nZXRNaW5NYXgoZSl7bGV0e21pbjp0LG1heDpuLG1pbkRlZmluZWQ6cixtYXhEZWZpbmVkOml9PXRoaXMuZ2V0VXNlckJvdW5kcygpLGE7aWYociYmaSlyZXR1cm57bWluOnQsbWF4Om59O2xldCBvPXRoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKTtmb3IobGV0IHM9MCxjPW8ubGVuZ3RoO3M8YzsrK3MpYT1vW3NdLmNvbnRyb2xsZXIuZ2V0TWluTWF4KHRoaXMsZSkscnx8KHQ9TWF0aC5taW4odCxhLm1pbikpLGl8fChuPU1hdGgubWF4KG4sYS5tYXgpKTtyZXR1cm4gdD1pJiZ0Pm4/bjp0LG49ciYmdD5uP3Q6bix7bWluOlAodCxQKG4sdCkpLG1heDpQKG4sUCh0LG4pKX19Z2V0UGFkZGluZygpe3JldHVybntsZWZ0OnRoaXMucGFkZGluZ0xlZnR8fDAsdG9wOnRoaXMucGFkZGluZ1RvcHx8MCxyaWdodDp0aGlzLnBhZGRpbmdSaWdodHx8MCxib3R0b206dGhpcy5wYWRkaW5nQm90dG9tfHwwfX1nZXRUaWNrcygpe3JldHVybiB0aGlzLnRpY2tzfWdldExhYmVscygpe2xldCBlPXRoaXMuY2hhcnQuZGF0YTtyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsc3x8KHRoaXMuaXNIb3Jpem9udGFsKCk/ZS54TGFiZWxzOmUueUxhYmVscyl8fGUubGFiZWxzfHxbXX1nZXRMYWJlbEl0ZW1zKGU9dGhpcy5jaGFydC5jaGFydEFyZWEpe3JldHVybiB0aGlzLl9sYWJlbEl0ZW1zfHw9dGhpcy5fY29tcHV0ZUxhYmVsSXRlbXMoZSl9YmVmb3JlTGF5b3V0KCl7dGhpcy5fY2FjaGU9e30sdGhpcy5fZGF0YUxpbWl0c0NhY2hlZD0hMX1iZWZvcmVVcGRhdGUoKXtJKHRoaXMub3B0aW9ucy5iZWZvcmVVcGRhdGUsW3RoaXNdKX11cGRhdGUoZSx0LG4pe2xldHtiZWdpbkF0WmVybzpyLGdyYWNlOmksdGlja3M6YX09dGhpcy5vcHRpb25zLG89YS5zYW1wbGVTaXplO3RoaXMuYmVmb3JlVXBkYXRlKCksdGhpcy5tYXhXaWR0aD1lLHRoaXMubWF4SGVpZ2h0PXQsdGhpcy5fbWFyZ2lucz1uPU9iamVjdC5hc3NpZ24oe2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowfSxuKSx0aGlzLnRpY2tzPW51bGwsdGhpcy5fbGFiZWxTaXplcz1udWxsLHRoaXMuX2dyaWRMaW5lSXRlbXM9bnVsbCx0aGlzLl9sYWJlbEl0ZW1zPW51bGwsdGhpcy5iZWZvcmVTZXREaW1lbnNpb25zKCksdGhpcy5zZXREaW1lbnNpb25zKCksdGhpcy5hZnRlclNldERpbWVuc2lvbnMoKSx0aGlzLl9tYXhMZW5ndGg9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoK24ubGVmdCtuLnJpZ2h0OnRoaXMuaGVpZ2h0K24udG9wK24uYm90dG9tLHRoaXMuX2RhdGFMaW1pdHNDYWNoZWR8fD0odGhpcy5iZWZvcmVEYXRhTGltaXRzKCksdGhpcy5kZXRlcm1pbmVEYXRhTGltaXRzKCksdGhpcy5hZnRlckRhdGFMaW1pdHMoKSx0aGlzLl9yYW5nZT1Qbih0aGlzLGksciksITApLHRoaXMuYmVmb3JlQnVpbGRUaWNrcygpLHRoaXMudGlja3M9dGhpcy5idWlsZFRpY2tzKCl8fFtdLHRoaXMuYWZ0ZXJCdWlsZFRpY2tzKCk7bGV0IHM9bzx0aGlzLnRpY2tzLmxlbmd0aDt0aGlzLl9jb252ZXJ0VGlja3NUb0xhYmVscyhzP2phKHRoaXMudGlja3Msbyk6dGhpcy50aWNrcyksdGhpcy5jb25maWd1cmUoKSx0aGlzLmJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSx0aGlzLmNhbGN1bGF0ZUxhYmVsUm90YXRpb24oKSx0aGlzLmFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpLGEuZGlzcGxheSYmKGEuYXV0b1NraXB8fGEuc291cmNlPT09YGF1dG9gKSYmKHRoaXMudGlja3M9eGEodGhpcyx0aGlzLnRpY2tzKSx0aGlzLl9sYWJlbFNpemVzPW51bGwsdGhpcy5hZnRlckF1dG9Ta2lwKCkpLHMmJnRoaXMuX2NvbnZlcnRUaWNrc1RvTGFiZWxzKHRoaXMudGlja3MpLHRoaXMuYmVmb3JlRml0KCksdGhpcy5maXQoKSx0aGlzLmFmdGVyRml0KCksdGhpcy5hZnRlclVwZGF0ZSgpfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMub3B0aW9ucy5yZXZlcnNlLHQsbjt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0PXRoaXMubGVmdCxuPXRoaXMucmlnaHQpOih0PXRoaXMudG9wLG49dGhpcy5ib3R0b20sZT0hZSksdGhpcy5fc3RhcnRQaXhlbD10LHRoaXMuX2VuZFBpeGVsPW4sdGhpcy5fcmV2ZXJzZVBpeGVscz1lLHRoaXMuX2xlbmd0aD1uLXQsdGhpcy5fYWxpZ25Ub1BpeGVscz10aGlzLm9wdGlvbnMuYWxpZ25Ub1BpeGVsc31hZnRlclVwZGF0ZSgpe0kodGhpcy5vcHRpb25zLmFmdGVyVXBkYXRlLFt0aGlzXSl9YmVmb3JlU2V0RGltZW5zaW9ucygpe0kodGhpcy5vcHRpb25zLmJlZm9yZVNldERpbWVuc2lvbnMsW3RoaXNdKX1zZXREaW1lbnNpb25zKCl7dGhpcy5pc0hvcml6b250YWwoKT8odGhpcy53aWR0aD10aGlzLm1heFdpZHRoLHRoaXMubGVmdD0wLHRoaXMucmlnaHQ9dGhpcy53aWR0aCk6KHRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LHRoaXMudG9wPTAsdGhpcy5ib3R0b209dGhpcy5oZWlnaHQpLHRoaXMucGFkZGluZ0xlZnQ9MCx0aGlzLnBhZGRpbmdUb3A9MCx0aGlzLnBhZGRpbmdSaWdodD0wLHRoaXMucGFkZGluZ0JvdHRvbT0wfWFmdGVyU2V0RGltZW5zaW9ucygpe0kodGhpcy5vcHRpb25zLmFmdGVyU2V0RGltZW5zaW9ucyxbdGhpc10pfV9jYWxsSG9va3MoZSl7dGhpcy5jaGFydC5ub3RpZnlQbHVnaW5zKGUsdGhpcy5nZXRDb250ZXh0KCkpLEkodGhpcy5vcHRpb25zW2VdLFt0aGlzXSl9YmVmb3JlRGF0YUxpbWl0cygpe3RoaXMuX2NhbGxIb29rcyhgYmVmb3JlRGF0YUxpbWl0c2ApfWRldGVybWluZURhdGFMaW1pdHMoKXt9YWZ0ZXJEYXRhTGltaXRzKCl7dGhpcy5fY2FsbEhvb2tzKGBhZnRlckRhdGFMaW1pdHNgKX1iZWZvcmVCdWlsZFRpY2tzKCl7dGhpcy5fY2FsbEhvb2tzKGBiZWZvcmVCdWlsZFRpY2tzYCl9YnVpbGRUaWNrcygpe3JldHVybltdfWFmdGVyQnVpbGRUaWNrcygpe3RoaXMuX2NhbGxIb29rcyhgYWZ0ZXJCdWlsZFRpY2tzYCl9YmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uKCl7SSh0aGlzLm9wdGlvbnMuYmVmb3JlVGlja1RvTGFiZWxDb252ZXJzaW9uLFt0aGlzXSl9Z2VuZXJhdGVUaWNrTGFiZWxzKGUpe2xldCB0PXRoaXMub3B0aW9ucy50aWNrcyxuLHIsaTtmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpPWVbbl0saS5sYWJlbD1JKHQuY2FsbGJhY2ssW2kudmFsdWUsbixlXSx0aGlzKX1hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpe0kodGhpcy5vcHRpb25zLmFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uLFt0aGlzXSl9YmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpe0kodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24sW3RoaXNdKX1jYWxjdWxhdGVMYWJlbFJvdGF0aW9uKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aWNrcyxuPUFhKHRoaXMudGlja3MubGVuZ3RoLGUudGlja3MubWF4VGlja3NMaW1pdCkscj10Lm1pblJvdGF0aW9ufHwwLGk9dC5tYXhSb3RhdGlvbixhPXIsbyxzLGM7aWYoIXRoaXMuX2lzVmlzaWJsZSgpfHwhdC5kaXNwbGF5fHxyPj1pfHxuPD0xfHwhdGhpcy5pc0hvcml6b250YWwoKSl7dGhpcy5sYWJlbFJvdGF0aW9uPXI7cmV0dXJufWxldCBsPXRoaXMuX2dldExhYmVsU2l6ZXMoKSx1PWwud2lkZXN0LndpZHRoLGQ9bC5oaWdoZXN0LmhlaWdodCxmPUgodGhpcy5jaGFydC53aWR0aC11LDAsdGhpcy5tYXhXaWR0aCk7bz1lLm9mZnNldD90aGlzLm1heFdpZHRoL246Zi8obi0xKSx1KzY+byYmKG89Zi8obi0oZS5vZmZzZXQ/LjU6MSkpLHM9dGhpcy5tYXhIZWlnaHQtUGEoZS5ncmlkKS10LnBhZGRpbmctRmEoZS50aXRsZSx0aGlzLmNoYXJ0Lm9wdGlvbnMuZm9udCksYz1NYXRoLnNxcnQodSp1K2QqZCksYT12dChNYXRoLm1pbihNYXRoLmFzaW4oSCgobC5oaWdoZXN0LmhlaWdodCs2KS9vLC0xLDEpKSxNYXRoLmFzaW4oSChzL2MsLTEsMSkpLU1hdGguYXNpbihIKGQvYywtMSwxKSkpKSxhPU1hdGgubWF4KHIsTWF0aC5taW4oaSxhKSkpLHRoaXMubGFiZWxSb3RhdGlvbj1hfWFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbigpe0kodGhpcy5vcHRpb25zLmFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbixbdGhpc10pfWFmdGVyQXV0b1NraXAoKXt9YmVmb3JlRml0KCl7SSh0aGlzLm9wdGlvbnMuYmVmb3JlRml0LFt0aGlzXSl9Zml0KCl7bGV0IGU9e3dpZHRoOjAsaGVpZ2h0OjB9LHtjaGFydDp0LG9wdGlvbnM6e3RpY2tzOm4sdGl0bGU6cixncmlkOml9fT10aGlzLGE9dGhpcy5faXNWaXNpYmxlKCksbz10aGlzLmlzSG9yaXpvbnRhbCgpO2lmKGEpe2xldCBhPUZhKHIsdC5vcHRpb25zLmZvbnQpO2lmKG8/KGUud2lkdGg9dGhpcy5tYXhXaWR0aCxlLmhlaWdodD1QYShpKSthKTooZS5oZWlnaHQ9dGhpcy5tYXhIZWlnaHQsZS53aWR0aD1QYShpKSthKSxuLmRpc3BsYXkmJnRoaXMudGlja3MubGVuZ3RoKXtsZXR7Zmlyc3Q6dCxsYXN0OnIsd2lkZXN0OmksaGlnaGVzdDphfT10aGlzLl9nZXRMYWJlbFNpemVzKCkscz1uLnBhZGRpbmcqMixjPV90KHRoaXMubGFiZWxSb3RhdGlvbiksbD1NYXRoLmNvcyhjKSx1PU1hdGguc2luKGMpO2lmKG8pe2xldCB0PW4ubWlycm9yPzA6dSppLndpZHRoK2wqYS5oZWlnaHQ7ZS5oZWlnaHQ9TWF0aC5taW4odGhpcy5tYXhIZWlnaHQsZS5oZWlnaHQrdCtzKX1lbHNle2xldCB0PW4ubWlycm9yPzA6bCppLndpZHRoK3UqYS5oZWlnaHQ7ZS53aWR0aD1NYXRoLm1pbih0aGlzLm1heFdpZHRoLGUud2lkdGgrdCtzKX10aGlzLl9jYWxjdWxhdGVQYWRkaW5nKHQscix1LGwpfX10aGlzLl9oYW5kbGVNYXJnaW5zKCksbz8odGhpcy53aWR0aD10aGlzLl9sZW5ndGg9dC53aWR0aC10aGlzLl9tYXJnaW5zLmxlZnQtdGhpcy5fbWFyZ2lucy5yaWdodCx0aGlzLmhlaWdodD1lLmhlaWdodCk6KHRoaXMud2lkdGg9ZS53aWR0aCx0aGlzLmhlaWdodD10aGlzLl9sZW5ndGg9dC5oZWlnaHQtdGhpcy5fbWFyZ2lucy50b3AtdGhpcy5fbWFyZ2lucy5ib3R0b20pfV9jYWxjdWxhdGVQYWRkaW5nKGUsdCxuLHIpe2xldHt0aWNrczp7YWxpZ246aSxwYWRkaW5nOmF9LHBvc2l0aW9uOm99PXRoaXMub3B0aW9ucyxzPXRoaXMubGFiZWxSb3RhdGlvbiE9PTAsYz1vIT09YHRvcGAmJnRoaXMuYXhpcz09PWB4YDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXtsZXQgbz10aGlzLmdldFBpeGVsRm9yVGljaygwKS10aGlzLmxlZnQsbD10aGlzLnJpZ2h0LXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKHRoaXMudGlja3MubGVuZ3RoLTEpLHU9MCxkPTA7cz9jPyh1PXIqZS53aWR0aCxkPW4qdC5oZWlnaHQpOih1PW4qZS5oZWlnaHQsZD1yKnQud2lkdGgpOmk9PT1gc3RhcnRgP2Q9dC53aWR0aDppPT09YGVuZGA/dT1lLndpZHRoOmkhPT1gaW5uZXJgJiYodT1lLndpZHRoLzIsZD10LndpZHRoLzIpLHRoaXMucGFkZGluZ0xlZnQ9TWF0aC5tYXgoKHUtbythKSp0aGlzLndpZHRoLyh0aGlzLndpZHRoLW8pLDApLHRoaXMucGFkZGluZ1JpZ2h0PU1hdGgubWF4KChkLWwrYSkqdGhpcy53aWR0aC8odGhpcy53aWR0aC1sKSwwKX1lbHNle2xldCBuPXQuaGVpZ2h0LzIscj1lLmhlaWdodC8yO2k9PT1gc3RhcnRgPyhuPTAscj1lLmhlaWdodCk6aT09PWBlbmRgJiYobj10LmhlaWdodCxyPTApLHRoaXMucGFkZGluZ1RvcD1uK2EsdGhpcy5wYWRkaW5nQm90dG9tPXIrYX19X2hhbmRsZU1hcmdpbnMoKXt0aGlzLl9tYXJnaW5zJiYodGhpcy5fbWFyZ2lucy5sZWZ0PU1hdGgubWF4KHRoaXMucGFkZGluZ0xlZnQsdGhpcy5fbWFyZ2lucy5sZWZ0KSx0aGlzLl9tYXJnaW5zLnRvcD1NYXRoLm1heCh0aGlzLnBhZGRpbmdUb3AsdGhpcy5fbWFyZ2lucy50b3ApLHRoaXMuX21hcmdpbnMucmlnaHQ9TWF0aC5tYXgodGhpcy5wYWRkaW5nUmlnaHQsdGhpcy5fbWFyZ2lucy5yaWdodCksdGhpcy5fbWFyZ2lucy5ib3R0b209TWF0aC5tYXgodGhpcy5wYWRkaW5nQm90dG9tLHRoaXMuX21hcmdpbnMuYm90dG9tKSl9YWZ0ZXJGaXQoKXtJKHRoaXMub3B0aW9ucy5hZnRlckZpdCxbdGhpc10pfWlzSG9yaXpvbnRhbCgpe2xldHtheGlzOmUscG9zaXRpb246dH09dGhpcy5vcHRpb25zO3JldHVybiB0PT09YHRvcGB8fHQ9PT1gYm90dG9tYHx8ZT09PWB4YH1pc0Z1bGxTaXplKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5mdWxsU2l6ZX1fY29udmVydFRpY2tzVG9MYWJlbHMoZSl7dGhpcy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKSx0aGlzLmdlbmVyYXRlVGlja0xhYmVscyhlKTtsZXQgdCxuO2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKUEoZVt0XS5sYWJlbCkmJihlLnNwbGljZSh0LDEpLG4tLSx0LS0pO3RoaXMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24oKX1fZ2V0TGFiZWxTaXplcygpe2xldCBlPXRoaXMuX2xhYmVsU2l6ZXM7aWYoIWUpe2xldCB0PXRoaXMub3B0aW9ucy50aWNrcy5zYW1wbGVTaXplLG49dGhpcy50aWNrczt0PG4ubGVuZ3RoJiYobj1qYShuLHQpKSx0aGlzLl9sYWJlbFNpemVzPWU9dGhpcy5fY29tcHV0ZUxhYmVsU2l6ZXMobixuLmxlbmd0aCx0aGlzLm9wdGlvbnMudGlja3MubWF4VGlja3NMaW1pdCl9cmV0dXJuIGV9X2NvbXB1dGVMYWJlbFNpemVzKGUsdCxuKXtsZXR7Y3R4OnIsX2xvbmdlc3RUZXh0Q2FjaGU6aX09dGhpcyxhPVtdLG89W10scz1NYXRoLmZsb29yKHQvQWEodCxuKSksYz0wLGw9MCx1LGQsZixwLG0saCxnLF8sdix5LGI7Zm9yKHU9MDt1PHQ7dSs9cyl7aWYocD1lW3VdLmxhYmVsLG09dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucyh1KSxyLmZvbnQ9aD1tLnN0cmluZyxnPWlbaF09aVtoXXx8e2RhdGE6e30sZ2M6W119LF89bS5saW5lSGVpZ2h0LHY9eT0wLCFBKHApJiYhaihwKSl2PWRuKHIsZy5kYXRhLGcuZ2MsdixwKSx5PV87ZWxzZSBpZihqKHApKWZvcihkPTAsZj1wLmxlbmd0aDtkPGY7KytkKWI9cFtkXSwhQShiKSYmIWooYikmJih2PWRuKHIsZy5kYXRhLGcuZ2MsdixiKSx5Kz1fKTthLnB1c2godiksby5wdXNoKHkpLGM9TWF0aC5tYXgodixjKSxsPU1hdGgubWF4KHksbCl9TmEoaSx0KTtsZXQgeD1hLmluZGV4T2YoYyksUz1vLmluZGV4T2YobCksQz1lPT4oe3dpZHRoOmFbZV18fDAsaGVpZ2h0Om9bZV18fDB9KTtyZXR1cm57Zmlyc3Q6QygwKSxsYXN0OkModC0xKSx3aWRlc3Q6Qyh4KSxoaWdoZXN0OkMoUyksd2lkdGhzOmEsaGVpZ2h0czpvfX1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBlfWdldFBpeGVsRm9yVmFsdWUoZSx0KXtyZXR1cm4gTmFOfWdldFZhbHVlRm9yUGl4ZWwoZSl7fWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRQaXhlbEZvckRlY2ltYWwoZSl7dGhpcy5fcmV2ZXJzZVBpeGVscyYmKGU9MS1lKTtsZXQgdD10aGlzLl9zdGFydFBpeGVsK2UqdGhpcy5fbGVuZ3RoO3JldHVybiB3dCh0aGlzLl9hbGlnblRvUGl4ZWxzP3BuKHRoaXMuY2hhcnQsdCwwKTp0KX1nZXREZWNpbWFsRm9yUGl4ZWwoZSl7bGV0IHQ9KGUtdGhpcy5fc3RhcnRQaXhlbCkvdGhpcy5fbGVuZ3RoO3JldHVybiB0aGlzLl9yZXZlcnNlUGl4ZWxzPzEtdDp0fWdldEJhc2VQaXhlbCgpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy5nZXRCYXNlVmFsdWUoKSl9Z2V0QmFzZVZhbHVlKCl7bGV0e21pbjplLG1heDp0fT10aGlzO3JldHVybiBlPDAmJnQ8MD90OmU+MCYmdD4wP2U6MH1nZXRDb250ZXh0KGUpe2xldCB0PXRoaXMudGlja3N8fFtdO2lmKGU+PTAmJmU8dC5sZW5ndGgpe2xldCBuPXRbZV07cmV0dXJuIG4uJGNvbnRleHR8fD1MYSh0aGlzLmdldENvbnRleHQoKSxlLG4pfXJldHVybiB0aGlzLiRjb250ZXh0fHw9SWEodGhpcy5jaGFydC5nZXRDb250ZXh0KCksdGhpcyl9X3RpY2tTaXplKCl7bGV0IGU9dGhpcy5vcHRpb25zLnRpY2tzLHQ9X3QodGhpcy5sYWJlbFJvdGF0aW9uKSxuPU1hdGguYWJzKE1hdGguY29zKHQpKSxyPU1hdGguYWJzKE1hdGguc2luKHQpKSxpPXRoaXMuX2dldExhYmVsU2l6ZXMoKSxhPWUuYXV0b1NraXBQYWRkaW5nfHwwLG89aT9pLndpZGVzdC53aWR0aCthOjAscz1pP2kuaGlnaGVzdC5oZWlnaHQrYTowO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3Mqbj5vKnI/by9uOnMvcjpzKnI8bypuP3MvbjpvL3J9X2lzVmlzaWJsZSgpe2xldCBlPXRoaXMub3B0aW9ucy5kaXNwbGF5O3JldHVybiBlPT09YGF1dG9gP3RoaXMuZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMoKS5sZW5ndGg+MDohIWV9X2NvbXB1dGVHcmlkTGluZUl0ZW1zKGUpe2xldCB0PXRoaXMuYXhpcyxuPXRoaXMuY2hhcnQscj10aGlzLm9wdGlvbnMse2dyaWQ6aSxwb3NpdGlvbjphLGJvcmRlcjpvfT1yLHM9aS5vZmZzZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpLGw9dGhpcy50aWNrcy5sZW5ndGgrICshIXMsdT1QYShpKSxkPVtdLGY9by5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxwPWYuZGlzcGxheT9mLndpZHRoOjAsbT1wLzIsaD1mdW5jdGlvbihlKXtyZXR1cm4gcG4obixlLHApfSxnLF8sdix5LGIseCxTLEMsdyxULEUsRDtpZihhPT09YHRvcGApZz1oKHRoaXMuYm90dG9tKSx4PXRoaXMuYm90dG9tLXUsQz1nLW0sVD1oKGUudG9wKSttLEQ9ZS5ib3R0b207ZWxzZSBpZihhPT09YGJvdHRvbWApZz1oKHRoaXMudG9wKSxUPWUudG9wLEQ9aChlLmJvdHRvbSktbSx4PWcrbSxDPXRoaXMudG9wK3U7ZWxzZSBpZihhPT09YGxlZnRgKWc9aCh0aGlzLnJpZ2h0KSxiPXRoaXMucmlnaHQtdSxTPWctbSx3PWgoZS5sZWZ0KSttLEU9ZS5yaWdodDtlbHNlIGlmKGE9PT1gcmlnaHRgKWc9aCh0aGlzLmxlZnQpLHc9ZS5sZWZ0LEU9aChlLnJpZ2h0KS1tLGI9ZyttLFM9dGhpcy5sZWZ0K3U7ZWxzZSBpZih0PT09YHhgKXtpZihhPT09YGNlbnRlcmApZz1oKChlLnRvcCtlLmJvdHRvbSkvMisuNSk7ZWxzZSBpZihNKGEpKXtsZXQgZT1PYmplY3Qua2V5cyhhKVswXSx0PWFbZV07Zz1oKHRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkpfVQ9ZS50b3AsRD1lLmJvdHRvbSx4PWcrbSxDPXgrdX1lbHNlIGlmKHQ9PT1geWApe2lmKGE9PT1gY2VudGVyYClnPWgoKGUubGVmdCtlLnJpZ2h0KS8yKTtlbHNlIGlmKE0oYSkpe2xldCBlPU9iamVjdC5rZXlzKGEpWzBdLHQ9YVtlXTtnPWgodGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KSl9Yj1nLW0sUz1iLXUsdz1lLmxlZnQsRT1lLnJpZ2h0fWxldCBlZT1GKHIudGlja3MubWF4VGlja3NMaW1pdCxsKSxPPU1hdGgubWF4KDEsTWF0aC5jZWlsKGwvZWUpKTtmb3IoXz0wO188bDtfKz1PKXtsZXQgZT10aGlzLmdldENvbnRleHQoXyksdD1pLnNldENvbnRleHQoZSkscj1vLnNldENvbnRleHQoZSksYT10LmxpbmVXaWR0aCxsPXQuY29sb3IsdT1yLmRhc2h8fFtdLGY9ci5kYXNoT2Zmc2V0LHA9dC50aWNrV2lkdGgsbT10LnRpY2tDb2xvcixoPXQudGlja0JvcmRlckRhc2h8fFtdLGc9dC50aWNrQm9yZGVyRGFzaE9mZnNldDt2PU1hKHRoaXMsXyxzKSx2IT09dm9pZCAwJiYoeT1wbihuLHYsYSksYz9iPVM9dz1FPXk6eD1DPVQ9RD15LGQucHVzaCh7dHgxOmIsdHkxOngsdHgyOlMsdHkyOkMseDE6dyx5MTpULHgyOkUseTI6RCx3aWR0aDphLGNvbG9yOmwsYm9yZGVyRGFzaDp1LGJvcmRlckRhc2hPZmZzZXQ6Zix0aWNrV2lkdGg6cCx0aWNrQ29sb3I6bSx0aWNrQm9yZGVyRGFzaDpoLHRpY2tCb3JkZXJEYXNoT2Zmc2V0Omd9KSl9cmV0dXJuIHRoaXMuX3RpY2tzTGVuZ3RoPWwsdGhpcy5fYm9yZGVyVmFsdWU9ZyxkfV9jb21wdXRlTGFiZWxJdGVtcyhlKXtsZXQgdD10aGlzLmF4aXMsbj10aGlzLm9wdGlvbnMse3Bvc2l0aW9uOnIsdGlja3M6aX09bixhPXRoaXMuaXNIb3Jpem9udGFsKCksbz10aGlzLnRpY2tzLHthbGlnbjpzLGNyb3NzQWxpZ246YyxwYWRkaW5nOmwsbWlycm9yOnV9PWksZD1QYShuLmdyaWQpLGY9ZCtsLHA9dT8tbDpmLG09LV90KHRoaXMubGFiZWxSb3RhdGlvbiksaD1bXSxnLF8sdix5LGIseCxTLEMsdyxULEUsRCxlZT1gbWlkZGxlYDtpZihyPT09YHRvcGApeD10aGlzLmJvdHRvbS1wLFM9dGhpcy5fZ2V0WEF4aXNMYWJlbEFsaWdubWVudCgpO2Vsc2UgaWYocj09PWBib3R0b21gKXg9dGhpcy50b3ArcCxTPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKTtlbHNlIGlmKHI9PT1gbGVmdGApe2xldCBlPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCk7Uz1lLnRleHRBbGlnbixiPWUueH1lbHNlIGlmKHI9PT1gcmlnaHRgKXtsZXQgZT10aGlzLl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50KGQpO1M9ZS50ZXh0QWxpZ24sYj1lLnh9ZWxzZSBpZih0PT09YHhgKXtpZihyPT09YGNlbnRlcmApeD0oZS50b3ArZS5ib3R0b20pLzIrZjtlbHNlIGlmKE0ocikpe2xldCBlPU9iamVjdC5rZXlzKHIpWzBdLHQ9cltlXTt4PXRoaXMuY2hhcnQuc2NhbGVzW2VdLmdldFBpeGVsRm9yVmFsdWUodCkrZn1TPXRoaXMuX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQoKX1lbHNlIGlmKHQ9PT1geWApe2lmKHI9PT1gY2VudGVyYCliPShlLmxlZnQrZS5yaWdodCkvMi1mO2Vsc2UgaWYoTShyKSl7bGV0IGU9T2JqZWN0LmtleXMocilbMF0sdD1yW2VdO2I9dGhpcy5jaGFydC5zY2FsZXNbZV0uZ2V0UGl4ZWxGb3JWYWx1ZSh0KX1TPXRoaXMuX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZCkudGV4dEFsaWdufXQ9PT1geWAmJihzPT09YHN0YXJ0YD9lZT1gdG9wYDpzPT09YGVuZGAmJihlZT1gYm90dG9tYCkpO2xldCBPPXRoaXMuX2dldExhYmVsU2l6ZXMoKTtmb3IoZz0wLF89by5sZW5ndGg7ZzxfOysrZyl7dj1vW2ddLHk9di5sYWJlbDtsZXQgZT1pLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGcpKTtDPXRoaXMuZ2V0UGl4ZWxGb3JUaWNrKGcpK2kubGFiZWxPZmZzZXQsdz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKGcpLFQ9dy5saW5lSGVpZ2h0LEU9aih5KT95Lmxlbmd0aDoxO2xldCB0PUUvMixuPWUuY29sb3Iscz1lLnRleHRTdHJva2VDb2xvcixsPWUudGV4dFN0cm9rZVdpZHRoLGQ9UzthPyhiPUMsUz09PWBpbm5lcmAmJihkPWc9PT1fLTE/dGhpcy5vcHRpb25zLnJldmVyc2U/YGxlZnRgOmByaWdodGA6Zz09PTA/dGhpcy5vcHRpb25zLnJldmVyc2U/YHJpZ2h0YDpgbGVmdGA6YGNlbnRlcmApLEQ9cj09PWB0b3BgP2M9PT1gbmVhcmB8fG0hPT0wPy1FKlQrVC8yOmM9PT1gY2VudGVyYD8tTy5oaWdoZXN0LmhlaWdodC8yLXQqVCtUOi1PLmhpZ2hlc3QuaGVpZ2h0K1QvMjpjPT09YG5lYXJgfHxtIT09MD9ULzI6Yz09PWBjZW50ZXJgP08uaGlnaGVzdC5oZWlnaHQvMi10KlQ6Ty5oaWdoZXN0LmhlaWdodC1FKlQsdSYmKEQqPS0xKSxtIT09MCYmIWUuc2hvd0xhYmVsQmFja2Ryb3AmJihiKz1ULzIqTWF0aC5zaW4obSkpKTooeD1DLEQ9KDEtRSkqVC8yKTtsZXQgZjtpZihlLnNob3dMYWJlbEJhY2tkcm9wKXtsZXQgdD1LKGUuYmFja2Ryb3BQYWRkaW5nKSxuPU8uaGVpZ2h0c1tnXSxyPU8ud2lkdGhzW2ddLGk9RC10LnRvcCxhPTAtdC5sZWZ0O3N3aXRjaChlZSl7Y2FzZWBtaWRkbGVgOmktPW4vMjticmVhaztjYXNlYGJvdHRvbWA6aS09bn1zd2l0Y2goUyl7Y2FzZWBjZW50ZXJgOmEtPXIvMjticmVhaztjYXNlYHJpZ2h0YDphLT1yO2JyZWFrO2Nhc2VgaW5uZXJgOmc9PT1fLTE/YS09cjpnPjAmJihhLT1yLzIpfWY9e2xlZnQ6YSx0b3A6aSx3aWR0aDpyK3Qud2lkdGgsaGVpZ2h0Om4rdC5oZWlnaHQsY29sb3I6ZS5iYWNrZHJvcENvbG9yfX1oLnB1c2goe2xhYmVsOnksZm9udDp3LHRleHRPZmZzZXQ6RCxvcHRpb25zOntyb3RhdGlvbjptLGNvbG9yOm4sc3Ryb2tlQ29sb3I6cyxzdHJva2VXaWR0aDpsLHRleHRBbGlnbjpkLHRleHRCYXNlbGluZTplZSx0cmFuc2xhdGlvbjpbYix4XSxiYWNrZHJvcDpmfX0pfXJldHVybiBofV9nZXRYQXhpc0xhYmVsQWxpZ25tZW50KCl7bGV0e3Bvc2l0aW9uOmUsdGlja3M6dH09dGhpcy5vcHRpb25zO2lmKC1fdCh0aGlzLmxhYmVsUm90YXRpb24pKXJldHVybiBlPT09YHRvcGA/YGxlZnRgOmByaWdodGA7bGV0IG49YGNlbnRlcmA7cmV0dXJuIHQuYWxpZ249PT1gc3RhcnRgP249YGxlZnRgOnQuYWxpZ249PT1gZW5kYD9uPWByaWdodGA6dC5hbGlnbj09PWBpbm5lcmAmJihuPWBpbm5lcmApLG59X2dldFlBeGlzTGFiZWxBbGlnbm1lbnQoZSl7bGV0e3Bvc2l0aW9uOnQsdGlja3M6e2Nyb3NzQWxpZ246bixtaXJyb3I6cixwYWRkaW5nOml9fT10aGlzLm9wdGlvbnMsYT10aGlzLl9nZXRMYWJlbFNpemVzKCksbz1lK2kscz1hLndpZGVzdC53aWR0aCxjLGw7cmV0dXJuIHQ9PT1gbGVmdGA/cj8obD10aGlzLnJpZ2h0K2ksbj09PWBuZWFyYD9jPWBsZWZ0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbCs9cy8yKTooYz1gcmlnaHRgLGwrPXMpKToobD10aGlzLnJpZ2h0LW8sbj09PWBuZWFyYD9jPWByaWdodGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwtPXMvMik6KGM9YGxlZnRgLGw9dGhpcy5sZWZ0KSk6dD09PWByaWdodGA/cj8obD10aGlzLmxlZnQraSxuPT09YG5lYXJgP2M9YHJpZ2h0YDpuPT09YGNlbnRlcmA/KGM9YGNlbnRlcmAsbC09cy8yKTooYz1gbGVmdGAsbC09cykpOihsPXRoaXMubGVmdCtvLG49PT1gbmVhcmA/Yz1gbGVmdGA6bj09PWBjZW50ZXJgPyhjPWBjZW50ZXJgLGwrPXMvMik6KGM9YHJpZ2h0YCxsPXRoaXMucmlnaHQpKTpjPWByaWdodGAse3RleHRBbGlnbjpjLHg6bH19X2NvbXB1dGVMYWJlbEFyZWEoKXtpZih0aGlzLm9wdGlvbnMudGlja3MubWlycm9yKXJldHVybjtsZXQgZT10aGlzLmNoYXJ0LHQ9dGhpcy5vcHRpb25zLnBvc2l0aW9uO2lmKHQ9PT1gbGVmdGB8fHQ9PT1gcmlnaHRgKXJldHVybnt0b3A6MCxsZWZ0OnRoaXMubGVmdCxib3R0b206ZS5oZWlnaHQscmlnaHQ6dGhpcy5yaWdodH07aWYodD09PWB0b3BgfHx0PT09YGJvdHRvbWApcmV0dXJue3RvcDp0aGlzLnRvcCxsZWZ0OjAsYm90dG9tOnRoaXMuYm90dG9tLHJpZ2h0OmUud2lkdGh9fWRyYXdCYWNrZ3JvdW5kKCl7bGV0e2N0eDplLG9wdGlvbnM6e2JhY2tncm91bmRDb2xvcjp0fSxsZWZ0Om4sdG9wOnIsd2lkdGg6aSxoZWlnaHQ6YX09dGhpczt0JiYoZS5zYXZlKCksZS5maWxsU3R5bGU9dCxlLmZpbGxSZWN0KG4scixpLGEpLGUucmVzdG9yZSgpKX1nZXRMaW5lV2lkdGhGb3JWYWx1ZShlKXtsZXQgdD10aGlzLm9wdGlvbnMuZ3JpZDtpZighdGhpcy5faXNWaXNpYmxlKCl8fCF0LmRpc3BsYXkpcmV0dXJuIDA7bGV0IG49dGhpcy50aWNrcy5maW5kSW5kZXgodD0+dC52YWx1ZT09PWUpO3JldHVybiBuPj0wP3Quc2V0Q29udGV4dCh0aGlzLmdldENvbnRleHQobikpLmxpbmVXaWR0aDowfWRyYXdHcmlkKGUpe2xldCB0PXRoaXMub3B0aW9ucy5ncmlkLG49dGhpcy5jdHgscj10aGlzLl9ncmlkTGluZUl0ZW1zfHw9dGhpcy5fY29tcHV0ZUdyaWRMaW5lSXRlbXMoZSksaSxhLG89KGUsdCxyKT0+eyFyLndpZHRofHwhci5jb2xvcnx8KG4uc2F2ZSgpLG4ubGluZVdpZHRoPXIud2lkdGgsbi5zdHJva2VTdHlsZT1yLmNvbG9yLG4uc2V0TGluZURhc2goci5ib3JkZXJEYXNofHxbXSksbi5saW5lRGFzaE9mZnNldD1yLmJvcmRlckRhc2hPZmZzZXQsbi5iZWdpblBhdGgoKSxuLm1vdmVUbyhlLngsZS55KSxuLmxpbmVUbyh0LngsdC55KSxuLnN0cm9rZSgpLG4ucmVzdG9yZSgpKX07aWYodC5kaXNwbGF5KWZvcihpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXtsZXQgZT1yW2ldO3QuZHJhd09uQ2hhcnRBcmVhJiZvKHt4OmUueDEseTplLnkxfSx7eDplLngyLHk6ZS55Mn0sZSksdC5kcmF3VGlja3MmJm8oe3g6ZS50eDEseTplLnR5MX0se3g6ZS50eDIseTplLnR5Mn0se2NvbG9yOmUudGlja0NvbG9yLHdpZHRoOmUudGlja1dpZHRoLGJvcmRlckRhc2g6ZS50aWNrQm9yZGVyRGFzaCxib3JkZXJEYXNoT2Zmc2V0OmUudGlja0JvcmRlckRhc2hPZmZzZXR9KX19ZHJhd0JvcmRlcigpe2xldHtjaGFydDplLGN0eDp0LG9wdGlvbnM6e2JvcmRlcjpuLGdyaWQ6cn19PXRoaXMsaT1uLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLGE9bi5kaXNwbGF5P2kud2lkdGg6MDtpZighYSlyZXR1cm47bGV0IG89ci5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgwKSkubGluZVdpZHRoLHM9dGhpcy5fYm9yZGVyVmFsdWUsYyxsLHUsZDt0aGlzLmlzSG9yaXpvbnRhbCgpPyhjPXBuKGUsdGhpcy5sZWZ0LGEpLWEvMixsPXBuKGUsdGhpcy5yaWdodCxvKStvLzIsdT1kPXMpOih1PXBuKGUsdGhpcy50b3AsYSktYS8yLGQ9cG4oZSx0aGlzLmJvdHRvbSxvKStvLzIsYz1sPXMpLHQuc2F2ZSgpLHQubGluZVdpZHRoPWkud2lkdGgsdC5zdHJva2VTdHlsZT1pLmNvbG9yLHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oYyx1KSx0LmxpbmVUbyhsLGQpLHQuc3Ryb2tlKCksdC5yZXN0b3JlKCl9ZHJhd0xhYmVscyhlKXtpZighdGhpcy5vcHRpb25zLnRpY2tzLmRpc3BsYXkpcmV0dXJuO2xldCB0PXRoaXMuY3R4LG49dGhpcy5fY29tcHV0ZUxhYmVsQXJlYSgpO24mJl9uKHQsbik7bGV0IHI9dGhpcy5nZXRMYWJlbEl0ZW1zKGUpO2ZvcihsZXQgZSBvZiByKXtsZXQgbj1lLm9wdGlvbnMscj1lLmZvbnQsaT1lLmxhYmVsLGE9ZS50ZXh0T2Zmc2V0O3duKHQsaSwwLGEscixuKX1uJiZ2bih0KX1kcmF3VGl0bGUoKXtsZXR7Y3R4OmUsb3B0aW9uczp7cG9zaXRpb246dCx0aXRsZTpuLHJldmVyc2U6cn19PXRoaXM7aWYoIW4uZGlzcGxheSlyZXR1cm47bGV0IGk9cShuLmZvbnQpLGE9SyhuLnBhZGRpbmcpLG89bi5hbGlnbixzPWkubGluZUhlaWdodC8yO3Q9PT1gYm90dG9tYHx8dD09PWBjZW50ZXJgfHxNKHQpPyhzKz1hLmJvdHRvbSxqKG4udGV4dCkmJihzKz1pLmxpbmVIZWlnaHQqKG4udGV4dC5sZW5ndGgtMSkpKTpzKz1hLnRvcDtsZXR7dGl0bGVYOmMsdGl0bGVZOmwsbWF4V2lkdGg6dSxyb3RhdGlvbjpkfT16YSh0aGlzLHMsdCxvKTt3bihlLG4udGV4dCwwLDAsaSx7Y29sb3I6bi5jb2xvcixtYXhXaWR0aDp1LHJvdGF0aW9uOmQsdGV4dEFsaWduOlJhKG8sdCxyKSx0ZXh0QmFzZWxpbmU6YG1pZGRsZWAsdHJhbnNsYXRpb246W2MsbF19KX1kcmF3KGUpe3RoaXMuX2lzVmlzaWJsZSgpJiYodGhpcy5kcmF3QmFja2dyb3VuZCgpLHRoaXMuZHJhd0dyaWQoZSksdGhpcy5kcmF3Qm9yZGVyKCksdGhpcy5kcmF3VGl0bGUoKSx0aGlzLmRyYXdMYWJlbHMoZSkpfV9sYXllcnMoKXtsZXQgdD10aGlzLm9wdGlvbnMsbj10LnRpY2tzJiZ0LnRpY2tzLnp8fDAscj1GKHQuZ3JpZCYmdC5ncmlkLnosLTEpLGk9Rih0LmJvcmRlciYmdC5ib3JkZXIueiwwKTtyZXR1cm4hdGhpcy5faXNWaXNpYmxlKCl8fHRoaXMuZHJhdyE9PWUucHJvdG90eXBlLmRyYXc/W3t6Om4sZHJhdzplPT57dGhpcy5kcmF3KGUpfX1dOlt7ejpyLGRyYXc6ZT0+e3RoaXMuZHJhd0JhY2tncm91bmQoKSx0aGlzLmRyYXdHcmlkKGUpLHRoaXMuZHJhd1RpdGxlKCl9fSx7ejppLGRyYXc6KCk9Pnt0aGlzLmRyYXdCb3JkZXIoKX19LHt6Om4sZHJhdzplPT57dGhpcy5kcmF3TGFiZWxzKGUpfX1dfWdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKGUpe2xldCB0PXRoaXMuY2hhcnQuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLG49dGhpcy5heGlzK2BBeGlzSURgLHI9W10saSxhO2ZvcihpPTAsYT10Lmxlbmd0aDtpPGE7KytpKXtsZXQgYT10W2ldO2Fbbl09PT10aGlzLmlkJiYoIWV8fGEudHlwZT09PWUpJiZyLnB1c2goYSl9cmV0dXJuIHJ9X3Jlc29sdmVUaWNrRm9udE9wdGlvbnMoZSl7cmV0dXJuIHEodGhpcy5vcHRpb25zLnRpY2tzLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KGUpKS5mb250KX1fbWF4RGlnaXRzKCl7bGV0IGU9dGhpcy5fcmVzb2x2ZVRpY2tGb250T3B0aW9ucygwKS5saW5lSGVpZ2h0O3JldHVybih0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGg6dGhpcy5oZWlnaHQpL2V9fSxWYT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy50eXBlPWUsdGhpcy5zY29wZT10LHRoaXMub3ZlcnJpZGU9bix0aGlzLml0ZW1zPU9iamVjdC5jcmVhdGUobnVsbCl9aXNGb3JUeXBlKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2YuY2FsbCh0aGlzLnR5cGUucHJvdG90eXBlLGUucHJvdG90eXBlKX1yZWdpc3RlcihlKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSksbjtXYSh0KSYmKG49dGhpcy5yZWdpc3Rlcih0KSk7bGV0IHI9dGhpcy5pdGVtcyxpPWUuaWQsYT10aGlzLnNjb3BlK2AuYCtpO2lmKCFpKXRocm93IEVycm9yKGBjbGFzcyBkb2VzIG5vdCBoYXZlIGlkOiBgK2UpO3JldHVybiBpIGluIHI/YToocltpXT1lLEhhKGUsYSxuKSx0aGlzLm92ZXJyaWRlJiZXLm92ZXJyaWRlKGUuaWQsZS5vdmVycmlkZXMpLGEpfWdldChlKXtyZXR1cm4gdGhpcy5pdGVtc1tlXX11bnJlZ2lzdGVyKGUpe2xldCB0PXRoaXMuaXRlbXMsbj1lLmlkLHI9dGhpcy5zY29wZTtuIGluIHQmJmRlbGV0ZSB0W25dLHImJm4gaW4gV1tyXSYmKGRlbGV0ZSBXW3JdW25dLHRoaXMub3ZlcnJpZGUmJmRlbGV0ZSBvbltuXSl9fTtmdW5jdGlvbiBIYShlLHQsbil7bGV0IHI9R2UoT2JqZWN0LmNyZWF0ZShudWxsKSxbbj9XLmdldChuKTp7fSxXLmdldCh0KSxlLmRlZmF1bHRzXSk7Vy5zZXQodCxyKSxlLmRlZmF1bHRSb3V0ZXMmJlVhKHQsZS5kZWZhdWx0Um91dGVzKSxlLmRlc2NyaXB0b3JzJiZXLmRlc2NyaWJlKHQsZS5kZXNjcmlwdG9ycyl9ZnVuY3Rpb24gVWEoZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntsZXQgcj1uLnNwbGl0KGAuYCksaT1yLnBvcCgpLGE9W2VdLmNvbmNhdChyKS5qb2luKGAuYCksbz10W25dLnNwbGl0KGAuYCkscz1vLnBvcCgpLGM9by5qb2luKGAuYCk7Vy5yb3V0ZShhLGksYyxzKX0pfWZ1bmN0aW9uIFdhKGUpe3JldHVybmBpZGBpbiBlJiZgZGVmYXVsdHNgaW4gZX12YXIgWT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRyb2xsZXJzPW5ldyBWYSh4aSxgZGF0YXNldHNgLCEwKSx0aGlzLmVsZW1lbnRzPW5ldyBWYShiYSxgZWxlbWVudHNgKSx0aGlzLnBsdWdpbnM9bmV3IFZhKE9iamVjdCxgcGx1Z2luc2ApLHRoaXMuc2NhbGVzPW5ldyBWYShCYSxgc2NhbGVzYCksdGhpcy5fdHlwZWRSZWdpc3RyaWVzPVt0aGlzLmNvbnRyb2xsZXJzLHRoaXMuc2NhbGVzLHRoaXMuZWxlbWVudHNdfWFkZCguLi5lKXt0aGlzLl9lYWNoKGByZWdpc3RlcmAsZSl9cmVtb3ZlKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUpfWFkZENvbnRyb2xsZXJzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfWFkZEVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHJlZ2lzdGVyYCxlLHRoaXMuZWxlbWVudHMpfWFkZFBsdWdpbnMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5wbHVnaW5zKX1hZGRTY2FsZXMoLi4uZSl7dGhpcy5fZWFjaChgcmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfWdldENvbnRyb2xsZXIoZSl7cmV0dXJuIHRoaXMuX2dldChlLHRoaXMuY29udHJvbGxlcnMsYGNvbnRyb2xsZXJgKX1nZXRFbGVtZW50KGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLmVsZW1lbnRzLGBlbGVtZW50YCl9Z2V0UGx1Z2luKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnBsdWdpbnMsYHBsdWdpbmApfWdldFNjYWxlKGUpe3JldHVybiB0aGlzLl9nZXQoZSx0aGlzLnNjYWxlcyxgc2NhbGVgKX1yZW1vdmVDb250cm9sbGVycyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMuY29udHJvbGxlcnMpfXJlbW92ZUVsZW1lbnRzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5lbGVtZW50cyl9cmVtb3ZlUGx1Z2lucyguLi5lKXt0aGlzLl9lYWNoKGB1bnJlZ2lzdGVyYCxlLHRoaXMucGx1Z2lucyl9cmVtb3ZlU2NhbGVzKC4uLmUpe3RoaXMuX2VhY2goYHVucmVnaXN0ZXJgLGUsdGhpcy5zY2FsZXMpfV9lYWNoKGUsdCxuKXtbLi4udF0uZm9yRWFjaCh0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO258fHIuaXNGb3JUeXBlKHQpfHxyPT09dGhpcy5wbHVnaW5zJiZ0LmlkP3RoaXMuX2V4ZWMoZSxyLHQpOkwodCx0PT57bGV0IHI9bnx8dGhpcy5fZ2V0UmVnaXN0cnlGb3JUeXBlKHQpO3RoaXMuX2V4ZWMoZSxyLHQpfSl9KX1fZXhlYyhlLHQsbil7bGV0IHI9UWUoZSk7SShuW2BiZWZvcmVgK3JdLFtdLG4pLHRbZV0obiksSShuW2BhZnRlcmArcl0sW10sbil9X2dldFJlZ2lzdHJ5Rm9yVHlwZShlKXtmb3IobGV0IHQ9MDt0PHRoaXMuX3R5cGVkUmVnaXN0cmllcy5sZW5ndGg7dCsrKXtsZXQgbj10aGlzLl90eXBlZFJlZ2lzdHJpZXNbdF07aWYobi5pc0ZvclR5cGUoZSkpcmV0dXJuIG59cmV0dXJuIHRoaXMucGx1Z2luc31fZ2V0KGUsdCxuKXtsZXQgcj10LmdldChlKTtpZihyPT09dm9pZCAwKXRocm93IEVycm9yKGAiYCtlK2AiIGlzIG5vdCBhIHJlZ2lzdGVyZWQgYCtuK2AuYCk7cmV0dXJuIHJ9fSxHYT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2luaXQ9dm9pZCAwfW5vdGlmeShlLHQsbixyKXtpZih0PT09YGJlZm9yZUluaXRgJiYodGhpcy5faW5pdD10aGlzLl9jcmVhdGVEZXNjcmlwdG9ycyhlLCEwKSx0aGlzLl9ub3RpZnkodGhpcy5faW5pdCxlLGBpbnN0YWxsYCkpLHRoaXMuX2luaXQ9PT12b2lkIDApcmV0dXJuO2xldCBpPXI/dGhpcy5fZGVzY3JpcHRvcnMoZSkuZmlsdGVyKHIpOnRoaXMuX2Rlc2NyaXB0b3JzKGUpLGE9dGhpcy5fbm90aWZ5KGksZSx0LG4pO3JldHVybiB0PT09YGFmdGVyRGVzdHJveWAmJih0aGlzLl9ub3RpZnkoaSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHRoaXMuX2luaXQsZSxgdW5pbnN0YWxsYCksdGhpcy5faW5pdD12b2lkIDApLGF9X25vdGlmeShlLHQsbixyKXtyfHw9e307Zm9yKGxldCBpIG9mIGUpe2xldCBlPWkucGx1Z2luLGE9ZVtuXTtpZihJKGEsW3QscixpLm9wdGlvbnNdLGUpPT09ITEmJnIuY2FuY2VsYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH1pbnZhbGlkYXRlKCl7QSh0aGlzLl9jYWNoZSl8fCh0aGlzLl9vbGRDYWNoZT10aGlzLl9jYWNoZSx0aGlzLl9jYWNoZT12b2lkIDApfV9kZXNjcmlwdG9ycyhlKXtpZih0aGlzLl9jYWNoZSlyZXR1cm4gdGhpcy5fY2FjaGU7bGV0IHQ9dGhpcy5fY2FjaGU9dGhpcy5fY3JlYXRlRGVzY3JpcHRvcnMoZSk7cmV0dXJuIHRoaXMuX25vdGlmeVN0YXRlQ2hhbmdlcyhlKSx0fV9jcmVhdGVEZXNjcmlwdG9ycyhlLHQpe2xldCBuPWUmJmUuY29uZmlnLHI9RihuLm9wdGlvbnMmJm4ub3B0aW9ucy5wbHVnaW5zLHt9KSxpPUthKG4pO3JldHVybiByPT09ITEmJiF0P1tdOkphKGUsaSxyLHQpfV9ub3RpZnlTdGF0ZUNoYW5nZXMoZSl7bGV0IHQ9dGhpcy5fb2xkQ2FjaGV8fFtdLG49dGhpcy5fY2FjaGUscj0oZSx0KT0+ZS5maWx0ZXIoZT0+IXQuc29tZSh0PT5lLnBsdWdpbi5pZD09PXQucGx1Z2luLmlkKSk7dGhpcy5fbm90aWZ5KHIodCxuKSxlLGBzdG9wYCksdGhpcy5fbm90aWZ5KHIobix0KSxlLGBzdGFydGApfX07ZnVuY3Rpb24gS2EoZSl7bGV0IHQ9e30sbj1bXSxyPU9iamVjdC5rZXlzKFkucGx1Z2lucy5pdGVtcyk7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspbi5wdXNoKFkuZ2V0UGx1Z2luKHJbZV0pKTtsZXQgaT1lLnBsdWdpbnN8fFtdO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXtsZXQgcj1pW2VdO24uaW5kZXhPZihyKT09PS0xJiYobi5wdXNoKHIpLHRbci5pZF09ITApfXJldHVybntwbHVnaW5zOm4sbG9jYWxJZHM6dH19ZnVuY3Rpb24gcWEoZSx0KXtyZXR1cm4hdCYmZT09PSExP251bGw6ZT09PSEwP3t9OmV9ZnVuY3Rpb24gSmEoZSx7cGx1Z2luczp0LGxvY2FsSWRzOm59LHIsaSl7bGV0IGE9W10sbz1lLmdldENvbnRleHQoKTtmb3IobGV0IHMgb2YgdCl7bGV0IHQ9cy5pZCxjPXFhKHJbdF0saSk7YyE9PW51bGwmJmEucHVzaCh7cGx1Z2luOnMsb3B0aW9uczpZYShlLmNvbmZpZyx7cGx1Z2luOnMsbG9jYWw6blt0XX0sYyxvKX0pfXJldHVybiBhfWZ1bmN0aW9uIFlhKGUse3BsdWdpbjp0LGxvY2FsOm59LHIsaSl7bGV0IGE9ZS5wbHVnaW5TY29wZUtleXModCksbz1lLmdldE9wdGlvblNjb3BlcyhyLGEpO3JldHVybiBuJiZ0LmRlZmF1bHRzJiZvLnB1c2godC5kZWZhdWx0cyksZS5jcmVhdGVSZXNvbHZlcihvLGksW2BgXSx7c2NyaXB0YWJsZTohMSxpbmRleGFibGU6ITEsYWxsS2V5czohMH0pfWZ1bmN0aW9uIFhhKGUsdCl7bGV0IG49Vy5kYXRhc2V0c1tlXXx8e307cmV0dXJuKCh0LmRhdGFzZXRzfHx7fSlbZV18fHt9KS5pbmRleEF4aXN8fHQuaW5kZXhBeGlzfHxuLmluZGV4QXhpc3x8YHhgfWZ1bmN0aW9uIFphKGUsdCl7bGV0IG49ZTtyZXR1cm4gZT09PWBfaW5kZXhfYD9uPXQ6ZT09PWBfdmFsdWVfYCYmKG49dD09PWB4YD9geWA6YHhgKSxufWZ1bmN0aW9uIFFhKGUsdCl7cmV0dXJuIGU9PT10P2BfaW5kZXhfYDpgX3ZhbHVlX2B9ZnVuY3Rpb24gJGEoZSl7aWYoZT09PWB4YHx8ZT09PWB5YHx8ZT09PWByYClyZXR1cm4gZX1mdW5jdGlvbiBlbyhlKXtpZihlPT09YHRvcGB8fGU9PT1gYm90dG9tYClyZXR1cm5geGA7aWYoZT09PWBsZWZ0YHx8ZT09PWByaWdodGApcmV0dXJuYHlgfWZ1bmN0aW9uIHRvKGUsLi4udCl7aWYoJGEoZSkpcmV0dXJuIGU7Zm9yKGxldCBuIG9mIHQpe2xldCB0PW4uYXhpc3x8ZW8obi5wb3NpdGlvbil8fGUubGVuZ3RoPjEmJiRhKGVbMF0udG9Mb3dlckNhc2UoKSk7aWYodClyZXR1cm4gdH10aHJvdyBFcnJvcihgQ2Fubm90IGRldGVybWluZSB0eXBlIG9mICcke2V9JyBheGlzLiBQbGVhc2UgcHJvdmlkZSAnYXhpcycgb3IgJ3Bvc2l0aW9uJyBvcHRpb24uYCl9ZnVuY3Rpb24gbm8oZSx0LG4pe2lmKG5bdCtgQXhpc0lEYF09PT1lKXJldHVybntheGlzOnR9fWZ1bmN0aW9uIHJvKGUsdCl7aWYodC5kYXRhJiZ0LmRhdGEuZGF0YXNldHMpe2xldCBuPXQuZGF0YS5kYXRhc2V0cy5maWx0ZXIodD0+dC54QXhpc0lEPT09ZXx8dC55QXhpc0lEPT09ZSk7aWYobi5sZW5ndGgpcmV0dXJuIG5vKGUsYHhgLG5bMF0pfHxubyhlLGB5YCxuWzBdKX1yZXR1cm57fX1mdW5jdGlvbiBpbyhlLHQpe2xldCBuPW9uW2UudHlwZV18fHtzY2FsZXM6e319LHI9dC5zY2FsZXN8fHt9LGk9WGEoZS50eXBlLHQpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaCh0PT57bGV0IG89clt0XTtpZighTShvKSlyZXR1cm4gY29uc29sZS5lcnJvcihgSW52YWxpZCBzY2FsZSBjb25maWd1cmF0aW9uIGZvciBzY2FsZTogJHt0fWApO2lmKG8uX3Byb3h5KXJldHVybiBjb25zb2xlLndhcm4oYElnbm9yaW5nIHJlc29sdmVyIHBhc3NlZCBhcyBvcHRpb25zIGZvciBzY2FsZTogJHt0fWApO2xldCBzPXRvKHQsbyxybyh0LGUpLFcuc2NhbGVzW28udHlwZV0pLGM9UWEocyxpKSxsPW4uc2NhbGVzfHx7fTthW3RdPUtlKE9iamVjdC5jcmVhdGUobnVsbCksW3theGlzOnN9LG8sbFtzXSxsW2NdXSl9KSxlLmRhdGEuZGF0YXNldHMuZm9yRWFjaChuPT57bGV0IGk9bi50eXBlfHxlLnR5cGUsbz1uLmluZGV4QXhpc3x8WGEoaSx0KSxzPShvbltpXXx8e30pLnNjYWxlc3x8e307T2JqZWN0LmtleXMocykuZm9yRWFjaChlPT57bGV0IHQ9WmEoZSxvKSxpPW5bdCtgQXhpc0lEYF18fHQ7YVtpXT1hW2ldfHxPYmplY3QuY3JlYXRlKG51bGwpLEtlKGFbaV0sW3theGlzOnR9LHJbaV0sc1tlXV0pfSl9KSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGU9PntsZXQgdD1hW2VdO0tlKHQsW1cuc2NhbGVzW3QudHlwZV0sVy5zY2FsZV0pfSksYX1mdW5jdGlvbiBhbyhlKXtsZXQgdD1lLm9wdGlvbnN8fD17fTt0LnBsdWdpbnM9Rih0LnBsdWdpbnMse30pLHQuc2NhbGVzPWlvKGUsdCl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuIGV8fD17fSxlLmRhdGFzZXRzPWUuZGF0YXNldHN8fFtdLGUubGFiZWxzPWUubGFiZWxzfHxbXSxlfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBlfHw9e30sZS5kYXRhPW9vKGUuZGF0YSksYW8oZSksZX12YXIgY289bmV3IE1hcCxsbz1uZXcgU2V0O2Z1bmN0aW9uIHVvKGUsdCl7bGV0IG49Y28uZ2V0KGUpO3JldHVybiBufHwobj10KCksY28uc2V0KGUsbiksbG8uYWRkKG4pKSxufXZhciBmbz0oZSx0LG4pPT57bGV0IHI9WmUodCxuKTtyIT09dm9pZCAwJiZlLmFkZChyKX0scG89Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fY29uZmlnPXNvKGUpLHRoaXMuX3Njb3BlQ2FjaGU9bmV3IE1hcCx0aGlzLl9yZXNvbHZlckNhY2hlPW5ldyBNYXB9Z2V0IHBsYXRmb3JtKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5wbGF0Zm9ybX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl9jb25maWcudHlwZX1zZXQgdHlwZShlKXt0aGlzLl9jb25maWcudHlwZT1lfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5kYXRhfXNldCBkYXRhKGUpe3RoaXMuX2NvbmZpZy5kYXRhPW9vKGUpfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5vcHRpb25zfXNldCBvcHRpb25zKGUpe3RoaXMuX2NvbmZpZy5vcHRpb25zPWV9Z2V0IHBsdWdpbnMoKXtyZXR1cm4gdGhpcy5fY29uZmlnLnBsdWdpbnN9dXBkYXRlKCl7bGV0IGU9dGhpcy5fY29uZmlnO3RoaXMuY2xlYXJDYWNoZSgpLGFvKGUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9zY29wZUNhY2hlLmNsZWFyKCksdGhpcy5fcmVzb2x2ZXJDYWNoZS5jbGVhcigpfWRhdGFzZXRTY29wZUtleXMoZSl7cmV0dXJuIHVvKGUsKCk9PltbYGRhdGFzZXRzLiR7ZX1gLGBgXV0pfWRhdGFzZXRBbmltYXRpb25TY29wZUtleXMoZSx0KXtyZXR1cm4gdW8oYCR7ZX0udHJhbnNpdGlvbi4ke3R9YCwoKT0+W1tgZGF0YXNldHMuJHtlfS50cmFuc2l0aW9ucy4ke3R9YCxgdHJhbnNpdGlvbnMuJHt0fWBdLFtgZGF0YXNldHMuJHtlfWAsYGBdXSl9ZGF0YXNldEVsZW1lbnRTY29wZUtleXMoZSx0KXtyZXR1cm4gdW8oYCR7ZX0tJHt0fWAsKCk9PltbYGRhdGFzZXRzLiR7ZX0uZWxlbWVudHMuJHt0fWAsYGRhdGFzZXRzLiR7ZX1gLGBlbGVtZW50cy4ke3R9YCxgYF1dKX1wbHVnaW5TY29wZUtleXMoZSl7bGV0IHQ9ZS5pZCxuPXRoaXMudHlwZTtyZXR1cm4gdW8oYCR7bn0tcGx1Z2luLSR7dH1gLCgpPT5bW2BwbHVnaW5zLiR7dH1gLC4uLmUuYWRkaXRpb25hbE9wdGlvblNjb3Blc3x8W11dXSl9X2NhY2hlZFNjb3BlcyhlLHQpe2xldCBuPXRoaXMuX3Njb3BlQ2FjaGUscj1uLmdldChlKTtyZXR1cm4oIXJ8fHQpJiYocj1uZXcgTWFwLG4uc2V0KGUscikpLHJ9Z2V0T3B0aW9uU2NvcGVzKGUsdCxuKXtsZXR7b3B0aW9uczpyLHR5cGU6aX09dGhpcyxhPXRoaXMuX2NhY2hlZFNjb3BlcyhlLG4pLG89YS5nZXQodCk7aWYobylyZXR1cm4gbztsZXQgcz1uZXcgU2V0O3QuZm9yRWFjaCh0PT57ZSYmKHMuYWRkKGUpLHQuZm9yRWFjaCh0PT5mbyhzLGUsdCkpKSx0LmZvckVhY2goZT0+Zm8ocyxyLGUpKSx0LmZvckVhY2goZT0+Zm8ocyxvbltpXXx8e30sZSkpLHQuZm9yRWFjaChlPT5mbyhzLFcsZSkpLHQuZm9yRWFjaChlPT5mbyhzLHNuLGUpKX0pO2xldCBjPUFycmF5LmZyb20ocyk7cmV0dXJuIGMubGVuZ3RoPT09MCYmYy5wdXNoKE9iamVjdC5jcmVhdGUobnVsbCkpLGxvLmhhcyh0KSYmYS5zZXQodCxjKSxjfWNoYXJ0T3B0aW9uU2NvcGVzKCl7bGV0e29wdGlvbnM6ZSx0eXBlOnR9PXRoaXM7cmV0dXJuW2Usb25bdF18fHt9LFcuZGF0YXNldHNbdF18fHt9LHt0eXBlOnR9LFcsc25dfXJlc29sdmVOYW1lZE9wdGlvbnMoZSx0LG4scj1bYGBdKXtsZXQgaT17JHNoYXJlZDohMH0se3Jlc29sdmVyOmEsc3ViUHJlZml4ZXM6b309bW8odGhpcy5fcmVzb2x2ZXJDYWNoZSxlLHIpLHM9YTtpZihnbyhhLHQpKXtpLiRzaGFyZWQ9ITEsbj1ldChuKT9uKCk6bjtsZXQgdD10aGlzLmNyZWF0ZVJlc29sdmVyKGUsbixvKTtzPUxuKGEsbix0KX1mb3IobGV0IGUgb2YgdClpW2VdPXNbZV07cmV0dXJuIGl9Y3JlYXRlUmVzb2x2ZXIoZSx0LG49W2BgXSxyKXtsZXR7cmVzb2x2ZXI6aX09bW8odGhpcy5fcmVzb2x2ZXJDYWNoZSxlLG4pO3JldHVybiBNKHQpP0xuKGksdCx2b2lkIDAscik6aX19O2Z1bmN0aW9uIG1vKGUsdCxuKXtsZXQgcj1lLmdldCh0KTtyfHwocj1uZXcgTWFwLGUuc2V0KHQscikpO2xldCBpPW4uam9pbigpLGE9ci5nZXQoaSk7cmV0dXJuIGF8fChhPXtyZXNvbHZlcjpJbih0LG4pLHN1YlByZWZpeGVzOm4uZmlsdGVyKGU9PiFlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoYGhvdmVyYCkpfSxyLnNldChpLGEpKSxhfXZhciBobz1lPT5NKGUpJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5zb21lKHQ9PmV0KGVbdF0pKTtmdW5jdGlvbiBnbyhlLHQpe2xldHtpc1NjcmlwdGFibGU6bixpc0luZGV4YWJsZTpyfT1SbihlKTtmb3IobGV0IGkgb2YgdCl7bGV0IHQ9bihpKSxhPXIoaSksbz0oYXx8dCkmJmVbaV07aWYodCYmKGV0KG8pfHxobyhvKSl8fGEmJmoobykpcmV0dXJuITB9cmV0dXJuITF9dmFyIF9vPWA0LjUuMWAsdm89W2B0b3BgLGBib3R0b21gLGBsZWZ0YCxgcmlnaHRgLGBjaGFydEFyZWFgXTtmdW5jdGlvbiB5byhlLHQpe3JldHVybiBlPT09YHRvcGB8fGU9PT1gYm90dG9tYHx8dm8uaW5kZXhPZihlKT09PS0xJiZ0PT09YHhgfWZ1bmN0aW9uIGJvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIG5bZV09PT1yW2VdP25bdF0tclt0XTpuW2VdLXJbZV19fWZ1bmN0aW9uIHhvKGUpe2xldCB0PWUuY2hhcnQsbj10Lm9wdGlvbnMuYW5pbWF0aW9uO3Qubm90aWZ5UGx1Z2lucyhgYWZ0ZXJSZW5kZXJgKSxJKG4mJm4ub25Db21wbGV0ZSxbZV0sdCl9ZnVuY3Rpb24gU28oZSl7bGV0IHQ9ZS5jaGFydCxuPXQub3B0aW9ucy5hbmltYXRpb247SShuJiZuLm9uUHJvZ3Jlc3MsW2VdLHQpfWZ1bmN0aW9uIENvKGUpe3JldHVybiBkcigpJiZ0eXBlb2YgZT09YHN0cmluZ2A/ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTplJiZlLmxlbmd0aCYmKGU9ZVswXSksZSYmZS5jYW52YXMmJihlPWUuY2FudmFzKSxlfXZhciB3bz17fSxUbz1lPT57bGV0IHQ9Q28oZSk7cmV0dXJuIE9iamVjdC52YWx1ZXMod28pLmZpbHRlcihlPT5lLmNhbnZhcz09PXQpLnBvcCgpfTtmdW5jdGlvbiBFbyhlLHQsbil7bGV0IHI9T2JqZWN0LmtleXMoZSk7Zm9yKGxldCBpIG9mIHIpe2xldCByPStpO2lmKHI+PXQpe2xldCBhPWVbaV07ZGVsZXRlIGVbaV0sKG4+MHx8cj50KSYmKGVbcituXT1hKX19fWZ1bmN0aW9uIERvKGUsdCxuLHIpe3JldHVybiFufHxlLnR5cGU9PT1gbW91c2VvdXRgP251bGw6cj90OmV9dmFyIE9vPWNsYXNze3N0YXRpYyBkZWZhdWx0cz1XO3N0YXRpYyBpbnN0YW5jZXM9d287c3RhdGljIG92ZXJyaWRlcz1vbjtzdGF0aWMgcmVnaXN0cnk9WTtzdGF0aWMgdmVyc2lvbj1fbztzdGF0aWMgZ2V0Q2hhcnQ9VG87c3RhdGljIHJlZ2lzdGVyKC4uLmUpe1kuYWRkKC4uLmUpLGtvKCl9c3RhdGljIHVucmVnaXN0ZXIoLi4uZSl7WS5yZW1vdmUoLi4uZSksa28oKX1jb25zdHJ1Y3RvcihlLHQpe2xldCBuPXRoaXMuY29uZmlnPW5ldyBwbyh0KSxyPUNvKGUpLGk9VG8ocik7aWYoaSl0aHJvdyBFcnJvcihgQ2FudmFzIGlzIGFscmVhZHkgaW4gdXNlLiBDaGFydCB3aXRoIElEICdgK2kuaWQrYCcgbXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBjYW52YXMgd2l0aCBJRCAnYCtpLmNhbnZhcy5pZCtgJyBjYW4gYmUgcmV1c2VkLmApO2xldCBhPW4uY3JlYXRlUmVzb2x2ZXIobi5jaGFydE9wdGlvblNjb3BlcygpLHRoaXMuZ2V0Q29udGV4dCgpKTt0aGlzLnBsYXRmb3JtPW5ldyhuLnBsYXRmb3JtfHwoeWEocikpKSx0aGlzLnBsYXRmb3JtLnVwZGF0ZUNvbmZpZyhuKTtsZXQgbz10aGlzLnBsYXRmb3JtLmFjcXVpcmVDb250ZXh0KHIsYS5hc3BlY3RSYXRpbykscz1vJiZvLmNhbnZhcyxjPXMmJnMuaGVpZ2h0LGw9cyYmcy53aWR0aDtpZih0aGlzLmlkPXplKCksdGhpcy5jdHg9byx0aGlzLmNhbnZhcz1zLHRoaXMud2lkdGg9bCx0aGlzLmhlaWdodD1jLHRoaXMuX29wdGlvbnM9YSx0aGlzLl9hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLHRoaXMuX2xheWVycz1bXSx0aGlzLl9tZXRhc2V0cz1bXSx0aGlzLl9zdGFja3M9dm9pZCAwLHRoaXMuYm94ZXM9W10sdGhpcy5jdXJyZW50RGV2aWNlUGl4ZWxSYXRpbz12b2lkIDAsdGhpcy5jaGFydEFyZWE9dm9pZCAwLHRoaXMuX2FjdGl2ZT1bXSx0aGlzLl9sYXN0RXZlbnQ9dm9pZCAwLHRoaXMuX2xpc3RlbmVycz17fSx0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9zb3J0ZWRNZXRhc2V0cz1bXSx0aGlzLnNjYWxlcz17fSx0aGlzLl9wbHVnaW5zPW5ldyBHYSx0aGlzLiRwcm94aWVzPXt9LHRoaXMuX2hpZGRlbkluZGljZXM9e30sdGhpcy5hdHRhY2hlZD0hMSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwLHRoaXMuX2RvUmVzaXplPUl0KGU9PnRoaXMudXBkYXRlKGUpLGEucmVzaXplRGVsYXl8fDApLHRoaXMuX2RhdGFDaGFuZ2VzPVtdLHdvW3RoaXMuaWRdPXRoaXMsIW98fCFzKXtjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGNoYXJ0OiBjYW4ndCBhY3F1aXJlIGNvbnRleHQgZnJvbSB0aGUgZ2l2ZW4gaXRlbWApO3JldHVybn1KLmxpc3Rlbih0aGlzLGBjb21wbGV0ZWAseG8pLEoubGlzdGVuKHRoaXMsYHByb2dyZXNzYCxTbyksdGhpcy5faW5pdGlhbGl6ZSgpLHRoaXMuYXR0YWNoZWQmJnRoaXMudXBkYXRlKCl9Z2V0IGFzcGVjdFJhdGlvKCl7bGV0e29wdGlvbnM6e2FzcGVjdFJhdGlvOmUsbWFpbnRhaW5Bc3BlY3RSYXRpbzp0fSx3aWR0aDpuLGhlaWdodDpyLF9hc3BlY3RSYXRpbzppfT10aGlzO3JldHVybiBBKGUpP3QmJmk/aTpyP24vcjpudWxsOmV9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5jb25maWcuZGF0YX1zZXQgZGF0YShlKXt0aGlzLmNvbmZpZy5kYXRhPWV9Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5fb3B0aW9uc31zZXQgb3B0aW9ucyhlKXt0aGlzLmNvbmZpZy5vcHRpb25zPWV9Z2V0IHJlZ2lzdHJ5KCl7cmV0dXJuIFl9X2luaXRpYWxpemUoKXtyZXR1cm4gdGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVJbml0YCksdGhpcy5vcHRpb25zLnJlc3BvbnNpdmU/dGhpcy5yZXNpemUoKTp3cih0aGlzLHRoaXMub3B0aW9ucy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVySW5pdGApLHRoaXN9Y2xlYXIoKXtyZXR1cm4gbW4odGhpcy5jYW52YXMsdGhpcy5jdHgpLHRoaXN9c3RvcCgpe3JldHVybiBKLnN0b3AodGhpcyksdGhpc31yZXNpemUoZSx0KXtKLnJ1bm5pbmcodGhpcyk/dGhpcy5fcmVzaXplQmVmb3JlRHJhdz17d2lkdGg6ZSxoZWlnaHQ6dH06dGhpcy5fcmVzaXplKGUsdCl9X3Jlc2l6ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY2FudmFzLGk9bi5tYWludGFpbkFzcGVjdFJhdGlvJiZ0aGlzLmFzcGVjdFJhdGlvLGE9dGhpcy5wbGF0Zm9ybS5nZXRNYXhpbXVtU2l6ZShyLGUsdCxpKSxvPW4uZGV2aWNlUGl4ZWxSYXRpb3x8dGhpcy5wbGF0Zm9ybS5nZXREZXZpY2VQaXhlbFJhdGlvKCkscz10aGlzLndpZHRoP2ByZXNpemVgOmBhdHRhY2hgO3RoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLl9hc3BlY3RSYXRpbz10aGlzLmFzcGVjdFJhdGlvLHdyKHRoaXMsbywhMCkmJih0aGlzLm5vdGlmeVBsdWdpbnMoYHJlc2l6ZWAse3NpemU6YX0pLEkobi5vblJlc2l6ZSxbdGhpcyxhXSx0aGlzKSx0aGlzLmF0dGFjaGVkJiZ0aGlzLl9kb1Jlc2l6ZShzKSYmdGhpcy5yZW5kZXIoKSl9ZW5zdXJlU2NhbGVzSGF2ZUlEcygpe0wodGhpcy5vcHRpb25zLnNjYWxlc3x8e30sKGUsdCk9PntlLmlkPXR9KX1idWlsZE9yVXBkYXRlU2NhbGVzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS5zY2FsZXMsbj10aGlzLnNjYWxlcyxyPU9iamVjdC5rZXlzKG4pLnJlZHVjZSgoZSx0KT0+KGVbdF09ITEsZSkse30pLGk9W107dCYmKGk9aS5jb25jYXQoT2JqZWN0LmtleXModCkubWFwKGU9PntsZXQgbj10W2VdLHI9dG8oZSxuKSxpPXI9PT1gcmAsYT1yPT09YHhgO3JldHVybntvcHRpb25zOm4sZHBvc2l0aW9uOmk/YGNoYXJ0QXJlYWA6YT9gYm90dG9tYDpgbGVmdGAsZHR5cGU6aT9gcmFkaWFsTGluZWFyYDphP2BjYXRlZ29yeWA6YGxpbmVhcmB9fSkpKSxMKGksdD0+e2xldCBpPXQub3B0aW9ucyxhPWkuaWQsbz10byhhLGkpLHM9RihpLnR5cGUsdC5kdHlwZSk7KGkucG9zaXRpb249PT12b2lkIDB8fHlvKGkucG9zaXRpb24sbykhPT15byh0LmRwb3NpdGlvbikpJiYoaS5wb3NpdGlvbj10LmRwb3NpdGlvbiksclthXT0hMDtsZXQgYz1udWxsO2EgaW4gbiYmblthXS50eXBlPT09cz9jPW5bYV06KGM9bmV3KFkuZ2V0U2NhbGUocykpKHtpZDphLHR5cGU6cyxjdHg6dGhpcy5jdHgsY2hhcnQ6dGhpc30pLG5bYy5pZF09YyksYy5pbml0KGksZSl9KSxMKHIsKGUsdCk9PntlfHxkZWxldGUgblt0XX0pLEwobixlPT57WGkuY29uZmlndXJlKHRoaXMsZSxlLm9wdGlvbnMpLFhpLmFkZEJveCh0aGlzLGUpfSl9X3VwZGF0ZU1ldGFzZXRzKCl7bGV0IGU9dGhpcy5fbWV0YXNldHMsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoLG49ZS5sZW5ndGg7aWYoZS5zb3J0KChlLHQpPT5lLmluZGV4LXQuaW5kZXgpLG4+dCl7Zm9yKGxldCBlPXQ7ZTxuOysrZSl0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEoZSk7ZS5zcGxpY2UodCxuLXQpfXRoaXMuX3NvcnRlZE1ldGFzZXRzPWUuc2xpY2UoMCkuc29ydChibyhgb3JkZXJgLGBpbmRleGApKX1fcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKXtsZXR7X21ldGFzZXRzOmUsZGF0YTp7ZGF0YXNldHM6dH19PXRoaXM7ZS5sZW5ndGg+dC5sZW5ndGgmJmRlbGV0ZSB0aGlzLl9zdGFja3MsZS5mb3JFYWNoKChlLG4pPT57dC5maWx0ZXIodD0+dD09PWUuX2RhdGFzZXQpLmxlbmd0aD09PTAmJnRoaXMuX2Rlc3Ryb3lEYXRhc2V0TWV0YShuKX0pfWJ1aWxkT3JVcGRhdGVDb250cm9sbGVycygpe2xldCBlPVtdLHQ9dGhpcy5kYXRhLmRhdGFzZXRzLG4scjtmb3IodGhpcy5fcmVtb3ZlVW5yZWZlcmVuY2VkTWV0YXNldHMoKSxuPTAscj10Lmxlbmd0aDtuPHI7bisrKXtsZXQgcj10W25dLGk9dGhpcy5nZXREYXRhc2V0TWV0YShuKSxhPXIudHlwZXx8dGhpcy5jb25maWcudHlwZTtpZihpLnR5cGUmJmkudHlwZSE9PWEmJih0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEobiksaT10aGlzLmdldERhdGFzZXRNZXRhKG4pKSxpLnR5cGU9YSxpLmluZGV4QXhpcz1yLmluZGV4QXhpc3x8WGEoYSx0aGlzLm9wdGlvbnMpLGkub3JkZXI9ci5vcmRlcnx8MCxpLmluZGV4PW4saS5sYWJlbD1gYCtyLmxhYmVsLGkudmlzaWJsZT10aGlzLmlzRGF0YXNldFZpc2libGUobiksaS5jb250cm9sbGVyKWkuY29udHJvbGxlci51cGRhdGVJbmRleChuKSxpLmNvbnRyb2xsZXIubGlua1NjYWxlcygpO2Vsc2V7bGV0IHQ9WS5nZXRDb250cm9sbGVyKGEpLHtkYXRhc2V0RWxlbWVudFR5cGU6cixkYXRhRWxlbWVudFR5cGU6b309Vy5kYXRhc2V0c1thXTtPYmplY3QuYXNzaWduKHQse2RhdGFFbGVtZW50VHlwZTpZLmdldEVsZW1lbnQobyksZGF0YXNldEVsZW1lbnRUeXBlOnImJlkuZ2V0RWxlbWVudChyKX0pLGkuY29udHJvbGxlcj1uZXcgdCh0aGlzLG4pLGUucHVzaChpLmNvbnRyb2xsZXIpfX1yZXR1cm4gdGhpcy5fdXBkYXRlTWV0YXNldHMoKSxlfV9yZXNldEVsZW1lbnRzKCl7TCh0aGlzLmRhdGEuZGF0YXNldHMsKGUsdCk9Pnt0aGlzLmdldERhdGFzZXRNZXRhKHQpLmNvbnRyb2xsZXIucmVzZXQoKX0sdGhpcyl9cmVzZXQoKXt0aGlzLl9yZXNldEVsZW1lbnRzKCksdGhpcy5ub3RpZnlQbHVnaW5zKGByZXNldGApfXVwZGF0ZShlKXtsZXQgdD10aGlzLmNvbmZpZzt0LnVwZGF0ZSgpO2xldCBuPXRoaXMuX29wdGlvbnM9dC5jcmVhdGVSZXNvbHZlcih0LmNoYXJ0T3B0aW9uU2NvcGVzKCksdGhpcy5nZXRDb250ZXh0KCkpLHI9dGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSFuLmFuaW1hdGlvbjtpZih0aGlzLl91cGRhdGVTY2FsZXMoKSx0aGlzLl9jaGVja0V2ZW50QmluZGluZ3MoKSx0aGlzLl91cGRhdGVIaWRkZW5JbmRpY2VzKCksdGhpcy5fcGx1Z2lucy5pbnZhbGlkYXRlKCksdGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVVcGRhdGVgLHttb2RlOmUsY2FuY2VsYWJsZTohMH0pPT09ITEpcmV0dXJuO2xldCBpPXRoaXMuYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVFbGVtZW50c1VwZGF0ZWApO2xldCBhPTA7Zm9yKGxldCBlPTAsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO2U8dDtlKyspe2xldHtjb250cm9sbGVyOnR9PXRoaXMuZ2V0RGF0YXNldE1ldGEoZSksbj0hciYmaS5pbmRleE9mKHQpPT09LTE7dC5idWlsZE9yVXBkYXRlRWxlbWVudHMobiksYT1NYXRoLm1heCgrdC5nZXRNYXhPdmVyZmxvdygpLGEpfWE9dGhpcy5fbWluUGFkZGluZz1uLmxheW91dC5hdXRvUGFkZGluZz9hOjAsdGhpcy5fdXBkYXRlTGF5b3V0KGEpLHJ8fEwoaSxlPT57ZS5yZXNldCgpfSksdGhpcy5fdXBkYXRlRGF0YXNldHMoZSksdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlclVwZGF0ZWAse21vZGU6ZX0pLHRoaXMuX2xheWVycy5zb3J0KGJvKGB6YCxgX2lkeGApKTtsZXR7X2FjdGl2ZTpvLF9sYXN0RXZlbnQ6c309dGhpcztzP3RoaXMuX2V2ZW50SGFuZGxlcihzLCEwKTpvLmxlbmd0aCYmdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMobyxvLCEwKSx0aGlzLnJlbmRlcigpfV91cGRhdGVTY2FsZXMoKXtMKHRoaXMuc2NhbGVzLGU9PntYaS5yZW1vdmVCb3godGhpcyxlKX0pLHRoaXMuZW5zdXJlU2NhbGVzSGF2ZUlEcygpLHRoaXMuYnVpbGRPclVwZGF0ZVNjYWxlcygpfV9jaGVja0V2ZW50QmluZGluZ3MoKXtsZXQgZT10aGlzLm9wdGlvbnM7KCF0dChuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMuX2xpc3RlbmVycykpLG5ldyBTZXQoZS5ldmVudHMpKXx8ISF0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzIT09ZS5yZXNwb25zaXZlKSYmKHRoaXMudW5iaW5kRXZlbnRzKCksdGhpcy5iaW5kRXZlbnRzKCkpfV91cGRhdGVIaWRkZW5JbmRpY2VzKCl7bGV0e19oaWRkZW5JbmRpY2VzOmV9PXRoaXMsdD10aGlzLl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKXx8W107Zm9yKGxldHttZXRob2Q6bixzdGFydDpyLGNvdW50Oml9b2YgdClFbyhlLHIsbj09PWBfcmVtb3ZlRWxlbWVudHNgPy1pOmkpfV9nZXRVbmlmb3JtRGF0YUNoYW5nZXMoKXtsZXQgZT10aGlzLl9kYXRhQ2hhbmdlcztpZighZXx8IWUubGVuZ3RoKXJldHVybjt0aGlzLl9kYXRhQ2hhbmdlcz1bXTtsZXQgdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoLG49dD0+bmV3IFNldChlLmZpbHRlcihlPT5lWzBdPT09dCkubWFwKChlLHQpPT50K2AsYCtlLnNwbGljZSgxKS5qb2luKGAsYCkpKSxyPW4oMCk7Zm9yKGxldCBlPTE7ZTx0O2UrKylpZighdHQocixuKGUpKSlyZXR1cm47cmV0dXJuIEFycmF5LmZyb20ocikubWFwKGU9PmUuc3BsaXQoYCxgKSkubWFwKGU9Pih7bWV0aG9kOmVbMV0sc3RhcnQ6K2VbMl0sY291bnQ6K2VbM119KSl9X3VwZGF0ZUxheW91dChlKXtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUxheW91dGAse2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtYaS51cGRhdGUodGhpcyx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGUpO2xldCB0PXRoaXMuY2hhcnRBcmVhLG49dC53aWR0aDw9MHx8dC5oZWlnaHQ8PTA7dGhpcy5fbGF5ZXJzPVtdLEwodGhpcy5ib3hlcyxlPT57biYmZS5wb3NpdGlvbj09PWBjaGFydEFyZWFgfHwoZS5jb25maWd1cmUmJmUuY29uZmlndXJlKCksdGhpcy5fbGF5ZXJzLnB1c2goLi4uZS5fbGF5ZXJzKCkpKX0sdGhpcyksdGhpcy5fbGF5ZXJzLmZvckVhY2goKGUsdCk9PntlLl9pZHg9dH0pLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJMYXlvdXRgKX1fdXBkYXRlRGF0YXNldHMoZSl7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0c1VwZGF0ZWAse21vZGU6ZSxjYW5jZWxhYmxlOiEwfSkhPT0hMSl7Zm9yKGxldCBlPTAsdD10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO2U8dDsrK2UpdGhpcy5nZXREYXRhc2V0TWV0YShlKS5jb250cm9sbGVyLmNvbmZpZ3VyZSgpO2ZvcihsZXQgdD0wLG49dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDt0PG47Kyt0KXRoaXMuX3VwZGF0ZURhdGFzZXQodCxldChlKT9lKHtkYXRhc2V0SW5kZXg6dH0pOmUpO3RoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJEYXRhc2V0c1VwZGF0ZWAse21vZGU6ZX0pfX1fdXBkYXRlRGF0YXNldChlLHQpe2xldCBuPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSkscj17bWV0YTpuLGluZGV4OmUsbW9kZTp0LGNhbmNlbGFibGU6ITB9O3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGF0YXNldFVwZGF0ZWAscikhPT0hMSYmKG4uY29udHJvbGxlci5fdXBkYXRlKHQpLHIuY2FuY2VsYWJsZT0hMSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGF0YXNldFVwZGF0ZWAscikpfXJlbmRlcigpe3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlUmVuZGVyYCx7Y2FuY2VsYWJsZTohMH0pIT09ITEmJihKLmhhcyh0aGlzKT90aGlzLmF0dGFjaGVkJiYhSi5ydW5uaW5nKHRoaXMpJiZKLnN0YXJ0KHRoaXMpOih0aGlzLmRyYXcoKSx4byh7Y2hhcnQ6dGhpc30pKSl9ZHJhdygpe2xldCBlO2lmKHRoaXMuX3Jlc2l6ZUJlZm9yZURyYXcpe2xldHt3aWR0aDplLGhlaWdodDp0fT10aGlzLl9yZXNpemVCZWZvcmVEcmF3O3RoaXMuX3Jlc2l6ZUJlZm9yZURyYXc9bnVsbCx0aGlzLl9yZXNpemUoZSx0KX1pZih0aGlzLmNsZWFyKCksdGhpcy53aWR0aDw9MHx8dGhpcy5oZWlnaHQ8PTB8fHRoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRHJhd2Ase2NhbmNlbGFibGU6ITB9KT09PSExKXJldHVybjtsZXQgdD10aGlzLl9sYXllcnM7Zm9yKGU9MDtlPHQubGVuZ3RoJiZ0W2VdLno8PTA7KytlKXRbZV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7Zm9yKHRoaXMuX2RyYXdEYXRhc2V0cygpO2U8dC5sZW5ndGg7KytlKXRbZV0uZHJhdyh0aGlzLmNoYXJ0QXJlYSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRyYXdgKX1fZ2V0U29ydGVkRGF0YXNldE1ldGFzKGUpe2xldCB0PXRoaXMuX3NvcnRlZE1ldGFzZXRzLG49W10scixpO2ZvcihyPTAsaT10Lmxlbmd0aDtyPGk7KytyKXtsZXQgaT10W3JdOyghZXx8aS52aXNpYmxlKSYmbi5wdXNoKGkpfXJldHVybiBufWdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKXtyZXR1cm4gdGhpcy5fZ2V0U29ydGVkRGF0YXNldE1ldGFzKCEwKX1fZHJhd0RhdGFzZXRzKCl7aWYodGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0c0RyYXdgLHtjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47bGV0IGU9dGhpcy5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCk7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpdGhpcy5fZHJhd0RhdGFzZXQoZVt0XSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXRzRHJhd2ApfV9kcmF3RGF0YXNldChlKXtsZXQgdD10aGlzLmN0eCxuPXttZXRhOmUsaW5kZXg6ZS5pbmRleCxjYW5jZWxhYmxlOiEwfSxyPVlyKHRoaXMsZSk7dGhpcy5ub3RpZnlQbHVnaW5zKGBiZWZvcmVEYXRhc2V0RHJhd2AsbikhPT0hMSYmKHImJl9uKHQsciksZS5jb250cm9sbGVyLmRyYXcoKSxyJiZ2bih0KSxuLmNhbmNlbGFibGU9ITEsdGhpcy5ub3RpZnlQbHVnaW5zKGBhZnRlckRhdGFzZXREcmF3YCxuKSl9aXNQb2ludEluQXJlYShlKXtyZXR1cm4gRyhlLHRoaXMuY2hhcnRBcmVhLHRoaXMuX21pblBhZGRpbmcpfWdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUoZSx0LG4scil7bGV0IGk9TmkubW9kZXNbdF07cmV0dXJuIHR5cGVvZiBpPT1gZnVuY3Rpb25gP2kodGhpcyxlLG4scik6W119Z2V0RGF0YXNldE1ldGEoZSl7bGV0IHQ9dGhpcy5kYXRhLmRhdGFzZXRzW2VdLG49dGhpcy5fbWV0YXNldHMscj1uLmZpbHRlcihlPT5lJiZlLl9kYXRhc2V0PT09dCkucG9wKCk7cmV0dXJuIHJ8fChyPXt0eXBlOm51bGwsZGF0YTpbXSxkYXRhc2V0Om51bGwsY29udHJvbGxlcjpudWxsLGhpZGRlbjpudWxsLHhBeGlzSUQ6bnVsbCx5QXhpc0lEOm51bGwsb3JkZXI6dCYmdC5vcmRlcnx8MCxpbmRleDplLF9kYXRhc2V0OnQsX3BhcnNlZDpbXSxfc29ydGVkOiExfSxuLnB1c2gocikpLHJ9Z2V0Q29udGV4dCgpe3JldHVybiB0aGlzLiRjb250ZXh0fHw9Rm4obnVsbCx7Y2hhcnQ6dGhpcyx0eXBlOmBjaGFydGB9KX1nZXRWaXNpYmxlRGF0YXNldENvdW50KCl7cmV0dXJuIHRoaXMuZ2V0U29ydGVkVmlzaWJsZURhdGFzZXRNZXRhcygpLmxlbmd0aH1pc0RhdGFzZXRWaXNpYmxlKGUpe2xldCB0PXRoaXMuZGF0YS5kYXRhc2V0c1tlXTtpZighdClyZXR1cm4hMTtsZXQgbj10aGlzLmdldERhdGFzZXRNZXRhKGUpO3JldHVybiB0eXBlb2Ygbi5oaWRkZW49PWBib29sZWFuYD8hbi5oaWRkZW46IXQuaGlkZGVufXNldERhdGFzZXRWaXNpYmlsaXR5KGUsdCl7bGV0IG49dGhpcy5nZXREYXRhc2V0TWV0YShlKTtuLmhpZGRlbj0hdH10b2dnbGVEYXRhVmlzaWJpbGl0eShlKXt0aGlzLl9oaWRkZW5JbmRpY2VzW2VdPSF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfWdldERhdGFWaXNpYmlsaXR5KGUpe3JldHVybiF0aGlzLl9oaWRkZW5JbmRpY2VzW2VdfV91cGRhdGVWaXNpYmlsaXR5KGUsdCxuKXtsZXQgcj1uP2BzaG93YDpgaGlkZWAsaT10aGlzLmdldERhdGFzZXRNZXRhKGUpLGE9aS5jb250cm9sbGVyLl9yZXNvbHZlQW5pbWF0aW9ucyh2b2lkIDAscik7JGUodCk/KGkuZGF0YVt0XS5oaWRkZW49IW4sdGhpcy51cGRhdGUoKSk6KHRoaXMuc2V0RGF0YXNldFZpc2liaWxpdHkoZSxuKSxhLnVwZGF0ZShpLHt2aXNpYmxlOm59KSx0aGlzLnVwZGF0ZSh0PT50LmRhdGFzZXRJbmRleD09PWU/cjp2b2lkIDApKX1oaWRlKGUsdCl7dGhpcy5fdXBkYXRlVmlzaWJpbGl0eShlLHQsITEpfXNob3coZSx0KXt0aGlzLl91cGRhdGVWaXNpYmlsaXR5KGUsdCwhMCl9X2Rlc3Ryb3lEYXRhc2V0TWV0YShlKXtsZXQgdD10aGlzLl9tZXRhc2V0c1tlXTt0JiZ0LmNvbnRyb2xsZXImJnQuY29udHJvbGxlci5fZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZXRhc2V0c1tlXX1fc3RvcCgpe2xldCBlLHQ7Zm9yKHRoaXMuc3RvcCgpLEoucmVtb3ZlKHRoaXMpLGU9MCx0PXRoaXMuZGF0YS5kYXRhc2V0cy5sZW5ndGg7ZTx0OysrZSl0aGlzLl9kZXN0cm95RGF0YXNldE1ldGEoZSl9ZGVzdHJveSgpe3RoaXMubm90aWZ5UGx1Z2lucyhgYmVmb3JlRGVzdHJveWApO2xldHtjYW52YXM6ZSxjdHg6dH09dGhpczt0aGlzLl9zdG9wKCksdGhpcy5jb25maWcuY2xlYXJDYWNoZSgpLGUmJih0aGlzLnVuYmluZEV2ZW50cygpLG1uKGUsdCksdGhpcy5wbGF0Zm9ybS5yZWxlYXNlQ29udGV4dCh0KSx0aGlzLmNhbnZhcz1udWxsLHRoaXMuY3R4PW51bGwpLGRlbGV0ZSB3b1t0aGlzLmlkXSx0aGlzLm5vdGlmeVBsdWdpbnMoYGFmdGVyRGVzdHJveWApfXRvQmFzZTY0SW1hZ2UoLi4uZSl7cmV0dXJuIHRoaXMuY2FudmFzLnRvRGF0YVVSTCguLi5lKX1iaW5kRXZlbnRzKCl7dGhpcy5iaW5kVXNlckV2ZW50cygpLHRoaXMub3B0aW9ucy5yZXNwb25zaXZlP3RoaXMuYmluZFJlc3BvbnNpdmVFdmVudHMoKTp0aGlzLmF0dGFjaGVkPSEwfWJpbmRVc2VyRXZlbnRzKCl7bGV0IGU9dGhpcy5fbGlzdGVuZXJzLHQ9dGhpcy5wbGF0Zm9ybSxuPShuLHIpPT57dC5hZGRFdmVudExpc3RlbmVyKHRoaXMsbixyKSxlW25dPXJ9LHI9KGUsdCxuKT0+e2Uub2Zmc2V0WD10LGUub2Zmc2V0WT1uLHRoaXMuX2V2ZW50SGFuZGxlcihlKX07TCh0aGlzLm9wdGlvbnMuZXZlbnRzLGU9Pm4oZSxyKSl9YmluZFJlc3BvbnNpdmVFdmVudHMoKXt0aGlzLl9yZXNwb25zaXZlTGlzdGVuZXJzfHw9e307bGV0IGU9dGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycyx0PXRoaXMucGxhdGZvcm0sbj0obixyKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZVtuXT1yfSxyPShuLHIpPT57ZVtuXSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLG4sciksZGVsZXRlIGVbbl0pfSxpPShlLHQpPT57dGhpcy5jYW52YXMmJnRoaXMucmVzaXplKGUsdCl9LGEsbz0oKT0+e3IoYGF0dGFjaGAsbyksdGhpcy5hdHRhY2hlZD0hMCx0aGlzLnJlc2l6ZSgpLG4oYHJlc2l6ZWAsaSksbihgZGV0YWNoYCxhKX07YT0oKT0+e3RoaXMuYXR0YWNoZWQ9ITEscihgcmVzaXplYCxpKSx0aGlzLl9zdG9wKCksdGhpcy5fcmVzaXplKDAsMCksbihgYXR0YWNoYCxvKX0sdC5pc0F0dGFjaGVkKHRoaXMuY2FudmFzKT9vKCk6YSgpfXVuYmluZEV2ZW50cygpe0wodGhpcy5fbGlzdGVuZXJzLChlLHQpPT57dGhpcy5wbGF0Zm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsdCxlKX0pLHRoaXMuX2xpc3RlbmVycz17fSxMKHRoaXMuX3Jlc3BvbnNpdmVMaXN0ZW5lcnMsKGUsdCk9Pnt0aGlzLnBsYXRmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcyx0LGUpfSksdGhpcy5fcmVzcG9uc2l2ZUxpc3RlbmVycz12b2lkIDB9dXBkYXRlSG92ZXJTdHlsZShlLHQsbil7bGV0IHI9bj9gc2V0YDpgcmVtb3ZlYCxpLGEsbyxzO2Zvcih0PT09YGRhdGFzZXRgJiYoaT10aGlzLmdldERhdGFzZXRNZXRhKGVbMF0uZGF0YXNldEluZGV4KSxpLmNvbnRyb2xsZXJbYF9gK3IrYERhdGFzZXRIb3ZlclN0eWxlYF0oKSksbz0wLHM9ZS5sZW5ndGg7bzxzOysrbyl7YT1lW29dO2xldCB0PWEmJnRoaXMuZ2V0RGF0YXNldE1ldGEoYS5kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXI7dCYmdFtyK2BIb3ZlclN0eWxlYF0oYS5lbGVtZW50LGEuZGF0YXNldEluZGV4LGEuaW5kZXgpfX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUpe2xldCB0PXRoaXMuX2FjdGl2ZXx8W10sbj1lLm1hcCgoe2RhdGFzZXRJbmRleDplLGluZGV4OnR9KT0+e2xldCBuPXRoaXMuZ2V0RGF0YXNldE1ldGEoZSk7aWYoIW4pdGhyb3cgRXJyb3IoYE5vIGRhdGFzZXQgZm91bmQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KTtWZShuLHQpfHwodGhpcy5fYWN0aXZlPW4sdGhpcy5fbGFzdEV2ZW50PW51bGwsdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMobix0KSl9bm90aWZ5UGx1Z2lucyhlLHQsbil7cmV0dXJuIHRoaXMuX3BsdWdpbnMubm90aWZ5KHRoaXMsZSx0LG4pfWlzUGx1Z2luRW5hYmxlZChlKXtyZXR1cm4gdGhpcy5fcGx1Z2lucy5fY2FjaGUuZmlsdGVyKHQ9PnQucGx1Z2luLmlkPT09ZSkubGVuZ3RoPT09MX1fdXBkYXRlSG92ZXJTdHlsZXMoZSx0LG4pe2xldCByPXRoaXMub3B0aW9ucy5ob3ZlcixpPShlLHQpPT5lLmZpbHRlcihlPT4hdC5zb21lKHQ9PmUuZGF0YXNldEluZGV4PT09dC5kYXRhc2V0SW5kZXgmJmUuaW5kZXg9PT10LmluZGV4KSksYT1pKHQsZSksbz1uP2U6aShlLHQpO2EubGVuZ3RoJiZ0aGlzLnVwZGF0ZUhvdmVyU3R5bGUoYSxyLm1vZGUsITEpLG8ubGVuZ3RoJiZyLm1vZGUmJnRoaXMudXBkYXRlSG92ZXJTdHlsZShvLHIubW9kZSwhMCl9X2V2ZW50SGFuZGxlcihlLHQpe2xldCBuPXtldmVudDplLHJlcGxheTp0LGNhbmNlbGFibGU6ITAsaW5DaGFydEFyZWE6dGhpcy5pc1BvaW50SW5BcmVhKGUpfSxyPXQ9Pih0Lm9wdGlvbnMuZXZlbnRzfHx0aGlzLm9wdGlvbnMuZXZlbnRzKS5pbmNsdWRlcyhlLm5hdGl2ZS50eXBlKTtpZih0aGlzLm5vdGlmeVBsdWdpbnMoYGJlZm9yZUV2ZW50YCxuLHIpPT09ITEpcmV0dXJuO2xldCBpPXRoaXMuX2hhbmRsZUV2ZW50KGUsdCxuLmluQ2hhcnRBcmVhKTtyZXR1cm4gbi5jYW5jZWxhYmxlPSExLHRoaXMubm90aWZ5UGx1Z2lucyhgYWZ0ZXJFdmVudGAsbixyKSwoaXx8bi5jaGFuZ2VkKSYmdGhpcy5yZW5kZXIoKSx0aGlzfV9oYW5kbGVFdmVudChlLHQsbil7bGV0e19hY3RpdmU6cj1bXSxvcHRpb25zOml9PXRoaXMsYT10LG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudHMoZSxyLG4sYSkscz1udChlKSxjPURvKGUsdGhpcy5fbGFzdEV2ZW50LG4scyk7biYmKHRoaXMuX2xhc3RFdmVudD1udWxsLEkoaS5vbkhvdmVyLFtlLG8sdGhpc10sdGhpcykscyYmSShpLm9uQ2xpY2ssW2Usbyx0aGlzXSx0aGlzKSk7bGV0IGw9IVZlKG8scik7cmV0dXJuKGx8fHQpJiYodGhpcy5fYWN0aXZlPW8sdGhpcy5fdXBkYXRlSG92ZXJTdHlsZXMobyxyLHQpKSx0aGlzLl9sYXN0RXZlbnQ9YyxsfV9nZXRBY3RpdmVFbGVtZW50cyhlLHQsbixyKXtpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFuKXJldHVybiB0O2xldCBpPXRoaXMub3B0aW9ucy5ob3ZlcjtyZXR1cm4gdGhpcy5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGkscil9fTtmdW5jdGlvbiBrbygpe3JldHVybiBMKE9vLmluc3RhbmNlcyxlPT5lLl9wbHVnaW5zLmludmFsaWRhdGUoKSl9ZnVuY3Rpb24gQW8oZSx0LG49dCl7ZS5saW5lQ2FwPUYobi5ib3JkZXJDYXBTdHlsZSx0LmJvcmRlckNhcFN0eWxlKSxlLnNldExpbmVEYXNoKEYobi5ib3JkZXJEYXNoLHQuYm9yZGVyRGFzaCkpLGUubGluZURhc2hPZmZzZXQ9RihuLmJvcmRlckRhc2hPZmZzZXQsdC5ib3JkZXJEYXNoT2Zmc2V0KSxlLmxpbmVKb2luPUYobi5ib3JkZXJKb2luU3R5bGUsdC5ib3JkZXJKb2luU3R5bGUpLGUubGluZVdpZHRoPUYobi5ib3JkZXJXaWR0aCx0LmJvcmRlcldpZHRoKSxlLnN0cm9rZVN0eWxlPUYobi5ib3JkZXJDb2xvcix0LmJvcmRlckNvbG9yKX1mdW5jdGlvbiBqbyhlLHQsbil7ZS5saW5lVG8obi54LG4ueSl9ZnVuY3Rpb24gTW8oZSl7cmV0dXJuIGUuc3RlcHBlZD95bjplLnRlbnNpb258fGUuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZT09PWBtb25vdG9uZWA/Ym46am99ZnVuY3Rpb24gTm8oZSx0LG49e30pe2xldCByPWUubGVuZ3RoLHtzdGFydDppPTAsZW5kOmE9ci0xfT1uLHtzdGFydDpvLGVuZDpzfT10LGM9TWF0aC5tYXgoaSxvKSxsPU1hdGgubWluKGEscyksdT1pPG8mJmE8b3x8aT5zJiZhPnM7cmV0dXJue2NvdW50OnIsc3RhcnQ6Yyxsb29wOnQubG9vcCxpbGVuOmw8YyYmIXU/citsLWM6bC1jfX1mdW5jdGlvbiBQbyhlLHQsbixyKXtsZXR7cG9pbnRzOmksb3B0aW9uczphfT10LHtjb3VudDpvLHN0YXJ0OnMsbG9vcDpjLGlsZW46bH09Tm8oaSxuLHIpLHU9TW8oYSkse21vdmU6ZD0hMCxyZXZlcnNlOmZ9PXJ8fHt9LHAsbSxoO2ZvcihwPTA7cDw9bDsrK3ApbT1pWyhzKyhmP2wtcDpwKSklb10sIW0uc2tpcCYmKGQ/KGUubW92ZVRvKG0ueCxtLnkpLGQ9ITEpOnUoZSxoLG0sZixhLnN0ZXBwZWQpLGg9bSk7cmV0dXJuIGMmJihtPWlbKHMrKGY/bDowKSklb10sdShlLGgsbSxmLGEuc3RlcHBlZCkpLCEhY31mdW5jdGlvbiBGbyhlLHQsbixyKXtsZXQgaT10LnBvaW50cyx7Y291bnQ6YSxzdGFydDpvLGlsZW46c309Tm8oaSxuLHIpLHttb3ZlOmM9ITAscmV2ZXJzZTpsfT1yfHx7fSx1PTAsZD0wLGYscCxtLGgsZyxfLHY9ZT0+KG8rKGw/cy1lOmUpKSVhLHk9KCk9PntoIT09ZyYmKGUubGluZVRvKHUsZyksZS5saW5lVG8odSxoKSxlLmxpbmVUbyh1LF8pKX07Zm9yKGMmJihwPWlbdigwKV0sZS5tb3ZlVG8ocC54LHAueSkpLGY9MDtmPD1zOysrZil7aWYocD1pW3YoZildLHAuc2tpcCljb250aW51ZTtsZXQgdD1wLngsbj1wLnkscj10fDA7cj09PW0/KG48aD9oPW46bj5nJiYoZz1uKSx1PShkKnUrdCkvKytkKTooeSgpLGUubGluZVRvKHQsbiksbT1yLGQ9MCxoPWc9biksXz1ufXkoKX1mdW5jdGlvbiBJbyhlKXtsZXQgdD1lLm9wdGlvbnMsbj10LmJvcmRlckRhc2gmJnQuYm9yZGVyRGFzaC5sZW5ndGg7cmV0dXJuIWUuX2RlY2ltYXRlZCYmIWUuX2xvb3AmJiF0LnRlbnNpb24mJnQuY3ViaWNJbnRlcnBvbGF0aW9uTW9kZSE9PWBtb25vdG9uZWAmJiF0LnN0ZXBwZWQmJiFuP0ZvOlBvfWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnN0ZXBwZWQ/T3I6ZS50ZW5zaW9ufHxlLmN1YmljSW50ZXJwb2xhdGlvbk1vZGU9PT1gbW9ub3RvbmVgP2tyOkRyfWZ1bmN0aW9uIFJvKGUsdCxuLHIpe2xldCBpPXQuX3BhdGg7aXx8KGk9dC5fcGF0aD1uZXcgUGF0aDJELHQucGF0aChpLG4scikmJmkuY2xvc2VQYXRoKCkpLEFvKGUsdC5vcHRpb25zKSxlLnN0cm9rZShpKX1mdW5jdGlvbiB6byhlLHQsbixyKXtsZXR7c2VnbWVudHM6aSxvcHRpb25zOmF9PXQsbz1Jbyh0KTtmb3IobGV0IHMgb2YgaSlBbyhlLGEscy5zdHlsZSksZS5iZWdpblBhdGgoKSxvKGUsdCxzLHtzdGFydDpuLGVuZDpuK3ItMX0pJiZlLmNsb3NlUGF0aCgpLGUuc3Ryb2tlKCl9dmFyIEJvPXR5cGVvZiBQYXRoMkQ9PWBmdW5jdGlvbmA7ZnVuY3Rpb24gVm8oZSx0LG4scil7Qm8mJiF0Lm9wdGlvbnMuc2VnbWVudD9SbyhlLHQsbixyKTp6byhlLHQsbixyKX12YXIgSG89Y2xhc3MgZXh0ZW5kcyBiYXtzdGF0aWMgaWQ9YGxpbmVgO3N0YXRpYyBkZWZhdWx0cz17Ym9yZGVyQ2FwU3R5bGU6YGJ1dHRgLGJvcmRlckRhc2g6W10sYm9yZGVyRGFzaE9mZnNldDowLGJvcmRlckpvaW5TdHlsZTpgbWl0ZXJgLGJvcmRlcldpZHRoOjMsY2FwQmV6aWVyUG9pbnRzOiEwLGN1YmljSW50ZXJwb2xhdGlvbk1vZGU6YGRlZmF1bHRgLGZpbGw6ITEsc3BhbkdhcHM6ITEsc3RlcHBlZDohMSx0ZW5zaW9uOjB9O3N0YXRpYyBkZWZhdWx0Um91dGVzPXtiYWNrZ3JvdW5kQ29sb3I6YGJhY2tncm91bmRDb2xvcmAsYm9yZGVyQ29sb3I6YGJvcmRlckNvbG9yYH07c3RhdGljIGRlc2NyaXB0b3JzPXtfc2NyaXB0YWJsZTohMCxfaW5kZXhhYmxlOmU9PmUhPT1gYm9yZGVyRGFzaGAmJmUhPT1gZmlsbGB9O2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5hbmltYXRlZD0hMCx0aGlzLm9wdGlvbnM9dm9pZCAwLHRoaXMuX2NoYXJ0PXZvaWQgMCx0aGlzLl9sb29wPXZvaWQgMCx0aGlzLl9mdWxsTG9vcD12b2lkIDAsdGhpcy5fcGF0aD12b2lkIDAsdGhpcy5fcG9pbnRzPXZvaWQgMCx0aGlzLl9zZWdtZW50cz12b2lkIDAsdGhpcy5fZGVjaW1hdGVkPSExLHRoaXMuX3BvaW50c1VwZGF0ZWQ9ITEsdGhpcy5fZGF0YXNldEluZGV4PXZvaWQgMCxlJiZPYmplY3QuYXNzaWduKHRoaXMsZSl9dXBkYXRlQ29udHJvbFBvaW50cyhlLHQpe2xldCBuPXRoaXMub3B0aW9ucztpZigobi50ZW5zaW9ufHxuLmN1YmljSW50ZXJwb2xhdGlvbk1vZGU9PT1gbW9ub3RvbmVgKSYmIW4uc3RlcHBlZCYmIXRoaXMuX3BvaW50c1VwZGF0ZWQpe2xldCByPW4uc3BhbkdhcHM/dGhpcy5fbG9vcDp0aGlzLl9mdWxsTG9vcDt1cih0aGlzLl9wb2ludHMsbixlLHIsdCksdGhpcy5fcG9pbnRzVXBkYXRlZD0hMH19c2V0IHBvaW50cyhlKXt0aGlzLl9wb2ludHM9ZSxkZWxldGUgdGhpcy5fc2VnbWVudHMsZGVsZXRlIHRoaXMuX3BhdGgsdGhpcy5fcG9pbnRzVXBkYXRlZD0hMX1nZXQgcG9pbnRzKCl7cmV0dXJuIHRoaXMuX3BvaW50c31nZXQgc2VnbWVudHMoKXtyZXR1cm4gdGhpcy5fc2VnbWVudHN8fD1Icih0aGlzLHRoaXMub3B0aW9ucy5zZWdtZW50KX1maXJzdCgpe2xldCBlPXRoaXMuc2VnbWVudHMsdD10aGlzLnBvaW50cztyZXR1cm4gZS5sZW5ndGgmJnRbZVswXS5zdGFydF19bGFzdCgpe2xldCBlPXRoaXMuc2VnbWVudHMsdD10aGlzLnBvaW50cyxuPWUubGVuZ3RoO3JldHVybiBuJiZ0W2Vbbi0xXS5lbmRdfWludGVycG9sYXRlKGUsdCl7bGV0IG49dGhpcy5vcHRpb25zLHI9ZVt0XSxpPXRoaXMucG9pbnRzLGE9enIodGhpcyx7cHJvcGVydHk6dCxzdGFydDpyLGVuZDpyfSk7aWYoIWEubGVuZ3RoKXJldHVybjtsZXQgbz1bXSxzPUxvKG4pLGMsbDtmb3IoYz0wLGw9YS5sZW5ndGg7YzxsOysrYyl7bGV0e3N0YXJ0OmwsZW5kOnV9PWFbY10sZD1pW2xdLGY9aVt1XTtpZihkPT09Zil7by5wdXNoKGQpO2NvbnRpbnVlfWxldCBwPXMoZCxmLE1hdGguYWJzKChyLWRbdF0pLyhmW3RdLWRbdF0pKSxuLnN0ZXBwZWQpO3BbdF09ZVt0XSxvLnB1c2gocCl9cmV0dXJuIG8ubGVuZ3RoPT09MT9vWzBdOm99cGF0aFNlZ21lbnQoZSx0LG4pe3JldHVybiBJbyh0aGlzKShlLHRoaXMsdCxuKX1wYXRoKGUsdCxuKXtsZXQgcj10aGlzLnNlZ21lbnRzLGk9SW8odGhpcyksYT10aGlzLl9sb29wO3R8fD0wLG58fD10aGlzLnBvaW50cy5sZW5ndGgtdDtmb3IobGV0IG8gb2YgcilhJj1pKGUsdGhpcyxvLHtzdGFydDp0LGVuZDp0K24tMX0pO3JldHVybiEhYX1kcmF3KGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9uc3x8e307KHRoaXMucG9pbnRzfHxbXSkubGVuZ3RoJiZpLmJvcmRlcldpZHRoJiYoZS5zYXZlKCksVm8oZSx0aGlzLG4sciksZS5yZXN0b3JlKCkpLHRoaXMuYW5pbWF0ZWQmJih0aGlzLl9wb2ludHNVcGRhdGVkPSExLHRoaXMuX3BhdGg9dm9pZCAwKX19O2Z1bmN0aW9uIFVvKGUsdCxuLHIpe2xldCBpPWUub3B0aW9ucyx7W25dOmF9PWUuZ2V0UHJvcHMoW25dLHIpO3JldHVybiBNYXRoLmFicyh0LWEpPGkucmFkaXVzK2kuaGl0UmFkaXVzfXZhciBXbz1jbGFzcyBleHRlbmRzIGJhe3N0YXRpYyBpZD1gcG9pbnRgO3BhcnNlZDtza2lwO3N0b3A7c3RhdGljIGRlZmF1bHRzPXtib3JkZXJXaWR0aDoxLGhpdFJhZGl1czoxLGhvdmVyQm9yZGVyV2lkdGg6MSxob3ZlclJhZGl1czo0LHBvaW50U3R5bGU6YGNpcmNsZWAscmFkaXVzOjMscm90YXRpb246MH07c3RhdGljIGRlZmF1bHRSb3V0ZXM9e2JhY2tncm91bmRDb2xvcjpgYmFja2dyb3VuZENvbG9yYCxib3JkZXJDb2xvcjpgYm9yZGVyQ29sb3JgfTtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0aW9ucz12b2lkIDAsdGhpcy5wYXJzZWQ9dm9pZCAwLHRoaXMuc2tpcD12b2lkIDAsdGhpcy5zdG9wPXZvaWQgMCxlJiZPYmplY3QuYXNzaWduKHRoaXMsZSl9aW5SYW5nZShlLHQsbil7bGV0IHI9dGhpcy5vcHRpb25zLHt4OmkseTphfT10aGlzLmdldFByb3BzKFtgeGAsYHlgXSxuKTtyZXR1cm4oZS1pKSoqMisodC1hKSoqMjwoci5oaXRSYWRpdXMrci5yYWRpdXMpKioyfWluWFJhbmdlKGUsdCl7cmV0dXJuIFVvKHRoaXMsZSxgeGAsdCl9aW5ZUmFuZ2UoZSx0KXtyZXR1cm4gVW8odGhpcyxlLGB5YCx0KX1nZXRDZW50ZXJQb2ludChlKXtsZXR7eDp0LHk6bn09dGhpcy5nZXRQcm9wcyhbYHhgLGB5YF0sZSk7cmV0dXJue3g6dCx5Om59fXNpemUoZSl7ZT1lfHx0aGlzLm9wdGlvbnN8fHt9O2xldCB0PWUucmFkaXVzfHwwO3Q9TWF0aC5tYXgodCx0JiZlLmhvdmVyUmFkaXVzfHwwKTtsZXQgbj10JiZlLmJvcmRlcldpZHRofHwwO3JldHVybih0K24pKjJ9ZHJhdyhlLHQpe2xldCBuPXRoaXMub3B0aW9uczt0aGlzLnNraXB8fG4ucmFkaXVzPC4xfHwhRyh0aGlzLHQsdGhpcy5zaXplKG4pLzIpfHwoZS5zdHJva2VTdHlsZT1uLmJvcmRlckNvbG9yLGUubGluZVdpZHRoPW4uYm9yZGVyV2lkdGgsZS5maWxsU3R5bGU9bi5iYWNrZ3JvdW5kQ29sb3IsaG4oZSxuLHRoaXMueCx0aGlzLnkpKX1nZXRSYW5nZSgpe2xldCBlPXRoaXMub3B0aW9uc3x8e307cmV0dXJuIGUucmFkaXVzK2UuaGl0UmFkaXVzfX07ZnVuY3Rpb24gR28oZSx0LG4pe2xldCByPWUuc2VnbWVudHMsaT1lLnBvaW50cyxhPXQucG9pbnRzLG89W107Zm9yKGxldCBlIG9mIHIpe2xldHtzdGFydDpyLGVuZDpzfT1lO3M9Sm8ocixzLGkpO2xldCBjPUtvKG4saVtyXSxpW3NdLGUubG9vcCk7aWYoIXQuc2VnbWVudHMpe28ucHVzaCh7c291cmNlOmUsdGFyZ2V0OmMsc3RhcnQ6aVtyXSxlbmQ6aVtzXX0pO2NvbnRpbnVlfWxldCBsPXpyKHQsYyk7Zm9yKGxldCB0IG9mIGwpe2xldCByPUtvKG4sYVt0LnN0YXJ0XSxhW3QuZW5kXSx0Lmxvb3ApLHM9UnIoZSxpLHIpO2ZvcihsZXQgZSBvZiBzKW8ucHVzaCh7c291cmNlOmUsdGFyZ2V0OnQsc3RhcnQ6e1tuXTpZbyhjLHIsYHN0YXJ0YCxNYXRoLm1heCl9LGVuZDp7W25dOllvKGMscixgZW5kYCxNYXRoLm1pbil9fSl9fXJldHVybiBvfWZ1bmN0aW9uIEtvKGUsdCxuLHIpe2lmKHIpcmV0dXJuO2xldCBpPXRbZV0sYT1uW2VdO3JldHVybiBlPT09YGFuZ2xlYCYmKGk9VihpKSxhPVYoYSkpLHtwcm9wZXJ0eTplLHN0YXJ0OmksZW5kOmF9fWZ1bmN0aW9uIHFvKGUsdCl7bGV0e3g6bj1udWxsLHk6cj1udWxsfT1lfHx7fSxpPXQucG9pbnRzLGE9W107cmV0dXJuIHQuc2VnbWVudHMuZm9yRWFjaCgoe3N0YXJ0OmUsZW5kOnR9KT0+e3Q9Sm8oZSx0LGkpO2xldCBvPWlbZV0scz1pW3RdO3I9PT1udWxsP24hPT1udWxsJiYoYS5wdXNoKHt4Om4seTpvLnl9KSxhLnB1c2goe3g6bix5OnMueX0pKTooYS5wdXNoKHt4Om8ueCx5OnJ9KSxhLnB1c2goe3g6cy54LHk6cn0pKX0pLGF9ZnVuY3Rpb24gSm8oZSx0LG4pe2Zvcig7dD5lO3QtLSl7bGV0IGU9blt0XTtpZighaXNOYU4oZS54KSYmIWlzTmFOKGUueSkpYnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gWW8oZSx0LG4scil7cmV0dXJuIGUmJnQ/cihlW25dLHRbbl0pOmU/ZVtuXTp0P3Rbbl06MH1mdW5jdGlvbiBYbyhlLHQpe2xldCBuPVtdLHI9ITE7cmV0dXJuIGooZSk/KHI9ITAsbj1lKTpuPXFvKGUsdCksbi5sZW5ndGg/bmV3IEhvKHtwb2ludHM6bixvcHRpb25zOnt0ZW5zaW9uOjB9LF9sb29wOnIsX2Z1bGxMb29wOnJ9KTpudWxsfWZ1bmN0aW9uIFpvKGUpe3JldHVybiBlJiZlLmZpbGwhPT0hMX1mdW5jdGlvbiBRbyhlLHQsbil7bGV0IHI9ZVt0XS5maWxsLGk9W3RdLGE7aWYoIW4pcmV0dXJuIHI7Zm9yKDtyIT09ITEmJmkuaW5kZXhPZihyKT09PS0xOyl7aWYoIU4ocikpcmV0dXJuIHI7aWYoYT1lW3JdLCFhKXJldHVybiExO2lmKGEudmlzaWJsZSlyZXR1cm4gcjtpLnB1c2gocikscj1hLmZpbGx9cmV0dXJuITF9ZnVuY3Rpb24gJG8oZSx0LG4pe2xldCByPXJzKGUpO2lmKE0ocikpcmV0dXJuIWlzTmFOKHIudmFsdWUpJiZyO2xldCBpPXBhcnNlRmxvYXQocik7cmV0dXJuIE4oaSkmJk1hdGguZmxvb3IoaSk9PT1pP2VzKHJbMF0sdCxpLG4pOltgb3JpZ2luYCxgc3RhcnRgLGBlbmRgLGBzdGFja2AsYHNoYXBlYF0uaW5kZXhPZihyKT49MCYmcn1mdW5jdGlvbiBlcyhlLHQsbixyKXtyZXR1cm4oZT09PWAtYHx8ZT09PWArYCkmJihuPXQrbiksbj09PXR8fG48MHx8bj49cj8hMTpufWZ1bmN0aW9uIHRzKGUsdCl7bGV0IG49bnVsbDtyZXR1cm4gZT09PWBzdGFydGA/bj10LmJvdHRvbTplPT09YGVuZGA/bj10LnRvcDpNKGUpP249dC5nZXRQaXhlbEZvclZhbHVlKGUudmFsdWUpOnQuZ2V0QmFzZVBpeGVsJiYobj10LmdldEJhc2VQaXhlbCgpKSxufWZ1bmN0aW9uIG5zKGUsdCxuKXtsZXQgcjtyZXR1cm4gcj1lPT09YHN0YXJ0YD9uOmU9PT1gZW5kYD90Lm9wdGlvbnMucmV2ZXJzZT90Lm1pbjp0Lm1heDpNKGUpP2UudmFsdWU6dC5nZXRCYXNlVmFsdWUoKSxyfWZ1bmN0aW9uIHJzKGUpe2xldCB0PWUub3B0aW9ucyxuPXQuZmlsbCxyPUYobiYmbi50YXJnZXQsbik7cmV0dXJuIHI9PT12b2lkIDAmJihyPSEhdC5iYWNrZ3JvdW5kQ29sb3IpLHI9PT0hMXx8cj09PW51bGw/ITE6cj09PSEwP2BvcmlnaW5gOnJ9ZnVuY3Rpb24gaXMoZSl7bGV0e3NjYWxlOnQsaW5kZXg6bixsaW5lOnJ9PWUsaT1bXSxhPXIuc2VnbWVudHMsbz1yLnBvaW50cyxzPWFzKHQsbik7cy5wdXNoKFhvKHt4Om51bGwseTp0LmJvdHRvbX0scikpO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSsrKXtsZXQgdD1hW2VdO2ZvcihsZXQgZT10LnN0YXJ0O2U8PXQuZW5kO2UrKylvcyhpLG9bZV0scyl9cmV0dXJuIG5ldyBIbyh7cG9pbnRzOmksb3B0aW9uczp7fX0pfWZ1bmN0aW9uIGFzKGUsdCl7bGV0IG49W10scj1lLmdldE1hdGNoaW5nVmlzaWJsZU1ldGFzKGBsaW5lYCk7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe2xldCBpPXJbZV07aWYoaS5pbmRleD09PXQpYnJlYWs7aS5oaWRkZW58fG4udW5zaGlmdChpLmRhdGFzZXQpfXJldHVybiBufWZ1bmN0aW9uIG9zKGUsdCxuKXtsZXQgcj1bXTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IGE9bltpXSx7Zmlyc3Q6byxsYXN0OnMscG9pbnQ6Y309c3MoYSx0LGB4YCk7aWYoISghY3x8byYmcykpe2lmKG8pci51bnNoaWZ0KGMpO2Vsc2UgaWYoZS5wdXNoKGMpLCFzKWJyZWFrfX1lLnB1c2goLi4ucil9ZnVuY3Rpb24gc3MoZSx0LG4pe2xldCByPWUuaW50ZXJwb2xhdGUodCxuKTtpZighcilyZXR1cm57fTtsZXQgaT1yW25dLGE9ZS5zZWdtZW50cyxvPWUucG9pbnRzLHM9ITEsYz0hMTtmb3IobGV0IGU9MDtlPGEubGVuZ3RoO2UrKyl7bGV0IHQ9YVtlXSxyPW9bdC5zdGFydF1bbl0sbD1vW3QuZW5kXVtuXTtpZihUdChpLHIsbCkpe3M9aT09PXIsYz1pPT09bDticmVha319cmV0dXJue2ZpcnN0OnMsbGFzdDpjLHBvaW50OnJ9fXZhciBjcz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLng9ZS54LHRoaXMueT1lLnksdGhpcy5yYWRpdXM9ZS5yYWRpdXN9cGF0aFNlZ21lbnQoZSx0LG4pe2xldHt4OnIseTppLHJhZGl1czphfT10aGlzO3JldHVybiB0fHw9e3N0YXJ0OjAsZW5kOnp9LGUuYXJjKHIsaSxhLHQuZW5kLHQuc3RhcnQsITApLCFuLmJvdW5kc31pbnRlcnBvbGF0ZShlKXtsZXR7eDp0LHk6bixyYWRpdXM6cn09dGhpcyxpPWUuYW5nbGU7cmV0dXJue3g6dCtNYXRoLmNvcyhpKSpyLHk6bitNYXRoLnNpbihpKSpyLGFuZ2xlOml9fX07ZnVuY3Rpb24gbHMoZSl7bGV0e2NoYXJ0OnQsZmlsbDpuLGxpbmU6cn09ZTtpZihOKG4pKXJldHVybiB1cyh0LG4pO2lmKG49PT1gc3RhY2tgKXJldHVybiBpcyhlKTtpZihuPT09YHNoYXBlYClyZXR1cm4hMDtsZXQgaT1kcyhlKTtyZXR1cm4gaSBpbnN0YW5jZW9mIGNzP2k6WG8oaSxyKX1mdW5jdGlvbiB1cyhlLHQpe2xldCBuPWUuZ2V0RGF0YXNldE1ldGEodCk7cmV0dXJuIG4mJmUuaXNEYXRhc2V0VmlzaWJsZSh0KT9uLmRhdGFzZXQ6bnVsbH1mdW5jdGlvbiBkcyhlKXtyZXR1cm4oZS5zY2FsZXx8e30pLmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZT9wcyhlKTpmcyhlKX1mdW5jdGlvbiBmcyhlKXtsZXR7c2NhbGU6dD17fSxmaWxsOm59PWUscj10cyhuLHQpO2lmKE4ocikpe2xldCBlPXQuaXNIb3Jpem9udGFsKCk7cmV0dXJue3g6ZT9yOm51bGwseTplP251bGw6cn19cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHMoZSl7bGV0e3NjYWxlOnQsZmlsbDpufT1lLHI9dC5vcHRpb25zLGk9dC5nZXRMYWJlbHMoKS5sZW5ndGgsYT1yLnJldmVyc2U/dC5tYXg6dC5taW4sbz1ucyhuLHQsYSkscz1bXTtpZihyLmdyaWQuY2lyY3VsYXIpe2xldCBlPXQuZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKDAsYSk7cmV0dXJuIG5ldyBjcyh7eDplLngseTplLnkscmFkaXVzOnQuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUobyl9KX1mb3IobGV0IGU9MDtlPGk7KytlKXMucHVzaCh0LmdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZShlLG8pKTtyZXR1cm4gc31mdW5jdGlvbiBtcyhlLHQsbil7bGV0IHI9bHModCkse2NoYXJ0OmksaW5kZXg6YSxsaW5lOm8sc2NhbGU6cyxheGlzOmN9PXQsbD1vLm9wdGlvbnMsdT1sLmZpbGwsZD1sLmJhY2tncm91bmRDb2xvcix7YWJvdmU6Zj1kLGJlbG93OnA9ZH09dXx8e30sbT1ZcihpLGkuZ2V0RGF0YXNldE1ldGEoYSkpO3ImJm8ucG9pbnRzLmxlbmd0aCYmKF9uKGUsbiksaHMoZSx7bGluZTpvLHRhcmdldDpyLGFib3ZlOmYsYmVsb3c6cCxhcmVhOm4sc2NhbGU6cyxheGlzOmMsY2xpcDptfSksdm4oZSkpfWZ1bmN0aW9uIGhzKGUsdCl7bGV0e2xpbmU6bix0YXJnZXQ6cixhYm92ZTppLGJlbG93OmEsYXJlYTpvLHNjYWxlOnMsY2xpcDpjfT10LGw9bi5fbG9vcD9gYW5nbGVgOnQuYXhpcztlLnNhdmUoKTtsZXQgdT1hO2EhPT1pJiYobD09PWB4YD8oZ3MoZSxyLG8udG9wKSx2cyhlLHtsaW5lOm4sdGFyZ2V0OnIsY29sb3I6aSxzY2FsZTpzLHByb3BlcnR5OmwsY2xpcDpjfSksZS5yZXN0b3JlKCksZS5zYXZlKCksZ3MoZSxyLG8uYm90dG9tKSk6bD09PWB5YCYmKF9zKGUscixvLmxlZnQpLHZzKGUse2xpbmU6bix0YXJnZXQ6cixjb2xvcjphLHNjYWxlOnMscHJvcGVydHk6bCxjbGlwOmN9KSxlLnJlc3RvcmUoKSxlLnNhdmUoKSxfcyhlLHIsby5yaWdodCksdT1pKSksdnMoZSx7bGluZTpuLHRhcmdldDpyLGNvbG9yOnUsc2NhbGU6cyxwcm9wZXJ0eTpsLGNsaXA6Y30pLGUucmVzdG9yZSgpfWZ1bmN0aW9uIGdzKGUsdCxuKXtsZXR7c2VnbWVudHM6cixwb2ludHM6aX09dCxhPSEwLG89ITE7ZS5iZWdpblBhdGgoKTtmb3IobGV0IHMgb2Ygcil7bGV0e3N0YXJ0OnIsZW5kOmN9PXMsbD1pW3JdLHU9aVtKbyhyLGMsaSldO2E/KGUubW92ZVRvKGwueCxsLnkpLGE9ITEpOihlLmxpbmVUbyhsLngsbiksZS5saW5lVG8obC54LGwueSkpLG89ISF0LnBhdGhTZWdtZW50KGUscyx7bW92ZTpvfSksbz9lLmNsb3NlUGF0aCgpOmUubGluZVRvKHUueCxuKX1lLmxpbmVUbyh0LmZpcnN0KCkueCxuKSxlLmNsb3NlUGF0aCgpLGUuY2xpcCgpfWZ1bmN0aW9uIF9zKGUsdCxuKXtsZXR7c2VnbWVudHM6cixwb2ludHM6aX09dCxhPSEwLG89ITE7ZS5iZWdpblBhdGgoKTtmb3IobGV0IHMgb2Ygcil7bGV0e3N0YXJ0OnIsZW5kOmN9PXMsbD1pW3JdLHU9aVtKbyhyLGMsaSldO2E/KGUubW92ZVRvKGwueCxsLnkpLGE9ITEpOihlLmxpbmVUbyhuLGwueSksZS5saW5lVG8obC54LGwueSkpLG89ISF0LnBhdGhTZWdtZW50KGUscyx7bW92ZTpvfSksbz9lLmNsb3NlUGF0aCgpOmUubGluZVRvKG4sdS55KX1lLmxpbmVUbyhuLHQuZmlyc3QoKS55KSxlLmNsb3NlUGF0aCgpLGUuY2xpcCgpfWZ1bmN0aW9uIHZzKGUsdCl7bGV0e2xpbmU6bix0YXJnZXQ6cixwcm9wZXJ0eTppLGNvbG9yOmEsc2NhbGU6byxjbGlwOnN9PXQsYz1HbyhuLHIsaSk7Zm9yKGxldHtzb3VyY2U6dCx0YXJnZXQ6bCxzdGFydDp1LGVuZDpkfW9mIGMpe2xldHtzdHlsZTp7YmFja2dyb3VuZENvbG9yOmM9YX09e319PXQsZj1yIT09ITA7ZS5zYXZlKCksZS5maWxsU3R5bGU9Yyx5cyhlLG8scyxmJiZLbyhpLHUsZCkpLGUuYmVnaW5QYXRoKCk7bGV0IHA9ISFuLnBhdGhTZWdtZW50KGUsdCksbTtpZihmKXtwP2UuY2xvc2VQYXRoKCk6YnMoZSxyLGQsaSk7bGV0IHQ9ISFyLnBhdGhTZWdtZW50KGUsbCx7bW92ZTpwLHJldmVyc2U6ITB9KTttPXAmJnQsbXx8YnMoZSxyLHUsaSl9ZS5jbG9zZVBhdGgoKSxlLmZpbGwobT9gZXZlbm9kZGA6YG5vbnplcm9gKSxlLnJlc3RvcmUoKX19ZnVuY3Rpb24geXMoZSx0LG4scil7bGV0IGk9dC5jaGFydC5jaGFydEFyZWEse3Byb3BlcnR5OmEsc3RhcnQ6byxlbmQ6c309cnx8e307aWYoYT09PWB4YHx8YT09PWB5YCl7bGV0IHQscixjLGw7YT09PWB4YD8odD1vLHI9aS50b3AsYz1zLGw9aS5ib3R0b20pOih0PWkubGVmdCxyPW8sYz1pLnJpZ2h0LGw9cyksZS5iZWdpblBhdGgoKSxuJiYodD1NYXRoLm1heCh0LG4ubGVmdCksYz1NYXRoLm1pbihjLG4ucmlnaHQpLHI9TWF0aC5tYXgocixuLnRvcCksbD1NYXRoLm1pbihsLG4uYm90dG9tKSksZS5yZWN0KHQscixjLXQsbC1yKSxlLmNsaXAoKX19ZnVuY3Rpb24gYnMoZSx0LG4scil7bGV0IGk9dC5pbnRlcnBvbGF0ZShuLHIpO2kmJmUubGluZVRvKGkueCxpLnkpfXZhciB4cz17aWQ6YGZpbGxlcmAsYWZ0ZXJEYXRhc2V0c1VwZGF0ZShlLHQsbil7bGV0IHI9KGUuZGF0YS5kYXRhc2V0c3x8W10pLmxlbmd0aCxpPVtdLGEsbyxzLGM7Zm9yKG89MDtvPHI7KytvKWE9ZS5nZXREYXRhc2V0TWV0YShvKSxzPWEuZGF0YXNldCxjPW51bGwscyYmcy5vcHRpb25zJiZzIGluc3RhbmNlb2YgSG8mJihjPXt2aXNpYmxlOmUuaXNEYXRhc2V0VmlzaWJsZShvKSxpbmRleDpvLGZpbGw6JG8ocyxvLHIpLGNoYXJ0OmUsYXhpczphLmNvbnRyb2xsZXIub3B0aW9ucy5pbmRleEF4aXMsc2NhbGU6YS52U2NhbGUsbGluZTpzfSksYS4kZmlsbGVyPWMsaS5wdXNoKGMpO2ZvcihvPTA7bzxyOysrbyljPWlbb10sISghY3x8Yy5maWxsPT09ITEpJiYoYy5maWxsPVFvKGksbyxuLnByb3BhZ2F0ZSkpfSxiZWZvcmVEcmF3KGUsdCxuKXtsZXQgcj1uLmRyYXdUaW1lPT09YGJlZm9yZURyYXdgLGk9ZS5nZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzKCksYT1lLmNoYXJ0QXJlYTtmb3IobGV0IHQ9aS5sZW5ndGgtMTt0Pj0wOy0tdCl7bGV0IG49aVt0XS4kZmlsbGVyO24mJihuLmxpbmUudXBkYXRlQ29udHJvbFBvaW50cyhhLG4uYXhpcyksciYmbi5maWxsJiZtcyhlLmN0eCxuLGEpKX19LGJlZm9yZURhdGFzZXRzRHJhdyhlLHQsbil7aWYobi5kcmF3VGltZSE9PWBiZWZvcmVEYXRhc2V0c0RyYXdgKXJldHVybjtsZXQgcj1lLmdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMoKTtmb3IobGV0IHQ9ci5sZW5ndGgtMTt0Pj0wOy0tdCl7bGV0IG49clt0XS4kZmlsbGVyO1pvKG4pJiZtcyhlLmN0eCxuLGUuY2hhcnRBcmVhKX19LGJlZm9yZURhdGFzZXREcmF3KGUsdCxuKXtsZXQgcj10Lm1ldGEuJGZpbGxlcjshWm8ocil8fG4uZHJhd1RpbWUhPT1gYmVmb3JlRGF0YXNldERyYXdgfHxtcyhlLmN0eCxyLGUuY2hhcnRBcmVhKX0sZGVmYXVsdHM6e3Byb3BhZ2F0ZTohMCxkcmF3VGltZTpgYmVmb3JlRGF0YXNldERyYXdgfX0sU3M9KGUsdCk9PntsZXR7Ym94SGVpZ2h0Om49dCxib3hXaWR0aDpyPXR9PWU7cmV0dXJuIGUudXNlUG9pbnRTdHlsZSYmKG49TWF0aC5taW4obix0KSxyPWUucG9pbnRTdHlsZVdpZHRofHxNYXRoLm1pbihyLHQpKSx7Ym94V2lkdGg6cixib3hIZWlnaHQ6bixpdGVtSGVpZ2h0Ok1hdGgubWF4KHQsbil9fSxDcz0oZSx0KT0+ZSE9PW51bGwmJnQhPT1udWxsJiZlLmRhdGFzZXRJbmRleD09PXQuZGF0YXNldEluZGV4JiZlLmluZGV4PT09dC5pbmRleCx3cz1jbGFzcyBleHRlbmRzIGJhe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fYWRkZWQ9ITEsdGhpcy5sZWdlbmRIaXRCb3hlcz1bXSx0aGlzLl9ob3ZlcmVkSXRlbT1udWxsLHRoaXMuZG91Z2hudXRNb2RlPSExLHRoaXMuY2hhcnQ9ZS5jaGFydCx0aGlzLm9wdGlvbnM9ZS5vcHRpb25zLHRoaXMuY3R4PWUuY3R4LHRoaXMubGVnZW5kSXRlbXM9dm9pZCAwLHRoaXMuY29sdW1uU2l6ZXM9dm9pZCAwLHRoaXMubGluZVdpZHRocz12b2lkIDAsdGhpcy5tYXhIZWlnaHQ9dm9pZCAwLHRoaXMubWF4V2lkdGg9dm9pZCAwLHRoaXMudG9wPXZvaWQgMCx0aGlzLmJvdHRvbT12b2lkIDAsdGhpcy5sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5fbWFyZ2lucz12b2lkIDAsdGhpcy5wb3NpdGlvbj12b2lkIDAsdGhpcy53ZWlnaHQ9dm9pZCAwLHRoaXMuZnVsbFNpemU9dm9pZCAwfXVwZGF0ZShlLHQsbil7dGhpcy5tYXhXaWR0aD1lLHRoaXMubWF4SGVpZ2h0PXQsdGhpcy5fbWFyZ2lucz1uLHRoaXMuc2V0RGltZW5zaW9ucygpLHRoaXMuYnVpbGRMYWJlbHMoKSx0aGlzLmZpdCgpfXNldERpbWVuc2lvbnMoKXt0aGlzLmlzSG9yaXpvbnRhbCgpPyh0aGlzLndpZHRoPXRoaXMubWF4V2lkdGgsdGhpcy5sZWZ0PXRoaXMuX21hcmdpbnMubGVmdCx0aGlzLnJpZ2h0PXRoaXMud2lkdGgpOih0aGlzLmhlaWdodD10aGlzLm1heEhlaWdodCx0aGlzLnRvcD10aGlzLl9tYXJnaW5zLnRvcCx0aGlzLmJvdHRvbT10aGlzLmhlaWdodCl9YnVpbGRMYWJlbHMoKXtsZXQgZT10aGlzLm9wdGlvbnMubGFiZWxzfHx7fSx0PUkoZS5nZW5lcmF0ZUxhYmVscyxbdGhpcy5jaGFydF0sdGhpcyl8fFtdO2UuZmlsdGVyJiYodD10LmZpbHRlcih0PT5lLmZpbHRlcih0LHRoaXMuY2hhcnQuZGF0YSkpKSxlLnNvcnQmJih0PXQuc29ydCgodCxuKT0+ZS5zb3J0KHQsbix0aGlzLmNoYXJ0LmRhdGEpKSksdGhpcy5vcHRpb25zLnJldmVyc2UmJnQucmV2ZXJzZSgpLHRoaXMubGVnZW5kSXRlbXM9dH1maXQoKXtsZXR7b3B0aW9uczplLGN0eDp0fT10aGlzO2lmKCFlLmRpc3BsYXkpe3RoaXMud2lkdGg9dGhpcy5oZWlnaHQ9MDtyZXR1cm59bGV0IG49ZS5sYWJlbHMscj1xKG4uZm9udCksaT1yLnNpemUsYT10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSx7Ym94V2lkdGg6byxpdGVtSGVpZ2h0OnN9PVNzKG4saSksYyxsO3QuZm9udD1yLnN0cmluZyx0aGlzLmlzSG9yaXpvbnRhbCgpPyhjPXRoaXMubWF4V2lkdGgsbD10aGlzLl9maXRSb3dzKGEsaSxvLHMpKzEwKToobD10aGlzLm1heEhlaWdodCxjPXRoaXMuX2ZpdENvbHMoYSxyLG8scykrMTApLHRoaXMud2lkdGg9TWF0aC5taW4oYyxlLm1heFdpZHRofHx0aGlzLm1heFdpZHRoKSx0aGlzLmhlaWdodD1NYXRoLm1pbihsLGUubWF4SGVpZ2h0fHx0aGlzLm1heEhlaWdodCl9X2ZpdFJvd3MoZSx0LG4scil7bGV0e2N0eDppLG1heFdpZHRoOmEsb3B0aW9uczp7bGFiZWxzOntwYWRkaW5nOm99fX09dGhpcyxzPXRoaXMubGVnZW5kSGl0Qm94ZXM9W10sYz10aGlzLmxpbmVXaWR0aHM9WzBdLGw9citvLHU9ZTtpLnRleHRBbGlnbj1gbGVmdGAsaS50ZXh0QmFzZWxpbmU9YG1pZGRsZWA7bGV0IGQ9LTEsZj0tbDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLHApPT57bGV0IG09bit0LzIraS5tZWFzdXJlVGV4dChlLnRleHQpLndpZHRoOyhwPT09MHx8Y1tjLmxlbmd0aC0xXSttKzIqbz5hKSYmKHUrPWwsY1tjLmxlbmd0aC0ocD4wPzA6MSldPTAsZis9bCxkKyspLHNbcF09e2xlZnQ6MCx0b3A6Zixyb3c6ZCx3aWR0aDptLGhlaWdodDpyfSxjW2MubGVuZ3RoLTFdKz1tK299KSx1fV9maXRDb2xzKGUsdCxuLHIpe2xldHtjdHg6aSxtYXhIZWlnaHQ6YSxvcHRpb25zOntsYWJlbHM6e3BhZGRpbmc6b319fT10aGlzLHM9dGhpcy5sZWdlbmRIaXRCb3hlcz1bXSxjPXRoaXMuY29sdW1uU2l6ZXM9W10sbD1hLWUsdT1vLGQ9MCxmPTAscD0wLG09MDtyZXR1cm4gdGhpcy5sZWdlbmRJdGVtcy5mb3JFYWNoKChlLGEpPT57bGV0e2l0ZW1XaWR0aDpoLGl0ZW1IZWlnaHQ6Z309VHMobix0LGksZSxyKTthPjAmJmYrZysyKm8+bCYmKHUrPWQrbyxjLnB1c2goe3dpZHRoOmQsaGVpZ2h0OmZ9KSxwKz1kK28sbSsrLGQ9Zj0wKSxzW2FdPXtsZWZ0OnAsdG9wOmYsY29sOm0sd2lkdGg6aCxoZWlnaHQ6Z30sZD1NYXRoLm1heChkLGgpLGYrPWcrb30pLHUrPWQsYy5wdXNoKHt3aWR0aDpkLGhlaWdodDpmfSksdX1hZGp1c3RIaXRCb3hlcygpe2lmKCF0aGlzLm9wdGlvbnMuZGlzcGxheSlyZXR1cm47bGV0IGU9dGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCkse2xlZ2VuZEhpdEJveGVzOnQsb3B0aW9uczp7YWxpZ246bixsYWJlbHM6e3BhZGRpbmc6cn0scnRsOml9fT10aGlzLGE9TXIoaSx0aGlzLmxlZnQsdGhpcy53aWR0aCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7bGV0IGk9MCxvPVUobix0aGlzLmxlZnQrcix0aGlzLnJpZ2h0LXRoaXMubGluZVdpZHRoc1tpXSk7Zm9yKGxldCBzIG9mIHQpaSE9PXMucm93JiYoaT1zLnJvdyxvPVUobix0aGlzLmxlZnQrcix0aGlzLnJpZ2h0LXRoaXMubGluZVdpZHRoc1tpXSkpLHMudG9wKz10aGlzLnRvcCtlK3Iscy5sZWZ0PWEubGVmdEZvckx0cihhLngobykscy53aWR0aCksbys9cy53aWR0aCtyfWVsc2V7bGV0IGk9MCxvPVUobix0aGlzLnRvcCtlK3IsdGhpcy5ib3R0b20tdGhpcy5jb2x1bW5TaXplc1tpXS5oZWlnaHQpO2ZvcihsZXQgcyBvZiB0KXMuY29sIT09aSYmKGk9cy5jb2wsbz1VKG4sdGhpcy50b3ArZStyLHRoaXMuYm90dG9tLXRoaXMuY29sdW1uU2l6ZXNbaV0uaGVpZ2h0KSkscy50b3A9byxzLmxlZnQrPXRoaXMubGVmdCtyLHMubGVmdD1hLmxlZnRGb3JMdHIoYS54KHMubGVmdCkscy53aWR0aCksbys9cy5oZWlnaHQrcn19aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbj09PWB0b3BgfHx0aGlzLm9wdGlvbnMucG9zaXRpb249PT1gYm90dG9tYH1kcmF3KCl7aWYodGhpcy5vcHRpb25zLmRpc3BsYXkpe2xldCBlPXRoaXMuY3R4O19uKGUsdGhpcyksdGhpcy5fZHJhdygpLHZuKGUpfX1fZHJhdygpe2xldHtvcHRpb25zOmUsY29sdW1uU2l6ZXM6dCxsaW5lV2lkdGhzOm4sY3R4OnJ9PXRoaXMse2FsaWduOmksbGFiZWxzOmF9PWUsbz1XLmNvbG9yLHM9TXIoZS5ydGwsdGhpcy5sZWZ0LHRoaXMud2lkdGgpLGM9cShhLmZvbnQpLHtwYWRkaW5nOmx9PWEsdT1jLnNpemUsZD11LzIsZjt0aGlzLmRyYXdUaXRsZSgpLHIudGV4dEFsaWduPXMudGV4dEFsaWduKGBsZWZ0YCksci50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsci5saW5lV2lkdGg9LjUsci5mb250PWMuc3RyaW5nO2xldHtib3hXaWR0aDpwLGJveEhlaWdodDptLGl0ZW1IZWlnaHQ6aH09U3MoYSx1KSxnPWZ1bmN0aW9uKGUsdCxuKXtpZihpc05hTihwKXx8cDw9MHx8aXNOYU4obSl8fG08MClyZXR1cm47ci5zYXZlKCk7bGV0IGk9RihuLmxpbmVXaWR0aCwxKTtpZihyLmZpbGxTdHlsZT1GKG4uZmlsbFN0eWxlLG8pLHIubGluZUNhcD1GKG4ubGluZUNhcCxgYnV0dGApLHIubGluZURhc2hPZmZzZXQ9RihuLmxpbmVEYXNoT2Zmc2V0LDApLHIubGluZUpvaW49RihuLmxpbmVKb2luLGBtaXRlcmApLHIubGluZVdpZHRoPWksci5zdHJva2VTdHlsZT1GKG4uc3Ryb2tlU3R5bGUsbyksci5zZXRMaW5lRGFzaChGKG4ubGluZURhc2gsW10pKSxhLnVzZVBvaW50U3R5bGUpe2xldCBvPXtyYWRpdXM6bSpNYXRoLlNRUlQyLzIscG9pbnRTdHlsZTpuLnBvaW50U3R5bGUscm90YXRpb246bi5yb3RhdGlvbixib3JkZXJXaWR0aDppfSxjPXMueFBsdXMoZSxwLzIpLGw9dCtkO2duKHIsbyxjLGwsYS5wb2ludFN0eWxlV2lkdGgmJnApfWVsc2V7bGV0IGE9dCtNYXRoLm1heCgodS1tKS8yLDApLG89cy5sZWZ0Rm9yTHRyKGUscCksYz1NbihuLmJvcmRlclJhZGl1cyk7ci5iZWdpblBhdGgoKSxPYmplY3QudmFsdWVzKGMpLnNvbWUoZT0+ZSE9PTApP1RuKHIse3g6byx5OmEsdzpwLGg6bSxyYWRpdXM6Y30pOnIucmVjdChvLGEscCxtKSxyLmZpbGwoKSxpIT09MCYmci5zdHJva2UoKX1yLnJlc3RvcmUoKX0sXz1mdW5jdGlvbihlLHQsbil7d24ocixuLnRleHQsZSx0K2gvMixjLHtzdHJpa2V0aHJvdWdoOm4uaGlkZGVuLHRleHRBbGlnbjpzLnRleHRBbGlnbihuLnRleHRBbGlnbil9KX0sdj10aGlzLmlzSG9yaXpvbnRhbCgpLHk9dGhpcy5fY29tcHV0ZVRpdGxlSGVpZ2h0KCk7Zj12P3t4OlUoaSx0aGlzLmxlZnQrbCx0aGlzLnJpZ2h0LW5bMF0pLHk6dGhpcy50b3ArbCt5LGxpbmU6MH06e3g6dGhpcy5sZWZ0K2wseTpVKGksdGhpcy50b3AreStsLHRoaXMuYm90dG9tLXRbMF0uaGVpZ2h0KSxsaW5lOjB9LE5yKHRoaXMuY3R4LGUudGV4dERpcmVjdGlvbik7bGV0IGI9aCtsO3RoaXMubGVnZW5kSXRlbXMuZm9yRWFjaCgobyx1KT0+e3Iuc3Ryb2tlU3R5bGU9by5mb250Q29sb3Isci5maWxsU3R5bGU9by5mb250Q29sb3I7bGV0IG09ci5tZWFzdXJlVGV4dChvLnRleHQpLndpZHRoLGg9cy50ZXh0QWxpZ24oby50ZXh0QWxpZ258fD1hLnRleHRBbGlnbikseD1wK2QrbSxTPWYueCxDPWYueTtzLnNldFdpZHRoKHRoaXMud2lkdGgpLHY/dT4wJiZTK3grbD50aGlzLnJpZ2h0JiYoQz1mLnkrPWIsZi5saW5lKyssUz1mLng9VShpLHRoaXMubGVmdCtsLHRoaXMucmlnaHQtbltmLmxpbmVdKSk6dT4wJiZDK2I+dGhpcy5ib3R0b20mJihTPWYueD1TK3RbZi5saW5lXS53aWR0aCtsLGYubGluZSsrLEM9Zi55PVUoaSx0aGlzLnRvcCt5K2wsdGhpcy5ib3R0b20tdFtmLmxpbmVdLmhlaWdodCkpO2xldCB3PXMueChTKTtpZihnKHcsQyxvKSxTPVJ0KGgsUytwK2Qsdj9TK3g6dGhpcy5yaWdodCxlLnJ0bCksXyhzLngoUyksQyxvKSx2KWYueCs9eCtsO2Vsc2UgaWYodHlwZW9mIG8udGV4dCE9YHN0cmluZ2Ape2xldCBlPWMubGluZUhlaWdodDtmLnkrPU9zKG8sZSkrbH1lbHNlIGYueSs9Yn0pLFByKHRoaXMuY3R4LGUudGV4dERpcmVjdGlvbil9ZHJhd1RpdGxlKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aXRsZSxuPXEodC5mb250KSxyPUsodC5wYWRkaW5nKTtpZighdC5kaXNwbGF5KXJldHVybjtsZXQgaT1NcihlLnJ0bCx0aGlzLmxlZnQsdGhpcy53aWR0aCksYT10aGlzLmN0eCxvPXQucG9zaXRpb24scz1uLnNpemUvMixjPXIudG9wK3MsbCx1PXRoaXMubGVmdCxkPXRoaXMud2lkdGg7aWYodGhpcy5pc0hvcml6b250YWwoKSlkPU1hdGgubWF4KC4uLnRoaXMubGluZVdpZHRocyksbD10aGlzLnRvcCtjLHU9VShlLmFsaWduLHUsdGhpcy5yaWdodC1kKTtlbHNle2xldCB0PXRoaXMuY29sdW1uU2l6ZXMucmVkdWNlKChlLHQpPT5NYXRoLm1heChlLHQuaGVpZ2h0KSwwKTtsPWMrVShlLmFsaWduLHRoaXMudG9wLHRoaXMuYm90dG9tLXQtZS5sYWJlbHMucGFkZGluZy10aGlzLl9jb21wdXRlVGl0bGVIZWlnaHQoKSl9bGV0IGY9VShvLHUsdStkKTthLnRleHRBbGlnbj1pLnRleHRBbGlnbihMdChvKSksYS50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYS5zdHJva2VTdHlsZT10LmNvbG9yLGEuZmlsbFN0eWxlPXQuY29sb3IsYS5mb250PW4uc3RyaW5nLHduKGEsdC50ZXh0LGYsbCxuKX1fY29tcHV0ZVRpdGxlSGVpZ2h0KCl7bGV0IGU9dGhpcy5vcHRpb25zLnRpdGxlLHQ9cShlLmZvbnQpLG49SyhlLnBhZGRpbmcpO3JldHVybiBlLmRpc3BsYXk/dC5saW5lSGVpZ2h0K24uaGVpZ2h0OjB9X2dldExlZ2VuZEl0ZW1BdChlLHQpe2xldCBuLHIsaTtpZihUdChlLHRoaXMubGVmdCx0aGlzLnJpZ2h0KSYmVHQodCx0aGlzLnRvcCx0aGlzLmJvdHRvbSkpe2ZvcihpPXRoaXMubGVnZW5kSGl0Qm94ZXMsbj0wO248aS5sZW5ndGg7KytuKWlmKHI9aVtuXSxUdChlLHIubGVmdCxyLmxlZnQrci53aWR0aCkmJlR0KHQsci50b3Asci50b3Arci5oZWlnaHQpKXJldHVybiB0aGlzLmxlZ2VuZEl0ZW1zW25dfXJldHVybiBudWxsfWhhbmRsZUV2ZW50KGUpe2xldCB0PXRoaXMub3B0aW9ucztpZigha3MoZS50eXBlLHQpKXJldHVybjtsZXQgbj10aGlzLl9nZXRMZWdlbmRJdGVtQXQoZS54LGUueSk7aWYoZS50eXBlPT09YG1vdXNlbW92ZWB8fGUudHlwZT09PWBtb3VzZW91dGApe2xldCByPXRoaXMuX2hvdmVyZWRJdGVtLGk9Q3MocixuKTtyJiYhaSYmSSh0Lm9uTGVhdmUsW2Uscix0aGlzXSx0aGlzKSx0aGlzLl9ob3ZlcmVkSXRlbT1uLG4mJiFpJiZJKHQub25Ib3ZlcixbZSxuLHRoaXNdLHRoaXMpfWVsc2UgbiYmSSh0Lm9uQ2xpY2ssW2Usbix0aGlzXSx0aGlzKX19O2Z1bmN0aW9uIFRzKGUsdCxuLHIsaSl7cmV0dXJue2l0ZW1XaWR0aDpFcyhyLGUsdCxuKSxpdGVtSGVpZ2h0OkRzKGkscix0LmxpbmVIZWlnaHQpfX1mdW5jdGlvbiBFcyhlLHQsbixyKXtsZXQgaT1lLnRleHQ7cmV0dXJuIGkmJnR5cGVvZiBpIT1gc3RyaW5nYCYmKGk9aS5yZWR1Y2UoKGUsdCk9PmUubGVuZ3RoPnQubGVuZ3RoP2U6dCkpLHQrbi5zaXplLzIrci5tZWFzdXJlVGV4dChpKS53aWR0aH1mdW5jdGlvbiBEcyhlLHQsbil7bGV0IHI9ZTtyZXR1cm4gdHlwZW9mIHQudGV4dCE9YHN0cmluZ2AmJihyPU9zKHQsbikpLHJ9ZnVuY3Rpb24gT3MoZSx0KXtyZXR1cm4gdCooZS50ZXh0P2UudGV4dC5sZW5ndGg6MCl9ZnVuY3Rpb24ga3MoZSx0KXtyZXR1cm4hISgoZT09PWBtb3VzZW1vdmVgfHxlPT09YG1vdXNlb3V0YCkmJih0Lm9uSG92ZXJ8fHQub25MZWF2ZSl8fHQub25DbGljayYmKGU9PT1gY2xpY2tgfHxlPT09YG1vdXNldXBgKSl9dmFyIEFzPXtpZDpgbGVnZW5kYCxfZWxlbWVudDp3cyxzdGFydChlLHQsbil7bGV0IHI9ZS5sZWdlbmQ9bmV3IHdzKHtjdHg6ZS5jdHgsb3B0aW9uczpuLGNoYXJ0OmV9KTtYaS5jb25maWd1cmUoZSxyLG4pLFhpLmFkZEJveChlLHIpfSxzdG9wKGUpe1hpLnJlbW92ZUJveChlLGUubGVnZW5kKSxkZWxldGUgZS5sZWdlbmR9LGJlZm9yZVVwZGF0ZShlLHQsbil7bGV0IHI9ZS5sZWdlbmQ7WGkuY29uZmlndXJlKGUscixuKSxyLm9wdGlvbnM9bn0sYWZ0ZXJVcGRhdGUoZSl7bGV0IHQ9ZS5sZWdlbmQ7dC5idWlsZExhYmVscygpLHQuYWRqdXN0SGl0Qm94ZXMoKX0sYWZ0ZXJFdmVudChlLHQpe3QucmVwbGF5fHxlLmxlZ2VuZC5oYW5kbGVFdmVudCh0LmV2ZW50KX0sZGVmYXVsdHM6e2Rpc3BsYXk6ITAscG9zaXRpb246YHRvcGAsYWxpZ246YGNlbnRlcmAsZnVsbFNpemU6ITAscmV2ZXJzZTohMSx3ZWlnaHQ6MWUzLG9uQ2xpY2soZSx0LG4pe2xldCByPXQuZGF0YXNldEluZGV4LGk9bi5jaGFydDtpLmlzRGF0YXNldFZpc2libGUocik/KGkuaGlkZShyKSx0LmhpZGRlbj0hMCk6KGkuc2hvdyhyKSx0LmhpZGRlbj0hMSl9LG9uSG92ZXI6bnVsbCxvbkxlYXZlOm51bGwsbGFiZWxzOntjb2xvcjplPT5lLmNoYXJ0Lm9wdGlvbnMuY29sb3IsYm94V2lkdGg6NDAscGFkZGluZzoxMCxnZW5lcmF0ZUxhYmVscyhlKXtsZXQgdD1lLmRhdGEuZGF0YXNldHMse2xhYmVsczp7dXNlUG9pbnRTdHlsZTpuLHBvaW50U3R5bGU6cix0ZXh0QWxpZ246aSxjb2xvcjphLHVzZUJvcmRlclJhZGl1czpvLGJvcmRlclJhZGl1czpzfX09ZS5sZWdlbmQub3B0aW9ucztyZXR1cm4gZS5fZ2V0U29ydGVkRGF0YXNldE1ldGFzKCkubWFwKGU9PntsZXQgYz1lLmNvbnRyb2xsZXIuZ2V0U3R5bGUobj8wOnZvaWQgMCksbD1LKGMuYm9yZGVyV2lkdGgpO3JldHVybnt0ZXh0OnRbZS5pbmRleF0ubGFiZWwsZmlsbFN0eWxlOmMuYmFja2dyb3VuZENvbG9yLGZvbnRDb2xvcjphLGhpZGRlbjohZS52aXNpYmxlLGxpbmVDYXA6Yy5ib3JkZXJDYXBTdHlsZSxsaW5lRGFzaDpjLmJvcmRlckRhc2gsbGluZURhc2hPZmZzZXQ6Yy5ib3JkZXJEYXNoT2Zmc2V0LGxpbmVKb2luOmMuYm9yZGVySm9pblN0eWxlLGxpbmVXaWR0aDoobC53aWR0aCtsLmhlaWdodCkvNCxzdHJva2VTdHlsZTpjLmJvcmRlckNvbG9yLHBvaW50U3R5bGU6cnx8Yy5wb2ludFN0eWxlLHJvdGF0aW9uOmMucm90YXRpb24sdGV4dEFsaWduOml8fGMudGV4dEFsaWduLGJvcmRlclJhZGl1czpvJiYoc3x8Yy5ib3JkZXJSYWRpdXMpLGRhdGFzZXRJbmRleDplLmluZGV4fX0sdGhpcyl9fSx0aXRsZTp7Y29sb3I6ZT0+ZS5jaGFydC5vcHRpb25zLmNvbG9yLGRpc3BsYXk6ITEscG9zaXRpb246YGNlbnRlcmAsdGV4dDpgYH19LGRlc2NyaXB0b3JzOntfc2NyaXB0YWJsZTplPT4hZS5zdGFydHNXaXRoKGBvbmApLGxhYmVsczp7X3NjcmlwdGFibGU6ZT0+IVtgZ2VuZXJhdGVMYWJlbHNgLGBmaWx0ZXJgLGBzb3J0YF0uaW5jbHVkZXMoZSl9fX0sanM9e2F2ZXJhZ2UoZSl7aWYoIWUubGVuZ3RoKXJldHVybiExO2xldCB0LG4scj1uZXcgU2V0LGk9MCxhPTA7Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpe2xldCBuPWVbdF0uZWxlbWVudDtpZihuJiZuLmhhc1ZhbHVlKCkpe2xldCBlPW4udG9vbHRpcFBvc2l0aW9uKCk7ci5hZGQoZS54KSxpKz1lLnksKythfX1yZXR1cm4gYT09PTB8fHIuc2l6ZT09PTA/ITE6e3g6Wy4uLnJdLnJlZHVjZSgoZSx0KT0+ZSt0KS9yLnNpemUseTppL2F9fSxuZWFyZXN0KGUsdCl7aWYoIWUubGVuZ3RoKXJldHVybiExO2xldCBuPXQueCxyPXQueSxpPTEvMCxhLG8scztmb3IoYT0wLG89ZS5sZW5ndGg7YTxvOysrYSl7bGV0IG49ZVthXS5lbGVtZW50O2lmKG4mJm4uaGFzVmFsdWUoKSl7bGV0IGU9eHQodCxuLmdldENlbnRlclBvaW50KCkpO2U8aSYmKGk9ZSxzPW4pfX1pZihzKXtsZXQgZT1zLnRvb2x0aXBQb3NpdGlvbigpO249ZS54LHI9ZS55fXJldHVybnt4Om4seTpyfX19O2Z1bmN0aW9uIFgoZSx0KXtyZXR1cm4gdCYmKGoodCk/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZSx0KTplLnB1c2godCkpLGV9ZnVuY3Rpb24gWihlKXtyZXR1cm4odHlwZW9mIGU9PWBzdHJpbmdgfHxlIGluc3RhbmNlb2YgU3RyaW5nKSYmZS5pbmRleE9mKGAKYCk+LTE/ZS5zcGxpdChgCmApOmV9ZnVuY3Rpb24gTXMoZSx0KXtsZXR7ZWxlbWVudDpuLGRhdGFzZXRJbmRleDpyLGluZGV4Oml9PXQsYT1lLmdldERhdGFzZXRNZXRhKHIpLmNvbnRyb2xsZXIse2xhYmVsOm8sdmFsdWU6c309YS5nZXRMYWJlbEFuZFZhbHVlKGkpO3JldHVybntjaGFydDplLGxhYmVsOm8scGFyc2VkOmEuZ2V0UGFyc2VkKGkpLHJhdzplLmRhdGEuZGF0YXNldHNbcl0uZGF0YVtpXSxmb3JtYXR0ZWRWYWx1ZTpzLGRhdGFzZXQ6YS5nZXREYXRhc2V0KCksZGF0YUluZGV4OmksZGF0YXNldEluZGV4OnIsZWxlbWVudDpufX1mdW5jdGlvbiBOcyhlLHQpe2xldCBuPWUuY2hhcnQuY3R4LHtib2R5OnIsZm9vdGVyOmksdGl0bGU6YX09ZSx7Ym94V2lkdGg6byxib3hIZWlnaHQ6c309dCxjPXEodC5ib2R5Rm9udCksbD1xKHQudGl0bGVGb250KSx1PXEodC5mb290ZXJGb250KSxkPWEubGVuZ3RoLGY9aS5sZW5ndGgscD1yLmxlbmd0aCxtPUsodC5wYWRkaW5nKSxoPW0uaGVpZ2h0LGc9MCxfPXIucmVkdWNlKChlLHQpPT5lK3QuYmVmb3JlLmxlbmd0aCt0LmxpbmVzLmxlbmd0aCt0LmFmdGVyLmxlbmd0aCwwKTtpZihfKz1lLmJlZm9yZUJvZHkubGVuZ3RoK2UuYWZ0ZXJCb2R5Lmxlbmd0aCxkJiYoaCs9ZCpsLmxpbmVIZWlnaHQrKGQtMSkqdC50aXRsZVNwYWNpbmcrdC50aXRsZU1hcmdpbkJvdHRvbSksXyl7bGV0IGU9dC5kaXNwbGF5Q29sb3JzP01hdGgubWF4KHMsYy5saW5lSGVpZ2h0KTpjLmxpbmVIZWlnaHQ7aCs9cCplKyhfLXApKmMubGluZUhlaWdodCsoXy0xKSp0LmJvZHlTcGFjaW5nfWYmJihoKz10LmZvb3Rlck1hcmdpblRvcCtmKnUubGluZUhlaWdodCsoZi0xKSp0LmZvb3RlclNwYWNpbmcpO2xldCB2PTAseT1mdW5jdGlvbihlKXtnPU1hdGgubWF4KGcsbi5tZWFzdXJlVGV4dChlKS53aWR0aCt2KX07cmV0dXJuIG4uc2F2ZSgpLG4uZm9udD1sLnN0cmluZyxMKGUudGl0bGUseSksbi5mb250PWMuc3RyaW5nLEwoZS5iZWZvcmVCb2R5LmNvbmNhdChlLmFmdGVyQm9keSkseSksdj10LmRpc3BsYXlDb2xvcnM/bysyK3QuYm94UGFkZGluZzowLEwocixlPT57TChlLmJlZm9yZSx5KSxMKGUubGluZXMseSksTChlLmFmdGVyLHkpfSksdj0wLG4uZm9udD11LnN0cmluZyxMKGUuZm9vdGVyLHkpLG4ucmVzdG9yZSgpLGcrPW0ud2lkdGgse3dpZHRoOmcsaGVpZ2h0Omh9fWZ1bmN0aW9uIFBzKGUsdCl7bGV0e3k6bixoZWlnaHQ6cn09dDtyZXR1cm4gbjxyLzI/YHRvcGA6bj5lLmhlaWdodC1yLzI/YGJvdHRvbWA6YGNlbnRlcmB9ZnVuY3Rpb24gRnMoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1yLG89bi5jYXJldFNpemUrbi5jYXJldFBhZGRpbmc7aWYoZT09PWBsZWZ0YCYmaSthK28+dC53aWR0aHx8ZT09PWByaWdodGAmJmktYS1vPDApcmV0dXJuITB9ZnVuY3Rpb24gSXMoZSx0LG4scil7bGV0e3g6aSx3aWR0aDphfT1uLHt3aWR0aDpvLGNoYXJ0QXJlYTp7bGVmdDpzLHJpZ2h0OmN9fT1lLGw9YGNlbnRlcmA7cmV0dXJuIHI9PT1gY2VudGVyYD9sPWk8PShzK2MpLzI/YGxlZnRgOmByaWdodGA6aTw9YS8yP2w9YGxlZnRgOmk+PW8tYS8yJiYobD1gcmlnaHRgKSxGcyhsLGUsdCxuKSYmKGw9YGNlbnRlcmApLGx9ZnVuY3Rpb24gTHMoZSx0LG4pe2xldCByPW4ueUFsaWdufHx0LnlBbGlnbnx8UHMoZSxuKTtyZXR1cm57eEFsaWduOm4ueEFsaWdufHx0LnhBbGlnbnx8SXMoZSx0LG4scikseUFsaWduOnJ9fWZ1bmN0aW9uIFJzKGUsdCl7bGV0e3g6bix3aWR0aDpyfT1lO3JldHVybiB0PT09YHJpZ2h0YD9uLT1yOnQ9PT1gY2VudGVyYCYmKG4tPXIvMiksbn1mdW5jdGlvbiB6cyhlLHQsbil7bGV0e3k6cixoZWlnaHQ6aX09ZTtyZXR1cm4gdD09PWB0b3BgP3IrPW46ci09dD09PWBib3R0b21gP2krbjppLzIscn1mdW5jdGlvbiBCcyhlLHQsbixyKXtsZXR7Y2FyZXRTaXplOmksY2FyZXRQYWRkaW5nOmEsY29ybmVyUmFkaXVzOm99PWUse3hBbGlnbjpzLHlBbGlnbjpjfT1uLGw9aSthLHt0b3BMZWZ0OnUsdG9wUmlnaHQ6ZCxib3R0b21MZWZ0OmYsYm90dG9tUmlnaHQ6cH09TW4obyksbT1Scyh0LHMpLGg9enModCxjLGwpO3JldHVybiBjPT09YGNlbnRlcmA/cz09PWBsZWZ0YD9tKz1sOnM9PT1gcmlnaHRgJiYobS09bCk6cz09PWBsZWZ0YD9tLT1NYXRoLm1heCh1LGYpK2k6cz09PWByaWdodGAmJihtKz1NYXRoLm1heChkLHApK2kpLHt4OkgobSwwLHIud2lkdGgtdC53aWR0aCkseTpIKGgsMCxyLmhlaWdodC10LmhlaWdodCl9fWZ1bmN0aW9uIFZzKGUsdCxuKXtsZXQgcj1LKG4ucGFkZGluZyk7cmV0dXJuIHQ9PT1gY2VudGVyYD9lLngrZS53aWR0aC8yOnQ9PT1gcmlnaHRgP2UueCtlLndpZHRoLXIucmlnaHQ6ZS54K3IubGVmdH1mdW5jdGlvbiBIcyhlKXtyZXR1cm4gWChbXSxaKGUpKX1mdW5jdGlvbiBVcyhlLHQsbil7cmV0dXJuIEZuKGUse3Rvb2x0aXA6dCx0b29sdGlwSXRlbXM6bix0eXBlOmB0b29sdGlwYH0pfWZ1bmN0aW9uIFdzKGUsdCl7bGV0IG49dCYmdC5kYXRhc2V0JiZ0LmRhdGFzZXQudG9vbHRpcCYmdC5kYXRhc2V0LnRvb2x0aXAuY2FsbGJhY2tzO3JldHVybiBuP2Uub3ZlcnJpZGUobik6ZX12YXIgR3M9e2JlZm9yZVRpdGxlOmssdGl0bGUoZSl7aWYoZS5sZW5ndGg+MCl7bGV0IHQ9ZVswXSxuPXQuY2hhcnQuZGF0YS5sYWJlbHMscj1uP24ubGVuZ3RoOjA7aWYodGhpcyYmdGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubW9kZT09PWBkYXRhc2V0YClyZXR1cm4gdC5kYXRhc2V0LmxhYmVsfHxgYDtpZih0LmxhYmVsKXJldHVybiB0LmxhYmVsO2lmKHI+MCYmdC5kYXRhSW5kZXg8cilyZXR1cm4gblt0LmRhdGFJbmRleF19cmV0dXJuYGB9LGFmdGVyVGl0bGU6ayxiZWZvcmVCb2R5OmssYmVmb3JlTGFiZWw6ayxsYWJlbChlKXtpZih0aGlzJiZ0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5tb2RlPT09YGRhdGFzZXRgKXJldHVybiBlLmxhYmVsK2A6IGArZS5mb3JtYXR0ZWRWYWx1ZXx8ZS5mb3JtYXR0ZWRWYWx1ZTtsZXQgdD1lLmRhdGFzZXQubGFiZWx8fGBgO3QmJih0Kz1gOiBgKTtsZXQgbj1lLmZvcm1hdHRlZFZhbHVlO3JldHVybiBBKG4pfHwodCs9biksdH0sbGFiZWxDb2xvcihlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57Ym9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixiYWNrZ3JvdW5kQ29sb3I6dC5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyV2lkdGg6dC5ib3JkZXJXaWR0aCxib3JkZXJEYXNoOnQuYm9yZGVyRGFzaCxib3JkZXJEYXNoT2Zmc2V0OnQuYm9yZGVyRGFzaE9mZnNldCxib3JkZXJSYWRpdXM6MH19LGxhYmVsVGV4dENvbG9yKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5ib2R5Q29sb3J9LGxhYmVsUG9pbnRTdHlsZShlKXtsZXQgdD1lLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFN0eWxlKGUuZGF0YUluZGV4KTtyZXR1cm57cG9pbnRTdHlsZTp0LnBvaW50U3R5bGUscm90YXRpb246dC5yb3RhdGlvbn19LGFmdGVyTGFiZWw6ayxhZnRlckJvZHk6ayxiZWZvcmVGb290ZXI6ayxmb290ZXI6ayxhZnRlckZvb3RlcjprfTtmdW5jdGlvbiBRKGUsdCxuLHIpe2xldCBpPWVbdF0uY2FsbChuLHIpO3JldHVybiBpPT09dm9pZCAwP0dzW3RdLmNhbGwobixyKTppfXZhciBLcz1jbGFzcyBleHRlbmRzIGJhe3N0YXRpYyBwb3NpdGlvbmVycz1qcztjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3BhY2l0eT0wLHRoaXMuX2FjdGl2ZT1bXSx0aGlzLl9ldmVudFBvc2l0aW9uPXZvaWQgMCx0aGlzLl9zaXplPXZvaWQgMCx0aGlzLl9jYWNoZWRBbmltYXRpb25zPXZvaWQgMCx0aGlzLl90b29sdGlwSXRlbXM9W10sdGhpcy4kYW5pbWF0aW9ucz12b2lkIDAsdGhpcy4kY29udGV4dD12b2lkIDAsdGhpcy5jaGFydD1lLmNoYXJ0LHRoaXMub3B0aW9ucz1lLm9wdGlvbnMsdGhpcy5kYXRhUG9pbnRzPXZvaWQgMCx0aGlzLnRpdGxlPXZvaWQgMCx0aGlzLmJlZm9yZUJvZHk9dm9pZCAwLHRoaXMuYm9keT12b2lkIDAsdGhpcy5hZnRlckJvZHk9dm9pZCAwLHRoaXMuZm9vdGVyPXZvaWQgMCx0aGlzLnhBbGlnbj12b2lkIDAsdGhpcy55QWxpZ249dm9pZCAwLHRoaXMueD12b2lkIDAsdGhpcy55PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5jYXJldFg9dm9pZCAwLHRoaXMuY2FyZXRZPXZvaWQgMCx0aGlzLmxhYmVsQ29sb3JzPXZvaWQgMCx0aGlzLmxhYmVsUG9pbnRTdHlsZXM9dm9pZCAwLHRoaXMubGFiZWxUZXh0Q29sb3JzPXZvaWQgMH1pbml0aWFsaXplKGUpe3RoaXMub3B0aW9ucz1lLHRoaXMuX2NhY2hlZEFuaW1hdGlvbnM9dm9pZCAwLHRoaXMuJGNvbnRleHQ9dm9pZCAwfV9yZXNvbHZlQW5pbWF0aW9ucygpe2xldCBlPXRoaXMuX2NhY2hlZEFuaW1hdGlvbnM7aWYoZSlyZXR1cm4gZTtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLHI9bi5lbmFibGVkJiZ0Lm9wdGlvbnMuYW5pbWF0aW9uJiZuLmFuaW1hdGlvbnMsaT1uZXcgJHIodGhpcy5jaGFydCxyKTtyZXR1cm4gci5fY2FjaGVhYmxlJiYodGhpcy5fY2FjaGVkQW5pbWF0aW9ucz1PYmplY3QuZnJlZXplKGkpKSxpfWdldENvbnRleHQoKXtyZXR1cm4gdGhpcy4kY29udGV4dHx8PVVzKHRoaXMuY2hhcnQuZ2V0Q29udGV4dCgpLHRoaXMsdGhpcy5fdG9vbHRpcEl0ZW1zKX1nZXRUaXRsZShlLHQpe2xldHtjYWxsYmFja3M6bn09dCxyPVEobixgYmVmb3JlVGl0bGVgLHRoaXMsZSksaT1RKG4sYHRpdGxlYCx0aGlzLGUpLGE9UShuLGBhZnRlclRpdGxlYCx0aGlzLGUpLG89W107cmV0dXJuIG89WChvLFoocikpLG89WChvLFooaSkpLG89WChvLFooYSkpLG99Z2V0QmVmb3JlQm9keShlLHQpe3JldHVybiBIcyhRKHQuY2FsbGJhY2tzLGBiZWZvcmVCb2R5YCx0aGlzLGUpKX1nZXRCb2R5KGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9W107cmV0dXJuIEwoZSxlPT57bGV0IHQ9e2JlZm9yZTpbXSxsaW5lczpbXSxhZnRlcjpbXX0saT1XcyhuLGUpO1godC5iZWZvcmUsWihRKGksYGJlZm9yZUxhYmVsYCx0aGlzLGUpKSksWCh0LmxpbmVzLFEoaSxgbGFiZWxgLHRoaXMsZSkpLFgodC5hZnRlcixaKFEoaSxgYWZ0ZXJMYWJlbGAsdGhpcyxlKSkpLHIucHVzaCh0KX0pLHJ9Z2V0QWZ0ZXJCb2R5KGUsdCl7cmV0dXJuIEhzKFEodC5jYWxsYmFja3MsYGFmdGVyQm9keWAsdGhpcyxlKSl9Z2V0Rm9vdGVyKGUsdCl7bGV0e2NhbGxiYWNrczpufT10LHI9UShuLGBiZWZvcmVGb290ZXJgLHRoaXMsZSksaT1RKG4sYGZvb3RlcmAsdGhpcyxlKSxhPVEobixgYWZ0ZXJGb290ZXJgLHRoaXMsZSksbz1bXTtyZXR1cm4gbz1YKG8sWihyKSksbz1YKG8sWihpKSksbz1YKG8sWihhKSksb31fY3JlYXRlSXRlbXMoZSl7bGV0IHQ9dGhpcy5fYWN0aXZlLG49dGhpcy5jaGFydC5kYXRhLHI9W10saT1bXSxhPVtdLG89W10scyxjO2ZvcihzPTAsYz10Lmxlbmd0aDtzPGM7KytzKW8ucHVzaChNcyh0aGlzLmNoYXJ0LHRbc10pKTtyZXR1cm4gZS5maWx0ZXImJihvPW8uZmlsdGVyKCh0LHIsaSk9PmUuZmlsdGVyKHQscixpLG4pKSksZS5pdGVtU29ydCYmKG89by5zb3J0KCh0LHIpPT5lLml0ZW1Tb3J0KHQscixuKSkpLEwobyx0PT57bGV0IG49V3MoZS5jYWxsYmFja3MsdCk7ci5wdXNoKFEobixgbGFiZWxDb2xvcmAsdGhpcyx0KSksaS5wdXNoKFEobixgbGFiZWxQb2ludFN0eWxlYCx0aGlzLHQpKSxhLnB1c2goUShuLGBsYWJlbFRleHRDb2xvcmAsdGhpcyx0KSl9KSx0aGlzLmxhYmVsQ29sb3JzPXIsdGhpcy5sYWJlbFBvaW50U3R5bGVzPWksdGhpcy5sYWJlbFRleHRDb2xvcnM9YSx0aGlzLmRhdGFQb2ludHM9byxvfXVwZGF0ZShlLHQpe2xldCBuPXRoaXMub3B0aW9ucy5zZXRDb250ZXh0KHRoaXMuZ2V0Q29udGV4dCgpKSxyPXRoaXMuX2FjdGl2ZSxpLGE9W107aWYoIXIubGVuZ3RoKXRoaXMub3BhY2l0eSE9PTAmJihpPXtvcGFjaXR5OjB9KTtlbHNle2xldCBlPWpzW24ucG9zaXRpb25dLmNhbGwodGhpcyxyLHRoaXMuX2V2ZW50UG9zaXRpb24pO2E9dGhpcy5fY3JlYXRlSXRlbXMobiksdGhpcy50aXRsZT10aGlzLmdldFRpdGxlKGEsbiksdGhpcy5iZWZvcmVCb2R5PXRoaXMuZ2V0QmVmb3JlQm9keShhLG4pLHRoaXMuYm9keT10aGlzLmdldEJvZHkoYSxuKSx0aGlzLmFmdGVyQm9keT10aGlzLmdldEFmdGVyQm9keShhLG4pLHRoaXMuZm9vdGVyPXRoaXMuZ2V0Rm9vdGVyKGEsbik7bGV0IHQ9dGhpcy5fc2l6ZT1Ocyh0aGlzLG4pLG89T2JqZWN0LmFzc2lnbih7fSxlLHQpLHM9THModGhpcy5jaGFydCxuLG8pLGM9QnMobixvLHMsdGhpcy5jaGFydCk7dGhpcy54QWxpZ249cy54QWxpZ24sdGhpcy55QWxpZ249cy55QWxpZ24saT17b3BhY2l0eToxLHg6Yy54LHk6Yy55LHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LGNhcmV0WDplLngsY2FyZXRZOmUueX19dGhpcy5fdG9vbHRpcEl0ZW1zPWEsdGhpcy4kY29udGV4dD12b2lkIDAsaSYmdGhpcy5fcmVzb2x2ZUFuaW1hdGlvbnMoKS51cGRhdGUodGhpcyxpKSxlJiZuLmV4dGVybmFsJiZuLmV4dGVybmFsLmNhbGwodGhpcyx7Y2hhcnQ6dGhpcy5jaGFydCx0b29sdGlwOnRoaXMscmVwbGF5OnR9KX1kcmF3Q2FyZXQoZSx0LG4scil7bGV0IGk9dGhpcy5nZXRDYXJldFBvc2l0aW9uKGUsbixyKTt0LmxpbmVUbyhpLngxLGkueTEpLHQubGluZVRvKGkueDIsaS55MiksdC5saW5lVG8oaS54MyxpLnkzKX1nZXRDYXJldFBvc2l0aW9uKGUsdCxuKXtsZXR7eEFsaWduOnIseUFsaWduOml9PXRoaXMse2NhcmV0U2l6ZTphLGNvcm5lclJhZGl1czpvfT1uLHt0b3BMZWZ0OnMsdG9wUmlnaHQ6Yyxib3R0b21MZWZ0OmwsYm90dG9tUmlnaHQ6dX09TW4obykse3g6ZCx5OmZ9PWUse3dpZHRoOnAsaGVpZ2h0Om19PXQsaCxnLF8sdix5LGI7cmV0dXJuIGk9PT1gY2VudGVyYD8oeT1mK20vMixyPT09YGxlZnRgPyhoPWQsZz1oLWEsdj15K2EsYj15LWEpOihoPWQrcCxnPWgrYSx2PXktYSxiPXkrYSksXz1oKTooZz1yPT09YGxlZnRgP2QrTWF0aC5tYXgocyxsKSthOnI9PT1gcmlnaHRgP2QrcC1NYXRoLm1heChjLHUpLWE6dGhpcy5jYXJldFgsaT09PWB0b3BgPyh2PWYseT12LWEsaD1nLWEsXz1nK2EpOih2PWYrbSx5PXYrYSxoPWcrYSxfPWctYSksYj12KSx7eDE6aCx4MjpnLHgzOl8seTE6dix5Mjp5LHkzOmJ9fWRyYXdUaXRsZShlLHQsbil7bGV0IHI9dGhpcy50aXRsZSxpPXIubGVuZ3RoLGEsbyxzO2lmKGkpe2xldCBjPU1yKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKTtmb3IoZS54PVZzKHRoaXMsbi50aXRsZUFsaWduLG4pLHQudGV4dEFsaWduPWMudGV4dEFsaWduKG4udGl0bGVBbGlnbiksdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsYT1xKG4udGl0bGVGb250KSxvPW4udGl0bGVTcGFjaW5nLHQuZmlsbFN0eWxlPW4udGl0bGVDb2xvcix0LmZvbnQ9YS5zdHJpbmcscz0wO3M8aTsrK3MpdC5maWxsVGV4dChyW3NdLGMueChlLngpLGUueSthLmxpbmVIZWlnaHQvMiksZS55Kz1hLmxpbmVIZWlnaHQrbyxzKzE9PT1pJiYoZS55Kz1uLnRpdGxlTWFyZ2luQm90dG9tLW8pfX1fZHJhd0NvbG9yQm94KGUsdCxuLHIsaSl7bGV0IGE9dGhpcy5sYWJlbENvbG9yc1tuXSxvPXRoaXMubGFiZWxQb2ludFN0eWxlc1tuXSx7Ym94SGVpZ2h0OnMsYm94V2lkdGg6Y309aSxsPXEoaS5ib2R5Rm9udCksdT1Wcyh0aGlzLGBsZWZ0YCxpKSxkPXIueCh1KSxmPXM8bC5saW5lSGVpZ2h0PyhsLmxpbmVIZWlnaHQtcykvMjowLHA9dC55K2Y7aWYoaS51c2VQb2ludFN0eWxlKXtsZXQgdD17cmFkaXVzOk1hdGgubWluKGMscykvMixwb2ludFN0eWxlOm8ucG9pbnRTdHlsZSxyb3RhdGlvbjpvLnJvdGF0aW9uLGJvcmRlcldpZHRoOjF9LG49ci5sZWZ0Rm9yTHRyKGQsYykrYy8yLGw9cCtzLzI7ZS5zdHJva2VTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxobihlLHQsbixsKSxlLnN0cm9rZVN0eWxlPWEuYm9yZGVyQ29sb3IsZS5maWxsU3R5bGU9YS5iYWNrZ3JvdW5kQ29sb3IsaG4oZSx0LG4sbCl9ZWxzZXtlLmxpbmVXaWR0aD1NKGEuYm9yZGVyV2lkdGgpP01hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoYS5ib3JkZXJXaWR0aCkpOmEuYm9yZGVyV2lkdGh8fDEsZS5zdHJva2VTdHlsZT1hLmJvcmRlckNvbG9yLGUuc2V0TGluZURhc2goYS5ib3JkZXJEYXNofHxbXSksZS5saW5lRGFzaE9mZnNldD1hLmJvcmRlckRhc2hPZmZzZXR8fDA7bGV0IHQ9ci5sZWZ0Rm9yTHRyKGQsYyksbj1yLmxlZnRGb3JMdHIoci54UGx1cyhkLDEpLGMtMiksbz1NbihhLmJvcmRlclJhZGl1cyk7T2JqZWN0LnZhbHVlcyhvKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxUbihlLHt4OnQseTpwLHc6YyxoOnMscmFkaXVzOm99KSxlLmZpbGwoKSxlLnN0cm9rZSgpLGUuZmlsbFN0eWxlPWEuYmFja2dyb3VuZENvbG9yLGUuYmVnaW5QYXRoKCksVG4oZSx7eDpuLHk6cCsxLHc6Yy0yLGg6cy0yLHJhZGl1czpvfSksZS5maWxsKCkpOihlLmZpbGxTdHlsZT1pLm11bHRpS2V5QmFja2dyb3VuZCxlLmZpbGxSZWN0KHQscCxjLHMpLGUuc3Ryb2tlUmVjdCh0LHAsYyxzKSxlLmZpbGxTdHlsZT1hLmJhY2tncm91bmRDb2xvcixlLmZpbGxSZWN0KG4scCsxLGMtMixzLTIpKX1lLmZpbGxTdHlsZT10aGlzLmxhYmVsVGV4dENvbG9yc1tuXX1kcmF3Qm9keShlLHQsbil7bGV0e2JvZHk6cn09dGhpcyx7Ym9keVNwYWNpbmc6aSxib2R5QWxpZ246YSxkaXNwbGF5Q29sb3JzOm8sYm94SGVpZ2h0OnMsYm94V2lkdGg6Yyxib3hQYWRkaW5nOmx9PW4sdT1xKG4uYm9keUZvbnQpLGQ9dS5saW5lSGVpZ2h0LGY9MCxwPU1yKG4ucnRsLHRoaXMueCx0aGlzLndpZHRoKSxtPWZ1bmN0aW9uKG4pe3QuZmlsbFRleHQobixwLngoZS54K2YpLGUueStkLzIpLGUueSs9ZCtpfSxoPXAudGV4dEFsaWduKGEpLGcsXyx2LHksYix4LFM7Zm9yKHQudGV4dEFsaWduPWEsdC50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdC5mb250PXUuc3RyaW5nLGUueD1Wcyh0aGlzLGgsbiksdC5maWxsU3R5bGU9bi5ib2R5Q29sb3IsTCh0aGlzLmJlZm9yZUJvZHksbSksZj1vJiZoIT09YHJpZ2h0YD9hPT09YGNlbnRlcmA/Yy8yK2w6YysyK2w6MCx5PTAseD1yLmxlbmd0aDt5PHg7Kyt5KXtmb3IoZz1yW3ldLF89dGhpcy5sYWJlbFRleHRDb2xvcnNbeV0sdC5maWxsU3R5bGU9XyxMKGcuYmVmb3JlLG0pLHY9Zy5saW5lcyxvJiZ2Lmxlbmd0aCYmKHRoaXMuX2RyYXdDb2xvckJveCh0LGUseSxwLG4pLGQ9TWF0aC5tYXgodS5saW5lSGVpZ2h0LHMpKSxiPTAsUz12Lmxlbmd0aDtiPFM7KytiKW0odltiXSksZD11LmxpbmVIZWlnaHQ7TChnLmFmdGVyLG0pfWY9MCxkPXUubGluZUhlaWdodCxMKHRoaXMuYWZ0ZXJCb2R5LG0pLGUueS09aX1kcmF3Rm9vdGVyKGUsdCxuKXtsZXQgcj10aGlzLmZvb3RlcixpPXIubGVuZ3RoLGEsbztpZihpKXtsZXQgcz1NcihuLnJ0bCx0aGlzLngsdGhpcy53aWR0aCk7Zm9yKGUueD1Wcyh0aGlzLG4uZm9vdGVyQWxpZ24sbiksZS55Kz1uLmZvb3Rlck1hcmdpblRvcCx0LnRleHRBbGlnbj1zLnRleHRBbGlnbihuLmZvb3RlckFsaWduKSx0LnRleHRCYXNlbGluZT1gbWlkZGxlYCxhPXEobi5mb290ZXJGb250KSx0LmZpbGxTdHlsZT1uLmZvb3RlckNvbG9yLHQuZm9udD1hLnN0cmluZyxvPTA7bzxpOysrbyl0LmZpbGxUZXh0KHJbb10scy54KGUueCksZS55K2EubGluZUhlaWdodC8yKSxlLnkrPWEubGluZUhlaWdodCtuLmZvb3RlclNwYWNpbmd9fWRyYXdCYWNrZ3JvdW5kKGUsdCxuLHIpe2xldHt4QWxpZ246aSx5QWxpZ246YX09dGhpcyx7eDpvLHk6c309ZSx7d2lkdGg6YyxoZWlnaHQ6bH09bix7dG9wTGVmdDp1LHRvcFJpZ2h0OmQsYm90dG9tTGVmdDpmLGJvdHRvbVJpZ2h0OnB9PU1uKHIuY29ybmVyUmFkaXVzKTt0LmZpbGxTdHlsZT1yLmJhY2tncm91bmRDb2xvcix0LnN0cm9rZVN0eWxlPXIuYm9yZGVyQ29sb3IsdC5saW5lV2lkdGg9ci5ib3JkZXJXaWR0aCx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG8rdSxzKSxhPT09YHRvcGAmJnRoaXMuZHJhd0NhcmV0KGUsdCxuLHIpLHQubGluZVRvKG8rYy1kLHMpLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscyxvK2MscytkKSxhPT09YGNlbnRlcmAmJmk9PT1gcmlnaHRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2MscytsLXApLHQucXVhZHJhdGljQ3VydmVUbyhvK2MscytsLG8rYy1wLHMrbCksYT09PWBib3R0b21gJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvK2YscytsKSx0LnF1YWRyYXRpY0N1cnZlVG8obyxzK2wsbyxzK2wtZiksYT09PWBjZW50ZXJgJiZpPT09YGxlZnRgJiZ0aGlzLmRyYXdDYXJldChlLHQsbixyKSx0LmxpbmVUbyhvLHMrdSksdC5xdWFkcmF0aWNDdXJ2ZVRvKG8scyxvK3UscyksdC5jbG9zZVBhdGgoKSx0LmZpbGwoKSxyLmJvcmRlcldpZHRoPjAmJnQuc3Ryb2tlKCl9X3VwZGF0ZUFuaW1hdGlvblRhcmdldChlKXtsZXQgdD10aGlzLmNoYXJ0LG49dGhpcy4kYW5pbWF0aW9ucyxyPW4mJm4ueCxpPW4mJm4ueTtpZihyfHxpKXtsZXQgbj1qc1tlLnBvc2l0aW9uXS5jYWxsKHRoaXMsdGhpcy5fYWN0aXZlLHRoaXMuX2V2ZW50UG9zaXRpb24pO2lmKCFuKXJldHVybjtsZXQgYT10aGlzLl9zaXplPU5zKHRoaXMsZSksbz1PYmplY3QuYXNzaWduKHt9LG4sdGhpcy5fc2l6ZSkscz1Mcyh0LGUsbyksYz1CcyhlLG8scyx0KTsoci5fdG8hPT1jLnh8fGkuX3RvIT09Yy55KSYmKHRoaXMueEFsaWduPXMueEFsaWduLHRoaXMueUFsaWduPXMueUFsaWduLHRoaXMud2lkdGg9YS53aWR0aCx0aGlzLmhlaWdodD1hLmhlaWdodCx0aGlzLmNhcmV0WD1uLngsdGhpcy5jYXJldFk9bi55LHRoaXMuX3Jlc29sdmVBbmltYXRpb25zKCkudXBkYXRlKHRoaXMsYykpfX1fd2lsbFJlbmRlcigpe3JldHVybiEhdGhpcy5vcGFjaXR5fWRyYXcoZSl7bGV0IHQ9dGhpcy5vcHRpb25zLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KCkpLG49dGhpcy5vcGFjaXR5O2lmKCFuKXJldHVybjt0aGlzLl91cGRhdGVBbmltYXRpb25UYXJnZXQodCk7bGV0IHI9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxpPXt4OnRoaXMueCx5OnRoaXMueX07bj1NYXRoLmFicyhuKTwuMDAxPzA6bjtsZXQgYT1LKHQucGFkZGluZyksbz10aGlzLnRpdGxlLmxlbmd0aHx8dGhpcy5iZWZvcmVCb2R5Lmxlbmd0aHx8dGhpcy5ib2R5Lmxlbmd0aHx8dGhpcy5hZnRlckJvZHkubGVuZ3RofHx0aGlzLmZvb3Rlci5sZW5ndGg7dC5lbmFibGVkJiZvJiYoZS5zYXZlKCksZS5nbG9iYWxBbHBoYT1uLHRoaXMuZHJhd0JhY2tncm91bmQoaSxlLHIsdCksTnIoZSx0LnRleHREaXJlY3Rpb24pLGkueSs9YS50b3AsdGhpcy5kcmF3VGl0bGUoaSxlLHQpLHRoaXMuZHJhd0JvZHkoaSxlLHQpLHRoaXMuZHJhd0Zvb3RlcihpLGUsdCksUHIoZSx0LnRleHREaXJlY3Rpb24pLGUucmVzdG9yZSgpKX1nZXRBY3RpdmVFbGVtZW50cygpe3JldHVybiB0aGlzLl9hY3RpdmV8fFtdfXNldEFjdGl2ZUVsZW1lbnRzKGUsdCl7bGV0IG49dGhpcy5fYWN0aXZlLHI9ZS5tYXAoKHtkYXRhc2V0SW5kZXg6ZSxpbmRleDp0fSk9PntsZXQgbj10aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUpO2lmKCFuKXRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRhdGFzZXQgYXQgaW5kZXggYCtlKTtyZXR1cm57ZGF0YXNldEluZGV4OmUsZWxlbWVudDpuLmRhdGFbdF0saW5kZXg6dH19KSxpPSFWZShuLHIpLGE9dGhpcy5fcG9zaXRpb25DaGFuZ2VkKHIsdCk7KGl8fGEpJiYodGhpcy5fYWN0aXZlPXIsdGhpcy5fZXZlbnRQb3NpdGlvbj10LHRoaXMuX2lnbm9yZVJlcGxheUV2ZW50cz0hMCx0aGlzLnVwZGF0ZSghMCkpfWhhbmRsZUV2ZW50KGUsdCxuPSEwKXtpZih0JiZ0aGlzLl9pZ25vcmVSZXBsYXlFdmVudHMpcmV0dXJuITE7dGhpcy5faWdub3JlUmVwbGF5RXZlbnRzPSExO2xldCByPXRoaXMub3B0aW9ucyxpPXRoaXMuX2FjdGl2ZXx8W10sYT10aGlzLl9nZXRBY3RpdmVFbGVtZW50cyhlLGksdCxuKSxvPXRoaXMuX3Bvc2l0aW9uQ2hhbmdlZChhLGUpLHM9dHx8IVZlKGEsaSl8fG87cmV0dXJuIHMmJih0aGlzLl9hY3RpdmU9YSwoci5lbmFibGVkfHxyLmV4dGVybmFsKSYmKHRoaXMuX2V2ZW50UG9zaXRpb249e3g6ZS54LHk6ZS55fSx0aGlzLnVwZGF0ZSghMCx0KSkpLHN9X2dldEFjdGl2ZUVsZW1lbnRzKGUsdCxuLHIpe2xldCBpPXRoaXMub3B0aW9ucztpZihlLnR5cGU9PT1gbW91c2VvdXRgKXJldHVybltdO2lmKCFyKXJldHVybiB0LmZpbHRlcihlPT50aGlzLmNoYXJ0LmRhdGEuZGF0YXNldHNbZS5kYXRhc2V0SW5kZXhdJiZ0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGUuZGF0YXNldEluZGV4KS5jb250cm9sbGVyLmdldFBhcnNlZChlLmluZGV4KSE9PXZvaWQgMCk7bGV0IGE9dGhpcy5jaGFydC5nZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlKGUsaS5tb2RlLGksbik7cmV0dXJuIGkucmV2ZXJzZSYmYS5yZXZlcnNlKCksYX1fcG9zaXRpb25DaGFuZ2VkKGUsdCl7bGV0e2NhcmV0WDpuLGNhcmV0WTpyLG9wdGlvbnM6aX09dGhpcyxhPWpzW2kucG9zaXRpb25dLmNhbGwodGhpcyxlLHQpO3JldHVybiBhIT09ITEmJihuIT09YS54fHxyIT09YS55KX19LHFzPXtpZDpgdG9vbHRpcGAsX2VsZW1lbnQ6S3MscG9zaXRpb25lcnM6anMsYWZ0ZXJJbml0KGUsdCxuKXtuJiYoZS50b29sdGlwPW5ldyBLcyh7Y2hhcnQ6ZSxvcHRpb25zOm59KSl9LGJlZm9yZVVwZGF0ZShlLHQsbil7ZS50b29sdGlwJiZlLnRvb2x0aXAuaW5pdGlhbGl6ZShuKX0scmVzZXQoZSx0LG4pe2UudG9vbHRpcCYmZS50b29sdGlwLmluaXRpYWxpemUobil9LGFmdGVyRHJhdyhlKXtsZXQgdD1lLnRvb2x0aXA7aWYodCYmdC5fd2lsbFJlbmRlcigpKXtsZXQgbj17dG9vbHRpcDp0fTtpZihlLm5vdGlmeVBsdWdpbnMoYGJlZm9yZVRvb2x0aXBEcmF3YCx7Li4ubixjYW5jZWxhYmxlOiEwfSk9PT0hMSlyZXR1cm47dC5kcmF3KGUuY3R4KSxlLm5vdGlmeVBsdWdpbnMoYGFmdGVyVG9vbHRpcERyYXdgLG4pfX0sYWZ0ZXJFdmVudChlLHQpe2lmKGUudG9vbHRpcCl7bGV0IG49dC5yZXBsYXk7ZS50b29sdGlwLmhhbmRsZUV2ZW50KHQuZXZlbnQsbix0LmluQ2hhcnRBcmVhKSYmKHQuY2hhbmdlZD0hMCl9fSxkZWZhdWx0czp7ZW5hYmxlZDohMCxleHRlcm5hbDpudWxsLHBvc2l0aW9uOmBhdmVyYWdlYCxiYWNrZ3JvdW5kQ29sb3I6YHJnYmEoMCwwLDAsMC44KWAsdGl0bGVDb2xvcjpgI2ZmZmAsdGl0bGVGb250Ont3ZWlnaHQ6YGJvbGRgfSx0aXRsZVNwYWNpbmc6Mix0aXRsZU1hcmdpbkJvdHRvbTo2LHRpdGxlQWxpZ246YGxlZnRgLGJvZHlDb2xvcjpgI2ZmZmAsYm9keVNwYWNpbmc6Mixib2R5Rm9udDp7fSxib2R5QWxpZ246YGxlZnRgLGZvb3RlckNvbG9yOmAjZmZmYCxmb290ZXJTcGFjaW5nOjIsZm9vdGVyTWFyZ2luVG9wOjYsZm9vdGVyRm9udDp7d2VpZ2h0OmBib2xkYH0sZm9vdGVyQWxpZ246YGxlZnRgLHBhZGRpbmc6NixjYXJldFBhZGRpbmc6MixjYXJldFNpemU6NSxjb3JuZXJSYWRpdXM6Nixib3hIZWlnaHQ6KGUsdCk9PnQuYm9keUZvbnQuc2l6ZSxib3hXaWR0aDooZSx0KT0+dC5ib2R5Rm9udC5zaXplLG11bHRpS2V5QmFja2dyb3VuZDpgI2ZmZmAsZGlzcGxheUNvbG9yczohMCxib3hQYWRkaW5nOjAsYm9yZGVyQ29sb3I6YHJnYmEoMCwwLDAsMClgLGJvcmRlcldpZHRoOjAsYW5pbWF0aW9uOntkdXJhdGlvbjo0MDAsZWFzaW5nOmBlYXNlT3V0UXVhcnRgfSxhbmltYXRpb25zOntudW1iZXJzOnt0eXBlOmBudW1iZXJgLHByb3BlcnRpZXM6W2B4YCxgeWAsYHdpZHRoYCxgaGVpZ2h0YCxgY2FyZXRYYCxgY2FyZXRZYF19LG9wYWNpdHk6e2Vhc2luZzpgbGluZWFyYCxkdXJhdGlvbjoyMDB9fSxjYWxsYmFja3M6R3N9LGRlZmF1bHRSb3V0ZXM6e2JvZHlGb250OmBmb250YCxmb290ZXJGb250OmBmb250YCx0aXRsZUZvbnQ6YGZvbnRgfSxkZXNjcmlwdG9yczp7X3NjcmlwdGFibGU6ZT0+ZSE9PWBmaWx0ZXJgJiZlIT09YGl0ZW1Tb3J0YCYmZSE9PWBleHRlcm5hbGAsX2luZGV4YWJsZTohMSxjYWxsYmFja3M6e19zY3JpcHRhYmxlOiExLF9pbmRleGFibGU6ITF9LGFuaW1hdGlvbjp7X2ZhbGxiYWNrOiExfSxhbmltYXRpb25zOntfZmFsbGJhY2s6YGFuaW1hdGlvbmB9fSxhZGRpdGlvbmFsT3B0aW9uU2NvcGVzOltgaW50ZXJhY3Rpb25gXX0sSnM9KGUsdCxuLHIpPT4odHlwZW9mIHQ9PWBzdHJpbmdgPyhuPWUucHVzaCh0KS0xLHIudW5zaGlmdCh7aW5kZXg6bixsYWJlbDp0fSkpOmlzTmFOKHQpJiYobj1udWxsKSxuKTtmdW5jdGlvbiBZcyhlLHQsbixyKXtsZXQgaT1lLmluZGV4T2YodCk7cmV0dXJuIGk9PT0tMT9KcyhlLHQsbixyKTppPT09ZS5sYXN0SW5kZXhPZih0KT9pOm59dmFyIFhzPShlLHQpPT5lPT09bnVsbD9udWxsOkgoTWF0aC5yb3VuZChlKSwwLHQpO2Z1bmN0aW9uIFpzKGUpe2xldCB0PXRoaXMuZ2V0TGFiZWxzKCk7cmV0dXJuIGU+PTAmJmU8dC5sZW5ndGg/dFtlXTplfXZhciBRcz1jbGFzcyBleHRlbmRzIEJhe3N0YXRpYyBpZD1gY2F0ZWdvcnlgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOlpzfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wLHRoaXMuX2FkZGVkTGFiZWxzPVtdfWluaXQoZSl7bGV0IHQ9dGhpcy5fYWRkZWRMYWJlbHM7aWYodC5sZW5ndGgpe2xldCBlPXRoaXMuZ2V0TGFiZWxzKCk7Zm9yKGxldHtpbmRleDpuLGxhYmVsOnJ9b2YgdCllW25dPT09ciYmZS5zcGxpY2UobiwxKTt0aGlzLl9hZGRlZExhYmVscz1bXX1zdXBlci5pbml0KGUpfXBhcnNlKGUsdCl7aWYoQShlKSlyZXR1cm4gbnVsbDtsZXQgbj10aGlzLmdldExhYmVscygpO3JldHVybiB0PWlzRmluaXRlKHQpJiZuW3RdPT09ZT90OllzKG4sZSxGKHQsZSksdGhpcy5fYWRkZWRMYWJlbHMpLFhzKHQsbi5sZW5ndGgtMSl9ZGV0ZXJtaW5lRGF0YUxpbWl0cygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOm4sbWF4OnJ9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm9wdGlvbnMuYm91bmRzPT09YHRpY2tzYCYmKGV8fChuPTApLHR8fChyPXRoaXMuZ2V0TGFiZWxzKCkubGVuZ3RoLTEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMubWluLHQ9dGhpcy5tYXgsbj10aGlzLm9wdGlvbnMub2Zmc2V0LHI9W10saT10aGlzLmdldExhYmVscygpO2k9ZT09PTAmJnQ9PT1pLmxlbmd0aC0xP2k6aS5zbGljZShlLHQrMSksdGhpcy5fdmFsdWVSYW5nZT1NYXRoLm1heChpLmxlbmd0aC0rIW4sMSksdGhpcy5fc3RhcnRWYWx1ZT10aGlzLm1pbi0obj8uNTowKTtmb3IobGV0IG49ZTtuPD10O24rKylyLnB1c2goe3ZhbHVlOm59KTtyZXR1cm4gcn1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBacy5jYWxsKHRoaXMsZSl9Y29uZmlndXJlKCl7c3VwZXIuY29uZmlndXJlKCksdGhpcy5pc0hvcml6b250YWwoKXx8KHRoaXMuX3JldmVyc2VQaXhlbHM9IXRoaXMuX3JldmVyc2VQaXhlbHMpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIHR5cGVvZiBlIT1gbnVtYmVyYCYmKGU9dGhpcy5wYXJzZShlKSksZT09PW51bGw/TmFOOnRoaXMuZ2V0UGl4ZWxGb3JEZWNpbWFsKChlLXRoaXMuX3N0YXJ0VmFsdWUpL3RoaXMuX3ZhbHVlUmFuZ2UpfWdldFBpeGVsRm9yVGljayhlKXtsZXQgdD10aGlzLnRpY2tzO3JldHVybiBlPDB8fGU+dC5sZW5ndGgtMT9udWxsOnRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0W2VdLnZhbHVlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiBNYXRoLnJvdW5kKHRoaXMuX3N0YXJ0VmFsdWUrdGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkqdGhpcy5fdmFsdWVSYW5nZSl9Z2V0QmFzZVBpeGVsKCl7cmV0dXJuIHRoaXMuYm90dG9tfX07ZnVuY3Rpb24gJHMoZSx0KXtsZXQgbj1bXSx7Ym91bmRzOnIsc3RlcDppLG1pbjphLG1heDpvLHByZWNpc2lvbjpzLGNvdW50OmMsbWF4VGlja3M6bCxtYXhEaWdpdHM6dSxpbmNsdWRlQm91bmRzOmR9PWUsZj1pfHwxLHA9bC0xLHttaW46bSxtYXg6aH09dCxnPSFBKGEpLF89IUEobyksdj0hQShjKSx5PShoLW0pLyh1KzEpLGI9ZHQoKGgtbSkvcC9mKSpmLHgsUyxDLHc7aWYoYjwxZS0xNCYmIWcmJiFfKXJldHVyblt7dmFsdWU6bX0se3ZhbHVlOmh9XTt3PU1hdGguY2VpbChoL2IpLU1hdGguZmxvb3IobS9iKSx3PnAmJihiPWR0KHcqYi9wL2YpKmYpLEEocyl8fCh4PTEwKipzLGI9TWF0aC5jZWlsKGIqeCkveCkscj09PWB0aWNrc2A/KFM9TWF0aC5mbG9vcihtL2IpKmIsQz1NYXRoLmNlaWwoaC9iKSpiKTooUz1tLEM9aCksZyYmXyYmaSYmaHQoKG8tYSkvaSxiLzFlMyk/KHc9TWF0aC5yb3VuZChNYXRoLm1pbigoby1hKS9iLGwpKSxiPShvLWEpL3csUz1hLEM9byk6dj8oUz1nP2E6UyxDPV8/bzpDLHc9Yy0xLGI9KEMtUykvdyk6KHc9KEMtUykvYix3PXV0KHcsTWF0aC5yb3VuZCh3KSxiLzFlMyk/TWF0aC5yb3VuZCh3KTpNYXRoLmNlaWwodykpO2xldCBUPU1hdGgubWF4KHl0KGIpLHl0KFMpKTt4PTEwKiooQShzKT9UOnMpLFM9TWF0aC5yb3VuZChTKngpL3gsQz1NYXRoLnJvdW5kKEMqeCkveDtsZXQgRT0wO2ZvcihnJiYoZCYmUyE9PWE/KG4ucHVzaCh7dmFsdWU6YX0pLFM8YSYmRSsrLHV0KE1hdGgucm91bmQoKFMrRSpiKSp4KS94LGEsZWMoYSx5LGUpKSYmRSsrKTpTPGEmJkUrKyk7RTx3OysrRSl7bGV0IGU9TWF0aC5yb3VuZCgoUytFKmIpKngpL3g7aWYoXyYmZT5vKWJyZWFrO24ucHVzaCh7dmFsdWU6ZX0pfXJldHVybiBfJiZkJiZDIT09bz9uLmxlbmd0aCYmdXQobltuLmxlbmd0aC0xXS52YWx1ZSxvLGVjKG8seSxlKSk/bltuLmxlbmd0aC0xXS52YWx1ZT1vOm4ucHVzaCh7dmFsdWU6b30pOighX3x8Qz09PW8pJiZuLnB1c2goe3ZhbHVlOkN9KSxufWZ1bmN0aW9uIGVjKGUsdCx7aG9yaXpvbnRhbDpuLG1pblJvdGF0aW9uOnJ9KXtsZXQgaT1fdChyKSxhPShuP01hdGguc2luKGkpOk1hdGguY29zKGkpKXx8LjAwMSxvPS43NSp0KihgYCtlKS5sZW5ndGg7cmV0dXJuIE1hdGgubWluKHQvYSxvKX12YXIgdGM9Y2xhc3MgZXh0ZW5kcyBCYXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fZW5kVmFsdWU9dm9pZCAwLHRoaXMuX3ZhbHVlUmFuZ2U9MH1wYXJzZShlLHQpe3JldHVybiBBKGUpfHwodHlwZW9mIGU9PWBudW1iZXJgfHxlIGluc3RhbmNlb2YgTnVtYmVyKSYmIWlzRmluaXRlKCtlKT9udWxsOitlfWhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKXtsZXR7YmVnaW5BdFplcm86ZX09dGhpcy5vcHRpb25zLHttaW5EZWZpbmVkOnQsbWF4RGVmaW5lZDpufT10aGlzLmdldFVzZXJCb3VuZHMoKSx7bWluOnIsbWF4Oml9PXRoaXMsYT1lPT5yPXQ/cjplLG89ZT0+aT1uP2k6ZTtpZihlKXtsZXQgZT1sdChyKSx0PWx0KGkpO2U8MCYmdDwwP28oMCk6ZT4wJiZ0PjAmJmEoMCl9aWYocj09PWkpe2xldCB0PWk9PT0wPzE6TWF0aC5hYnMoaSouMDUpO28oaSt0KSxlfHxhKHItdCl9dGhpcy5taW49cix0aGlzLm1heD1pfWdldFRpY2tMaW1pdCgpe2xldHttYXhUaWNrc0xpbWl0OmUsc3RlcFNpemU6dH09dGhpcy5vcHRpb25zLnRpY2tzLG47cmV0dXJuIHQ/KG49TWF0aC5jZWlsKHRoaXMubWF4L3QpLU1hdGguZmxvb3IodGhpcy5taW4vdCkrMSxuPjFlMyYmKGNvbnNvbGUud2Fybihgc2NhbGVzLiR7dGhpcy5pZH0udGlja3Muc3RlcFNpemU6ICR7dH0gd291bGQgcmVzdWx0IGdlbmVyYXRpbmcgdXAgdG8gJHtufSB0aWNrcy4gTGltaXRpbmcgdG8gMTAwMC5gKSxuPTFlMykpOihuPXRoaXMuY29tcHV0ZVRpY2tMaW1pdCgpLGV8fD0xMSksZSYmKG49TWF0aC5taW4oZSxuKSksbn1jb21wdXRlVGlja0xpbWl0KCl7cmV0dXJuIDEvMH1idWlsZFRpY2tzKCl7bGV0IGU9dGhpcy5vcHRpb25zLHQ9ZS50aWNrcyxuPXRoaXMuZ2V0VGlja0xpbWl0KCk7bj1NYXRoLm1heCgyLG4pO2xldCByPSRzKHttYXhUaWNrczpuLGJvdW5kczplLmJvdW5kcyxtaW46ZS5taW4sbWF4OmUubWF4LHByZWNpc2lvbjp0LnByZWNpc2lvbixzdGVwOnQuc3RlcFNpemUsY291bnQ6dC5jb3VudCxtYXhEaWdpdHM6dGhpcy5fbWF4RGlnaXRzKCksaG9yaXpvbnRhbDp0aGlzLmlzSG9yaXpvbnRhbCgpLG1pblJvdGF0aW9uOnQubWluUm90YXRpb258fDAsaW5jbHVkZUJvdW5kczp0LmluY2x1ZGVCb3VuZHMhPT0hMX0sdGhpcy5fcmFuZ2V8fHRoaXMpO3JldHVybiBlLmJvdW5kcz09PWB0aWNrc2AmJmd0KHIsdGhpcyxgdmFsdWVgKSxlLnJldmVyc2U/KHIucmV2ZXJzZSgpLHRoaXMuc3RhcnQ9dGhpcy5tYXgsdGhpcy5lbmQ9dGhpcy5taW4pOih0aGlzLnN0YXJ0PXRoaXMubWluLHRoaXMuZW5kPXRoaXMubWF4KSxyfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMudGlja3MsdD10aGlzLm1pbixuPXRoaXMubWF4O2lmKHN1cGVyLmNvbmZpZ3VyZSgpLHRoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoKXtsZXQgcj0obi10KS9NYXRoLm1heChlLmxlbmd0aC0xLDEpLzI7dC09cixuKz1yfXRoaXMuX3N0YXJ0VmFsdWU9dCx0aGlzLl9lbmRWYWx1ZT1uLHRoaXMuX3ZhbHVlUmFuZ2U9bi10fWdldExhYmVsRm9yVmFsdWUoZSl7cmV0dXJuIGVuKGUsdGhpcy5jaGFydC5vcHRpb25zLmxvY2FsZSx0aGlzLm9wdGlvbnMudGlja3MuZm9ybWF0KX19LG5jPWNsYXNzIGV4dGVuZHMgdGN7c3RhdGljIGlkPWBsaW5lYXJgO3N0YXRpYyBkZWZhdWx0cz17dGlja3M6e2NhbGxiYWNrOnJuLmZvcm1hdHRlcnMubnVtZXJpY319O2RldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCEwKTt0aGlzLm1pbj1OKGUpP2U6MCx0aGlzLm1heD1OKHQpP3Q6MSx0aGlzLmhhbmRsZVRpY2tSYW5nZU9wdGlvbnMoKX1jb21wdXRlVGlja0xpbWl0KCl7bGV0IGU9dGhpcy5pc0hvcml6b250YWwoKSx0PWU/dGhpcy53aWR0aDp0aGlzLmhlaWdodCxuPV90KHRoaXMub3B0aW9ucy50aWNrcy5taW5Sb3RhdGlvbikscj0oZT9NYXRoLnNpbihuKTpNYXRoLmNvcyhuKSl8fC4wMDEsaT10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApO3JldHVybiBNYXRoLmNlaWwodC9NYXRoLm1pbig0MCxpLmxpbmVIZWlnaHQvcikpfWdldFBpeGVsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbCgoZS10aGlzLl9zdGFydFZhbHVlKS90aGlzLl92YWx1ZVJhbmdlKX1nZXRWYWx1ZUZvclBpeGVsKGUpe3JldHVybiB0aGlzLl9zdGFydFZhbHVlK3RoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpKnRoaXMuX3ZhbHVlUmFuZ2V9fSxyYz1lPT5NYXRoLmZsb29yKGN0KGUpKSxpYz0oZSx0KT0+MTAqKihyYyhlKSt0KTtmdW5jdGlvbiBhYyhlKXtyZXR1cm4gZS8xMCoqcmMoZSk9PTF9ZnVuY3Rpb24gb2MoZSx0LG4pe2xldCByPTEwKipuLGk9TWF0aC5mbG9vcihlL3IpO3JldHVybiBNYXRoLmNlaWwodC9yKS1pfWZ1bmN0aW9uIHNjKGUsdCl7bGV0IG49cmModC1lKTtmb3IoO29jKGUsdCxuKT4xMDspbisrO2Zvcig7b2MoZSx0LG4pPDEwOyluLS07cmV0dXJuIE1hdGgubWluKG4scmMoZSkpfWZ1bmN0aW9uIGNjKGUse21pbjp0LG1heDpufSl7dD1QKGUubWluLHQpO2xldCByPVtdLGk9cmModCksYT1zYyh0LG4pLG89YTwwPzEwKipNYXRoLmFicyhhKToxLHM9MTAqKmEsYz1pPmE/MTAqKmk6MCxsPU1hdGgucm91bmQoKHQtYykqbykvbyx1PU1hdGguZmxvb3IoKHQtYykvcy8xMCkqcyoxMCxkPU1hdGguZmxvb3IoKGwtdSkvMTAqKmEpLGY9UChlLm1pbixNYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbyk7Zm9yKDtmPG47KXIucHVzaCh7dmFsdWU6ZixtYWpvcjphYyhmKSxzaWduaWZpY2FuZDpkfSksZD49MTA/ZD1kPDE1PzE1OjIwOmQrKyxkPj0yMCYmKGErKyxkPTIsbz1hPj0wPzE6byksZj1NYXRoLnJvdW5kKChjK3UrZCoxMCoqYSkqbykvbztsZXQgcD1QKGUubWF4LGYpO3JldHVybiByLnB1c2goe3ZhbHVlOnAsbWFqb3I6YWMocCksc2lnbmlmaWNhbmQ6ZH0pLHJ9KGNsYXNzIGV4dGVuZHMgQmF7c3RhdGljIGlkPWBsb2dhcml0aG1pY2A7c3RhdGljIGRlZmF1bHRzPXt0aWNrczp7Y2FsbGJhY2s6cm4uZm9ybWF0dGVycy5sb2dhcml0aG1pYyxtYWpvcjp7ZW5hYmxlZDohMH19fTtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5fc3RhcnRWYWx1ZT12b2lkIDAsdGhpcy5fdmFsdWVSYW5nZT0wfXBhcnNlKGUsdCl7bGV0IG49dGMucHJvdG90eXBlLnBhcnNlLmFwcGx5KHRoaXMsW2UsdF0pO2lmKG49PT0wKXt0aGlzLl96ZXJvPSEwO3JldHVybn1yZXR1cm4gTihuKSYmbj4wP246bnVsbH1kZXRlcm1pbmVEYXRhTGltaXRzKCl7bGV0e21pbjplLG1heDp0fT10aGlzLmdldE1pbk1heCghMCk7dGhpcy5taW49TihlKT9NYXRoLm1heCgwLGUpOm51bGwsdGhpcy5tYXg9Tih0KT9NYXRoLm1heCgwLHQpOm51bGwsdGhpcy5vcHRpb25zLmJlZ2luQXRaZXJvJiYodGhpcy5femVybz0hMCksdGhpcy5femVybyYmdGhpcy5taW4hPT10aGlzLl9zdWdnZXN0ZWRNaW4mJiFOKHRoaXMuX3VzZXJNaW4pJiYodGhpcy5taW49ZT09PWljKHRoaXMubWluLDApP2ljKHRoaXMubWluLC0xKTppYyh0aGlzLm1pbiwwKSksdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9aGFuZGxlVGlja1JhbmdlT3B0aW9ucygpe2xldHttaW5EZWZpbmVkOmUsbWF4RGVmaW5lZDp0fT10aGlzLmdldFVzZXJCb3VuZHMoKSxuPXRoaXMubWluLHI9dGhpcy5tYXgsaT10PT5uPWU/bjp0LGE9ZT0+cj10P3I6ZTtuPT09ciYmKG48PTA/KGkoMSksYSgxMCkpOihpKGljKG4sLTEpKSxhKGljKHIsMSkpKSksbjw9MCYmaShpYyhyLC0xKSkscjw9MCYmYShpYyhuLDEpKSx0aGlzLm1pbj1uLHRoaXMubWF4PXJ9YnVpbGRUaWNrcygpe2xldCBlPXRoaXMub3B0aW9ucyx0PWNjKHttaW46dGhpcy5fdXNlck1pbixtYXg6dGhpcy5fdXNlck1heH0sdGhpcyk7cmV0dXJuIGUuYm91bmRzPT09YHRpY2tzYCYmZ3QodCx0aGlzLGB2YWx1ZWApLGUucmV2ZXJzZT8odC5yZXZlcnNlKCksdGhpcy5zdGFydD10aGlzLm1heCx0aGlzLmVuZD10aGlzLm1pbik6KHRoaXMuc3RhcnQ9dGhpcy5taW4sdGhpcy5lbmQ9dGhpcy5tYXgpLHR9Z2V0TGFiZWxGb3JWYWx1ZShlKXtyZXR1cm4gZT09PXZvaWQgMD9gMGA6ZW4oZSx0aGlzLmNoYXJ0Lm9wdGlvbnMubG9jYWxlLHRoaXMub3B0aW9ucy50aWNrcy5mb3JtYXQpfWNvbmZpZ3VyZSgpe2xldCBlPXRoaXMubWluO3N1cGVyLmNvbmZpZ3VyZSgpLHRoaXMuX3N0YXJ0VmFsdWU9Y3QoZSksdGhpcy5fdmFsdWVSYW5nZT1jdCh0aGlzLm1heCktY3QoZSl9Z2V0UGl4ZWxGb3JWYWx1ZShlKXtyZXR1cm4oZT09PXZvaWQgMHx8ZT09PTApJiYoZT10aGlzLm1pbiksZT09PW51bGx8fGlzTmFOKGUpP05hTjp0aGlzLmdldFBpeGVsRm9yRGVjaW1hbChlPT09dGhpcy5taW4/MDooY3QoZSktdGhpcy5fc3RhcnRWYWx1ZSkvdGhpcy5fdmFsdWVSYW5nZSl9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLmdldERlY2ltYWxGb3JQaXhlbChlKTtyZXR1cm4gMTAqKih0aGlzLl9zdGFydFZhbHVlK3QqdGhpcy5fdmFsdWVSYW5nZSl9fSk7ZnVuY3Rpb24gbGMoZSl7bGV0IHQ9ZS50aWNrcztpZih0LmRpc3BsYXkmJmUuZGlzcGxheSl7bGV0IGU9Syh0LmJhY2tkcm9wUGFkZGluZyk7cmV0dXJuIEYodC5mb250JiZ0LmZvbnQuc2l6ZSxXLmZvbnQuc2l6ZSkrZS5oZWlnaHR9cmV0dXJuIDB9ZnVuY3Rpb24gdWMoZSx0LG4pe3JldHVybiBuPWoobik/bjpbbl0se3c6Zm4oZSx0LnN0cmluZyxuKSxoOm4ubGVuZ3RoKnQubGluZUhlaWdodH19ZnVuY3Rpb24gZGMoZSx0LG4scixpKXtyZXR1cm4gZT09PXJ8fGU9PT1pP3tzdGFydDp0LW4vMixlbmQ6dCtuLzJ9OmU8cnx8ZT5pP3tzdGFydDp0LW4sZW5kOnR9OntzdGFydDp0LGVuZDp0K259fWZ1bmN0aW9uIGZjKGUpe2xldCB0PXtsOmUubGVmdCtlLl9wYWRkaW5nLmxlZnQscjplLnJpZ2h0LWUuX3BhZGRpbmcucmlnaHQsdDplLnRvcCtlLl9wYWRkaW5nLnRvcCxiOmUuYm90dG9tLWUuX3BhZGRpbmcuYm90dG9tfSxuPU9iamVjdC5hc3NpZ24oe30sdCkscj1bXSxpPVtdLGE9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLG89ZS5vcHRpb25zLnBvaW50TGFiZWxzLHM9by5jZW50ZXJQb2ludExhYmVscz9SL2E6MDtmb3IobGV0IGM9MDtjPGE7YysrKXtsZXQgYT1vLnNldENvbnRleHQoZS5nZXRQb2ludExhYmVsQ29udGV4dChjKSk7aVtjXT1hLnBhZGRpbmc7bGV0IGw9ZS5nZXRQb2ludFBvc2l0aW9uKGMsZS5kcmF3aW5nQXJlYStpW2NdLHMpLHU9cShhLmZvbnQpLGQ9dWMoZS5jdHgsdSxlLl9wb2ludExhYmVsc1tjXSk7cltjXT1kO2xldCBmPVYoZS5nZXRJbmRleEFuZ2xlKGMpK3MpLHA9TWF0aC5yb3VuZCh2dChmKSk7cGMobix0LGYsZGMocCxsLngsZC53LDAsMTgwKSxkYyhwLGwueSxkLmgsOTAsMjcwKSl9ZS5zZXRDZW50ZXJQb2ludCh0Lmwtbi5sLG4uci10LnIsdC50LW4udCxuLmItdC5iKSxlLl9wb2ludExhYmVsSXRlbXM9Z2MoZSxyLGkpfWZ1bmN0aW9uIHBjKGUsdCxuLHIsaSl7bGV0IGE9TWF0aC5hYnMoTWF0aC5zaW4obikpLG89TWF0aC5hYnMoTWF0aC5jb3MobikpLHM9MCxjPTA7ci5zdGFydDx0Lmw/KHM9KHQubC1yLnN0YXJ0KS9hLGUubD1NYXRoLm1pbihlLmwsdC5sLXMpKTpyLmVuZD50LnImJihzPShyLmVuZC10LnIpL2EsZS5yPU1hdGgubWF4KGUucix0LnIrcykpLGkuc3RhcnQ8dC50PyhjPSh0LnQtaS5zdGFydCkvbyxlLnQ9TWF0aC5taW4oZS50LHQudC1jKSk6aS5lbmQ+dC5iJiYoYz0oaS5lbmQtdC5iKS9vLGUuYj1NYXRoLm1heChlLmIsdC5iK2MpKX1mdW5jdGlvbiBtYyhlLHQsbil7bGV0IHI9ZS5kcmF3aW5nQXJlYSx7ZXh0cmE6aSxhZGRpdGlvbmFsQW5nbGU6YSxwYWRkaW5nOm8sc2l6ZTpzfT1uLGM9ZS5nZXRQb2ludFBvc2l0aW9uKHQscitpK28sYSksbD1NYXRoLnJvdW5kKHZ0KFYoYy5hbmdsZStCKSkpLHU9eWMoYy55LHMuaCxsKSxkPV9jKGwpLGY9dmMoYy54LHMudyxkKTtyZXR1cm57dmlzaWJsZTohMCx4OmMueCx5OnUsdGV4dEFsaWduOmQsbGVmdDpmLHRvcDp1LHJpZ2h0OmYrcy53LGJvdHRvbTp1K3MuaH19ZnVuY3Rpb24gaGMoZSx0KXtpZighdClyZXR1cm4hMDtsZXR7bGVmdDpuLHRvcDpyLHJpZ2h0OmksYm90dG9tOmF9PWU7cmV0dXJuIShHKHt4Om4seTpyfSx0KXx8Ryh7eDpuLHk6YX0sdCl8fEcoe3g6aSx5OnJ9LHQpfHxHKHt4OmkseTphfSx0KSl9ZnVuY3Rpb24gZ2MoZSx0LG4pe2xldCByPVtdLGk9ZS5fcG9pbnRMYWJlbHMubGVuZ3RoLGE9ZS5vcHRpb25zLHtjZW50ZXJQb2ludExhYmVsczpvLGRpc3BsYXk6c309YS5wb2ludExhYmVscyxjPXtleHRyYTpsYyhhKS8yLGFkZGl0aW9uYWxBbmdsZTpvP1IvaTowfSxsO2ZvcihsZXQgYT0wO2E8aTthKyspe2MucGFkZGluZz1uW2FdLGMuc2l6ZT10W2FdO2xldCBpPW1jKGUsYSxjKTtyLnB1c2goaSkscz09PWBhdXRvYCYmKGkudmlzaWJsZT1oYyhpLGwpLGkudmlzaWJsZSYmKGw9aSkpfXJldHVybiByfWZ1bmN0aW9uIF9jKGUpe3JldHVybiBlPT09MHx8ZT09PTE4MD9gY2VudGVyYDplPDE4MD9gbGVmdGA6YHJpZ2h0YH1mdW5jdGlvbiB2YyhlLHQsbil7cmV0dXJuIG49PT1gcmlnaHRgP2UtPXQ6bj09PWBjZW50ZXJgJiYoZS09dC8yKSxlfWZ1bmN0aW9uIHljKGUsdCxuKXtyZXR1cm4gbj09PTkwfHxuPT09MjcwP2UtPXQvMjoobj4yNzB8fG48OTApJiYoZS09dCksZX1mdW5jdGlvbiBiYyhlLHQsbil7bGV0e2xlZnQ6cix0b3A6aSxyaWdodDphLGJvdHRvbTpvfT1uLHtiYWNrZHJvcENvbG9yOnN9PXQ7aWYoIUEocykpe2xldCBuPU1uKHQuYm9yZGVyUmFkaXVzKSxjPUsodC5iYWNrZHJvcFBhZGRpbmcpO2UuZmlsbFN0eWxlPXM7bGV0IGw9ci1jLmxlZnQsdT1pLWMudG9wLGQ9YS1yK2Mud2lkdGgsZj1vLWkrYy5oZWlnaHQ7T2JqZWN0LnZhbHVlcyhuKS5zb21lKGU9PmUhPT0wKT8oZS5iZWdpblBhdGgoKSxUbihlLHt4OmwseTp1LHc6ZCxoOmYscmFkaXVzOm59KSxlLmZpbGwoKSk6ZS5maWxsUmVjdChsLHUsZCxmKX19ZnVuY3Rpb24geGMoZSx0KXtsZXR7Y3R4Om4sb3B0aW9uczp7cG9pbnRMYWJlbHM6cn19PWU7Zm9yKGxldCBpPXQtMTtpPj0wO2ktLSl7bGV0IHQ9ZS5fcG9pbnRMYWJlbEl0ZW1zW2ldO2lmKCF0LnZpc2libGUpY29udGludWU7bGV0IGE9ci5zZXRDb250ZXh0KGUuZ2V0UG9pbnRMYWJlbENvbnRleHQoaSkpO2JjKG4sYSx0KTtsZXQgbz1xKGEuZm9udCkse3g6cyx5OmMsdGV4dEFsaWduOmx9PXQ7d24obixlLl9wb2ludExhYmVsc1tpXSxzLGMrby5saW5lSGVpZ2h0LzIsbyx7Y29sb3I6YS5jb2xvcix0ZXh0QWxpZ246bCx0ZXh0QmFzZWxpbmU6YG1pZGRsZWB9KX19ZnVuY3Rpb24gU2MoZSx0LG4scil7bGV0e2N0eDppfT1lO2lmKG4paS5hcmMoZS54Q2VudGVyLGUueUNlbnRlcix0LDAseik7ZWxzZXtsZXQgbj1lLmdldFBvaW50UG9zaXRpb24oMCx0KTtpLm1vdmVUbyhuLngsbi55KTtmb3IobGV0IGE9MTthPHI7YSsrKW49ZS5nZXRQb2ludFBvc2l0aW9uKGEsdCksaS5saW5lVG8obi54LG4ueSl9fWZ1bmN0aW9uIENjKGUsdCxuLHIsaSl7bGV0IGE9ZS5jdHgsbz10LmNpcmN1bGFyLHtjb2xvcjpzLGxpbmVXaWR0aDpjfT10OyFvJiYhcnx8IXN8fCFjfHxuPDB8fChhLnNhdmUoKSxhLnN0cm9rZVN0eWxlPXMsYS5saW5lV2lkdGg9YyxhLnNldExpbmVEYXNoKGkuZGFzaHx8W10pLGEubGluZURhc2hPZmZzZXQ9aS5kYXNoT2Zmc2V0LGEuYmVnaW5QYXRoKCksU2MoZSxuLG8sciksYS5jbG9zZVBhdGgoKSxhLnN0cm9rZSgpLGEucmVzdG9yZSgpKX1mdW5jdGlvbiB3YyhlLHQsbil7cmV0dXJuIEZuKGUse2xhYmVsOm4saW5kZXg6dCx0eXBlOmBwb2ludExhYmVsYH0pfShjbGFzcyBleHRlbmRzIHRje3N0YXRpYyBpZD1gcmFkaWFsTGluZWFyYDtzdGF0aWMgZGVmYXVsdHM9e2Rpc3BsYXk6ITAsYW5pbWF0ZTohMCxwb3NpdGlvbjpgY2hhcnRBcmVhYCxhbmdsZUxpbmVzOntkaXNwbGF5OiEwLGxpbmVXaWR0aDoxLGJvcmRlckRhc2g6W10sYm9yZGVyRGFzaE9mZnNldDowfSxncmlkOntjaXJjdWxhcjohMX0sc3RhcnRBbmdsZTowLHRpY2tzOntzaG93TGFiZWxCYWNrZHJvcDohMCxjYWxsYmFjazpybi5mb3JtYXR0ZXJzLm51bWVyaWN9LHBvaW50TGFiZWxzOntiYWNrZHJvcENvbG9yOnZvaWQgMCxiYWNrZHJvcFBhZGRpbmc6MixkaXNwbGF5OiEwLGZvbnQ6e3NpemU6MTB9LGNhbGxiYWNrKGUpe3JldHVybiBlfSxwYWRkaW5nOjUsY2VudGVyUG9pbnRMYWJlbHM6ITF9fTtzdGF0aWMgZGVmYXVsdFJvdXRlcz17ImFuZ2xlTGluZXMuY29sb3IiOmBib3JkZXJDb2xvcmAsInBvaW50TGFiZWxzLmNvbG9yIjpgY29sb3JgLCJ0aWNrcy5jb2xvciI6YGNvbG9yYH07c3RhdGljIGRlc2NyaXB0b3JzPXthbmdsZUxpbmVzOntfZmFsbGJhY2s6YGdyaWRgfX07Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy54Q2VudGVyPXZvaWQgMCx0aGlzLnlDZW50ZXI9dm9pZCAwLHRoaXMuZHJhd2luZ0FyZWE9dm9pZCAwLHRoaXMuX3BvaW50TGFiZWxzPVtdLHRoaXMuX3BvaW50TGFiZWxJdGVtcz1bXX1zZXREaW1lbnNpb25zKCl7bGV0IGU9dGhpcy5fcGFkZGluZz1LKGxjKHRoaXMub3B0aW9ucykvMiksdD10aGlzLndpZHRoPXRoaXMubWF4V2lkdGgtZS53aWR0aCxuPXRoaXMuaGVpZ2h0PXRoaXMubWF4SGVpZ2h0LWUuaGVpZ2h0O3RoaXMueENlbnRlcj1NYXRoLmZsb29yKHRoaXMubGVmdCt0LzIrZS5sZWZ0KSx0aGlzLnlDZW50ZXI9TWF0aC5mbG9vcih0aGlzLnRvcCtuLzIrZS50b3ApLHRoaXMuZHJhd2luZ0FyZWE9TWF0aC5mbG9vcihNYXRoLm1pbih0LG4pLzIpfWRldGVybWluZURhdGFMaW1pdHMoKXtsZXR7bWluOmUsbWF4OnR9PXRoaXMuZ2V0TWluTWF4KCExKTt0aGlzLm1pbj1OKGUpJiYhaXNOYU4oZSk/ZTowLHRoaXMubWF4PU4odCkmJiFpc05hTih0KT90OjAsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9Y29tcHV0ZVRpY2tMaW1pdCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5kcmF3aW5nQXJlYS9sYyh0aGlzLm9wdGlvbnMpKX1nZW5lcmF0ZVRpY2tMYWJlbHMoZSl7dGMucHJvdG90eXBlLmdlbmVyYXRlVGlja0xhYmVscy5jYWxsKHRoaXMsZSksdGhpcy5fcG9pbnRMYWJlbHM9dGhpcy5nZXRMYWJlbHMoKS5tYXAoKGUsdCk9PntsZXQgbj1JKHRoaXMub3B0aW9ucy5wb2ludExhYmVscy5jYWxsYmFjayxbZSx0XSx0aGlzKTtyZXR1cm4gbnx8bj09PTA/bjpgYH0pLmZpbHRlcigoZSx0KT0+dGhpcy5jaGFydC5nZXREYXRhVmlzaWJpbGl0eSh0KSl9Zml0KCl7bGV0IGU9dGhpcy5vcHRpb25zO2UuZGlzcGxheSYmZS5wb2ludExhYmVscy5kaXNwbGF5P2ZjKHRoaXMpOnRoaXMuc2V0Q2VudGVyUG9pbnQoMCwwLDAsMCl9c2V0Q2VudGVyUG9pbnQoZSx0LG4scil7dGhpcy54Q2VudGVyKz1NYXRoLmZsb29yKChlLXQpLzIpLHRoaXMueUNlbnRlcis9TWF0aC5mbG9vcigobi1yKS8yKSx0aGlzLmRyYXdpbmdBcmVhLT1NYXRoLm1pbih0aGlzLmRyYXdpbmdBcmVhLzIsTWF0aC5tYXgoZSx0LG4scikpfWdldEluZGV4QW5nbGUoZSl7bGV0IHQ9ei8odGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RofHwxKSxuPXRoaXMub3B0aW9ucy5zdGFydEFuZ2xlfHwwO3JldHVybiBWKGUqdCtfdChuKSl9Z2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoZSl7aWYoQShlKSlyZXR1cm4gTmFOO2xldCB0PXRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gdGhpcy5vcHRpb25zLnJldmVyc2U/KHRoaXMubWF4LWUpKnQ6KGUtdGhpcy5taW4pKnR9Z2V0VmFsdWVGb3JEaXN0YW5jZUZyb21DZW50ZXIoZSl7aWYoQShlKSlyZXR1cm4gTmFOO2xldCB0PWUvKHRoaXMuZHJhd2luZ0FyZWEvKHRoaXMubWF4LXRoaXMubWluKSk7cmV0dXJuIHRoaXMub3B0aW9ucy5yZXZlcnNlP3RoaXMubWF4LXQ6dGhpcy5taW4rdH1nZXRQb2ludExhYmVsQ29udGV4dChlKXtsZXQgdD10aGlzLl9wb2ludExhYmVsc3x8W107aWYoZT49MCYmZTx0Lmxlbmd0aCl7bGV0IG49dFtlXTtyZXR1cm4gd2ModGhpcy5nZXRDb250ZXh0KCksZSxuKX19Z2V0UG9pbnRQb3NpdGlvbihlLHQsbj0wKXtsZXQgcj10aGlzLmdldEluZGV4QW5nbGUoZSktQituO3JldHVybnt4Ok1hdGguY29zKHIpKnQrdGhpcy54Q2VudGVyLHk6TWF0aC5zaW4ocikqdCt0aGlzLnlDZW50ZXIsYW5nbGU6cn19Z2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlKGUsdCl7cmV0dXJuIHRoaXMuZ2V0UG9pbnRQb3NpdGlvbihlLHRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodCkpfWdldEJhc2VQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoZXx8MCx0aGlzLmdldEJhc2VWYWx1ZSgpKX1nZXRQb2ludExhYmVsUG9zaXRpb24oZSl7bGV0e2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfT10aGlzLl9wb2ludExhYmVsSXRlbXNbZV07cmV0dXJue2xlZnQ6dCx0b3A6bixyaWdodDpyLGJvdHRvbTppfX1kcmF3QmFja2dyb3VuZCgpe2xldHtiYWNrZ3JvdW5kQ29sb3I6ZSxncmlkOntjaXJjdWxhcjp0fX09dGhpcy5vcHRpb25zO2lmKGUpe2xldCBuPXRoaXMuY3R4O24uc2F2ZSgpLG4uYmVnaW5QYXRoKCksU2ModGhpcyx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHRoaXMuX2VuZFZhbHVlKSx0LHRoaXMuX3BvaW50TGFiZWxzLmxlbmd0aCksbi5jbG9zZVBhdGgoKSxuLmZpbGxTdHlsZT1lLG4uZmlsbCgpLG4ucmVzdG9yZSgpfX1kcmF3R3JpZCgpe2xldCBlPXRoaXMuY3R4LHQ9dGhpcy5vcHRpb25zLHthbmdsZUxpbmVzOm4sZ3JpZDpyLGJvcmRlcjppfT10LGE9dGhpcy5fcG9pbnRMYWJlbHMubGVuZ3RoLG8scyxjO2lmKHQucG9pbnRMYWJlbHMuZGlzcGxheSYmeGModGhpcyxhKSxyLmRpc3BsYXkmJnRoaXMudGlja3MuZm9yRWFjaCgoZSx0KT0+e2lmKHQhPT0wfHx0PT09MCYmdGhpcy5taW48MCl7cz10aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUudmFsdWUpO2xldCBuPXRoaXMuZ2V0Q29udGV4dCh0KSxvPXIuc2V0Q29udGV4dChuKSxjPWkuc2V0Q29udGV4dChuKTtDYyh0aGlzLG8scyxhLGMpfX0pLG4uZGlzcGxheSl7Zm9yKGUuc2F2ZSgpLG89YS0xO28+PTA7by0tKXtsZXQgcj1uLnNldENvbnRleHQodGhpcy5nZXRQb2ludExhYmVsQ29udGV4dChvKSkse2NvbG9yOmksbGluZVdpZHRoOmF9PXI7IWF8fCFpfHwoZS5saW5lV2lkdGg9YSxlLnN0cm9rZVN0eWxlPWksZS5zZXRMaW5lRGFzaChyLmJvcmRlckRhc2gpLGUubGluZURhc2hPZmZzZXQ9ci5ib3JkZXJEYXNoT2Zmc2V0LHM9dGhpcy5nZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSh0LnJldmVyc2U/dGhpcy5taW46dGhpcy5tYXgpLGM9dGhpcy5nZXRQb2ludFBvc2l0aW9uKG8scyksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0aGlzLnhDZW50ZXIsdGhpcy55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpKX1lLnJlc3RvcmUoKX19ZHJhd0JvcmRlcigpe31kcmF3TGFiZWxzKCl7bGV0IGU9dGhpcy5jdHgsdD10aGlzLm9wdGlvbnMsbj10LnRpY2tzO2lmKCFuLmRpc3BsYXkpcmV0dXJuO2xldCByPXRoaXMuZ2V0SW5kZXhBbmdsZSgwKSxpLGE7ZS5zYXZlKCksZS50cmFuc2xhdGUodGhpcy54Q2VudGVyLHRoaXMueUNlbnRlciksZS5yb3RhdGUociksZS50ZXh0QWxpZ249YGNlbnRlcmAsZS50ZXh0QmFzZWxpbmU9YG1pZGRsZWAsdGhpcy50aWNrcy5mb3JFYWNoKChyLG8pPT57aWYobz09PTAmJnRoaXMubWluPj0wJiYhdC5yZXZlcnNlKXJldHVybjtsZXQgcz1uLnNldENvbnRleHQodGhpcy5nZXRDb250ZXh0KG8pKSxjPXEocy5mb250KTtpZihpPXRoaXMuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUodGhpcy50aWNrc1tvXS52YWx1ZSkscy5zaG93TGFiZWxCYWNrZHJvcCl7ZS5mb250PWMuc3RyaW5nLGE9ZS5tZWFzdXJlVGV4dChyLmxhYmVsKS53aWR0aCxlLmZpbGxTdHlsZT1zLmJhY2tkcm9wQ29sb3I7bGV0IHQ9SyhzLmJhY2tkcm9wUGFkZGluZyk7ZS5maWxsUmVjdCgtYS8yLXQubGVmdCwtaS1jLnNpemUvMi10LnRvcCxhK3Qud2lkdGgsYy5zaXplK3QuaGVpZ2h0KX13bihlLHIubGFiZWwsMCwtaSxjLHtjb2xvcjpzLmNvbG9yLHN0cm9rZUNvbG9yOnMudGV4dFN0cm9rZUNvbG9yLHN0cm9rZVdpZHRoOnMudGV4dFN0cm9rZVdpZHRofSl9KSxlLnJlc3RvcmUoKX1kcmF3VGl0bGUoKXt9fSk7dmFyIFRjPXttaWxsaXNlY29uZDp7Y29tbW9uOiEwLHNpemU6MSxzdGVwczoxZTN9LHNlY29uZDp7Y29tbW9uOiEwLHNpemU6MWUzLHN0ZXBzOjYwfSxtaW51dGU6e2NvbW1vbjohMCxzaXplOjZlNCxzdGVwczo2MH0saG91cjp7Y29tbW9uOiEwLHNpemU6MzZlNSxzdGVwczoyNH0sZGF5Ontjb21tb246ITAsc2l6ZTo4NjRlNSxzdGVwczozMH0sd2Vlazp7Y29tbW9uOiExLHNpemU6NjA0OGU1LHN0ZXBzOjR9LG1vbnRoOntjb21tb246ITAsc2l6ZToyNjI4ZTYsc3RlcHM6MTJ9LHF1YXJ0ZXI6e2NvbW1vbjohMSxzaXplOjc4ODRlNixzdGVwczo0fSx5ZWFyOntjb21tb246ITAsc2l6ZTozMTU0ZTd9fSwkPU9iamVjdC5rZXlzKFRjKTtmdW5jdGlvbiBFYyhlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gRGMoZSx0KXtpZihBKHQpKXJldHVybiBudWxsO2xldCBuPWUuX2FkYXB0ZXIse3BhcnNlcjpyLHJvdW5kOmksaXNvV2Vla2RheTphfT1lLl9wYXJzZU9wdHMsbz10O3JldHVybiB0eXBlb2Ygcj09YGZ1bmN0aW9uYCYmKG89cihvKSksTihvKXx8KG89dHlwZW9mIHI9PWBzdHJpbmdgP24ucGFyc2UobyxyKTpuLnBhcnNlKG8pKSxvPT09bnVsbD9udWxsOihpJiYobz1pPT09YHdlZWtgJiYobXQoYSl8fGE9PT0hMCk/bi5zdGFydE9mKG8sYGlzb1dlZWtgLGEpOm4uc3RhcnRPZihvLGkpKSwrbyl9ZnVuY3Rpb24gT2MoZSx0LG4scil7bGV0IGk9JC5sZW5ndGg7Zm9yKGxldCBhPSQuaW5kZXhPZihlKTthPGktMTsrK2Epe2xldCBlPVRjWyRbYV1dLGk9ZS5zdGVwcz9lLnN0ZXBzOjIqKjUzLTE7aWYoZS5jb21tb24mJk1hdGguY2VpbCgobi10KS8oaSplLnNpemUpKTw9cilyZXR1cm4gJFthXX1yZXR1cm4gJFtpLTFdfWZ1bmN0aW9uIGtjKGUsdCxuLHIsaSl7Zm9yKGxldCBhPSQubGVuZ3RoLTE7YT49JC5pbmRleE9mKG4pO2EtLSl7bGV0IG49JFthXTtpZihUY1tuXS5jb21tb24mJmUuX2FkYXB0ZXIuZGlmZihpLHIsbik+PXQtMSlyZXR1cm4gbn1yZXR1cm4gJFtuPyQuaW5kZXhPZihuKTowXX1mdW5jdGlvbiBBYyhlKXtmb3IobGV0IHQ9JC5pbmRleE9mKGUpKzEsbj0kLmxlbmd0aDt0PG47Kyt0KWlmKFRjWyRbdF1dLmNvbW1vbilyZXR1cm4gJFt0XX1mdW5jdGlvbiBqYyhlLHQsbil7aWYoIW4pZVt0XT0hMDtlbHNlIGlmKG4ubGVuZ3RoKXtsZXR7bG86cixoaTppfT1FdChuLHQpLGE9bltyXT49dD9uW3JdOm5baV07ZVthXT0hMH19ZnVuY3Rpb24gTWMoZSx0LG4scil7bGV0IGk9ZS5fYWRhcHRlcixhPStpLnN0YXJ0T2YodFswXS52YWx1ZSxyKSxvPXRbdC5sZW5ndGgtMV0udmFsdWUscyxjO2ZvcihzPWE7czw9bztzPStpLmFkZChzLDEscikpYz1uW3NdLGM+PTAmJih0W2NdLm1ham9yPSEwKTtyZXR1cm4gdH1mdW5jdGlvbiBOYyhlLHQsbil7bGV0IHI9W10saT17fSxhPXQubGVuZ3RoLG8scztmb3Iobz0wO288YTsrK28pcz10W29dLGlbc109byxyLnB1c2goe3ZhbHVlOnMsbWFqb3I6ITF9KTtyZXR1cm4gYT09PTB8fCFuP3I6TWMoZSxyLGksbil9dmFyIFBjPWNsYXNzIGV4dGVuZHMgQmF7c3RhdGljIGlkPWB0aW1lYDtzdGF0aWMgZGVmYXVsdHM9e2JvdW5kczpgZGF0YWAsYWRhcHRlcnM6e30sdGltZTp7cGFyc2VyOiExLHVuaXQ6ITEscm91bmQ6ITEsaXNvV2Vla2RheTohMSxtaW5Vbml0OmBtaWxsaXNlY29uZGAsZGlzcGxheUZvcm1hdHM6e319LHRpY2tzOntzb3VyY2U6YGF1dG9gLGNhbGxiYWNrOiExLG1ham9yOntlbmFibGVkOiExfX19O2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119LHRoaXMuX3VuaXQ9YGRheWAsdGhpcy5fbWFqb3JVbml0PXZvaWQgMCx0aGlzLl9vZmZzZXRzPXt9LHRoaXMuX25vcm1hbGl6ZWQ9ITEsdGhpcy5fcGFyc2VPcHRzPXZvaWQgMH1pbml0KGUsdD17fSl7bGV0IG49ZS50aW1lfHw9e30scj10aGlzLl9hZGFwdGVyPW5ldyB3aS5fZGF0ZShlLmFkYXB0ZXJzLmRhdGUpO3IuaW5pdCh0KSxLZShuLmRpc3BsYXlGb3JtYXRzLHIuZm9ybWF0cygpKSx0aGlzLl9wYXJzZU9wdHM9e3BhcnNlcjpuLnBhcnNlcixyb3VuZDpuLnJvdW5kLGlzb1dlZWtkYXk6bi5pc29XZWVrZGF5fSxzdXBlci5pbml0KGUpLHRoaXMuX25vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkfXBhcnNlKGUsdCl7cmV0dXJuIGU9PT12b2lkIDA/bnVsbDpEYyh0aGlzLGUpfWJlZm9yZUxheW91dCgpe3N1cGVyLmJlZm9yZUxheW91dCgpLHRoaXMuX2NhY2hlPXtkYXRhOltdLGxhYmVsczpbXSxhbGw6W119fWRldGVybWluZURhdGFMaW1pdHMoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD10aGlzLl9hZGFwdGVyLG49ZS50aW1lLnVuaXR8fGBkYXlgLHttaW46cixtYXg6aSxtaW5EZWZpbmVkOmEsbWF4RGVmaW5lZDpvfT10aGlzLmdldFVzZXJCb3VuZHMoKTtmdW5jdGlvbiBzKGUpeyFhJiYhaXNOYU4oZS5taW4pJiYocj1NYXRoLm1pbihyLGUubWluKSksIW8mJiFpc05hTihlLm1heCkmJihpPU1hdGgubWF4KGksZS5tYXgpKX0oIWF8fCFvKSYmKHModGhpcy5fZ2V0TGFiZWxCb3VuZHMoKSksKGUuYm91bmRzIT09YHRpY2tzYHx8ZS50aWNrcy5zb3VyY2UhPT1gbGFiZWxzYCkmJnModGhpcy5nZXRNaW5NYXgoITEpKSkscj1OKHIpJiYhaXNOYU4ocik/cjordC5zdGFydE9mKERhdGUubm93KCksbiksaT1OKGkpJiYhaXNOYU4oaSk/aTordC5lbmRPZihEYXRlLm5vdygpLG4pKzEsdGhpcy5taW49TWF0aC5taW4ocixpLTEpLHRoaXMubWF4PU1hdGgubWF4KHIrMSxpKX1fZ2V0TGFiZWxCb3VuZHMoKXtsZXQgZT10aGlzLmdldExhYmVsVGltZXN0YW1wcygpLHQ9MS8wLG49LTEvMDtyZXR1cm4gZS5sZW5ndGgmJih0PWVbMF0sbj1lW2UubGVuZ3RoLTFdKSx7bWluOnQsbWF4Om59fWJ1aWxkVGlja3MoKXtsZXQgZT10aGlzLm9wdGlvbnMsdD1lLnRpbWUsbj1lLnRpY2tzLHI9bi5zb3VyY2U9PT1gbGFiZWxzYD90aGlzLmdldExhYmVsVGltZXN0YW1wcygpOnRoaXMuX2dlbmVyYXRlKCk7ZS5ib3VuZHM9PT1gdGlja3NgJiZyLmxlbmd0aCYmKHRoaXMubWluPXRoaXMuX3VzZXJNaW58fHJbMF0sdGhpcy5tYXg9dGhpcy5fdXNlck1heHx8cltyLmxlbmd0aC0xXSk7bGV0IGk9dGhpcy5taW4sYT10aGlzLm1heCxvPWt0KHIsaSxhKTtyZXR1cm4gdGhpcy5fdW5pdD10LnVuaXR8fChuLmF1dG9Ta2lwP09jKHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCx0aGlzLl9nZXRMYWJlbENhcGFjaXR5KGkpKTprYyh0aGlzLG8ubGVuZ3RoLHQubWluVW5pdCx0aGlzLm1pbix0aGlzLm1heCkpLHRoaXMuX21ham9yVW5pdD0hbi5tYWpvci5lbmFibGVkfHx0aGlzLl91bml0PT09YHllYXJgP3ZvaWQgMDpBYyh0aGlzLl91bml0KSx0aGlzLmluaXRPZmZzZXRzKHIpLGUucmV2ZXJzZSYmby5yZXZlcnNlKCksTmModGhpcyxvLHRoaXMuX21ham9yVW5pdCl9YWZ0ZXJBdXRvU2tpcCgpe3RoaXMub3B0aW9ucy5vZmZzZXRBZnRlckF1dG9za2lwJiZ0aGlzLmluaXRPZmZzZXRzKHRoaXMudGlja3MubWFwKGU9PitlLnZhbHVlKSl9aW5pdE9mZnNldHMoZT1bXSl7bGV0IHQ9MCxuPTAscixpO3RoaXMub3B0aW9ucy5vZmZzZXQmJmUubGVuZ3RoJiYocj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlWzBdKSx0PWUubGVuZ3RoPT09MT8xLXI6KHRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbMV0pLXIpLzIsaT10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlW2UubGVuZ3RoLTFdKSxuPWUubGVuZ3RoPT09MT9pOihpLXRoaXMuZ2V0RGVjaW1hbEZvclZhbHVlKGVbZS5sZW5ndGgtMl0pKS8yKTtsZXQgYT1lLmxlbmd0aDwzPy41Oi4yNTt0PUgodCwwLGEpLG49SChuLDAsYSksdGhpcy5fb2Zmc2V0cz17c3RhcnQ6dCxlbmQ6bixmYWN0b3I6MS8odCsxK24pfX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLl9hZGFwdGVyLHQ9dGhpcy5taW4sbj10aGlzLm1heCxyPXRoaXMub3B0aW9ucyxpPXIudGltZSxhPWkudW5pdHx8T2MoaS5taW5Vbml0LHQsbix0aGlzLl9nZXRMYWJlbENhcGFjaXR5KHQpKSxvPUYoci50aWNrcy5zdGVwU2l6ZSwxKSxzPWE9PT1gd2Vla2AmJmkuaXNvV2Vla2RheSxjPW10KHMpfHxzPT09ITAsbD17fSx1PXQsZCxmO2lmKGMmJih1PStlLnN0YXJ0T2YodSxgaXNvV2Vla2AscykpLHU9K2Uuc3RhcnRPZih1LGM/YGRheWA6YSksZS5kaWZmKG4sdCxhKT4xZTUqbyl0aHJvdyBFcnJvcih0K2AgYW5kIGArbitgIGFyZSB0b28gZmFyIGFwYXJ0IHdpdGggc3RlcFNpemUgb2YgYCtvK2AgYCthKTtsZXQgcD1yLnRpY2tzLnNvdXJjZT09PWBkYXRhYCYmdGhpcy5nZXREYXRhVGltZXN0YW1wcygpO2ZvcihkPXUsZj0wO2Q8bjtkPStlLmFkZChkLG8sYSksZisrKWpjKGwsZCxwKTtyZXR1cm4oZD09PW58fHIuYm91bmRzPT09YHRpY2tzYHx8Zj09PTEpJiZqYyhsLGQscCksT2JqZWN0LmtleXMobCkuc29ydChFYykubWFwKGU9PitlKX1nZXRMYWJlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX2FkYXB0ZXIsbj10aGlzLm9wdGlvbnMudGltZTtyZXR1cm4gbi50b29sdGlwRm9ybWF0P3QuZm9ybWF0KGUsbi50b29sdGlwRm9ybWF0KTp0LmZvcm1hdChlLG4uZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpfWZvcm1hdChlLHQpe2xldCBuPXRoaXMub3B0aW9ucy50aW1lLmRpc3BsYXlGb3JtYXRzLHI9dGhpcy5fdW5pdCxpPXR8fG5bcl07cmV0dXJuIHRoaXMuX2FkYXB0ZXIuZm9ybWF0KGUsaSl9X3RpY2tGb3JtYXRGdW5jdGlvbihlLHQsbixyKXtsZXQgaT10aGlzLm9wdGlvbnMsYT1pLnRpY2tzLmNhbGxiYWNrO2lmKGEpcmV0dXJuIEkoYSxbZSx0LG5dLHRoaXMpO2xldCBvPWkudGltZS5kaXNwbGF5Rm9ybWF0cyxzPXRoaXMuX3VuaXQsYz10aGlzLl9tYWpvclVuaXQsbD1zJiZvW3NdLHU9YyYmb1tjXSxkPW5bdF0sZj1jJiZ1JiZkJiZkLm1ham9yO3JldHVybiB0aGlzLl9hZGFwdGVyLmZvcm1hdChlLHJ8fChmP3U6bCkpfWdlbmVyYXRlVGlja0xhYmVscyhlKXtsZXQgdCxuLHI7Zm9yKHQ9MCxuPWUubGVuZ3RoO3Q8bjsrK3Qpcj1lW3RdLHIubGFiZWw9dGhpcy5fdGlja0Zvcm1hdEZ1bmN0aW9uKHIudmFsdWUsdCxlKX1nZXREZWNpbWFsRm9yVmFsdWUoZSl7cmV0dXJuIGU9PT1udWxsP05hTjooZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX1nZXRQaXhlbEZvclZhbHVlKGUpe2xldCB0PXRoaXMuX29mZnNldHMsbj10aGlzLmdldERlY2ltYWxGb3JWYWx1ZShlKTtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvckRlY2ltYWwoKHQuc3RhcnQrbikqdC5mYWN0b3IpfWdldFZhbHVlRm9yUGl4ZWwoZSl7bGV0IHQ9dGhpcy5fb2Zmc2V0cyxuPXRoaXMuZ2V0RGVjaW1hbEZvclBpeGVsKGUpL3QuZmFjdG9yLXQuZW5kO3JldHVybiB0aGlzLm1pbituKih0aGlzLm1heC10aGlzLm1pbil9X2dldExhYmVsU2l6ZShlKXtsZXQgdD10aGlzLm9wdGlvbnMudGlja3Msbj10aGlzLmN0eC5tZWFzdXJlVGV4dChlKS53aWR0aCxyPV90KHRoaXMuaXNIb3Jpem9udGFsKCk/dC5tYXhSb3RhdGlvbjp0Lm1pblJvdGF0aW9uKSxpPU1hdGguY29zKHIpLGE9TWF0aC5zaW4ociksbz10aGlzLl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zKDApLnNpemU7cmV0dXJue3c6bippK28qYSxoOm4qYStvKml9fV9nZXRMYWJlbENhcGFjaXR5KGUpe2xldCB0PXRoaXMub3B0aW9ucy50aW1lLG49dC5kaXNwbGF5Rm9ybWF0cyxyPW5bdC51bml0XXx8bi5taWxsaXNlY29uZCxpPXRoaXMuX3RpY2tGb3JtYXRGdW5jdGlvbihlLDAsTmModGhpcyxbZV0sdGhpcy5fbWFqb3JVbml0KSxyKSxhPXRoaXMuX2dldExhYmVsU2l6ZShpKSxvPU1hdGguZmxvb3IodGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoL2Eudzp0aGlzLmhlaWdodC9hLmgpLTE7cmV0dXJuIG8+MD9vOjF9Z2V0RGF0YVRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5kYXRhfHxbXSx0LG47aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHI9dGhpcy5nZXRNYXRjaGluZ1Zpc2libGVNZXRhcygpO2lmKHRoaXMuX25vcm1hbGl6ZWQmJnIubGVuZ3RoKXJldHVybiB0aGlzLl9jYWNoZS5kYXRhPXJbMF0uY29udHJvbGxlci5nZXRBbGxQYXJzZWRWYWx1ZXModGhpcyk7Zm9yKHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpZT1lLmNvbmNhdChyW3RdLmNvbnRyb2xsZXIuZ2V0QWxsUGFyc2VkVmFsdWVzKHRoaXMpKTtyZXR1cm4gdGhpcy5fY2FjaGUuZGF0YT10aGlzLm5vcm1hbGl6ZShlKX1nZXRMYWJlbFRpbWVzdGFtcHMoKXtsZXQgZT10aGlzLl9jYWNoZS5sYWJlbHN8fFtdLHQsbjtpZihlLmxlbmd0aClyZXR1cm4gZTtsZXQgcj10aGlzLmdldExhYmVscygpO2Zvcih0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWUucHVzaChEYyh0aGlzLHJbdF0pKTtyZXR1cm4gdGhpcy5fY2FjaGUubGFiZWxzPXRoaXMuX25vcm1hbGl6ZWQ/ZTp0aGlzLm5vcm1hbGl6ZShlKX1ub3JtYWxpemUoZSl7cmV0dXJuIE50KGUuc29ydChFYykpfX07ZnVuY3Rpb24gRmMoZSx0LG4pe2xldCByPTAsaT1lLmxlbmd0aC0xLGEsbyxzLGM7bj8odD49ZVtyXS5wb3MmJnQ8PWVbaV0ucG9zJiYoe2xvOnIsaGk6aX09RHQoZSxgcG9zYCx0KSkse3BvczphLHRpbWU6c309ZVtyXSx7cG9zOm8sdGltZTpjfT1lW2ldKToodD49ZVtyXS50aW1lJiZ0PD1lW2ldLnRpbWUmJih7bG86cixoaTppfT1EdChlLGB0aW1lYCx0KSkse3RpbWU6YSxwb3M6c309ZVtyXSx7dGltZTpvLHBvczpjfT1lW2ldKTtsZXQgbD1vLWE7cmV0dXJuIGw/cysoYy1zKSoodC1hKS9sOnN9KGNsYXNzIGV4dGVuZHMgUGN7c3RhdGljIGlkPWB0aW1lc2VyaWVzYDtzdGF0aWMgZGVmYXVsdHM9UGMuZGVmYXVsdHM7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5fdGFibGU9W10sdGhpcy5fbWluUG9zPXZvaWQgMCx0aGlzLl90YWJsZVJhbmdlPXZvaWQgMH1pbml0T2Zmc2V0cygpe2xldCBlPXRoaXMuX2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpLHQ9dGhpcy5fdGFibGU9dGhpcy5idWlsZExvb2t1cFRhYmxlKGUpO3RoaXMuX21pblBvcz1GYyh0LHRoaXMubWluKSx0aGlzLl90YWJsZVJhbmdlPUZjKHQsdGhpcy5tYXgpLXRoaXMuX21pblBvcyxzdXBlci5pbml0T2Zmc2V0cyhlKX1idWlsZExvb2t1cFRhYmxlKGUpe2xldHttaW46dCxtYXg6bn09dGhpcyxyPVtdLGk9W10sYSxvLHMsYyxsO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87KythKWM9ZVthXSxjPj10JiZjPD1uJiZyLnB1c2goYyk7aWYoci5sZW5ndGg8MilyZXR1cm5be3RpbWU6dCxwb3M6MH0se3RpbWU6bixwb3M6MX1dO2ZvcihhPTAsbz1yLmxlbmd0aDthPG87KythKWw9clthKzFdLHM9clthLTFdLGM9clthXSxNYXRoLnJvdW5kKChsK3MpLzIpIT09YyYmaS5wdXNoKHt0aW1lOmMscG9zOmEvKG8tMSl9KTtyZXR1cm4gaX1fZ2VuZXJhdGUoKXtsZXQgZT10aGlzLm1pbix0PXRoaXMubWF4LG49c3VwZXIuZ2V0RGF0YVRpbWVzdGFtcHMoKTtyZXR1cm4oIW4uaW5jbHVkZXMoZSl8fCFuLmxlbmd0aCkmJm4uc3BsaWNlKDAsMCxlKSwoIW4uaW5jbHVkZXModCl8fG4ubGVuZ3RoPT09MSkmJm4ucHVzaCh0KSxuLnNvcnQoKGUsdCk9PmUtdCl9X2dldFRpbWVzdGFtcHNGb3JUYWJsZSgpe2xldCBlPXRoaXMuX2NhY2hlLmFsbHx8W107aWYoZS5sZW5ndGgpcmV0dXJuIGU7bGV0IHQ9dGhpcy5nZXREYXRhVGltZXN0YW1wcygpLG49dGhpcy5nZXRMYWJlbFRpbWVzdGFtcHMoKTtyZXR1cm4gZT10Lmxlbmd0aCYmbi5sZW5ndGg/dGhpcy5ub3JtYWxpemUodC5jb25jYXQobikpOnQubGVuZ3RoP3Q6bixlPXRoaXMuX2NhY2hlLmFsbD1lLGV9Z2V0RGVjaW1hbEZvclZhbHVlKGUpe3JldHVybihGYyh0aGlzLl90YWJsZSxlKS10aGlzLl9taW5Qb3MpL3RoaXMuX3RhYmxlUmFuZ2V9Z2V0VmFsdWVGb3JQaXhlbChlKXtsZXQgdD10aGlzLl9vZmZzZXRzLG49dGhpcy5nZXREZWNpbWFsRm9yUGl4ZWwoZSkvdC5mYWN0b3ItdC5lbmQ7cmV0dXJuIEZjKHRoaXMuX3RhYmxlLG4qdGhpcy5fdGFibGVSYW5nZSt0aGlzLl9taW5Qb3MsITApfX0pO3ZhciBJYz17ZGF0YTp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9LG9wdGlvbnM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6KCk9Pih7fSl9LHBsdWdpbnM6e3R5cGU6QXJyYXksZGVmYXVsdDooKT0+W119LGRhdGFzZXRJZEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpgbGFiZWxgfSx1cGRhdGVNb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OnZvaWQgMH19LExjPXthcmlhTGFiZWw6e3R5cGU6U3RyaW5nfSxhcmlhRGVzY3JpYmVkYnk6e3R5cGU6U3RyaW5nfX0sUmM9e3R5cGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxkZXN0cm95RGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sLi4uSWMsLi4uTGN9LHpjPShlLHQpPT5PYmplY3QuYXNzaWduKGUsdCk7ZnVuY3Rpb24gQmMoZSl7cmV0dXJuIHMoZSk/ZChlKTplfWZ1bmN0aW9uIFZjKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTplO3JldHVybiBzKHQpP25ldyBQcm94eShlLHt9KTplfWZ1bmN0aW9uIEhjKGUsdCl7bGV0IG49ZS5vcHRpb25zO24mJnQmJk9iamVjdC5hc3NpZ24obix0KX1mdW5jdGlvbiBVYyhlLHQpe2UubGFiZWxzPXR9ZnVuY3Rpb24gV2MoZSx0LG4pe2xldCByPVtdO2UuZGF0YXNldHM9dC5tYXAodD0+e2xldCBpPWUuZGF0YXNldHMuZmluZChlPT5lW25dPT09dFtuXSk7cmV0dXJuIWl8fCF0LmRhdGF8fHIuaW5jbHVkZXMoaSk/ey4uLnR9OihyLnB1c2goaSksT2JqZWN0LmFzc2lnbihpLHQpLGkpfSl9ZnVuY3Rpb24gR2MoZSx0KXtsZXQgbj17bGFiZWxzOltdLGRhdGFzZXRzOltdfTtyZXR1cm4gVWMobixlLmxhYmVscyksV2MobixlLmRhdGFzZXRzLHQpLG59dmFyIEtjPWMoe3Byb3BzOlJjLHNldHVwKHQscil7bGV0e2V4cG9zZTppLHNsb3RzOnN9PXIsYz12KG51bGwpLGw9ZyhudWxsKTtpKHtjaGFydDpsfSk7bGV0IHU9KCk9PntpZighYy52YWx1ZSlyZXR1cm47bGV0e3R5cGU6ZSxkYXRhOm4sb3B0aW9uczpyLHBsdWdpbnM6aSxkYXRhc2V0SWRLZXk6YX09dCxvPVZjKEdjKG4sYSksbik7bC52YWx1ZT1uZXcgT28oYy52YWx1ZSx7dHlwZTplLGRhdGE6byxvcHRpb25zOnsuLi5yfSxwbHVnaW5zOml9KX0scD0oKT0+e2xldCBlPWQobC52YWx1ZSk7ZSYmKHQuZGVzdHJveURlbGF5PjA/c2V0VGltZW91dCgoKT0+e2UuZGVzdHJveSgpLGwudmFsdWU9bnVsbH0sdC5kZXN0cm95RGVsYXkpOihlLmRlc3Ryb3koKSxsLnZhbHVlPW51bGwpKX0sbT1lPT57ZS51cGRhdGUodC51cGRhdGVNb2RlKX07cmV0dXJuIG8odSksZihwKSxlKFsoKT0+dC5vcHRpb25zLCgpPT50LmRhdGFdLChlLG4pPT57bGV0W3IsaV09ZSxbbyxzXT1uLGM9ZChsLnZhbHVlKTtpZighYylyZXR1cm47bGV0IHU9ITE7aWYocil7bGV0IGU9QmMociksdD1CYyhvKTtlJiZlIT09dCYmKEhjKGMsZSksdT0hMCl9aWYoaSl7bGV0IGU9QmMoaS5sYWJlbHMpLG49QmMocy5sYWJlbHMpLHI9QmMoaS5kYXRhc2V0cyksYT1CYyhzLmRhdGFzZXRzKTtlIT09biYmKFVjKGMuY29uZmlnLmRhdGEsZSksdT0hMCksciYmciE9PWEmJihXYyhjLmNvbmZpZy5kYXRhLHIsdC5kYXRhc2V0SWRLZXkpLHU9ITApfXUmJmEoKCk9PnttKGMpfSl9LHtkZWVwOiEwfSksKCk9Pm4oYGNhbnZhc2Ase3JvbGU6YGltZ2AsImFyaWEtbGFiZWwiOnQuYXJpYUxhYmVsLCJhcmlhLWRlc2NyaWJlZGJ5Ijp0LmFyaWFEZXNjcmliZWRieSxyZWY6Y30sW24oYHBgLHt9LFtzLmRlZmF1bHQ/cy5kZWZhdWx0KCk6YGBdKV0pfX0pO2Z1bmN0aW9uIHFjKHQscil7cmV0dXJuIE9vLnJlZ2lzdGVyKHIpLGMoe3Byb3BzOkljLHNldHVwKHIsaSl7bGV0e2V4cG9zZTphfT1pLG89ZyhudWxsKSxzPWcobnVsbCk7ZSgoKT0+cy52YWx1ZT8uY2hhcnQ/P251bGwsZT0+e28udmFsdWU9ZX0se2ZsdXNoOmBzeW5jYH0pLGEoe2NoYXJ0Om99KTtsZXQgYz1lPT57cy52YWx1ZT1lfTtyZXR1cm4oKT0+bihLYyx6Yyh7cmVmOmN9LHt0eXBlOnQsLi4ucn0pKX19KX12YXIgSmM9cWMoYGxpbmVgLFNpKTtPby5yZWdpc3RlcihRcyxuYyxBcyxxcyxTaSxIbyxXbyx4cyk7ZnVuY3Rpb24gWWMoKXtsZXQgZT12KGBgKSxuPXYoYGApLHI9dihgYCk7ZnVuY3Rpb24gaSgpe2xldCB0PWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtlLnZhbHVlPXQuZ2V0UHJvcGVydHlWYWx1ZShgLS1mb3JlZ3JvdW5kYCkudHJpbSgpLG4udmFsdWU9dC5nZXRQcm9wZXJ0eVZhbHVlKGAtLW11dGVkLWZvcmVncm91bmRgKS50cmltKCksci52YWx1ZT10LmdldFByb3BlcnR5VmFsdWUoYC0tYm9yZGVyYCkudHJpbSgpfWxldCBhO3JldHVybiBvKCgpPT57aSgpLGE9d2luZG93Lm1hdGNoTWVkaWEoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylgKSxhLmFkZEV2ZW50TGlzdGVuZXIoYGNoYW5nZWAsaSl9KSx0KCgpPT57YT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2hhbmdlYCxpKX0pLHtmb3JlZ3JvdW5kOmUsbXV0ZWRGb3JlZ3JvdW5kOm4sYm9yZGVyOnJ9fXZhciBYYz1bYGFyaWEtbGFiZWxgXSxaYz1jKHtfX25hbWU6YFRpbWVTZXJpZXNDaGFydGAscHJvcHM6e2xhYmVsczp7fSxkYXRhc2V0czp7fSxjb21wYXJpc29uRGF0YXNldHM6e2RlZmF1bHQ6KCk9PltdfSxzdGFja2VkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdmFsdWVGb3JtYXR0ZXI6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpifSxhcmlhTGFiZWw6e319LHNldHVwKGUpe2xldCB0PWUsbj1gdGltZXNlcmllcy1jaGFydC1kZXNjLSR7aSgpfWAsYT1oKCgpPT50LmRhdGFzZXRzLmxlbmd0aD09PTB8fHQubGFiZWxzLmxlbmd0aD09PTA/YE5vIGRhdGEgZm9yIHRoaXMgcmFuZ2UuYDp0LmRhdGFzZXRzLm1hcChlPT57bGV0IG49ZS5kYXRhLmxlbmd0aD4wP2UuZGF0YVtlLmRhdGEubGVuZ3RoLTFdOjAscj1lLmRhdGEucmVkdWNlKChlLHQpPT5lK3QsMCk7cmV0dXJuYCR7ZS5sYWJlbH06IGxhdGVzdCAke3QudmFsdWVGb3JtYXR0ZXIobil9LCB0b3RhbCAke3QudmFsdWVGb3JtYXR0ZXIocil9IG92ZXIgJHt0LmxhYmVscy5sZW5ndGh9IGJ1Y2tldHMuYH0pLmpvaW4oYCBgKSkse2ZvcmVncm91bmQ6byxtdXRlZEZvcmVncm91bmQ6cyxib3JkZXI6Y309WWMoKTtmdW5jdGlvbiBkKGUpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShlKS50cmltKCl9bGV0IGY9aCgoKT0+e28udmFsdWU7bGV0IGU9dC5kYXRhc2V0cy5tYXAoZT0+e2xldCBuPWQoZS5jb2xvcik7cmV0dXJue2xhYmVsOmUubGFiZWwsZGF0YTplLmRhdGEsYm9yZGVyQ29sb3I6bixiYWNrZ3JvdW5kQ29sb3I6bixmaWxsOnQuc3RhY2tlZCxzdGFjazp0LnN0YWNrZWQ/YG1haW5gOnZvaWQgMCx0ZW5zaW9uOi4yLHBvaW50UmFkaXVzOjIsYm9yZGVyV2lkdGg6Mn19KSxuPXQuY29tcGFyaXNvbkRhdGFzZXRzLm1hcChlPT57bGV0IHQ9ZChlLmNvbG9yKTtyZXR1cm57bGFiZWw6YCR7ZS5sYWJlbH0ke2UubGFiZWxTdWZmaXg/P2BgfWAsZGF0YTplLmRhdGEsYm9yZGVyQ29sb3I6dCxiYWNrZ3JvdW5kQ29sb3I6YHRyYW5zcGFyZW50YCxib3JkZXJEYXNoOls2LDRdLGZpbGw6ITEsdGVuc2lvbjouMixwb2ludFJhZGl1czowLGJvcmRlcldpZHRoOjEuNX19KTtyZXR1cm57bGFiZWxzOnQubGFiZWxzLGRhdGFzZXRzOlsuLi5lLC4uLm5dfX0pLGc9aCgoKT0+KHtyZXNwb25zaXZlOiEwLG1haW50YWluQXNwZWN0UmF0aW86ITEsYW5pbWF0aW9uOiExLGludGVyYWN0aW9uOnttb2RlOmBpbmRleGAsaW50ZXJzZWN0OiExfSxzY2FsZXM6e3g6e3N0YWNrZWQ6dC5zdGFja2VkLGdyaWQ6e2NvbG9yOmMudmFsdWUsZGlzcGxheTohMX0sdGlja3M6e2NvbG9yOnMudmFsdWV9fSx5OntzdGFja2VkOnQuc3RhY2tlZCxiZWdpbkF0WmVybzohMCxncmlkOntjb2xvcjpjLnZhbHVlfSx0aWNrczp7Y29sb3I6cy52YWx1ZSxjYWxsYmFjazplPT50LnZhbHVlRm9ybWF0dGVyKE51bWJlcihlKSl9fX0scGx1Z2luczp7bGVnZW5kOntkaXNwbGF5OnQuZGF0YXNldHMubGVuZ3RoPjF8fHQuY29tcGFyaXNvbkRhdGFzZXRzLmxlbmd0aD4wLGxhYmVsczp7Y29sb3I6by52YWx1ZX19LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6ZT0+YCR7ZS5kYXRhc2V0LmxhYmVsfTogJHt0LnZhbHVlRm9ybWF0dGVyKGUucGFyc2VkLnk/PzApfWB9fX19KSk7cmV0dXJuKHQsaSk9PihfKCksdShgZGl2YCx7Y2xhc3M6YGgtNzIgdy1mdWxsYCxyb2xlOmBpbWdgLCJhcmlhLWxhYmVsIjplLmFyaWFMYWJlbCwiYXJpYS1kZXNjcmliZWRieSI6bn0sW20ocChKYykse2RhdGE6Zi52YWx1ZSxvcHRpb25zOmcudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBvcHRpb25zYF0pLGwoYHBgLHtpZDpuLGNsYXNzOmBzci1vbmx5YH0scihhLnZhbHVlKSwxKV0sOCxYYykpfX0pO2V4cG9ydHtTIGFzIG4sWmMgYXMgdH07", + "aW1wb3J0e0FuIGFzIGUsRCBhcyB0LEUgYXMgbixMciBhcyByLE1yIGFzIGksUyBhcyBhLFQgYXMgbyxYdCBhcyBzLF9uIGFzIGMsYiBhcyBsLGMgYXMgdSxjaSBhcyBkLGNuIGFzIGYsZWkgYXMgcCxmIGFzIG0sZyBhcyBoLGduIGFzIGcsaXIgYXMgXyxsbiBhcyB2LG4gYXMgeSxvaSBhcyBiLG9uIGFzIHgsdW4gYXMgUyx2aSBhcyBDLHcsd2kgYXMgVCx5biBhcyBFfWZyb20iLi9Ta2VsZXRvbi1EME5udkhZMS5qcyI7aW1wb3J0e18gYXMgRCxnIGFzIE8sbCBhcyBrLHQgYXMgQX1mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO2ltcG9ydHt0IGFzIGp9ZnJvbSIuL0Vycm9yU3RhdGUtRERKT0tKbHouanMiO2ltcG9ydHtTIGFzIE0sYyBhcyBOLGsgYXMgUCx0IGFzIEYsdSBhcyBJLHggYXMgTH1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHtpIGFzIFIsdCBhcyB6fWZyb20iLi9jb2x1bW5zLUNvZWNuZjc0LmpzIjtpbXBvcnR7dCBhcyBCfWZyb20iLi9Mb2FkU3RhdGVWaWV3LUJFYnNleDdZLmpzIjtpbXBvcnR7biBhcyBWLHQgYXMgSH1mcm9tIi4vdXNlU2VhcmNoUXVlcnktQlNrQzhiR2QuanMiO2ltcG9ydHt0IGFzIFV9ZnJvbSIuL0NsYW1wZWRSYW5nZU5vdGljZS1DaF9IcXlCTy5qcyI7dmFyIFc9YG5vdCBvYnNlcnZlZCB5ZXQg4oCUIG5vIHRyYWZmaWMgYW5kIHByb2JlcyBkaXNhYmxlZCBvciBub3QgeWV0IHJ1bmA7ZnVuY3Rpb24gRyhlKXtsZXQgdD1OKGUubGFzdENoZWNrKTtyZXR1cm4gdD9gdW5oZWFsdGh5ICgke3R9KWA6YHVuaGVhbHRoeWB9ZnVuY3Rpb24gSyhlKXtsZXQgdD1lLmNvbnNlY3V0aXZlRmFpbHVyZXM9PT0xP2BmYWlsdXJlYDpgZmFpbHVyZXNgLG49ZS5zb3VyY2U/YCB2aWEgJHtlLnNvdXJjZX1gOmBgLHI9YCR7ZS5jb25zZWN1dGl2ZUZhaWx1cmVzfSBjb25zZWN1dGl2ZSAke3R9JHtufWA7cmV0dXJuIGUubGFzdEVycm9yP2Ake3J9OiAke2UubGFzdEVycm9yfWA6cn1mdW5jdGlvbiBxKGUpe2xldCB0PU4oZS5sYXN0Q2hlY2spO3JldHVybiB0P2Uuc291cmNlP2Ake3R9IHZpYSAke2Uuc291cmNlfWA6dDplLnNvdXJjZT9gdmlhICR7ZS5zb3VyY2V9YDpgYH1mdW5jdGlvbiBKKGUpe2lmKGUuY29uc2VjdXRpdmVGYWlsdXJlczw9MCYmIWUubGFzdEVycm9yKXJldHVybiBXO2xldCB0PWUuY29uc2VjdXRpdmVGYWlsdXJlcz09PTE/YGZhaWx1cmVgOmBmYWlsdXJlc2Asbj1lLnNvdXJjZT9gIHZpYSAke2Uuc291cmNlfWA6YGAscj1gJHtlLmNvbnNlY3V0aXZlRmFpbHVyZXN9ICR7dH0gc28gZmFyJHtufWA7cmV0dXJuIGUubGFzdEVycm9yP2Ake3J9OiAke2UubGFzdEVycm9yfWA6cn1mdW5jdGlvbiBZKHQpe2lmKHQuc3RhdGU9PT1gdW5oZWFsdGh5YClyZXR1cm4gZShGLHthczpgc3BhbmAsdmFyaWFudDpgZGVzdHJ1Y3RpdmVgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6Syh0KX0sKCk9PkcodCkpO2lmKHQuc3RhdGU9PT1gaGVhbHRoeWApe2xldCBuPXQubGF0ZW5jeU1zPT09dm9pZCAwP2BgOmAgwrcgJHtJKHQubGF0ZW5jeU1zKX1gO3JldHVybiBlKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6cSh0KX0sYGhlYWx0aHkke259YCl9cmV0dXJuIGUoRix7YXM6YHNwYW5gLHZhcmlhbnQ6YG91dGxpbmVgLGNsYXNzOmBmb250LW5vcm1hbGAsdGl0bGU6Sih0KX0sKCk9PmB1bmtub3duYCl9ZnVuY3Rpb24gWCh0KXtyZXR1cm5be2lkOmBuYW1lYCxoZWFkZXI6YE5hbWVgLGFjY2Vzc29yRm46ZT0+ZS5uYW1lLGNlbGw6KHtyb3c6bn0pPT50P2UoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsY2xhc3M6YGN1cnNvci1wb2ludGVyIHJvdW5kZWQtc20gZm9udC1tZWRpdW0gaG92ZXI6dGV4dC1wcmltYXJ5IGhvdmVyOnVuZGVybGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MGAsdGl0bGU6YFZpZXcgJHtuLm9yaWdpbmFsLm5hbWV9J3MgY2FsbGVyc2Asb25DbGljazplPT57ZS5zdG9wUHJvcGFnYXRpb24oKSx0KG4ub3JpZ2luYWwpfX0sbi5vcmlnaW5hbC5uYW1lKTplKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sbi5vcmlnaW5hbC5uYW1lKX0se2lkOmB1cmxgLGhlYWRlcjpgVVJMYCxhY2Nlc3NvckZuOmU9PmUudXJsLGNlbGw6KHtyb3c6dH0pPT5lKGBzcGFuYCx7Y2xhc3M6YGJsb2NrIG1heC13LXhzIHRydW5jYXRlIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsdGl0bGU6dC5vcmlnaW5hbC51cmx9LHQub3JpZ2luYWwudXJsKX0se2lkOmBoZWFsdGhgLGhlYWRlcjpgSGVhbHRoYCxlbmFibGVTb3J0aW5nOiExLGFjY2Vzc29yRm46ZT0+ZS5oZWFsdGguc3RhdGUsY2VsbDooe3JvdzplfSk9PlkoZS5vcmlnaW5hbC5oZWFsdGgpfSx7aWQ6YGFjY2Vzc2AsaGVhZGVyOmBBY2Nlc3NgLGVuYWJsZVNvcnRpbmc6ITEsYWNjZXNzb3JGbjplPT4oZS5hY2Nlc3M/P1tdKS5qb2luKGAsIGApLGNlbGw6KHtyb3c6dH0pPT57bGV0IG49dC5vcmlnaW5hbC5hY2Nlc3M7cmV0dXJuIG49PW51bGw/ZShgc3BhbmAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgQWxsIGdyb3Vwc2ApOm4ubGVuZ3RoPT09MD9lKGBzcGFuYCx7Y2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBObyBncm91cHNgKTplKGBkaXZgLHtjbGFzczpgZmxleCBmbGV4LXdyYXAgZ2FwLTEuNWB9LG4ubWFwKHQ9PmUoRix7a2V5OnQsYXM6YHNwYW5gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6YGZvbnQtbW9ubyBmb250LW5vcm1hbGB9LCgpPT50KSkpfX0seihgcmVxTWluYCxgcmVxL21pbmAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1Blck1pbnV0ZSkseihgcmVxRGF5YCxgcmVxL2RheWAsZT0+ZS5jb3VudGVycy5yZXF1ZXN0c1BlckRheSkseihgcmVxTW9udGhgLGByZXEvbW9udGhgLGU9PmUuY291bnRlcnMucmVxdWVzdHNQZXJNb250aCldfWZ1bmN0aW9uIFooZSx0KXtyZXR1cm5gJHtlfS8ke3R9YH1mdW5jdGlvbiBlZShlKXtsZXQgdD1lLmluZGV4T2YoYC9gKTtpZih0PT09LTEpcmV0dXJuIG51bGw7bGV0IG49ZS5zbGljZSgwLHQpLHI9ZS5zbGljZSh0KzEpO3JldHVybiByPT09YGB8fG4hPT1gbWNwYCYmbiE9PWBhZ2VudGA/bnVsbDp7a2luZDpuLG5hbWU6cn19ZnVuY3Rpb24gdGUoZSx0KXtsZXQgbj1lZShlKTtpZihuKXJldHVybntraW5kOmByZWZgLHJlZjpaKG4ua2luZCxuLm5hbWUpLG5hbWU6bi5uYW1lfTtpZih0PT09bnVsbClyZXR1cm57a2luZDpgcGVuZGluZ2B9O2xldCByPXQubWNwU2VydmVycy5zb21lKHQ9PnQubmFtZT09PWUpLGk9dC5hZ2VudHMuc29tZSh0PT50Lm5hbWU9PT1lKTtyZXR1cm4gciYmaT97a2luZDpgbm90aWNlYCxtZXNzYWdlOmAiJHtlfSIgbWF0Y2hlcyBib3RoIGFuIE1DUCBzZXJ2ZXIgYW5kIGFuIGFnZW50IOKAlCB1c2UgIm1jcC8ke2V9IiBvciAiYWdlbnQvJHtlfSIgdG8gcGljayBvbmUuYH06cj97a2luZDpgcmVmYCxyZWY6WihgbWNwYCxlKSxuYW1lOmV9Omk/e2tpbmQ6YHJlZmAscmVmOlooYGFnZW50YCxlKSxuYW1lOmV9OntraW5kOmBub3RpY2VgLG1lc3NhZ2U6YE5vIE1DUCBzZXJ2ZXIgb3IgYWdlbnQgbmFtZWQgIiR7ZX0iIGlzIGNvbmZpZ3VyZWQuYH19ZnVuY3Rpb24gUShlKXtsZXQgdD1lLmluZGV4T2YoYC9gKTtpZih0PT09LTEpcmV0dXJue2tpbmQ6YGAsdGFyZ2V0OmBgLGNhbGxlcjplfTtsZXQgbj1lLnNsaWNlKDAsdCkscj1lLnNsaWNlKHQrMSksaT1yLmluZGV4T2YoYC9gKTtyZXR1cm4gaT09PS0xP3traW5kOm4sdGFyZ2V0OnIsY2FsbGVyOmBgfTp7a2luZDpuLHRhcmdldDpyLnNsaWNlKDAsaSksY2FsbGVyOnIuc2xpY2UoaSsxKX19ZnVuY3Rpb24gbmUodCl7bGV0IG49W107cmV0dXJuIHQmJm4ucHVzaCh7aWQ6YHRhcmdldGAsaGVhZGVyOmBUYXJnZXRgLGFjY2Vzc29yRm46ZT0+e2xldCB0PVEoZS5pZCk7cmV0dXJuYCR7dC5raW5kfS8ke3QudGFyZ2V0fWB9LGNlbGw6KHtyb3c6dH0pPT57bGV0IG49USh0Lm9yaWdpbmFsLmlkKTtyZXR1cm4gZShgc3BhbmAse2NsYXNzOmBmb250LW1vbm8gdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgJHtuLmtpbmR9LyR7bi50YXJnZXR9YCl9fSksbi5wdXNoKHtpZDpgY2FsbGVyYCxoZWFkZXI6YENhbGxlcmAsYWNjZXNzb3JGbjplPT5RKGUuaWQpLmNhbGxlcnx8ZS5pZCxjZWxsOih7cm93OnR9KT0+e2xldCBuPVEodC5vcmlnaW5hbC5pZCkuY2FsbGVyO3JldHVybiBlKGBzcGFuYCx7Y2xhc3M6YGZvbnQtbWVkaXVtYH0sbnx8dC5vcmlnaW5hbC5pZCl9fSksbi5wdXNoKHooYHJlcXVlc3RzYCxgUmVxdWVzdHNgLGU9PmUudmFsdWVzLnJlcT8/MCkpLG59dmFyICQ9RSh7X19uYW1lOmBUYXJnZXRDYWxsZXJzYCxwcm9wczp7dGFyZ2V0Ont9LHRpdGxlOnt9LGxpbWl0OntkZWZhdWx0OjEwfX0sc2V0dXAoZSl7bGV0IHM9ZSxwPUEoKSxoPWQoW10pLHY9ZCghMSkseT1kKCExKSxiPWQoYGApLFM9MDthc3luYyBmdW5jdGlvbiBFKCl7bGV0IGU9KytTO3YudmFsdWU9ITAsaC52YWx1ZT1bXSx5LnZhbHVlPSExLGIudmFsdWU9YGA7dHJ5e2xldHt3aW5kb3c6dCxzcGFuOm59PXUocC53aW5kb3cscC5zcGFuKSxyPWF3YWl0IGwobSh7a2luZDpgdGFyZ2V0Y2FsbGVyYCx3aW5kb3c6dCxzcGFuOm4sbWV0cmljczpbYHJlcWBdLGxpbWl0OnMubGltaXQsdGFyZ2V0OnMudGFyZ2V0fSkpO2lmKGUhPT1TKXJldHVybjtoLnZhbHVlPXIucm93cyx5LnZhbHVlPSEwfWNhdGNoKHQpe2lmKGUhPT1TKXJldHVybjtiLnZhbHVlPWEodCl9ZmluYWxseXtlPT09UyYmKHYudmFsdWU9ITEpfX1pKFsoKT0+cy50YXJnZXQsKCk9PnAud2luZG93LCgpPT5wLnNwYW5dLCgpPT52b2lkIEUoKSx7aW1tZWRpYXRlOiEwfSk7bGV0IEQ9eCgoKT0+bmUoIXMudGFyZ2V0KSksTz14KCgpPT5MKHtsb2FkaW5nOnYudmFsdWUsaGFzRGF0YTp5LnZhbHVlLGVycm9yOmIudmFsdWV9KSk7cmV0dXJuKGksYSk9PihfKCksZihDKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2MoQyhvKSxudWxsLHtkZWZhdWx0OnIoKCk9PltjKEModyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bZyhUKGUudGl0bGUpLDEpXSksXzoxfSksYyhDKGspLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmFbMF18fD1bZyhgUmFua2VkIGJ5IHJlcXVlc3RzLCBtb3N0IHJlY2VudCBkYXkvbW9udGggd2luZG93IGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgcmFuZ2UuYCwtMSldXSksXzoxfSldKSxfOjF9KSxjKEMobikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0zYH0se2RlZmF1bHQ6cigoKT0+W2MoVSx7d2luZG93OkMocCkud2luZG93LHNwYW46QyhwKS5zcGFufSxudWxsLDgsW2B3aW5kb3dgLGBzcGFuYF0pLGMoQix7c3RhdGU6Ty52YWx1ZSxlcnJvcjpiLnZhbHVlLCJvbi1yZXRyeSI6RSxza2VsZXRvbjpgdGFibGVgLHJvd3M6NSxjb2xzOkQudmFsdWUubGVuZ3RofSx7ZGVmYXVsdDpyKCgpPT5bYyhSLHtjb2x1bW5zOkQudmFsdWUsZGF0YTpoLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpgbm8gY2FsbGVycyByZWNvcmRlZCBpbiB0aGlzIHdpbmRvd2B9LG51bGwsOCxbYGNvbHVtbnNgLGBkYXRhYF0pXSksXzoxfSw4LFtgc3RhdGVgLGBlcnJvcmAsYGNvbHNgXSldKSxfOjF9KV0pLF86MX0pKX19KSxyZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxpZT1FKHtfX25hbWU6YFRhcmdldHNWaWV3YCxlbWl0czpbYHNlbGVjdGBdLHNldHVwKGUse2VtaXQ6aX0pe2xldCBhPWgoKSxsPXgoKCk9PmEudGFyZ2V0cyksdT1pO2Z1bmN0aW9uIGQoZSl7cmV0dXJuIHQ9PnUoYHNlbGVjdGAsWihlLHQubmFtZSksdC5uYW1lKX1sZXR7cXVlcnk6bSxub3JtYWxpemVkOnYsaGFzUXVlcnk6eX09SCgpO2Z1bmN0aW9uIGIoZSl7cmV0dXJuIGUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHYudmFsdWUpfWxldCBUPXgoKCk9PntsZXQgZT1sLnZhbHVlPy5tY3BTZXJ2ZXJzPz9bXTtyZXR1cm4geS52YWx1ZT9lLmZpbHRlcihiKTplfSksRT14KCgpPT57bGV0IGU9bC52YWx1ZT8uYWdlbnRzPz9bXTtyZXR1cm4geS52YWx1ZT9lLmZpbHRlcihiKTplfSk7ZnVuY3Rpb24gRChlLHQpe3JldHVybiBlP3kudmFsdWUmJnQ9PT0wP2BubyB0YXJnZXRzIG1hdGNoICIke20udmFsdWV9ImA6YG5vbmVgOmBub25lIGNvbmZpZ3VyZWRgfWxldCBPPXgoKCk9PkQobC52YWx1ZT8ubWNwU2VydmVycy5sZW5ndGg/PzAsVC52YWx1ZS5sZW5ndGgpKSxBPXgoKCk9PkQobC52YWx1ZT8uYWdlbnRzLmxlbmd0aD8/MCxFLnZhbHVlLmxlbmd0aCkpLE49eCgoKT0+TCh7bG9hZGluZzohMCxoYXNEYXRhOmEudGFyZ2V0cyE9PW51bGwsZXJyb3I6YS5lcnJvcn0pKSxGPXgoKCk9Pk4udmFsdWU9PT1gcmVhZHlgJiYobC52YWx1ZT8ubWNwU2VydmVycy5sZW5ndGg/PzApPT09MCYmKGwudmFsdWU/LmFnZW50cy5sZW5ndGg/PzApPT09MCksST1YKGQoYG1jcGApKSx6PVgoZChgYWdlbnRgKSk7cmV0dXJuKGUsaSk9PihfKCksUyhgZGl2YCxyZSxbYyhWLHttb2RlbFZhbHVlOkMobSksIm9uVXBkYXRlOm1vZGVsVmFsdWUiOmlbMF18fD1lPT5wKG0pP20udmFsdWU9ZTpudWxsLHBsYWNlaG9sZGVyOmBGaWx0ZXIgTUNQIHNlcnZlcnMgb3IgYWdlbnRzYCxjbGFzczpgbWF4LXctc21gfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pLEYudmFsdWU/KF8oKSxmKEModCkse2tleTowfSx7ZGVmYXVsdDpyKCgpPT5bYyhDKG4pLG51bGwse2RlZmF1bHQ6cigoKT0+W2MoUCx7dGl0bGU6YE5vIE1DUCBzZXJ2ZXJzIG9yIGFnZW50cyBjb25maWd1cmVkLmAsZGVzY3JpcHRpb246YEFkZCBhbiBtY3BTZXJ2ZXJzIG9yIGFnZW50cyBlbnRyeSB0byB0aGUgbWlkZGxld2FyZSBjb25maWcgdG8gc2VlIHRoZW0gaGVyZS5gfSldKSxfOjF9KV0pLF86MX0pKTooXygpLFMocyx7a2V5OjF9LFtjKEModCksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bYyhDKG8pLG51bGwse2RlZmF1bHQ6cigoKT0+W2MoQyh3KSxudWxsLHtkZWZhdWx0OnIoKCk9PlsuLi5pWzFdfHw9W2coYE1DUCBzZXJ2ZXJzYCwtMSldXSksXzoxfSksYyhDKGspLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLmlbMl18fD1bZyhgIENvbmZpZ3VyZWQgTUNQIHByb3h5IHRhcmdldHMsIHRoZSBncm91cHMgYWxsb3dlZCB0byByZWFjaCB0aGVtLCBhbmQgdGhlaXIgcmVxdWVzdCBjb3VudGVycy4gQ2xpY2sgYSBuYW1lIHRvIHNlZSBpdHMgY2FsbGVycy4gYCwtMSldXSksXzoxfSldKSxfOjF9KSxjKEMobiksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bTi52YWx1ZT09PWBza2VsZXRvbmA/KF8oKSxmKE0se2tleTowLHJvd3M6Myxjb2xzOkMoSSkubGVuZ3RofSxudWxsLDgsW2Bjb2xzYF0pKTpOLnZhbHVlPT09YGVycm9yYD8oXygpLGYoaix7a2V5OjEsbWVzc2FnZTpDKGEpLmVycm9yfSxudWxsLDgsW2BtZXNzYWdlYF0pKTooXygpLGYoUix7a2V5OjIsY29sdW1uczpDKEkpLGRhdGE6VC52YWx1ZSwiZW1wdHktbWVzc2FnZSI6Ty52YWx1ZX0sbnVsbCw4LFtgY29sdW1uc2AsYGRhdGFgLGBlbXB0eS1tZXNzYWdlYF0pKV0pLF86MX0pXSksXzoxfSksYyhDKHQpLG51bGwse2RlZmF1bHQ6cigoKT0+W2MoQyhvKSxudWxsLHtkZWZhdWx0OnIoKCk9PltjKEModyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uaVszXXx8PVtnKGBBZ2VudHNgLC0xKV1dKSxfOjF9KSxjKEMoayksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uaVs0XXx8PVtnKGAgQ29uZmlndXJlZCBBMkEgYWdlbnQgcHJveHkgdGFyZ2V0cywgdGhlIGdyb3VwcyBhbGxvd2VkIHRvIHJlYWNoIHRoZW0sIGFuZCB0aGVpciByZXF1ZXN0IGNvdW50ZXJzLiBDbGljayBhIG5hbWUgdG8gc2VlIGl0cyBjYWxsZXJzLiBgLC0xKV1dKSxfOjF9KV0pLF86MX0pLGMoQyhuKSxudWxsLHtkZWZhdWx0OnIoKCk9PltOLnZhbHVlPT09YHNrZWxldG9uYD8oXygpLGYoTSx7a2V5OjAscm93czozLGNvbHM6Qyh6KS5sZW5ndGh9LG51bGwsOCxbYGNvbHNgXSkpOk4udmFsdWU9PT1gZXJyb3JgPyhfKCksZihqLHtrZXk6MSxtZXNzYWdlOkMoYSkuZXJyb3J9LG51bGwsOCxbYG1lc3NhZ2VgXSkpOihfKCksZihSLHtrZXk6Mixjb2x1bW5zOkMoeiksZGF0YTpFLnZhbHVlLCJlbXB0eS1tZXNzYWdlIjpBLnZhbHVlfSxudWxsLDgsW2Bjb2x1bW5zYCxgZGF0YWAsYGVtcHR5LW1lc3NhZ2VgXSkpXSksXzoxfSldKSxfOjF9KV0sNjQpKV0pKX19KSxhZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTZgfSxvZT1FKHtfX25hbWU6YFRhcmdldHNQYWdlYCxzZXR1cChlKXtsZXQgdD15KCksbj1oKCksaT14KCgpPT50LnBhcmFtcy50YXJnZXQ/P2BgKSxhPXgoKCk9PmkudmFsdWU9PT1gYD9udWxsOnRlKGkudmFsdWUsbi50YXJnZXRzKSksbz1iKHt9KSxzPXgoKCk9PntsZXQgZT1hLnZhbHVlO3JldHVybiBvW2kudmFsdWVdPz8oZT8ua2luZD09PWByZWZgP2UubmFtZTppLnZhbHVlKX0pO2Z1bmN0aW9uIGwoZSxuKXtvW2VdPW4sdC5nb1RvKGB0YXJnZXRzYCx7Li4udC5wYXJhbXMsdGFyZ2V0OmV9KX1yZXR1cm4oZSx0KT0+KF8oKSxTKGBkaXZgLGFlLFtjKGllLHtvblNlbGVjdDpsfSksYS52YWx1ZT8ua2luZD09PWByZWZgPyhfKCksZigkLHtrZXk6MCx0YXJnZXQ6YS52YWx1ZS5yZWYsdGl0bGU6YENhbGxlcnMgb2YgJHtzLnZhbHVlfWB9LG51bGwsOCxbYHRhcmdldGAsYHRpdGxlYF0pKTphLnZhbHVlPy5raW5kPT09YG5vdGljZWA/KF8oKSxmKEMoRCkse2tleToxLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6cigoKT0+W2MoQyhPKSxudWxsLHtkZWZhdWx0OnIoKCk9PltnKFQoYS52YWx1ZS5tZXNzYWdlKSwxKV0pLF86MX0pXSksXzoxfSkpOnYoYGAsITApLGMoJCx7dGl0bGU6YFRvcCBjYWxsZXJzLCBhY3Jvc3MgZXZlcnkgdGFyZ2V0YH0pXSkpfX0pO2V4cG9ydHtvZSBhcyBkZWZhdWx0fTs=", ), }, - "TryLongerRangeButton-CjkUnaOz.js": { + "TryLongerRangeButton-Bh19yiv8.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0UgYXMgZSxGciBhcyB0LF9uIGFzIG4sZ2kgYXMgcixpLGluIGFzIGEsbW4gYXMgbyxuciBhcyBzLG9uIGFzIGMsc24gYXMgbH1mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO2ltcG9ydHt0IGFzIHV9ZnJvbSIuL2luZGV4LWR5d1M4T3BULmpzIjtmdW5jdGlvbiBkKGUpe3JldHVybiFOdW1iZXIuaXNGaW5pdGUoZSl8fGU8Ljg/YG5vcm1hbGA6ZTwxP2BhbWJlcmA6YHJlZGB9dmFyIGY9MWU2LHA9e3JlcU1pbjpgcmVxL21pbmAscmVxRGF5OmByZXEvZGF5YCx0b2tEYXk6YHRva2VucyAoaW4rb3V0KS9kYXlgLHRva01vbnRoOmB0b2tlbnMgKGluK291dCkvbW9udGhgLGNvc3REYXk6YGNvc3QvZGF5YCxjb3N0TW9udGg6YGNvc3QvbW9udGhgfTtmdW5jdGlvbiBtKGUsdCxuKXtyZXR1cm57aWQ6ZSx1c2VkOnQsbGltaXQ6bixyYXRpbzp0L259fWZ1bmN0aW9uIGgoZSl7bGV0IHQ9ZS5saW1pdHM7aWYoIXR8fGUuc3RvcmVEb3duKXJldHVybltdO2xldCBuPVtdO2lmKHQucmVxdWVzdHNQZXJNaW51dGUmJm4ucHVzaChtKGByZXFNaW5gLGUucmVxdWVzdHNQZXJNaW51dGUsdC5yZXF1ZXN0c1Blck1pbnV0ZSkpLHQucmVxdWVzdHNQZXJEYXkmJm4ucHVzaChtKGByZXFEYXlgLGUucmVxdWVzdHNQZXJEYXksdC5yZXF1ZXN0c1BlckRheSkpLHQudG9rZW5zUGVyRGF5JiZuLnB1c2gobShgdG9rRGF5YCxlLnRva2Vuc0luUGVyRGF5K2UudG9rZW5zT3V0UGVyRGF5LHQudG9rZW5zUGVyRGF5KSksdC50b2tlbnNQZXJNb250aCYmbi5wdXNoKG0oYHRva01vbnRoYCxlLnRva2Vuc0luUGVyTW9udGgrZS50b2tlbnNPdXRQZXJNb250aCx0LnRva2Vuc1Blck1vbnRoKSksdC5jb3N0UGVyRGF5VVNEKXtsZXQgcj1NYXRoLnJvdW5kKHQuY29zdFBlckRheVVTRCpmKTtyPjAmJm4ucHVzaChtKGBjb3N0RGF5YCxlLmNvc3RQZXJEYXlNaWNyb1VzZCxyKSl9aWYodC5jb3N0UGVyTW9udGhVU0Qpe2xldCByPU1hdGgucm91bmQodC5jb3N0UGVyTW9udGhVU0QqZik7cj4wJiZuLnB1c2gobShgY29zdE1vbnRoYCxlLmNvc3RQZXJNb250aE1pY3JvVXNkLHIpKX1yZXR1cm4gbn1mdW5jdGlvbiBnKGUpe2xldCB0PWUuZ2V0VVRDRnVsbFllYXIoKSxuPWUuZ2V0VVRDTW9udGgoKSxyPURhdGUuVVRDKHQsbiwxKSxpPURhdGUuVVRDKHQsbisxLDEpO3JldHVybihlLmdldFRpbWUoKS1yKS8oaS1yKX1mdW5jdGlvbiBfKGUsdCl7cmV0dXJuIHQ8LjAyP251bGw6TWF0aC5yb3VuZChlL3QpfWZ1bmN0aW9uIHYoZSx0KXtpZihlPT09bnVsbHx8dD09PXZvaWQgMHx8dDw9MClyZXR1cm57bGltaXRNaWNyb3M6bnVsbCxyZW1haW5pbmdNaWNyb3M6bnVsbCx3aWxsRXhjZWVkOiExfTtsZXQgbj1NYXRoLnJvdW5kKHQqZikscj1uLWU7cmV0dXJue2xpbWl0TWljcm9zOm4scmVtYWluaW5nTWljcm9zOnIsd2lsbEV4Y2VlZDpyPDB9fXZhciB5PW4oe19fbmFtZTpgVHJ5TG9uZ2VyUmFuZ2VCdXR0b25gLHNldHVwKG4pe2xldCBkPXUoKSxmPWEoKCk9PntsZXQgZT1pLmluZGV4T2YoZC5yYW5nZSk7cmV0dXJuIGlbZSsxXT8/bnVsbH0pO2Z1bmN0aW9uIHAoKXtmLnZhbHVlJiZkLnNldEZpbHRlcnMoe3JhbmdlOmYudmFsdWV9KX1yZXR1cm4obixpKT0+Zi52YWx1ZT8ocygpLGMocihlKSx7a2V5OjAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsb25DbGljazpwfSx7ZGVmYXVsdDp0KCgpPT5bLi4uaVswXXx8PVtvKGBUcnkgYSBsb25nZXIgcmFuZ2VgLC0xKV1dKSxfOjF9KSk6bChgYCwhMCl9fSk7ZXhwb3J0e3AgYXMgYSxkIGFzIGMsXyBhcyBpLHYgYXMgbixmIGFzIG8sZyBhcyByLGggYXMgcyx5IGFzIHR9Ow==", + "aW1wb3J0e0xyIGFzIGUsTyBhcyB0LGNuIGFzIG4sZ24gYXMgcixpLGlyIGFzIGEsbG4gYXMgbyxvbiBhcyBzLHZpIGFzIGMseW4gYXMgbH1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHt0IGFzIHV9ZnJvbSIuL2luZGV4LTg4Q1RSTkhQLmpzIjtpbXBvcnR7YiBhcyBkfWZyb20iLi9iYWRnZS1CSkxnLVIzTS5qcyI7ZnVuY3Rpb24gZihlKXtsZXQgdD1lLmdldFVUQ0Z1bGxZZWFyKCksbj1lLmdldFVUQ01vbnRoKCkscj1EYXRlLlVUQyh0LG4sMSksaT1EYXRlLlVUQyh0LG4rMSwxKTtyZXR1cm4oZS5nZXRUaW1lKCktcikvKGktcil9ZnVuY3Rpb24gcChlLHQpe3JldHVybiB0PC4wMj9udWxsOk1hdGgucm91bmQoZS90KX1mdW5jdGlvbiBtKGUsdCl7aWYoZT09PW51bGx8fHQ9PT12b2lkIDB8fHQ8PTApcmV0dXJue2xpbWl0TWljcm9zOm51bGwscmVtYWluaW5nTWljcm9zOm51bGwsd2lsbEV4Y2VlZDohMX07bGV0IG49ZCh0KSxyPW4tZTtyZXR1cm57bGltaXRNaWNyb3M6bixyZW1haW5pbmdNaWNyb3M6cix3aWxsRXhjZWVkOnI8MH19dmFyIGg9YG5vdCBlbm91Z2ggZGF0YSB5ZXRgLGc9YFByb2plY3RlZCB0byBleGNlZWQgdGhlIGNvbmZpZ3VyZWQgY29zdC9tb250aCBsaW1pdGA7ZnVuY3Rpb24gXyhlLHQpe2xldCBuPXAoZS5jb3N0UGVyTW9udGhNaWNyb1VzZCxmKHQpKTtyZXR1cm4gbj09PW51bGw/e21pY3JvczpudWxsLHdpbGxFeGNlZWQ6ITF9OnttaWNyb3M6bix3aWxsRXhjZWVkOm0obixlLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEKS53aWxsRXhjZWVkfX12YXIgdj1sKHtfX25hbWU6YFRyeUxvbmdlclJhbmdlQnV0dG9uYCxzZXR1cChsKXtsZXQgZD11KCksZj1zKCgpPT57bGV0IGU9aS5pbmRleE9mKGQucmFuZ2UpO3JldHVybiBpW2UrMV0/P251bGx9KTtmdW5jdGlvbiBwKCl7Zi52YWx1ZSYmZC5zZXRGaWx0ZXJzKHtyYW5nZTpmLnZhbHVlfSl9cmV0dXJuKGkscyk9PmYudmFsdWU/KGEoKSxuKGModCkse2tleTowLHR5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsc2l6ZTpgc21gLG9uQ2xpY2s6cH0se2RlZmF1bHQ6ZSgoKT0+Wy4uLnNbMF18fD1bcihgVHJ5IGEgbG9uZ2VyIHJhbmdlYCwtMSldXSksXzoxfSkpOm8oYGAsITApfX0pO2V4cG9ydHtfIGFzIGEsbSBhcyBpLGggYXMgbixmIGFzIG8sZyBhcyByLHAgYXMgcyx2IGFzIHR9Ow==", ), }, - "badge-DUiBTDyA.js": { + "badge-BJLg-R3M.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0QgYXMgZSxGciBhcyB0LEcgYXMgbixIbiBhcyByLFNpIGFzIGksViBhcyBhLFcgYXMgbyxfbiBhcyBzLGFuIGFzIGMsY24gYXMgbCxjdCBhcyB1LGdpIGFzIGQsaG4gYXMgZixsciBhcyBwLG5yIGFzIG0sb24gYXMgaCxzbiBhcyBnLHVyIGFzIF99ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgdj17cm9sZTpgc3RhdHVzYCxjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS04IHRleHQtY2VudGVyYH0seT17Y2xhc3M6YHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kYH0sYj17a2V5OjAsY2xhc3M6YG1heC13LXNtIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0seD17a2V5OjEsY2xhc3M6YG10LTFgfSxTPXMoe19fbmFtZTpgRW1wdHlTdGF0ZWAscHJvcHM6e2ljb246e2RlZmF1bHQ6KCk9PnV9LHRpdGxlOnt9LGRlc2NyaXB0aW9uOnt9fSxzZXR1cChlKXtyZXR1cm4odCxuKT0+e2xldCByPV8oYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBtKCksbChgZGl2YCx2LFtmKHIse2ljb246ZS5pY29uLGNsYXNzOmBzaXplLTYgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxjKGBwYCx5LGkoZS50aXRsZSksMSksZS5kZXNjcmlwdGlvbj8obSgpLGwoYHBgLGIsaShlLmRlc2NyaXB0aW9uKSwxKSk6ZyhgYCwhMCksdC4kc2xvdHMuZGVmYXVsdD8obSgpLGwoYGRpdmAseCxbcCh0LiRzbG90cyxgZGVmYXVsdGApXSkpOmcoYGAsITApXSl9fX0pO2Z1bmN0aW9uIEMoe2xvYWRpbmc6ZSxoYXNEYXRhOnQsZXJyb3I6bn0pe3JldHVybiB0P2ByZWFkeWA6bj9gZXJyb3JgOmU/YHNrZWxldG9uYDpgZW1wdHlgfWZ1bmN0aW9uIHcoZSx0KXtyZXR1cm5gJHtlfS8ke3R9YH1mdW5jdGlvbiBUKGUpe3JldHVybmAkJHsoZS8xZTYpLnRvRml4ZWQoNCl9YH1mdW5jdGlvbiBFKGUpe3JldHVybiBlLnRvTG9jYWxlU3RyaW5nKGBlbi1VU2ApfWZ1bmN0aW9uIEQoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7aWYodDwxZTQpcmV0dXJuIEUoZSk7bGV0IG49ZTwwP2AtYDpgYCxbcixpXT10PDFlNj9bMWUzLGBrYF06dDwxZTk/WzFlNixgTWBdOlsxZTksYEJgXSxhPXQvcixvPTMtKE1hdGguZmxvb3IoYSk+PTEwMD8zOk1hdGguZmxvb3IoYSk+PTEwPzI6MSkscz0xMCoqbyxjPShNYXRoLmZsb29yKHQqcy9yKS9zKS50b0ZpeGVkKG8pO3JldHVybiBvPjAmJihjPWMucmVwbGFjZSgvMCskLyxgYCkucmVwbGFjZSgvXC4kLyxgYCkpLGAke259JHtjfSR7aX1gfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGU+MCYmIShlJmUtMSl9ZnVuY3Rpb24gayhlKXtyZXR1cm4gZTwxMDI0P2Ake2V9YDpPKGUpP2U8MTA0ODU3Nj9gJHtNYXRoLnJvdW5kKGUvMTAyNCl9a2A6YCR7TWF0aC5yb3VuZChlLzEwNDg1NzYpfU1gOmU8MWU2P2Ake01hdGgucm91bmQoZS8xZTMpfWtgOmAke01hdGgucm91bmQoZS8xZTYpfU1gfWZ1bmN0aW9uIEEoZSl7cmV0dXJuYCQke2UudG9GaXhlZCgyKX1gfWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gZT09PTAmJnQ9PT0wP2BmcmVlYDpgaW4gJHtBKGUpfSAvIG91dCAke0EodCl9IHBlciBNVG9rYH1mdW5jdGlvbiBNKGUpe3JldHVybiBlPDFlMz9gJHtNYXRoLnJvdW5kKGUpfW1zYDpgJHsoZS8xZTMpLnRvRml4ZWQoMSl9c2B9ZnVuY3Rpb24gTihlLHQpe2lmKCFlfHxlPT09YDAwMDEtMDEtMDFUMDA6MDA6MDBaYClyZXR1cm4gbnVsbDtsZXQgbj1uZXcgRGF0ZShlKS5nZXRUaW1lKCk7cmV0dXJuIE51bWJlci5pc05hTihuKT9udWxsOk1hdGgubWF4KDAsTWF0aC5yb3VuZCgodC1uKS8xZTMpKX1mdW5jdGlvbiBQKGUpe2xldCB0PU4oZSxEYXRlLm5vdygpKTtyZXR1cm4gdD09PW51bGw/YGA6YCAoJHt0fXMgYWdvKWB9ZnVuY3Rpb24gRihlLHQ9RGF0ZS5ub3coKSl7bGV0IG49TihlLHQpO3JldHVybiBuPT09bnVsbD9gYDpgJHtufXMgYWdvYH1mdW5jdGlvbiBJKGUpe2lmKCFlfHxlPT09YDAwMDEtMDEtMDFUMDA6MDA6MDBaYClyZXR1cm5gYDtsZXQgdD1uZXcgRGF0ZShlKS5nZXRUaW1lKCk7aWYoTnVtYmVyLmlzTmFOKHQpKXJldHVybmBgO2xldCBuPU1hdGgucm91bmQoKHQtRGF0ZS5ub3coKSkvMWUzKTtyZXR1cm4gbjw9MD9gYDpgaW4gJHtufXNgfWZ1bmN0aW9uIEwoZSl7aWYoIWV8fGU9PT1gMDAwMS0wMS0wMVQwMDowMDowMFpgKXJldHVybmBuZXZlcmA7bGV0IHQ9bmV3IERhdGUoZSk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlU3RyaW5nKCl9ZnVuY3Rpb24gUihlLHQpe3JldHVybiBlP1AodCk/YHJlZnJlc2hlZGA6YHBlbmRpbmdgOmBvZmZgfWZ1bmN0aW9uIHooZSx0KXtzd2l0Y2goUihlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm5gcmVmcmVzaGVkJHtQKHQpfWB9fWZ1bmN0aW9uIEIoZSx0KXtzd2l0Y2goUihlLHQpKXtjYXNlYG9mZmA6cmV0dXJuYGRpc2NvdmVyeSBvZmZgO2Nhc2VgcGVuZGluZ2A6cmV0dXJuYHBlbmRpbmdgO2Nhc2VgcmVmcmVzaGVkYDpyZXR1cm4gTCh0KX19ZnVuY3Rpb24gVihlKXtpZighZSlyZXR1cm5gbm9uZWA7bGV0IHQ9W107cmV0dXJuIGUucmVxdWVzdHNQZXJNaW51dGUmJnQucHVzaChgcmVxL21pbiAke2UucmVxdWVzdHNQZXJNaW51dGV9YCksZS5yZXF1ZXN0c1BlckRheSYmdC5wdXNoKGByZXEvZGF5ICR7ZS5yZXF1ZXN0c1BlckRheX1gKSxlLnRva2Vuc1BlckRheSYmdC5wdXNoKGB0b2svZGF5ICR7ZS50b2tlbnNQZXJEYXl9YCksZS50b2tlbnNQZXJNb250aCYmdC5wdXNoKGB0b2svbW9udGggJHtlLnRva2Vuc1Blck1vbnRofWApLGUuY29zdFBlckRheVVTRCYmdC5wdXNoKGBjb3N0L2RheSAkJHtlLmNvc3RQZXJEYXlVU0R9YCksZS5jb3N0UGVyTW9udGhVU0QmJnQucHVzaChgY29zdC9tb250aCAkJHtlLmNvc3RQZXJNb250aFVTRH1gKSx0Lmxlbmd0aD90LmpvaW4oYCwgYCk6YG5vbmVgfWZ1bmN0aW9uIEgoZSx0KXtzd2l0Y2godCl7Y2FzZWBob3VyYDpyZXR1cm5gJHtlLnNsaWNlKDgsMTApfTowMCBVVENgO2Nhc2VgZGF5YDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKSxyPU51bWJlcihlLnNsaWNlKDYsOCkpO3JldHVybiBuZXcgRGF0ZSh0LG4tMSxyKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDpgc2hvcnRgLGRheTpgbnVtZXJpY2B9KX1jYXNlYG1vbnRoYDp7bGV0IHQ9TnVtYmVyKGUuc2xpY2UoMCw0KSksbj1OdW1iZXIoZS5zbGljZSg0LDYpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEsMSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCx5ZWFyOmBudW1lcmljYH0pfX19dmFyIFU9cyh7X19uYW1lOmBCYWRnZWAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sdmFyaWFudDp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAobil7bGV0IGk9bixzPWEoaSxgY2xhc3NgKTtyZXR1cm4oYSxjKT0+KG0oKSxoKGQoZSkscih7ImRhdGEtc2xvdCI6YGJhZGdlYCwiZGF0YS12YXJpYW50IjpuLnZhcmlhbnQsY2xhc3M6ZChvKShkKFcpKHt2YXJpYW50Om4udmFyaWFudH0pLGkuY2xhc3MpfSxkKHMpKSx7ZGVmYXVsdDp0KCgpPT5bcChhLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGRhdGEtdmFyaWFudGAsYGNsYXNzYF0pKX19KSxXPW4oYGgtNSBnYXAtMSByb3VuZGVkLTR4bCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMC41IHRleHQteHMgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgaGFzLWRhdGEtW2ljb249aW5saW5lLWVuZF06cHItMS41IGhhcy1kYXRhLVtpY29uPWlubGluZS1zdGFydF06cGwtMS41IFsmPnN2Z106c2l6ZS0zISBncm91cC9iYWRnZSBpbmxpbmUtZmxleCB3LWZpdCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIFsmPnN2Z106cG9pbnRlci1ldmVudHMtbm9uZWAse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OmBiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1wcmltYXJ5LzgwYCxzZWNvbmRhcnk6YGJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1zZWNvbmRhcnkvODBgLGRlc3RydWN0aXZlOmBiZy1kZXN0cnVjdGl2ZS8xMCBbYV06aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMjAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIHRleHQtZGVzdHJ1Y3RpdmUgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMGAsb3V0bGluZTpgYm9yZGVyLWJvcmRlciB0ZXh0LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLW11dGVkIFthXTpob3Zlcjp0ZXh0LW11dGVkLWZvcmVncm91bmRgLGdob3N0OmBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1tdXRlZC81MGAsbGluazpgdGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmVgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtleHBvcnR7QyBhcyBfLGsgYXMgYSxFIGFzIGMsaiBhcyBkLEwgYXMgZix3IGFzIGcseiBhcyBoLEQgYXMgaSxNIGFzIGwsQiBhcyBtLFAgYXMgbixUIGFzIG8sSSBhcyBwLEggYXMgcixGIGFzIHMsVSBhcyB0LFYgYXMgdSxTIGFzIHZ9Ow==", + "aW1wb3J0e0sgYXMgZSxMciBhcyB0LFUgYXMgbixXbiBhcyByLFh0IGFzIGksX24gYXMgYSxjbiBhcyBvLGRyIGFzIHMsZnIgYXMgYyxpciBhcyBsLGsgYXMgdSxsbiBhcyBkLHEgYXMgZixzbiBhcyBwLHQgYXMgbSx1biBhcyBoLHVyIGFzIGcsdXQgYXMgXyx2aSBhcyB2LHdpIGFzIHkseGkgYXMgYix5biBhcyB4fWZyb20iLi9Ta2VsZXRvbi1EME5udkhZMS5qcyI7dmFyIFM9e3JvbGU6YHN0YXR1c2AsY2xhc3M6YGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0yIHB4LTQgcHktOCB0ZXh0LWNlbnRlcmB9LEM9e2NsYXNzOmB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZGB9LHc9e2tleTowLGNsYXNzOmBtYXgtdy1zbSB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LFQ9e2tleToxLGNsYXNzOmBtdC0xYH0sRT14KHtfX25hbWU6YEVtcHR5U3RhdGVgLHByb3BzOntpY29uOntkZWZhdWx0OigpPT5ffSx0aXRsZTp7fSxkZXNjcmlwdGlvbjp7fX0sc2V0dXAoZSl7cmV0dXJuKHQsbik9PntsZXQgcj1jKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gbCgpLGgoYGRpdmAsUyxbYShyLHtpY29uOmUuaWNvbixjbGFzczpgc2l6ZS02IHRleHQtbXV0ZWQtZm9yZWdyb3VuZC82MGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkscChgcGAsQyx5KGUudGl0bGUpLDEpLGUuZGVzY3JpcHRpb24/KGwoKSxoKGBwYCx3LHkoZS5kZXNjcmlwdGlvbiksMSkpOmQoYGAsITApLHQuJHNsb3RzLmRlZmF1bHQ/KGwoKSxoKGBkaXZgLFQsW3ModC4kc2xvdHMsYGRlZmF1bHRgKV0pKTpkKGBgLCEwKV0pfX19KSxEPXsiZGF0YS1zbG90IjpgdGFibGUtY29udGFpbmVyYCxjbGFzczpgcmVsYXRpdmUgdy1mdWxsIG92ZXJmbG93LXgtYXV0b2B9LE89eCh7X19uYW1lOmBUYWJsZWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cCh0KXtsZXQgbj10O3JldHVybih0LHIpPT4obCgpLGgoYGRpdmAsRCxbcChgdGFibGVgLHsiZGF0YS1zbG90IjpgdGFibGVgLGNsYXNzOmIodihlKShgdy1mdWxsIGNhcHRpb24tYm90dG9tIHRleHQtc21gLG4uY2xhc3MpKX0sW3ModC4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSl9fSksaz14KHtfX25hbWU6YFRhYmxlQm9keWAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cCh0KXtsZXQgbj10O3JldHVybih0LHIpPT4obCgpLGgoYHRib2R5YCx7ImRhdGEtc2xvdCI6YHRhYmxlLWJvZHlgLGNsYXNzOmIodihlKShgWyZfdHI6bGFzdC1jaGlsZF06Ym9yZGVyLTBgLG4uY2xhc3MpKX0sW3ModC4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLEE9eCh7X19uYW1lOmBUYWJsZUNlbGxgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAodCl7bGV0IG49dDtyZXR1cm4odCxyKT0+KGwoKSxoKGB0ZGAseyJkYXRhLXNsb3QiOmB0YWJsZS1jZWxsYCxjbGFzczpiKHYoZSkoYHAtMiBhbGlnbi1taWRkbGUgd2hpdGVzcGFjZS1ub3dyYXAgWyY6aGFzKFtyb2xlPWNoZWNrYm94XSldOnByLTBgLG4uY2xhc3MpKX0sW3ModC4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLGo9eCh7X19uYW1lOmBUYWJsZVJvd2AscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cCh0KXtsZXQgbj10O3JldHVybih0LHIpPT4obCgpLGgoYHRyYCx7ImRhdGEtc2xvdCI6YHRhYmxlLXJvd2AsY2xhc3M6Yih2KGUpKGBob3ZlcjpiZy1tdXRlZC81MCBkYXRhLVtzdGF0ZT1zZWxlY3RlZF06YmctbXV0ZWQgYm9yZGVyLWIgdHJhbnNpdGlvbi1jb2xvcnMgaGFzLWFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQvNTBgLG4uY2xhc3MpKX0sW3ModC4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLE09eCh7X19uYW1lOmBUYWJsZUhlYWRgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAodCl7bGV0IG49dDtyZXR1cm4odCxyKT0+KGwoKSxoKGB0aGAseyJkYXRhLXNsb3QiOmB0YWJsZS1oZWFkYCxjbGFzczpiKHYoZSkoYHRleHQtZm9yZWdyb3VuZCBoLTEwIHB4LTIgdGV4dC1sZWZ0IGFsaWduLW1pZGRsZSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCBbJjpoYXMoW3JvbGU9Y2hlY2tib3hdKV06cHItMGAsbi5jbGFzcykpfSxbcyh0LiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksTj14KHtfX25hbWU6YFRhYmxlSGVhZGVyYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKHQpe2xldCBuPXQ7cmV0dXJuKHQscik9PihsKCksaChgdGhlYWRgLHsiZGF0YS1zbG90IjpgdGFibGUtaGVhZGVyYCxjbGFzczpiKHYoZSkoYFsmX3RyXTpib3JkZXItYmAsbi5jbGFzcykpfSxbcyh0LiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksZWU9eCh7X19uYW1lOmBTa2VsZXRvblRhYmxlYCxwcm9wczp7cm93czp7ZGVmYXVsdDo1fSxjb2xzOntkZWZhdWx0OjR9fSxzZXR1cChlKXtyZXR1cm4obixyKT0+KGwoKSxvKHYoTyksbnVsbCx7ZGVmYXVsdDp0KCgpPT5bYSh2KE4pLG51bGwse2RlZmF1bHQ6dCgoKT0+W2EodihqKSxudWxsLHtkZWZhdWx0OnQoKCk9PlsobCghMCksaChpLG51bGwsZyhlLmNvbHMsZT0+KGwoKSxvKHYoTSkse2tleTplfSx7ZGVmYXVsdDp0KCgpPT5bYSh2KG0pLHtjbGFzczpgaC00IHctMTZgfSldKSxfOjF9KSkpLDEyOCkpXSksXzoxfSldKSxfOjF9KSxhKHYoayksbnVsbCx7ZGVmYXVsdDp0KCgpPT5bKGwoITApLGgoaSxudWxsLGcoZS5yb3dzLG49PihsKCksbyh2KGopLHtrZXk6bn0se2RlZmF1bHQ6dCgoKT0+WyhsKCEwKSxoKGksbnVsbCxnKGUuY29scyxlPT4obCgpLG8odihBKSx7a2V5OmV9LHtkZWZhdWx0OnQoKCk9PlthKHYobSkse2NsYXNzOmBoLTQgdy1mdWxsIG1heC13LTMyYH0pXSksXzoxfSkpKSwxMjgpKV0pLF86MX0pKSksMTI4KSldKSxfOjF9KV0pLF86MX0pKX19KTtmdW5jdGlvbiBQKHtsb2FkaW5nOmUsaGFzRGF0YTp0LGVycm9yOm59KXtyZXR1cm4gdD9gcmVhZHlgOm4/YGVycm9yYDplP2Bza2VsZXRvbmA6YGVtcHR5YH1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuYCR7ZX0vJHt0fWB9dmFyIEk9MWU2O2Z1bmN0aW9uIEwoZSl7cmV0dXJuIE1hdGgucm91bmQoZSpJKX1mdW5jdGlvbiBSKGUpe3JldHVybiBlL0l9ZnVuY3Rpb24geihlKXtyZXR1cm5gJCR7UihlKS50b0ZpeGVkKDQpfWB9ZnVuY3Rpb24gQihlKXtyZXR1cm4gZS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDpgc2hvcnRgLGRheTpgbnVtZXJpY2B9KX1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnRvTG9jYWxlU3RyaW5nKGBlbi1VU2ApfWZ1bmN0aW9uIEgoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7aWYodDwxZTQpcmV0dXJuIFYoZSk7bGV0IG49ZTwwP2AtYDpgYCxbcixpXT10PDFlNj9bMWUzLGBrYF06dDwxZTk/WzFlNixgTWBdOlsxZTksYEJgXSxhPXQvcixvPTMtKE1hdGguZmxvb3IoYSk+PTEwMD8zOk1hdGguZmxvb3IoYSk+PTEwPzI6MSkscz0xMCoqbyxjPShNYXRoLmZsb29yKHQqcy9yKS9zKS50b0ZpeGVkKG8pO3JldHVybiBvPjAmJihjPWMucmVwbGFjZSgvMCskLyxgYCkucmVwbGFjZSgvXC4kLyxgYCkpLGAke259JHtjfSR7aX1gfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIGU+MCYmIShlJmUtMSl9ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZTwxMDI0P2Ake2V9YDpVKGUpP2U8MTA0ODU3Nj9gJHtNYXRoLnJvdW5kKGUvMTAyNCl9a2A6YCR7TWF0aC5yb3VuZChlLzEwNDg1NzYpfU1gOmU8MWU2P2Ake01hdGgucm91bmQoZS8xZTMpfWtgOmAke01hdGgucm91bmQoZS8xZTYpfU1gfWZ1bmN0aW9uIEcoZSl7cmV0dXJuYCQke2UudG9GaXhlZCgyKX1gfWZ1bmN0aW9uIEsoZSx0KXtyZXR1cm4gZT09PTAmJnQ9PT0wP2BmcmVlYDpgaW4gJHtHKGUpfSAvIG91dCAke0codCl9IHBlciBNVG9rYH1mdW5jdGlvbiBxKGUpe3JldHVybiBlPDFlMz9gJHtNYXRoLnJvdW5kKGUpfW1zYDpgJHsoZS8xZTMpLnRvRml4ZWQoMSl9c2B9ZnVuY3Rpb24gSihlLHQpe2lmKCFlfHxlPT09YDAwMDEtMDEtMDFUMDA6MDA6MDBaYClyZXR1cm4gbnVsbDtsZXQgbj1uZXcgRGF0ZShlKS5nZXRUaW1lKCk7cmV0dXJuIE51bWJlci5pc05hTihuKT9udWxsOk1hdGgubWF4KDAsTWF0aC5yb3VuZCgodC1uKS8xZTMpKX1mdW5jdGlvbiBZKGUpe2xldCB0PUooZSxEYXRlLm5vdygpKTtyZXR1cm4gdD09PW51bGw/YGA6YCAoJHt0fXMgYWdvKWB9ZnVuY3Rpb24gWChlLHQ9RGF0ZS5ub3coKSl7bGV0IG49SihlLHQpO3JldHVybiBuPT09bnVsbD9gYDpgJHtufXMgYWdvYH1mdW5jdGlvbiBaKGUpe2lmKCFlfHxlPT09YDAwMDEtMDEtMDFUMDA6MDA6MDBaYClyZXR1cm5gYDtsZXQgdD1uZXcgRGF0ZShlKS5nZXRUaW1lKCk7aWYoTnVtYmVyLmlzTmFOKHQpKXJldHVybmBgO2xldCBuPU1hdGgucm91bmQoKHQtRGF0ZS5ub3coKSkvMWUzKTtyZXR1cm4gbjw9MD9gYDpgaW4gJHtufXNgfWZ1bmN0aW9uIFEoZSl7aWYoIWV8fGU9PT1gMDAwMS0wMS0wMVQwMDowMDowMFpgKXJldHVybmBuZXZlcmA7bGV0IHQ9bmV3IERhdGUoZSk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlU3RyaW5nKCl9ZnVuY3Rpb24gJChlLHQpe3JldHVybiBlP1kodCk/YHJlZnJlc2hlZGA6YHBlbmRpbmdgOmBvZmZgfWZ1bmN0aW9uIHRlKGUsdCl7c3dpdGNoKCQoZSx0KSl7Y2FzZWBvZmZgOnJldHVybmBkaXNjb3Zlcnkgb2ZmYDtjYXNlYHBlbmRpbmdgOnJldHVybmBwZW5kaW5nYDtjYXNlYHJlZnJlc2hlZGA6cmV0dXJuYHJlZnJlc2hlZCR7WSh0KX1gfX1mdW5jdGlvbiBuZShlLHQpe3N3aXRjaCgkKGUsdCkpe2Nhc2Vgb2ZmYDpyZXR1cm5gZGlzY292ZXJ5IG9mZmA7Y2FzZWBwZW5kaW5nYDpyZXR1cm5gcGVuZGluZ2A7Y2FzZWByZWZyZXNoZWRgOnJldHVybiBRKHQpfX1mdW5jdGlvbiByZShlKXtpZighZSlyZXR1cm5gbm9uZWA7bGV0IHQ9W107cmV0dXJuIGUucmVxdWVzdHNQZXJNaW51dGUmJnQucHVzaChgcmVxL21pbiAke2UucmVxdWVzdHNQZXJNaW51dGV9YCksZS5yZXF1ZXN0c1BlckRheSYmdC5wdXNoKGByZXEvZGF5ICR7ZS5yZXF1ZXN0c1BlckRheX1gKSxlLnRva2Vuc1BlckRheSYmdC5wdXNoKGB0b2svZGF5ICR7ZS50b2tlbnNQZXJEYXl9YCksZS50b2tlbnNQZXJNb250aCYmdC5wdXNoKGB0b2svbW9udGggJHtlLnRva2Vuc1Blck1vbnRofWApLGUuY29zdFBlckRheVVTRCYmdC5wdXNoKGBjb3N0L2RheSAkJHtlLmNvc3RQZXJEYXlVU0R9YCksZS5jb3N0UGVyTW9udGhVU0QmJnQucHVzaChgY29zdC9tb250aCAkJHtlLmNvc3RQZXJNb250aFVTRH1gKSx0Lmxlbmd0aD90LmpvaW4oYCwgYCk6YG5vbmVgfWZ1bmN0aW9uIGllKGUsdCl7c3dpdGNoKHQpe2Nhc2VgaG91cmA6cmV0dXJuYCR7ZS5zbGljZSg4LDEwKX06MDAgVVRDYDtjYXNlYGRheWA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSkscj1OdW1iZXIoZS5zbGljZSg2LDgpKTtyZXR1cm4gbmV3IERhdGUodCxuLTEscikudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6YHNob3J0YCxkYXk6YG51bWVyaWNgfSl9Y2FzZWBtb250aGA6e2xldCB0PU51bWJlcihlLnNsaWNlKDAsNCkpLG49TnVtYmVyKGUuc2xpY2UoNCw2KSk7cmV0dXJuIG5ldyBEYXRlKHQsbi0xLDEpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOmBzaG9ydGAseWVhcjpgbnVtZXJpY2B9KX19fXZhciBhZT17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTEuNWB9LG9lPXtjbGFzczpgZmxleCBtaW4tdy0wIGZsZXgtMSBpdGVtcy1jZW50ZXIgZ2FwLTJgfSxzZT14KHtfX25hbWU6YFNrZWxldG9uTGlzdGAscHJvcHM6e3Jvd3M6e2RlZmF1bHQ6NX19LHNldHVwKGUpe3JldHVybih0LG4pPT4obCgpLGgoYG9sYCxhZSxbKGwoITApLGgoaSxudWxsLGcoZS5yb3dzLGU9PihsKCksaChgbGlgLHtrZXk6ZSxjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zYH0sW3AoYHNwYW5gLG9lLFthKHYobSkse2NsYXNzOmBoLTMgdy00IHNocmluay0wYH0pLGEodihtKSx7Y2xhc3M6YGgtNCB3LWZ1bGwgbWF4LXctNDBgfSldKSxhKHYobSkse2NsYXNzOmBoLTQgdy0xMiBzaHJpbmstMGB9KV0pKSksMTI4KSldKSl9fSksY2U9eCh7X19uYW1lOmBCYWRnZWAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sdmFyaWFudDp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoaSl7bGV0IGE9aSxjPW4oYSxgY2xhc3NgKTtyZXR1cm4obixkKT0+KGwoKSxvKHYodSkscih7ImRhdGEtc2xvdCI6YGJhZGdlYCwiZGF0YS12YXJpYW50IjppLnZhcmlhbnQsY2xhc3M6dihlKSh2KGxlKSh7dmFyaWFudDppLnZhcmlhbnR9KSxhLmNsYXNzKX0sdihjKSkse2RlZmF1bHQ6dCgoKT0+W3Mobi4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYsW2BkYXRhLXZhcmlhbnRgLGBjbGFzc2BdKSl9fSksbGU9ZihgaC01IGdhcC0xIHJvdW5kZWQtNHhsIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMiBweS0wLjUgdGV4dC14cyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyY+c3ZnXTpzaXplLTMhIGdyb3VwL2JhZGdlIGlubGluZS1mbGV4IHctZml0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgWyY+c3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXByaW1hcnkvODBgLHNlY29uZGFyeTpgYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgW2FdOmhvdmVyOmJnLXNlY29uZGFyeS84MGAsZGVzdHJ1Y3RpdmU6YGJnLWRlc3RydWN0aXZlLzEwIFthXTpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8yMCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgdGV4dC1kZXN0cnVjdGl2ZSBkYXJrOmJnLWRlc3RydWN0aXZlLzIwYCxvdXRsaW5lOmBib3JkZXItYm9yZGVyIHRleHQtZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctbXV0ZWQgW2FdOmhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZGAsZ2hvc3Q6YGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLW11dGVkLzUwYCxsaW5rOmB0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZWB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2V4cG9ydHtOIGFzIEMsayBhcyBELEEgYXMgRSxPLGVlIGFzIFMsaiBhcyBULG5lIGFzIF8sSCBhcyBhLEwgYXMgYixYIGFzIGMscmUgYXMgZCxLIGFzIGYsUiBhcyBnLFogYXMgaCxpZSBhcyBpLEUgYXMgayxWIGFzIGwsUSBhcyBtLHNlIGFzIG4sVyBhcyBvLEIgYXMgcCxZIGFzIHIseiBhcyBzLGNlIGFzIHQscSBhcyB1LHRlIGFzIHYsTSBhcyB3LFAgYXMgeCxGIGFzIHl9Ow==", ), }, - "burndown-Bz44x7-d.js": { + "burndown-eGca-elc.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0MgYXMgZSxFIGFzIHQsRnIgYXMgbixLbiBhcyByLFMgYXMgaSxTaSBhcyBhLFQgYXMgbyxfbiBhcyBzLGFuIGFzIGMsY24gYXMgbCxldCBhcyB1LGdpIGFzIGQsaG4gYXMgZixpbiBhcyBwLG1uIGFzIG0sbnIgYXMgaCxvaSBhcyBnLG9uIGFzIF8scnQgYXMgdixzbiBhcyB5LHN0IGFzIGIsdXIgYXMgeCx2IGFzIFMsdyBhcyBDLHlpIGFzIHd9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjtpbXBvcnR7YyBhcyBUfWZyb20iLi9pbmRleC1keXdTOE9wVC5qcyI7aW1wb3J0e3QgYXMgRX1mcm9tIi4vY2xpcGJvYXJkLUI3M2ZaMGMxLmpzIjtpbXBvcnR7byBhcyBEfWZyb20iLi9iYWRnZS1EVWlCVER5QS5qcyI7aW1wb3J0e2kgYXMgTyxuIGFzIGssciBhcyBBfWZyb20iLi9UcnlMb25nZXJSYW5nZUJ1dHRvbi1DamtVbmFPei5qcyI7dmFyIGo9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sTT17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sTj1bYHRpdGxlYF0sUD17a2V5OjB9LEY9e2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGFidWxhci1udW1zYH0sST1zKHtfX25hbWU6YENvc3RGb3JlY2FzdENhcmRgLHByb3BzOnttdGRNaWNyb3M6e30sbGltaXRzOnt9LG5vdzp7fX0sc2V0dXAodCl7bGV0IHI9dCxzPXAoKCk9PkEoci5ub3cpKSx1PXAoKCk9Pk8oci5tdGRNaWNyb3Mscy52YWx1ZSkpLGc9cCgoKT0+ayh1LnZhbHVlLHIubGltaXRzPy5jb3N0UGVyTW9udGhVU0QpKTtyZXR1cm4ocixzKT0+KGgoKSxfKGQobyksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bZihkKGUpLG51bGwse2RlZmF1bHQ6bigoKT0+W2YoZChpKSxudWxsLHtkZWZhdWx0Om4oKCk9PlsuLi5zWzBdfHw9W20oYENvc3QgZm9yZWNhc3RgLC0xKV1dKSxfOjF9KSxmKGQoVCksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bLi4uc1sxXXx8PVttKGBQcm9qZWN0ZWQgbW9udGgtZW5kIHNwZW5kLCBleHRyYXBvbGF0ZWQgZnJvbSBtb250aC10by1kYXRlIHVzYWdlIChVVEMgY2FsZW5kYXIgbW9udGgpLmAsLTEpXV0pLF86MX0pXSksXzoxfSksZihkKEMpLHtjbGFzczpgZ3JpZCBncmlkLWNvbHMtMiBnYXAtNCB0ZXh0LXNtIHNtOmdyaWQtY29scy0zYH0se2RlZmF1bHQ6bigoKT0+W2MoYGRpdmAsbnVsbCxbc1syXXx8PWMoYHBgLHtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYE1vbnRoIHRvIGRhdGVgLC0xKSxjKGBwYCxqLGEoZChEKSh0Lm10ZE1pY3JvcykpLDEpXSksYyhgZGl2YCxudWxsLFtzWzNdfHw9YyhgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUHJvamVjdGVkIG1vbnRoLWVuZGAsLTEpLHUudmFsdWU9PT1udWxsPyhoKCksbChgcGAsTSxgbm90IGVub3VnaCBkYXRhIHlldGApKTooaCgpLGwoYHBgLHtrZXk6MSxjbGFzczp3KFtgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2AsZy52YWx1ZS53aWxsRXhjZWVkP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDBdKSx0aXRsZTpnLnZhbHVlLndpbGxFeGNlZWQ/YFByb2plY3RlZCB0byBleGNlZWQgdGhlIGNvbmZpZ3VyZWQgY29zdC9tb250aCBsaW1pdGA6dm9pZCAwfSxhKGQoRCkodS52YWx1ZSkpLDExLE4pKV0pLGcudmFsdWUubGltaXRNaWNyb3M9PT1udWxsP3koYGAsITApOihoKCksbChgZGl2YCxQLFtzWzRdfHw9YyhgcGAse2NsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTGltaXRgLC0xKSxjKGBwYCxGLGEoZChEKShnLnZhbHVlLmxpbWl0TWljcm9zKSksMSldKSldKSxfOjF9KV0pLF86MX0pKX19KSxMPWB0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04O2AsUj0xZTM7YXN5bmMgZnVuY3Rpb24geihlLHQsbj1MKXtpZih0eXBlb2YgZG9jdW1lbnQ+YHVgKXJldHVybmBmYWlsZWRgO3RyeXtsZXQgcj1uZXcgQmxvYihbdF0se3R5cGU6bn0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChyKSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyZXR1cm4gYS5ocmVmPWksYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGEucmVtb3ZlKCksc2V0VGltZW91dCgoKT0+VVJMLnJldm9rZU9iamVjdFVSTChpKSxSKSxgZG93bmxvYWRlZGB9Y2F0Y2h7cmV0dXJuIEUodCl9fXZhciBCPTI1MDAsVj1zKHtfX25hbWU6YENzdkV4cG9ydEJ1dHRvbmAscHJvcHM6e2ZpbGVuYW1lOnt9LGJ1aWxkOnt0eXBlOkZ1bmN0aW9ufX0sc2V0dXAoZSl7bGV0IGk9ZSxvPWcoITEpLHM9ZyhudWxsKSxsLGY9e2Rvd25sb2FkZWQ6YERvd25sb2FkZWRgLGNvcGllZDpgQ29waWVkYCxzZWxlY3RlZDpgU2VsZWN0ZWQg4oCUIHByZXNzIOKMmC9DdHJsK0NgLGZhaWxlZDpgRXhwb3J0IGZhaWxlZGB9LG09cCgoKT0+cy52YWx1ZT9mW3MudmFsdWVdOmBFeHBvcnQgQ1NWYCkseT1wKCgpPT5zLnZhbHVlPT09YGZhaWxlZGApO2Z1bmN0aW9uIFMoKXtsIT09dm9pZCAwJiZjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KCgpPT57cy52YWx1ZT1udWxsLGw9dm9pZCAwfSxCKX1hc3luYyBmdW5jdGlvbiBDKCl7aWYoIW8udmFsdWUpe28udmFsdWU9ITA7dHJ5e3MudmFsdWU9YXdhaXQgeihpLmZpbGVuYW1lLGkuYnVpbGQoKSksUygpfWZpbmFsbHl7by52YWx1ZT0hMX19fXJldHVybiByKCgpPT57bCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGwpfSksKGUscik9PntsZXQgaT14KGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gaCgpLF8oZCh0KSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsZGlzYWJsZWQ6by52YWx1ZSxvbkNsaWNrOkN9LHtkZWZhdWx0Om4oKCk9PltzLnZhbHVlPT09YGZhaWxlZGA/KGgoKSxfKGkse2tleTowLGljb246ZCh2KSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOnMudmFsdWU/KGgoKSxfKGkse2tleToxLGljb246ZCh1KSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1jaGFydC1yZXF1ZXN0c2AsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOihoKCksXyhpLHtrZXk6MixpY29uOmQoYiksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSksYyhgc3BhbmAse2NsYXNzOncoeS52YWx1ZT9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwKX0sYShtLnZhbHVlKSwzKV0pLF86MX0sOCxbYGRpc2FibGVkYF0pfX19KSxIPTZlNDtmdW5jdGlvbiBVKGU9SCl7bGV0IHQ9ZyhuZXcgRGF0ZSksbjtmdW5jdGlvbiByKCl7bnx8KG49Uyh7aW50ZXJ2YWxNczplLHRpY2s6KCk9Pnt0LnZhbHVlPW5ldyBEYXRlfX0pLG4uc3RhcnQoKSl9ZnVuY3Rpb24gaSgpe24/LnN0b3AoKSxuPXZvaWQgMH1yZXR1cm57bm93OnQsc3RhcnQ6cixzdG9wOml9fXZhciBXPWBccgpgLEc9L1siLFxyXG5dLyxLPS9eWz0rXC1AXHRccl0vO2Z1bmN0aW9uIHEoZSl7bGV0IHQ9ZT09bnVsbD9gYDpTdHJpbmcoZSk7cmV0dXJuIEsudGVzdCh0KSYmKHQ9YCcke3R9YCksRy50ZXN0KHQpP2AiJHt0LnJlcGxhY2UoLyIvZyxgIiJgKX0iYDp0fWZ1bmN0aW9uIEooZSx0KXtyZXR1cm5bZSwuLi50XS5tYXAoZT0+ZS5tYXAocSkuam9pbihgLGApKS5qb2luKFcpK1d9dmFyIFk9ODY0ZTU7ZnVuY3Rpb24gWChlKXtsZXQgdD1lLmdldFVUQ0Z1bGxZZWFyKCksbj1lLmdldFVUQ01vbnRoKCk7cmV0dXJuKERhdGUuVVRDKHQsbisxLDEpLURhdGUuVVRDKHQsbiwxKSkvWX1mdW5jdGlvbiBaKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKX1mdW5jdGlvbiBRKGUpe2xldCB0PTA7cmV0dXJuIGUubWFwKGU9PnQrPWUpfWZ1bmN0aW9uICQoZSx0LG4pe2lmKHQ8PTApcmV0dXJuIG51bGw7aWYoZT49dClyZXR1cm4gbmV3IERhdGUobi5nZXRUaW1lKCkpO2xldCByPUEobikqWChuKTtpZihyPDEpcmV0dXJuIG51bGw7bGV0IGk9ZS9yO2lmKGk8PTApcmV0dXJuIG51bGw7bGV0IGE9KHQtZSkvaTtyZXR1cm4gbmV3IERhdGUobi5nZXRUaW1lKCkrYSpZKX1leHBvcnR7VSBhcyBhLEogYXMgaSxaIGFzIG4sViBhcyBvLCQgYXMgcixJIGFzIHMsUSBhcyB0fTs=", + "aW1wb3J0e0QgYXMgZSxFIGFzIHQsSm4gYXMgbixMciBhcyByLE8gYXMgaSxUIGFzIGEsX24gYXMgbyxhdCBhcyBzLGNpIGFzIGMsY24gYXMgbCxkciBhcyB1LGZyIGFzIGQsZ24gYXMgZixpciBhcyBwLGxuIGFzIG0sbHQgYXMgaCxudCBhcyBnLG9uIGFzIF8sc24gYXMgdix1biBhcyB5LHYgYXMgYix2aSBhcyB4LHcgYXMgUyx3aSBhcyBDLHhpIGFzIHcseW4gYXMgVH1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHtsIGFzIEV9ZnJvbSIuL2luZGV4LTg4Q1RSTkhQLmpzIjtpbXBvcnR7dCBhcyBEfWZyb20iLi9jbGlwYm9hcmQtQjczZlowYzEuanMiO2ltcG9ydHtzIGFzIE99ZnJvbSIuL2JhZGdlLUJKTGctUjNNLmpzIjtpbXBvcnR7aSBhcyBrLG4gYXMgQSxvIGFzIGosciBhcyBNLHMgYXMgTn1mcm9tIi4vVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQmgxOXlpdjguanMiO3ZhciBQPXtjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sRj17a2V5OjAsY2xhc3M6YHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sST1bYHRpdGxlYF0sTD1UKHtfX25hbWU6YFN0YXRJdGVtYCxwcm9wczp7bGFiZWw6e30sdG9uZTp7ZGVmYXVsdDpgZGVmYXVsdGB9LHRpdGxlOntkZWZhdWx0OnZvaWQgMH0saGludDp7ZGVmYXVsdDp2b2lkIDB9fSxzZXR1cChlKXtsZXQgdD17ZGVmYXVsdDp2b2lkIDAsZGVzdHJ1Y3RpdmU6YHRleHQtZGVzdHJ1Y3RpdmVgLGFjY2VudDpgdGV4dC1jaGFydC1yZXF1ZXN0c2AsbXV0ZWQ6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9O3JldHVybihuLHIpPT4ocCgpLHkoYGRpdmAsbnVsbCxbdihgcGAsUCxDKGUubGFiZWwpLDEpLGUuaGludD8ocCgpLHkoYHBgLEYsQyhlLmhpbnQpLDEpKToocCgpLHkoYHBgLHtrZXk6MSxjbGFzczp3KFtgdGV4dC1sZyBmb250LXNlbWlib2xkIHRhYnVsYXItbnVtc2AsdFtlLnRvbmVdXSksdGl0bGU6ZS50aXRsZX0sW3Uobi4kc2xvdHMsYGRlZmF1bHRgKV0sMTAsSSkpXSkpfX0pLFI9VCh7X19uYW1lOmBDb3N0Rm9yZWNhc3RDYXJkYCxwcm9wczp7bXRkTWljcm9zOnt9LGxpbWl0czp7fSxub3c6e319LHNldHVwKG4pe2xldCBpPW4scz1fKCgpPT5qKGkubm93KSksYz1fKCgpPT5OKGkubXRkTWljcm9zLHMudmFsdWUpKSx1PV8oKCk9PmsoYy52YWx1ZSxpLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEKSk7cmV0dXJuKGkscyk9PihwKCksbCh4KGUpLG51bGwse2RlZmF1bHQ6cigoKT0+W28oeChhKSxudWxsLHtkZWZhdWx0OnIoKCk9PltvKHgoUyksbnVsbCx7ZGVmYXVsdDpyKCgpPT5bLi4uc1swXXx8PVtmKGBDb3N0IGZvcmVjYXN0YCwtMSldXSksXzoxfSksbyh4KEUpLG51bGwse2RlZmF1bHQ6cigoKT0+Wy4uLnNbMV18fD1bZihgUHJvamVjdGVkIG1vbnRoLWVuZCBzcGVuZCwgZXh0cmFwb2xhdGVkIGZyb20gbW9udGgtdG8tZGF0ZSB1c2FnZSAoVVRDIGNhbGVuZGFyIG1vbnRoKS5gLC0xKV1dKSxfOjF9KV0pLF86MX0pLG8oeCh0KSx7Y2xhc3M6YGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQgdGV4dC1zbSBzbTpncmlkLWNvbHMtM2B9LHtkZWZhdWx0OnIoKCk9PltvKEwse2xhYmVsOmBNb250aCB0byBkYXRlYH0se2RlZmF1bHQ6cigoKT0+W2YoQyh4KE8pKG4ubXRkTWljcm9zKSksMSldKSxfOjF9KSxvKEwse2xhYmVsOmBQcm9qZWN0ZWQgbW9udGgtZW5kYCx0b25lOnUudmFsdWUud2lsbEV4Y2VlZD9gZGVzdHJ1Y3RpdmVgOmBkZWZhdWx0YCx0aXRsZTp1LnZhbHVlLndpbGxFeGNlZWQ/eChNKTp2b2lkIDAsaGludDpjLnZhbHVlPT09bnVsbD94KEEpOnZvaWQgMH0se2RlZmF1bHQ6cigoKT0+W2YoQyhjLnZhbHVlPT09bnVsbD9gYDp4KE8pKGMudmFsdWUpKSwxKV0pLF86MX0sOCxbYHRvbmVgLGB0aXRsZWAsYGhpbnRgXSksdS52YWx1ZS5saW1pdE1pY3Jvcz09PW51bGw/bShgYCwhMCk6KHAoKSxsKEwse2tleTowLGxhYmVsOmBMaW1pdGB9LHtkZWZhdWx0OnIoKCk9PltmKEMoeChPKSh1LnZhbHVlLmxpbWl0TWljcm9zKSksMSldKSxfOjF9KSldKSxfOjF9KV0pLF86MX0pKX19KSx6PWB0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04O2AsQj0xZTM7YXN5bmMgZnVuY3Rpb24gVihlLHQsbj16KXtpZih0eXBlb2YgZG9jdW1lbnQ+YHVgKXJldHVybmBmYWlsZWRgO3RyeXtsZXQgcj1uZXcgQmxvYihbdF0se3R5cGU6bn0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChyKSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGFgKTtyZXR1cm4gYS5ocmVmPWksYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGEucmVtb3ZlKCksc2V0VGltZW91dCgoKT0+VVJMLnJldm9rZU9iamVjdFVSTChpKSxCKSxgZG93bmxvYWRlZGB9Y2F0Y2h7cmV0dXJuIEQodCl9fXZhciBIPTI1MDAsVT1UKHtfX25hbWU6YENzdkV4cG9ydEJ1dHRvbmAscHJvcHM6e2ZpbGVuYW1lOnt9LGJ1aWxkOnt0eXBlOkZ1bmN0aW9ufX0sc2V0dXAoZSl7bGV0IHQ9ZSxhPWMoITEpLG89YyhudWxsKSx1LGY9e2Rvd25sb2FkZWQ6YERvd25sb2FkZWRgLGNvcGllZDpgQ29waWVkYCxzZWxlY3RlZDpgU2VsZWN0ZWQg4oCUIHByZXNzIOKMmC9DdHJsK0NgLGZhaWxlZDpgRXhwb3J0IGZhaWxlZGB9LG09XygoKT0+by52YWx1ZT9mW28udmFsdWVdOmBFeHBvcnQgQ1NWYCkseT1fKCgpPT5vLnZhbHVlPT09YGZhaWxlZGApO2Z1bmN0aW9uIGIoKXt1IT09dm9pZCAwJiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KCgpPT57by52YWx1ZT1udWxsLHU9dm9pZCAwfSxIKX1hc3luYyBmdW5jdGlvbiBTKCl7aWYoIWEudmFsdWUpe2EudmFsdWU9ITA7dHJ5e28udmFsdWU9YXdhaXQgVih0LmZpbGVuYW1lLHQuYnVpbGQoKSksYigpfWZpbmFsbHl7YS52YWx1ZT0hMX19fXJldHVybiBuKCgpPT57dSE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KHUpfSksKGUsdCk9PntsZXQgbj1kKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gcCgpLGwoeChpKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBvdXRsaW5lYCxzaXplOmBzbWAsZGlzYWJsZWQ6YS52YWx1ZSxvbkNsaWNrOlN9LHtkZWZhdWx0OnIoKCk9PltvLnZhbHVlPT09YGZhaWxlZGA/KHAoKSxsKG4se2tleTowLGljb246eChzKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOm8udmFsdWU/KHAoKSxsKG4se2tleToxLGljb246eChnKSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1jaGFydC1yZXF1ZXN0c2AsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOihwKCksbChuLHtrZXk6MixpY29uOngoaCksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSksdihgc3BhbmAse2NsYXNzOncoeS52YWx1ZT9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwKX0sQyhtLnZhbHVlKSwzKV0pLF86MX0sOCxbYGRpc2FibGVkYF0pfX19KSxXPTZlNDtmdW5jdGlvbiBHKGU9Vyl7bGV0IHQ9YyhuZXcgRGF0ZSksbjtmdW5jdGlvbiByKCl7bnx8KG49Yih7aW50ZXJ2YWxNczplLHRpY2s6KCk9Pnt0LnZhbHVlPW5ldyBEYXRlfX0pLG4uc3RhcnQoKSl9ZnVuY3Rpb24gaSgpe24/LnN0b3AoKSxuPXZvaWQgMH1yZXR1cm57bm93OnQsc3RhcnQ6cixzdG9wOml9fXZhciBLPWBccgpgLHE9L1siLFxyXG5dLyxKPS9eWz0rXC1AXHRccl0vO2Z1bmN0aW9uIFkoZSl7bGV0IHQ9ZT09bnVsbD9gYDpTdHJpbmcoZSk7cmV0dXJuIEoudGVzdCh0KSYmKHQ9YCcke3R9YCkscS50ZXN0KHQpP2AiJHt0LnJlcGxhY2UoLyIvZyxgIiJgKX0iYDp0fWZ1bmN0aW9uIFgoZSx0KXtyZXR1cm5bZSwuLi50XS5tYXAoZT0+ZS5tYXAoWSkuam9pbihgLGApKS5qb2luKEspK0t9dmFyIFo9ODY0ZTU7ZnVuY3Rpb24gUShlKXtsZXQgdD1lLmdldFVUQ0Z1bGxZZWFyKCksbj1lLmdldFVUQ01vbnRoKCk7cmV0dXJuKERhdGUuVVRDKHQsbisxLDEpLURhdGUuVVRDKHQsbiwxKSkvWn1mdW5jdGlvbiAkKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKX1mdW5jdGlvbiBlZShlKXtsZXQgdD0wO3JldHVybiBlLm1hcChlPT50Kz1lKX1mdW5jdGlvbiB0ZShlLHQsbil7aWYodDw9MClyZXR1cm4gbnVsbDtpZihlPj10KXJldHVybiBuZXcgRGF0ZShuLmdldFRpbWUoKSk7bGV0IHI9aihuKSpRKG4pO2lmKHI8MSlyZXR1cm4gbnVsbDtsZXQgaT1lL3I7aWYoaTw9MClyZXR1cm4gbnVsbDtsZXQgYT0odC1lKS9pO3JldHVybiBuZXcgRGF0ZShuLmdldFRpbWUoKSthKlopfWV4cG9ydHtHIGFzIGEsTCBhcyBjLFggYXMgaSwkIGFzIG4sVSBhcyBvLHRlIGFzIHIsUiBhcyBzLGVlIGFzIHR9Ow==", ), }, - "catalog-lU41irIq.js": { + "catalog-C95NTaXt.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e190IGFzIGUsYiBhcyB0LHggYXMgbix5IGFzIHJ9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgaT0zZTUsYT1lKGBjYXRhbG9nYCx7c3RhdGU6KCk9Pih7ZGF0YTpudWxsLGZldGNoZWRBdDpudWxsLGxvYWRpbmc6ITEsZXJyb3I6YGAscmVxSWQ6MH0pLGdldHRlcnM6e3N0YWxlKGUpe3JldHVybiFlLmZldGNoZWRBdHx8RGF0ZS5ub3coKS1lLmZldGNoZWRBdC5nZXRUaW1lKCk+aX0sbW9kZWxzQnlJZChlKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgbiBvZiBlLmRhdGE/LnByb3ZpZGVycz8/W10pZm9yKGxldCBlIG9mIG4ubW9kZWxzKXQuc2V0KGUuaWQsZSk7cmV0dXJuIHR9fSxhY3Rpb25zOnthc3luYyBlbnN1cmVMb2FkZWQoZT0hMSl7IWUmJnRoaXMuZGF0YSYmIXRoaXMuc3RhbGV8fGF3YWl0IHRoaXMuZmV0Y2goKX0sYXN5bmMgZmV0Y2goKXtpZighbigpLmlzQXV0aGVudGljYXRlZClyZXR1cm47bGV0IGU9Kyt0aGlzLnJlcUlkO3RoaXMubG9hZGluZz0hMDt0cnl7bGV0IG49YXdhaXQgdChgL2FkbWluL2FwaS9jYXRhbG9nYCk7aWYoZSE9PXRoaXMucmVxSWQpcmV0dXJuO3RoaXMuZGF0YT1uLHRoaXMuZmV0Y2hlZEF0PW5ldyBEYXRlLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYoZSE9PXRoaXMucmVxSWR8fHQgaW5zdGFuY2VvZiByJiYodC5zdGF0dXM9PT00MDF8fHQuc3RhdHVzPT09NDAzKSlyZXR1cm47dGhpcy5lcnJvcj10IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOlN0cmluZyh0KX1maW5hbGx5e2U9PT10aGlzLnJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19fX0pO2V4cG9ydHthIGFzIHR9Ow==", + "aW1wb3J0e0MgYXMgZSxTIGFzIHQsYiBhcyBuLHggYXMgcix5dCBhcyBpfWZyb20iLi9Ta2VsZXRvbi1EME5udkhZMS5qcyI7dmFyIGE9M2U1LG89aShgY2F0YWxvZ2Ase3N0YXRlOigpPT4oe2RhdGE6bnVsbCxmZXRjaGVkQXQ6bnVsbCxsb2FkaW5nOiExLGVycm9yOmBgLHJlcUlkOjB9KSxnZXR0ZXJzOntzdGFsZShlKXtyZXR1cm4hZS5mZXRjaGVkQXR8fERhdGUubm93KCktZS5mZXRjaGVkQXQuZ2V0VGltZSgpPmF9LG1vZGVsc0J5SWQoZSl7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IG4gb2YgZS5kYXRhPy5wcm92aWRlcnM/P1tdKWZvcihsZXQgZSBvZiBuLm1vZGVscyl0LnNldChlLmlkLGUpO3JldHVybiB0fX0sYWN0aW9uczp7YXN5bmMgZW5zdXJlTG9hZGVkKGU9ITEpeyFlJiZ0aGlzLmRhdGEmJiF0aGlzLnN0YWxlfHxhd2FpdCB0aGlzLmZldGNoKCl9LGFzeW5jIGZldGNoKCl7aWYoIWUoKS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldCBpPSsrdGhpcy5yZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBlPWF3YWl0IG4oYC9hZG1pbi9hcGkvY2F0YWxvZ2ApO2lmKGkhPT10aGlzLnJlcUlkKXJldHVybjt0aGlzLmRhdGE9ZSx0aGlzLmZldGNoZWRBdD1uZXcgRGF0ZSx0aGlzLmVycm9yPWBgfWNhdGNoKGUpe2lmKGkhPT10aGlzLnJlcUlkfHxyKGUpKXJldHVybjt0aGlzLmVycm9yPXQoZSl9ZmluYWxseXtpPT09dGhpcy5yZXFJZCYmKHRoaXMubG9hZGluZz0hMSl9fX19KTtleHBvcnR7byBhcyB0fTs=", + ), + }, + "chart-palette-hm4ZIkAX.js": { + contentType: "text/javascript; charset=utf-8", + body: decodeAdminAsset( + "dmFyIGU9W2AtLWNoYXJ0LXJlcXVlc3RzYCxgLS1jaGFydC10b2tlbnMtaW5gLGAtLWNoYXJ0LXRva2Vucy1vdXRgLGAtLWNoYXJ0LWNvc3RgXSx0PVsuLi5lLGAtLWNoYXJ0LXNlcmllcy1hYCxgLS1jaGFydC1zZXJpZXMtYmAsYC0tY2hhcnQtc2VyaWVzLWNgLGAtLWNoYXJ0LXNlcmllcy1kYF07ZnVuY3Rpb24gbih0LG49ZSl7cmV0dXJuIG5bdCVuLmxlbmd0aF19ZXhwb3J0e24sdH07", ), }, "clipboard-B73fZ0c1.js": { @@ -160,22 +166,34 @@ var adminAssets = map[string]adminAsset{ "YXN5bmMgZnVuY3Rpb24gZShlLHQpe2lmKG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dCl0cnl7cmV0dXJuIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLGBjb3BpZWRgfWNhdGNoe31pZighdClyZXR1cm5gZmFpbGVkYDtsZXQgbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2VsZWN0Tm9kZUNvbnRlbnRzKHQpO2xldCByPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gcj8oci5yZW1vdmVBbGxSYW5nZXMoKSxyLmFkZFJhbmdlKG4pLGBzZWxlY3RlZGApOmBmYWlsZWRgfWV4cG9ydHtlIGFzIHR9Ow==", ), }, - "consumers-CQtEJ9K7.js": { + "columns-Coecnf74.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e190IGFzIGUsYiBhcyB0LGMgYXMgbixkIGFzIHIsZiBhcyBpLHggYXMgYSx5IGFzIG99ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjt2YXIgcz02ZTQ7ZnVuY3Rpb24gYygpe3JldHVybntsb2FkaW5nOiExLHJlcUVycm9yOmBgLGNvc3RFcnJvcjpgYCxtb2RlbEVycm9yOmBgLHJlcVNlcmllczpudWxsLGNvc3RTZXJpZXM6bnVsbCxtb2RlbFRvdGFsczpudWxsLG1vZGVsVG90YWxzVW5hdmFpbGFibGU6ITEsZmV0Y2hlZEF0Om51bGwscmVxSWQ6MCx3aW5kb3c6bnVsbCxzcGFuOm51bGx9fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUuc3RhdHVzPT09YHJlamVjdGVkYD9lLnJlYXNvbiBpbnN0YW5jZW9mIEVycm9yP2UucmVhc29uLm1lc3NhZ2U6U3RyaW5nKGUucmVhc29uKTpgYH12YXIgdT1lKGBjb25zdW1lcnNgLHtzdGF0ZTooKT0+KHtkYXRhOm51bGwsbG9hZGluZzohMSxlcnJvcjpgYCxmZXRjaGVkQXQ6bnVsbCxkZXRhaWw6e319KSxhY3Rpb25zOnthc3luYyBmZXRjaENvbnN1bWVycygpe2lmKGEoKS5pc0F1dGhlbnRpY2F0ZWQmJiF0aGlzLmxvYWRpbmcpe3RoaXMubG9hZGluZz0hMDt0cnl7dGhpcy5kYXRhPWF3YWl0IHQoYC9hZG1pbi9hcGkvY29uc3VtZXJzYCksdGhpcy5lcnJvcj1gYCx0aGlzLmZldGNoZWRBdD1EYXRlLm5vdygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvJiYoZS5zdGF0dXM9PT00MDF8fGUuc3RhdHVzPT09NDAzKSlyZXR1cm47dGhpcy5lcnJvcj1lIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlN0cmluZyhlKX1maW5hbGx5e3RoaXMubG9hZGluZz0hMX19fSxhc3luYyBlbnN1cmVDb25zdW1lcnMoKXt0aGlzLmxvYWRpbmd8fHRoaXMuZGF0YSYmdGhpcy5mZXRjaGVkQXQhPT1udWxsJiZEYXRlLm5vdygpLXRoaXMuZmV0Y2hlZEF0PHN8fGF3YWl0IHRoaXMuZmV0Y2hDb25zdW1lcnMoKX0sYXN5bmMgZmV0Y2hVc2VyRGV0YWlsKGUscyx1LGQpe2lmKCFhKCkuaXNBdXRoZW50aWNhdGVkKXJldHVybjtsZXQgZj10aGlzLmRldGFpbFtlXT8/YygpLHA9Zi5yZXFJZCsxLG09Zi53aW5kb3chPT1udWxsJiYoZi53aW5kb3chPT1zfHxmLnNwYW4hPT11KTt0aGlzLmRldGFpbFtlXT17Li4uZixsb2FkaW5nOiEwLHJlcUlkOnAscmVxU2VyaWVzOm0/bnVsbDpmLnJlcVNlcmllcyxjb3N0U2VyaWVzOm0/bnVsbDpmLmNvc3RTZXJpZXMsbW9kZWxUb3RhbHM6bT9udWxsOmYubW9kZWxUb3RhbHMscmVxRXJyb3I6bT9gYDpmLnJlcUVycm9yLGNvc3RFcnJvcjptP2BgOmYuY29zdEVycm9yLG1vZGVsRXJyb3I6bT9gYDpmLm1vZGVsRXJyb3J9O2xldCBoPW4ocyx1KSxbZyxfLHZdPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdChyKHtzY29wZTpbYHVzZXI6JHtlfWBdLG1ldHJpYzpgcmVxYCx3aW5kb3c6cyxzcGFuOnV9KSksdChyKHtzY29wZTpbYHVzZXI6JHtlfWBdLG1ldHJpYzpgY29zdGAsd2luZG93OnMsc3Bhbjp1fSkpLGQ/dChpKHtraW5kOmB1c2VybW9kZWxgLHVzZXI6ZSx3aW5kb3c6aC53aW5kb3csc3BhbjpoLnNwYW4sbWV0cmljczpbYHJlcWAsYGNvc3RgXX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCldKTtpZih0aGlzLmRldGFpbFtlXT8ucmVxSWQhPT1wfHxbZyxfLHZdLnNvbWUoZT0+ZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZlLnJlYXNvbiBpbnN0YW5jZW9mIG8mJihlLnJlYXNvbi5zdGF0dXM9PT00MDF8fGUucmVhc29uLnN0YXR1cz09PTQwMykpKXJldHVybjtsZXQgeT12LnN0YXR1cz09PWByZWplY3RlZGAmJnYucmVhc29uIGluc3RhbmNlb2YgbyYmdi5yZWFzb24uc3RhdHVzPT09NDA0LGI9dGhpcy5kZXRhaWxbZV0/P2MoKTt0aGlzLmRldGFpbFtlXT17bG9hZGluZzohMSxyZXFFcnJvcjpsKGcpLGNvc3RFcnJvcjpsKF8pLG1vZGVsRXJyb3I6eT9gYDpsKHYpLHJlcVNlcmllczpnLnN0YXR1cz09PWBmdWxmaWxsZWRgP2cudmFsdWU6Yi5yZXFTZXJpZXMsY29zdFNlcmllczpfLnN0YXR1cz09PWBmdWxmaWxsZWRgP18udmFsdWU6Yi5jb3N0U2VyaWVzLG1vZGVsVG90YWxzOnYuc3RhdHVzPT09YGZ1bGZpbGxlZGA/di52YWx1ZTp5P251bGw6Yi5tb2RlbFRvdGFscyxtb2RlbFRvdGFsc1VuYXZhaWxhYmxlOnksZmV0Y2hlZEF0OkRhdGUubm93KCkscmVxSWQ6cCx3aW5kb3c6cyxzcGFuOnV9fX19KTtleHBvcnR7dSBhcyB0fTs=", + "aW1wb3J0e0FuIGFzIGUsSyBhcyB0LExyIGFzIG4sTXIgYXMgcixOciBhcyBpLFUgYXMgYSxXbiBhcyBvLFh0IGFzIHMsX24gYXMgYyxjaSBhcyBsLGNuIGFzIHUsZGkgYXMgZCxkciBhcyBmLGVpIGFzIHAsZnIgYXMgbSxnbiBhcyBoLGh0IGFzIGcsaXIgYXMgXyxsbiBhcyB2LG10IGFzIGVlLG9uIGFzIHkscHQgYXMgdGUsc24gYXMgbmUsdW4gYXMgYix1ciBhcyB4LHZpIGFzIFMsd2kgYXMgQyx4aSBhcyB3LHluIGFzIFR9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7QyBhcyByZSxEIGFzIGllLEUgYXMgYWUsTyBhcyBvZSxUIGFzIEUsYSBhcyBzZSxsIGFzIGNlLHMgYXMgbGUsdyBhcyB1ZX1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO3ZhciBkZT17Y2xhc3M6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEwYH0sZmU9VCh7X19uYW1lOmBUYWJsZUVtcHR5YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sY29sc3Bhbjp7ZGVmYXVsdDoxfX0sc2V0dXAoZSl7bGV0IHI9ZSxpPWEocixgY2xhc3NgKTtyZXR1cm4oZSxhKT0+KF8oKSx1KEUsbnVsbCx7ZGVmYXVsdDpuKCgpPT5bYyhhZSxvKHtjbGFzczpTKHQpKGBwLTQgd2hpdGVzcGFjZS1ub3dyYXAgYWxpZ24tbWlkZGxlIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kYCxyLmNsYXNzKX0sUyhpKSkse2RlZmF1bHQ6bigoKT0+W25lKGBkaXZgLGRlLFtmKGUuJHNsb3RzLGBkZWZhdWx0YCldKV0pLF86M30sMTYsW2BjbGFzc2BdKV0pLF86M30pKX19KTtmdW5jdGlvbiBEKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UodCk6ZX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJuIG49Pnt0LnNldFN0YXRlKHQ9Pih7Li4udCxbZV06RChuLHRbZV0pfSkpfX1mdW5jdGlvbiBrKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRnVuY3Rpb259ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoZT0+dHlwZW9mIGU9PWBudW1iZXJgKX1mdW5jdGlvbiBtZShlLHQpe2xldCBuPVtdLHI9ZT0+e2UuZm9yRWFjaChlPT57bi5wdXNoKGUpO2xldCBpPXQoZSk7aSE9bnVsbCYmaS5sZW5ndGgmJnIoaSl9KX07cmV0dXJuIHIoZSksbn1mdW5jdGlvbiBBKGUsdCxuKXtsZXQgcj1bXSxpO3JldHVybiBhPT57bGV0IG87bi5rZXkmJm4uZGVidWcmJihvPURhdGUubm93KCkpO2xldCBzPWUoYSk7aWYoIShzLmxlbmd0aCE9PXIubGVuZ3RofHxzLnNvbWUoKGUsdCk9PnJbdF0hPT1lKSkpcmV0dXJuIGk7cj1zO2xldCBjO2lmKG4ua2V5JiZuLmRlYnVnJiYoYz1EYXRlLm5vdygpKSxpPXQoLi4ucyksbj09bnVsbHx8bi5vbkNoYW5nZT09bnVsbHx8bi5vbkNoYW5nZShpKSxuLmtleSYmbi5kZWJ1ZyYmbiE9bnVsbCYmbi5kZWJ1ZygpKXtsZXQgZT1NYXRoLnJvdW5kKChEYXRlLm5vdygpLW8pKjEwMCkvMTAwLHQ9TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jKSoxMDApLzEwMCxyPXQvMTYsaT0oZSx0KT0+e2ZvcihlPVN0cmluZyhlKTtlLmxlbmd0aDx0OyllPWAgYCtlO3JldHVybiBlfTtjb25zb2xlLmluZm8oYCVj4o+xICR7aSh0LDUpfSAvJHtpKGUsNSl9IG1zYCxgCiAgICAgICAgICAgIGZvbnQtc2l6ZTogLjZyZW07CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBjb2xvcjogaHNsKCR7TWF0aC5tYXgoMCxNYXRoLm1pbigxMjAtMTIwKnIsMTIwKSl9ZGVnIDEwMCUgMzElKTtgLG4/LmtleSl9cmV0dXJuIGl9fWZ1bmN0aW9uIGooZSx0LG4scil7cmV0dXJue2RlYnVnOigpPT5lPy5kZWJ1Z0FsbD8/ZVt0XSxrZXk6ITEsb25DaGFuZ2U6cn19ZnVuY3Rpb24gaGUoZSx0LG4scil7bGV0IGk9e2lkOmAke3QuaWR9XyR7bi5pZH1gLHJvdzp0LGNvbHVtbjpuLGdldFZhbHVlOigpPT50LmdldFZhbHVlKHIpLHJlbmRlclZhbHVlOigpPT5pLmdldFZhbHVlKCk/P2Uub3B0aW9ucy5yZW5kZXJGYWxsYmFja1ZhbHVlLGdldENvbnRleHQ6QSgoKT0+W2Usbix0LGldLChlLHQsbixyKT0+KHt0YWJsZTplLGNvbHVtbjp0LHJvdzpuLGNlbGw6cixnZXRWYWx1ZTpyLmdldFZhbHVlLHJlbmRlclZhbHVlOnIucmVuZGVyVmFsdWV9KSxqKGUub3B0aW9ucyxgZGVidWdDZWxsc2AsYGNlbGwuZ2V0Q29udGV4dGApKX07cmV0dXJuIGUuX2ZlYXR1cmVzLmZvckVhY2gocj0+e3IuY3JlYXRlQ2VsbD09bnVsbHx8ci5jcmVhdGVDZWxsKGksbix0LGUpfSx7fSksaX1mdW5jdGlvbiBnZShlLHQsbixyKXtsZXQgaT17Li4uZS5fZ2V0RGVmYXVsdENvbHVtbkRlZigpLC4uLnR9LGE9aS5hY2Nlc3NvcktleSxvPWkuaWQ/PyhhP3R5cGVvZiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGw9PWBmdW5jdGlvbmA/YS5yZXBsYWNlQWxsKGAuYCxgX2ApOmEucmVwbGFjZSgvXC4vZyxgX2ApOnZvaWQgMCk/Pyh0eXBlb2YgaS5oZWFkZXI9PWBzdHJpbmdgP2kuaGVhZGVyOnZvaWQgMCkscztpZihpLmFjY2Vzc29yRm4/cz1pLmFjY2Vzc29yRm46YSYmKHM9YS5pbmNsdWRlcyhgLmApP2U9PntsZXQgdD1lO2ZvcihsZXQgZSBvZiBhLnNwbGl0KGAuYCkpdD10Py5bZV07cmV0dXJuIHR9OmU9PmVbaS5hY2Nlc3NvcktleV0pLCFvKXRocm93IEVycm9yKCk7bGV0IGM9e2lkOmAke1N0cmluZyhvKX1gLGFjY2Vzc29yRm46cyxwYXJlbnQ6cixkZXB0aDpuLGNvbHVtbkRlZjppLGNvbHVtbnM6W10sZ2V0RmxhdENvbHVtbnM6QSgoKT0+WyEwXSwoKT0+W2MsLi4uYy5jb2x1bW5zPy5mbGF0TWFwKGU9PmUuZ2V0RmxhdENvbHVtbnMoKSldLGooZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBjb2x1bW4uZ2V0RmxhdENvbHVtbnNgKSksZ2V0TGVhZkNvbHVtbnM6QSgoKT0+W2UuX2dldE9yZGVyQ29sdW1uc0ZuKCldLGU9Pnt2YXIgdDtyZXR1cm4odD1jLmNvbHVtbnMpIT1udWxsJiZ0Lmxlbmd0aD9lKGMuY29sdW1ucy5mbGF0TWFwKGU9PmUuZ2V0TGVhZkNvbHVtbnMoKSkpOltjXX0saihlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsYGNvbHVtbi5nZXRMZWFmQ29sdW1uc2ApKX07Zm9yKGxldCB0IG9mIGUuX2ZlYXR1cmVzKXQuY3JlYXRlQ29sdW1uPT1udWxsfHx0LmNyZWF0ZUNvbHVtbihjLGUpO3JldHVybiBjfXZhciBNPWBkZWJ1Z0hlYWRlcnNgO2Z1bmN0aW9uIF9lKGUsdCxuKXtsZXQgcj17aWQ6bi5pZD8/dC5pZCxjb2x1bW46dCxpbmRleDpuLmluZGV4LGlzUGxhY2Vob2xkZXI6ISFuLmlzUGxhY2Vob2xkZXIscGxhY2Vob2xkZXJJZDpuLnBsYWNlaG9sZGVySWQsZGVwdGg6bi5kZXB0aCxzdWJIZWFkZXJzOltdLGNvbFNwYW46MCxyb3dTcGFuOjAsaGVhZGVyR3JvdXA6bnVsbCxnZXRMZWFmSGVhZGVyczooKT0+e2xldCBlPVtdLHQ9bj0+e24uc3ViSGVhZGVycyYmbi5zdWJIZWFkZXJzLmxlbmd0aCYmbi5zdWJIZWFkZXJzLm1hcCh0KSxlLnB1c2gobil9O3JldHVybiB0KHIpLGV9LGdldENvbnRleHQ6KCk9Pih7dGFibGU6ZSxoZWFkZXI6cixjb2x1bW46dH0pfTtyZXR1cm4gZS5fZmVhdHVyZXMuZm9yRWFjaCh0PT57dC5jcmVhdGVIZWFkZXI9PW51bGx8fHQuY3JlYXRlSGVhZGVyKHIsZSl9KSxyfXZhciB2ZT17Y3JlYXRlVGFibGU6ZT0+e2UuZ2V0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnQsZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcucmlnaHRdLCh0LG4scixpKT0+e2xldCBhPXI/Lm1hcChlPT5uLmZpbmQodD0+dC5pZD09PWUpKS5maWx0ZXIoQm9vbGVhbik/P1tdLG89aT8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10scz1uLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZS5pZCkpJiYhKGkhPW51bGwmJmkuaW5jbHVkZXMoZS5pZCkpKTtyZXR1cm4gTih0LFsuLi5hLC4uLnMsLi4ub10sZSl9LGooZS5vcHRpb25zLE0sYGdldEhlYWRlckdyb3Vwc2ApKSxlLmdldENlbnRlckhlYWRlckdyb3Vwcz1BKCgpPT5bZS5nZXRBbGxDb2x1bW5zKCksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIsaSk9PihuPW4uZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlLmlkKSkmJiEoaSE9bnVsbCYmaS5pbmNsdWRlcyhlLmlkKSkpLE4odCxuLGUsYGNlbnRlcmApKSxqKGUub3B0aW9ucyxNLGBnZXRDZW50ZXJIZWFkZXJHcm91cHNgKSksZS5nZXRMZWZ0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLCh0LG4scik9Pk4odCxyPy5tYXAoZT0+bi5maW5kKHQ9PnQuaWQ9PT1lKSkuZmlsdGVyKEJvb2xlYW4pPz9bXSxlLGBsZWZ0YCksaihlLm9wdGlvbnMsTSxgZ2V0TGVmdEhlYWRlckdyb3Vwc2ApKSxlLmdldFJpZ2h0SGVhZGVyR3JvdXBzPUEoKCk9PltlLmdldEFsbENvbHVtbnMoKSxlLmdldFZpc2libGVMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwodCxuLHIpPT5OKHQscj8ubWFwKGU9Pm4uZmluZCh0PT50LmlkPT09ZSkpLmZpbHRlcihCb29sZWFuKT8/W10sZSxgcmlnaHRgKSxqKGUub3B0aW9ucyxNLGBnZXRSaWdodEhlYWRlckdyb3Vwc2ApKSxlLmdldEZvb3Rlckdyb3Vwcz1BKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSxqKGUub3B0aW9ucyxNLGBnZXRGb290ZXJHcm91cHNgKSksZS5nZXRMZWZ0Rm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldExlZnRIZWFkZXJHcm91cHMoKV0sZT0+Wy4uLmVdLnJldmVyc2UoKSxqKGUub3B0aW9ucyxNLGBnZXRMZWZ0Rm9vdGVyR3JvdXBzYCkpLGUuZ2V0Q2VudGVyRm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldENlbnRlckhlYWRlckdyb3VwcygpXSxlPT5bLi4uZV0ucmV2ZXJzZSgpLGooZS5vcHRpb25zLE0sYGdldENlbnRlckZvb3Rlckdyb3Vwc2ApKSxlLmdldFJpZ2h0Rm9vdGVyR3JvdXBzPUEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PlsuLi5lXS5yZXZlcnNlKCksaihlLm9wdGlvbnMsTSxgZ2V0UmlnaHRGb290ZXJHcm91cHNgKSksZS5nZXRGbGF0SGVhZGVycz1BKCgpPT5bZS5nZXRIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksaihlLm9wdGlvbnMsTSxgZ2V0RmxhdEhlYWRlcnNgKSksZS5nZXRMZWZ0RmxhdEhlYWRlcnM9QSgoKT0+W2UuZ2V0TGVmdEhlYWRlckdyb3VwcygpXSxlPT5lLm1hcChlPT5lLmhlYWRlcnMpLmZsYXQoKSxqKGUub3B0aW9ucyxNLGBnZXRMZWZ0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJGbGF0SGVhZGVycz1BKCgpPT5bZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKV0sZT0+ZS5tYXAoZT0+ZS5oZWFkZXJzKS5mbGF0KCksaihlLm9wdGlvbnMsTSxgZ2V0Q2VudGVyRmxhdEhlYWRlcnNgKSksZS5nZXRSaWdodEZsYXRIZWFkZXJzPUEoKCk9PltlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLGU9PmUubWFwKGU9PmUuaGVhZGVycykuZmxhdCgpLGooZS5vcHRpb25zLE0sYGdldFJpZ2h0RmxhdEhlYWRlcnNgKSksZS5nZXRDZW50ZXJMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRDZW50ZXJGbGF0SGVhZGVycygpXSxlPT5lLmZpbHRlcihlPT57dmFyIHQ7cmV0dXJuISgodD1lLnN1YkhlYWRlcnMpIT1udWxsJiZ0Lmxlbmd0aCl9KSxqKGUub3B0aW9ucyxNLGBnZXRDZW50ZXJMZWFmSGVhZGVyc2ApKSxlLmdldExlZnRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRMZWZ0RmxhdEhlYWRlcnMoKV0sZT0+ZS5maWx0ZXIoZT0+e3ZhciB0O3JldHVybiEoKHQ9ZS5zdWJIZWFkZXJzKSE9bnVsbCYmdC5sZW5ndGgpfSksaihlLm9wdGlvbnMsTSxgZ2V0TGVmdExlYWZIZWFkZXJzYCkpLGUuZ2V0UmlnaHRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRSaWdodEZsYXRIZWFkZXJzKCldLGU9PmUuZmlsdGVyKGU9Pnt2YXIgdDtyZXR1cm4hKCh0PWUuc3ViSGVhZGVycykhPW51bGwmJnQubGVuZ3RoKX0pLGooZS5vcHRpb25zLE0sYGdldFJpZ2h0TGVhZkhlYWRlcnNgKSksZS5nZXRMZWFmSGVhZGVycz1BKCgpPT5bZS5nZXRMZWZ0SGVhZGVyR3JvdXBzKCksZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKSxlLmdldFJpZ2h0SGVhZGVyR3JvdXBzKCldLChlLHQsbik9PlsuLi5lWzBdPy5oZWFkZXJzPz9bXSwuLi50WzBdPy5oZWFkZXJzPz9bXSwuLi5uWzBdPy5oZWFkZXJzPz9bXV0ubWFwKGU9PmUuZ2V0TGVhZkhlYWRlcnMoKSkuZmxhdCgpLGooZS5vcHRpb25zLE0sYGdldExlYWZIZWFkZXJzYCkpfX07ZnVuY3Rpb24gTihlLHQsbixyKXtsZXQgaT0wLGE9ZnVuY3Rpb24oZSx0KXt0PT09dm9pZCAwJiYodD0xKSxpPU1hdGgubWF4KGksdCksZS5maWx0ZXIoZT0+ZS5nZXRJc1Zpc2libGUoKSkuZm9yRWFjaChlPT57dmFyIG47KG49ZS5jb2x1bW5zKSE9bnVsbCYmbi5sZW5ndGgmJmEoZS5jb2x1bW5zLHQrMSl9LDApfTthKGUpO2xldCBvPVtdLHM9KGUsdCk9PntsZXQgaT17ZGVwdGg6dCxpZDpbcixgJHt0fWBdLmZpbHRlcihCb29sZWFuKS5qb2luKGBfYCksaGVhZGVyczpbXX0sYT1bXTtlLmZvckVhY2goZT0+e2xldCBvPVsuLi5hXS5yZXZlcnNlKClbMF0scz1lLmNvbHVtbi5kZXB0aD09PWkuZGVwdGgsYyxsPSExO2lmKHMmJmUuY29sdW1uLnBhcmVudD9jPWUuY29sdW1uLnBhcmVudDooYz1lLmNvbHVtbixsPSEwKSxvJiZvPy5jb2x1bW49PT1jKW8uc3ViSGVhZGVycy5wdXNoKGUpO2Vsc2V7bGV0IGk9X2UobixjLHtpZDpbcix0LGMuaWQsZT8uaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKGBfYCksaXNQbGFjZWhvbGRlcjpsLHBsYWNlaG9sZGVySWQ6bD9gJHthLmZpbHRlcihlPT5lLmNvbHVtbj09PWMpLmxlbmd0aH1gOnZvaWQgMCxkZXB0aDp0LGluZGV4OmEubGVuZ3RofSk7aS5zdWJIZWFkZXJzLnB1c2goZSksYS5wdXNoKGkpfWkuaGVhZGVycy5wdXNoKGUpLGUuaGVhZGVyR3JvdXA9aX0pLG8ucHVzaChpKSx0PjAmJnMoYSx0LTEpfTtzKHQubWFwKChlLHQpPT5fZShuLGUse2RlcHRoOmksaW5kZXg6dH0pKSxpLTEpLG8ucmV2ZXJzZSgpO2xldCBjPWU9PmUuZmlsdGVyKGU9PmUuY29sdW1uLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+e2xldCB0PTAsbj0wLHI9WzBdO2Uuc3ViSGVhZGVycyYmZS5zdWJIZWFkZXJzLmxlbmd0aD8ocj1bXSxjKGUuc3ViSGVhZGVycykuZm9yRWFjaChlPT57bGV0e2NvbFNwYW46bixyb3dTcGFuOml9PWU7dCs9bixyLnB1c2goaSl9KSk6dD0xO2xldCBpPU1hdGgubWluKC4uLnIpO3JldHVybiBuKz1pLGUuY29sU3Bhbj10LGUucm93U3Bhbj1uLHtjb2xTcGFuOnQscm93U3BhbjpufX0pO3JldHVybiBjKG9bMF0/LmhlYWRlcnM/P1tdKSxvfXZhciB5ZT0oZSx0LG4scixpLGEsbyk9PntsZXQgcz17aWQ6dCxpbmRleDpyLG9yaWdpbmFsOm4sZGVwdGg6aSxwYXJlbnRJZDpvLF92YWx1ZXNDYWNoZTp7fSxfdW5pcXVlVmFsdWVzQ2FjaGU6e30sZ2V0VmFsdWU6dD0+e2lmKHMuX3ZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBzLl92YWx1ZXNDYWNoZVt0XTtsZXQgbj1lLmdldENvbHVtbih0KTtpZihuIT1udWxsJiZuLmFjY2Vzc29yRm4pcmV0dXJuIHMuX3ZhbHVlc0NhY2hlW3RdPW4uYWNjZXNzb3JGbihzLm9yaWdpbmFsLHIpLHMuX3ZhbHVlc0NhY2hlW3RdfSxnZXRVbmlxdWVWYWx1ZXM6dD0+e2lmKHMuX3VuaXF1ZVZhbHVlc0NhY2hlLmhhc093blByb3BlcnR5KHQpKXJldHVybiBzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XTtsZXQgbj1lLmdldENvbHVtbih0KTtpZihuIT1udWxsJiZuLmFjY2Vzc29yRm4pcmV0dXJuIG4uY29sdW1uRGVmLmdldFVuaXF1ZVZhbHVlcz8ocy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF09bi5jb2x1bW5EZWYuZ2V0VW5pcXVlVmFsdWVzKHMub3JpZ2luYWwscikscy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF0pOihzLl91bmlxdWVWYWx1ZXNDYWNoZVt0XT1bcy5nZXRWYWx1ZSh0KV0scy5fdW5pcXVlVmFsdWVzQ2FjaGVbdF0pfSxyZW5kZXJWYWx1ZTp0PT5zLmdldFZhbHVlKHQpPz9lLm9wdGlvbnMucmVuZGVyRmFsbGJhY2tWYWx1ZSxzdWJSb3dzOmE/P1tdLGdldExlYWZSb3dzOigpPT5tZShzLnN1YlJvd3MsZT0+ZS5zdWJSb3dzKSxnZXRQYXJlbnRSb3c6KCk9PnMucGFyZW50SWQ/ZS5nZXRSb3cocy5wYXJlbnRJZCwhMCk6dm9pZCAwLGdldFBhcmVudFJvd3M6KCk9PntsZXQgZT1bXSx0PXM7Zm9yKDs7KXtsZXQgbj10LmdldFBhcmVudFJvdygpO2lmKCFuKWJyZWFrO2UucHVzaChuKSx0PW59cmV0dXJuIGUucmV2ZXJzZSgpfSxnZXRBbGxDZWxsczpBKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpXSx0PT50Lm1hcCh0PT5oZShlLHMsdCx0LmlkKSksaihlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEFsbENlbGxzYCkpLF9nZXRBbGxDZWxsc0J5Q29sdW1uSWQ6QSgoKT0+W3MuZ2V0QWxsQ2VsbHMoKV0sZT0+ZS5yZWR1Y2UoKGUsdCk9PihlW3QuY29sdW1uLmlkXT10LGUpLHt9KSxqKGUub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0QWxsQ2VsbHNCeUNvbHVtbklkYCkpfTtmb3IobGV0IHQ9MDt0PGUuX2ZlYXR1cmVzLmxlbmd0aDt0Kyspe2xldCBuPWUuX2ZlYXR1cmVzW3RdO249PW51bGx8fG4uY3JlYXRlUm93PT1udWxsfHxuLmNyZWF0ZVJvdyhzLGUpfXJldHVybiBzfSxiZT17Y3JlYXRlQ29sdW1uOihlLHQpPT57ZS5fZ2V0RmFjZXRlZFJvd01vZGVsPXQub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwmJnQub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwodCxlLmlkKSxlLmdldEZhY2V0ZWRSb3dNb2RlbD0oKT0+ZS5fZ2V0RmFjZXRlZFJvd01vZGVsP2UuX2dldEZhY2V0ZWRSb3dNb2RlbCgpOnQuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpLGUuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXM9dC5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMmJnQub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzKHQsZS5pZCksZS5nZXRGYWNldGVkVW5pcXVlVmFsdWVzPSgpPT5lLl9nZXRGYWNldGVkVW5pcXVlVmFsdWVzP2UuX2dldEZhY2V0ZWRVbmlxdWVWYWx1ZXMoKTpuZXcgTWFwLGUuX2dldEZhY2V0ZWRNaW5NYXhWYWx1ZXM9dC5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMmJnQub3B0aW9ucy5nZXRGYWNldGVkTWluTWF4VmFsdWVzKHQsZS5pZCksZS5nZXRGYWNldGVkTWluTWF4VmFsdWVzPSgpPT57aWYoZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcylyZXR1cm4gZS5fZ2V0RmFjZXRlZE1pbk1heFZhbHVlcygpfX19LHhlPShlLHQsbik9Pnt2YXIgcixpO2xldCBhPW49PW51bGx8fChyPW4udG9TdHJpbmcoKSk9PW51bGw/dm9pZCAwOnIudG9Mb3dlckNhc2UoKTtyZXR1cm4hISgoaT1lLmdldFZhbHVlKHQpKSE9bnVsbCYmKGk9aS50b1N0cmluZygpKSE9bnVsbCYmKGk9aS50b0xvd2VyQ2FzZSgpKSE9bnVsbCYmaS5pbmNsdWRlcyhhKSl9O3hlLmF1dG9SZW1vdmU9ZT0+SShlKTt2YXIgU2U9KGUsdCxuKT0+e3ZhciByO3JldHVybiEhKChyPWUuZ2V0VmFsdWUodCkpIT1udWxsJiYocj1yLnRvU3RyaW5nKCkpIT1udWxsJiZyLmluY2x1ZGVzKG4pKX07U2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciBDZT0oZSx0LG4pPT57dmFyIHI7cmV0dXJuKChyPWUuZ2V0VmFsdWUodCkpPT1udWxsfHwocj1yLnRvU3RyaW5nKCkpPT1udWxsP3ZvaWQgMDpyLnRvTG93ZXJDYXNlKCkpPT09bj8udG9Mb3dlckNhc2UoKX07Q2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciB3ZT0oZSx0LG4pPT5lLmdldFZhbHVlKHQpPy5pbmNsdWRlcyhuKTt3ZS5hdXRvUmVtb3ZlPWU9PkkoZSk7dmFyIFRlPShlLHQsbik9PiFuLnNvbWUobj0+e3ZhciByO3JldHVybiEoKHI9ZS5nZXRWYWx1ZSh0KSkhPW51bGwmJnIuaW5jbHVkZXMobikpfSk7VGUuYXV0b1JlbW92ZT1lPT5JKGUpfHwhKGUhPW51bGwmJmUubGVuZ3RoKTt2YXIgRWU9KGUsdCxuKT0+bi5zb21lKG49PmUuZ2V0VmFsdWUodCk/LmluY2x1ZGVzKG4pKTtFZS5hdXRvUmVtb3ZlPWU9PkkoZSl8fCEoZSE9bnVsbCYmZS5sZW5ndGgpO3ZhciBEZT0oZSx0LG4pPT5lLmdldFZhbHVlKHQpPT09bjtEZS5hdXRvUmVtb3ZlPWU9PkkoZSk7dmFyIE9lPShlLHQsbik9PmUuZ2V0VmFsdWUodCk9PW47T2UuYXV0b1JlbW92ZT1lPT5JKGUpO3ZhciBQPShlLHQsbik9PntsZXRbcixpXT1uLGE9ZS5nZXRWYWx1ZSh0KTtyZXR1cm4gYT49ciYmYTw9aX07UC5yZXNvbHZlRmlsdGVyVmFsdWU9ZT0+e2xldFt0LG5dPWUscj10eXBlb2YgdD09YG51bWJlcmA/dDpwYXJzZUZsb2F0KHQpLGk9dHlwZW9mIG49PWBudW1iZXJgP246cGFyc2VGbG9hdChuKSxhPXQ9PT1udWxsfHxOdW1iZXIuaXNOYU4ocik/LTEvMDpyLG89bj09PW51bGx8fE51bWJlci5pc05hTihpKT8xLzA6aTtpZihhPm8pe2xldCBlPWE7YT1vLG89ZX1yZXR1cm5bYSxvXX0sUC5hdXRvUmVtb3ZlPWU9PkkoZSl8fEkoZVswXSkmJkkoZVsxXSk7dmFyIEY9e2luY2x1ZGVzU3RyaW5nOnhlLGluY2x1ZGVzU3RyaW5nU2Vuc2l0aXZlOlNlLGVxdWFsc1N0cmluZzpDZSxhcnJJbmNsdWRlczp3ZSxhcnJJbmNsdWRlc0FsbDpUZSxhcnJJbmNsdWRlc1NvbWU6RWUsZXF1YWxzOkRlLHdlYWtFcXVhbHM6T2UsaW5OdW1iZXJSYW5nZTpQfTtmdW5jdGlvbiBJKGUpe3JldHVybiBlPT1udWxsfHxlPT09YGB9dmFyIGtlPXtnZXREZWZhdWx0Q29sdW1uRGVmOigpPT4oe2ZpbHRlckZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbkZpbHRlcnM6W10sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5GaWx0ZXJzQ2hhbmdlOk8oYGNvbHVtbkZpbHRlcnNgLGUpLGZpbHRlckZyb21MZWFmUm93czohMSxtYXhMZWFmUm93RmlsdGVyRGVwdGg6MTAwfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRBdXRvRmlsdGVyRm49KCk9PntsZXQgbj10LmdldENvcmVSb3dNb2RlbCgpLmZsYXRSb3dzWzBdPy5nZXRWYWx1ZShlLmlkKTtyZXR1cm4gdHlwZW9mIG49PWBzdHJpbmdgP0YuaW5jbHVkZXNTdHJpbmc6dHlwZW9mIG49PWBudW1iZXJgP0YuaW5OdW1iZXJSYW5nZTp0eXBlb2Ygbj09YGJvb2xlYW5gfHx0eXBlb2Ygbj09YG9iamVjdGAmJm4/Ri5lcXVhbHM6QXJyYXkuaXNBcnJheShuKT9GLmFyckluY2x1ZGVzOkYud2Vha0VxdWFsc30sZS5nZXRGaWx0ZXJGbj0oKT0+ayhlLmNvbHVtbkRlZi5maWx0ZXJGbik/ZS5jb2x1bW5EZWYuZmlsdGVyRm46ZS5jb2x1bW5EZWYuZmlsdGVyRm49PT1gYXV0b2A/ZS5nZXRBdXRvRmlsdGVyRm4oKTp0Lm9wdGlvbnMuZmlsdGVyRm5zPy5bZS5jb2x1bW5EZWYuZmlsdGVyRm5dPz9GW2UuY29sdW1uRGVmLmZpbHRlckZuXSxlLmdldENhbkZpbHRlcj0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZUNvbHVtbkZpbHRlcj8/ITApJiYodC5vcHRpb25zLmVuYWJsZUNvbHVtbkZpbHRlcnM/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJiEhZS5hY2Nlc3NvckZuLGUuZ2V0SXNGaWx0ZXJlZD0oKT0+ZS5nZXRGaWx0ZXJJbmRleCgpPi0xLGUuZ2V0RmlsdGVyVmFsdWU9KCk9Pnt2YXIgbjtyZXR1cm4obj10LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycyk9PW51bGx8fChuPW4uZmluZCh0PT50LmlkPT09ZS5pZCkpPT1udWxsP3ZvaWQgMDpuLnZhbHVlfSxlLmdldEZpbHRlckluZGV4PSgpPT50LmdldFN0YXRlKCkuY29sdW1uRmlsdGVycz8uZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKT8/LTEsZS5zZXRGaWx0ZXJWYWx1ZT1uPT57dC5zZXRDb2x1bW5GaWx0ZXJzKHQ9PntsZXQgcj1lLmdldEZpbHRlckZuKCksaT10Py5maW5kKHQ9PnQuaWQ9PT1lLmlkKSxhPUQobixpP2kudmFsdWU6dm9pZCAwKTtpZihBZShyLGEsZSkpcmV0dXJuIHQ/LmZpbHRlcih0PT50LmlkIT09ZS5pZCk/P1tdO2xldCBvPXtpZDplLmlkLHZhbHVlOmF9O3JldHVybiBpP3Q/Lm1hcCh0PT50LmlkPT09ZS5pZD9vOnQpPz9bXTp0IT1udWxsJiZ0Lmxlbmd0aD9bLi4udCxvXTpbb119KX19LGNyZWF0ZVJvdzooZSx0KT0+e2UuY29sdW1uRmlsdGVycz17fSxlLmNvbHVtbkZpbHRlcnNNZXRhPXt9fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5GaWx0ZXJzPXQ9PntsZXQgbj1lLmdldEFsbExlYWZDb2x1bW5zKCk7ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZT09bnVsbHx8ZS5vcHRpb25zLm9uQ29sdW1uRmlsdGVyc0NoYW5nZShlPT5EKHQsZSk/LmZpbHRlcihlPT57bGV0IHQ9bi5maW5kKHQ9PnQuaWQ9PT1lLmlkKTtyZXR1cm4hKHQmJkFlKHQuZ2V0RmlsdGVyRm4oKSxlLnZhbHVlLHQpKX0pKX0sZS5yZXNldENvbHVtbkZpbHRlcnM9dD0+e2Uuc2V0Q29sdW1uRmlsdGVycyh0P1tdOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5GaWx0ZXJzPz9bXSl9LGUuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbD0oKT0+ZS5nZXRDb3JlUm93TW9kZWwoKSxlLmdldEZpbHRlcmVkUm93TW9kZWw9KCk9PighZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldEZpbHRlcmVkUm93TW9kZWwmJihlLl9nZXRGaWx0ZXJlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRGaWx0ZXJlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsRmlsdGVyaW5nfHwhZS5fZ2V0RmlsdGVyZWRSb3dNb2RlbD9lLmdldFByZUZpbHRlcmVkUm93TW9kZWwoKTplLl9nZXRGaWx0ZXJlZFJvd01vZGVsKCkpfX07ZnVuY3Rpb24gQWUoZSx0LG4pe3JldHVybihlJiZlLmF1dG9SZW1vdmU/ZS5hdXRvUmVtb3ZlKHQsbik6ITEpfHx0PT09dm9pZCAwfHx0eXBlb2YgdD09YHN0cmluZ2AmJiF0fXZhciBMPXtzdW06KGUsdCxuKT0+bi5yZWR1Y2UoKHQsbik9PntsZXQgcj1uLmdldFZhbHVlKGUpO3JldHVybiB0Kyh0eXBlb2Ygcj09YG51bWJlcmA/cjowKX0sMCksbWluOihlLHQsbik9PntsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKHQ9PntsZXQgbj10LmdldFZhbHVlKGUpO24hPW51bGwmJihyPm58fHI9PT12b2lkIDAmJm4+PW4pJiYocj1uKX0pLHJ9LG1heDooZSx0LG4pPT57bGV0IHI7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocjxufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bil9KSxyfSxleHRlbnQ6KGUsdCxuKT0+e2xldCByLGk7cmV0dXJuIG4uZm9yRWFjaCh0PT57bGV0IG49dC5nZXRWYWx1ZShlKTtuIT1udWxsJiYocj09PXZvaWQgMD9uPj1uJiYocj1pPW4pOihyPm4mJihyPW4pLGk8biYmKGk9bikpKX0pLFtyLGldfSxtZWFuOihlLHQpPT57bGV0IG49MCxyPTA7aWYodC5mb3JFYWNoKHQ9PntsZXQgaT10LmdldFZhbHVlKGUpO2khPW51bGwmJihpPStpKT49aSYmKCsrbixyKz1pKX0pLG4pcmV0dXJuIHIvbn0sbWVkaWFuOihlLHQpPT57aWYoIXQubGVuZ3RoKXJldHVybjtsZXQgbj10Lm1hcCh0PT50LmdldFZhbHVlKGUpKTtpZighcGUobikpcmV0dXJuO2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gblswXTtsZXQgcj1NYXRoLmZsb29yKG4ubGVuZ3RoLzIpLGk9bi5zb3J0KChlLHQpPT5lLXQpO3JldHVybiBuLmxlbmd0aCUyPT0wPyhpW3ItMV0raVtyXSkvMjppW3JdfSx1bmlxdWU6KGUsdCk9PkFycmF5LmZyb20obmV3IFNldCh0Lm1hcCh0PT50LmdldFZhbHVlKGUpKSkudmFsdWVzKCkpLHVuaXF1ZUNvdW50OihlLHQpPT5uZXcgU2V0KHQubWFwKHQ9PnQuZ2V0VmFsdWUoZSkpKS5zaXplLGNvdW50OihlLHQpPT50Lmxlbmd0aH0samU9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9Pih7YWdncmVnYXRlZENlbGw6ZT0+e3ZhciB0O3JldHVybigodD1lLmdldFZhbHVlKCkpPT1udWxsfHx0LnRvU3RyaW5nPT1udWxsP3ZvaWQgMDp0LnRvU3RyaW5nKCkpPz9udWxsfSxhZ2dyZWdhdGlvbkZuOmBhdXRvYH0pLGdldEluaXRpYWxTdGF0ZTplPT4oe2dyb3VwaW5nOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uR3JvdXBpbmdDaGFuZ2U6TyhgZ3JvdXBpbmdgLGUpLGdyb3VwZWRDb2x1bW5Nb2RlOmByZW9yZGVyYH0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UudG9nZ2xlR3JvdXBpbmc9KCk9Pnt0LnNldEdyb3VwaW5nKHQ9PnQhPW51bGwmJnQuaW5jbHVkZXMoZS5pZCk/dC5maWx0ZXIodD0+dCE9PWUuaWQpOlsuLi50Pz9bXSxlLmlkXSl9LGUuZ2V0Q2FuR3JvdXA9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHcm91cGluZz8/ITApJiYodC5vcHRpb25zLmVuYWJsZUdyb3VwaW5nPz8hMCkmJighIWUuYWNjZXNzb3JGbnx8ISFlLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKSxlLmdldElzR3JvdXBlZD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmNsdWRlcyhlLmlkKSxlLmdldEdyb3VwZWRJbmRleD0oKT0+dC5nZXRTdGF0ZSgpLmdyb3VwaW5nPy5pbmRleE9mKGUuaWQpLGUuZ2V0VG9nZ2xlR3JvdXBpbmdIYW5kbGVyPSgpPT57bGV0IHQ9ZS5nZXRDYW5Hcm91cCgpO3JldHVybigpPT57dCYmZS50b2dnbGVHcm91cGluZygpfX0sZS5nZXRBdXRvQWdncmVnYXRpb25Gbj0oKT0+e2xldCBuPXQuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpO2lmKHR5cGVvZiBuPT1gbnVtYmVyYClyZXR1cm4gTC5zdW07aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09YFtvYmplY3QgRGF0ZV1gKXJldHVybiBMLmV4dGVudH0sZS5nZXRBZ2dyZWdhdGlvbkZuPSgpPT57aWYoIWUpdGhyb3cgRXJyb3IoKTtyZXR1cm4gayhlLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuKT9lLmNvbHVtbkRlZi5hZ2dyZWdhdGlvbkZuOmUuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm49PT1gYXV0b2A/ZS5nZXRBdXRvQWdncmVnYXRpb25GbigpOnQub3B0aW9ucy5hZ2dyZWdhdGlvbkZucz8uW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dPz9MW2UuY29sdW1uRGVmLmFnZ3JlZ2F0aW9uRm5dfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0R3JvdXBpbmc9dD0+ZS5vcHRpb25zLm9uR3JvdXBpbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkdyb3VwaW5nQ2hhbmdlKHQpLGUucmVzZXRHcm91cGluZz10PT57ZS5zZXRHcm91cGluZyh0P1tdOmUuaW5pdGlhbFN0YXRlPy5ncm91cGluZz8/W10pfSxlLmdldFByZUdyb3VwZWRSb3dNb2RlbD0oKT0+ZS5nZXRGaWx0ZXJlZFJvd01vZGVsKCksZS5nZXRHcm91cGVkUm93TW9kZWw9KCk9PighZS5fZ2V0R3JvdXBlZFJvd01vZGVsJiZlLm9wdGlvbnMuZ2V0R3JvdXBlZFJvd01vZGVsJiYoZS5fZ2V0R3JvdXBlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRHcm91cGVkUm93TW9kZWwoZSkpLGUub3B0aW9ucy5tYW51YWxHcm91cGluZ3x8IWUuX2dldEdyb3VwZWRSb3dNb2RlbD9lLmdldFByZUdyb3VwZWRSb3dNb2RlbCgpOmUuX2dldEdyb3VwZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS5nZXRJc0dyb3VwZWQ9KCk9PiEhZS5ncm91cGluZ0NvbHVtbklkLGUuZ2V0R3JvdXBpbmdWYWx1ZT1uPT57aWYoZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZS5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm4gZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZVtuXTtsZXQgcj10LmdldENvbHVtbihuKTtyZXR1cm4gciE9bnVsbCYmci5jb2x1bW5EZWYuZ2V0R3JvdXBpbmdWYWx1ZT8oZS5fZ3JvdXBpbmdWYWx1ZXNDYWNoZVtuXT1yLmNvbHVtbkRlZi5nZXRHcm91cGluZ1ZhbHVlKGUub3JpZ2luYWwpLGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGVbbl0pOmUuZ2V0VmFsdWUobil9LGUuX2dyb3VwaW5nVmFsdWVzQ2FjaGU9e319LGNyZWF0ZUNlbGw6KGUsdCxuLHIpPT57ZS5nZXRJc0dyb3VwZWQ9KCk9PnQuZ2V0SXNHcm91cGVkKCkmJnQuaWQ9PT1uLmdyb3VwaW5nQ29sdW1uSWQsZS5nZXRJc1BsYWNlaG9sZGVyPSgpPT4hZS5nZXRJc0dyb3VwZWQoKSYmdC5nZXRJc0dyb3VwZWQoKSxlLmdldElzQWdncmVnYXRlZD0oKT0+e3ZhciB0O3JldHVybiFlLmdldElzR3JvdXBlZCgpJiYhZS5nZXRJc1BsYWNlaG9sZGVyKCkmJiEhKCh0PW4uc3ViUm93cykhPW51bGwmJnQubGVuZ3RoKX19fTtmdW5jdGlvbiBNZShlLHQsbil7aWYoISh0IT1udWxsJiZ0Lmxlbmd0aCl8fCFuKXJldHVybiBlO2xldCByPWUuZmlsdGVyKGU9PiF0LmluY2x1ZGVzKGUuaWQpKTtyZXR1cm4gbj09PWByZW1vdmVgP3I6Wy4uLnQubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSwuLi5yXX12YXIgTmU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtbk9yZGVyOltdLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uQ29sdW1uT3JkZXJDaGFuZ2U6TyhgY29sdW1uT3JkZXJgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRJbmRleD1BKGU9PltVKHQsZSldLHQ9PnQuZmluZEluZGV4KHQ9PnQuaWQ9PT1lLmlkKSxqKHQub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0SW5kZXhgKSksZS5nZXRJc0ZpcnN0Q29sdW1uPW49PlUodCxuKVswXT8uaWQ9PT1lLmlkLGUuZ2V0SXNMYXN0Q29sdW1uPW49PntsZXQgcj1VKHQsbik7cmV0dXJuIHJbci5sZW5ndGgtMV0/LmlkPT09ZS5pZH19LGNyZWF0ZVRhYmxlOmU9PntlLnNldENvbHVtbk9yZGVyPXQ9PmUub3B0aW9ucy5vbkNvbHVtbk9yZGVyQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5PcmRlckNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uT3JkZXI9dD0+e2Uuc2V0Q29sdW1uT3JkZXIodD9bXTplLmluaXRpYWxTdGF0ZS5jb2x1bW5PcmRlcj8/W10pfSxlLl9nZXRPcmRlckNvbHVtbnNGbj1BKCgpPT5bZS5nZXRTdGF0ZSgpLmNvbHVtbk9yZGVyLGUuZ2V0U3RhdGUoKS5ncm91cGluZyxlLm9wdGlvbnMuZ3JvdXBlZENvbHVtbk1vZGVdLChlLHQsbik9PnI9PntsZXQgaT1bXTtpZighKGUhPW51bGwmJmUubGVuZ3RoKSlpPXI7ZWxzZXtsZXQgdD1bLi4uZV0sbj1bLi4ucl07Zm9yKDtuLmxlbmd0aCYmdC5sZW5ndGg7KXtsZXQgZT10LnNoaWZ0KCkscj1uLmZpbmRJbmRleCh0PT50LmlkPT09ZSk7cj4tMSYmaS5wdXNoKG4uc3BsaWNlKHIsMSlbMF0pfWk9Wy4uLmksLi4ubl19cmV0dXJuIE1lKGksdCxuKX0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBfZ2V0T3JkZXJDb2x1bW5zRm5gKSl9fSxSPSgpPT4oe2xlZnQ6W10scmlnaHQ6W119KSxQZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uUGlubmluZzpSKCksLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5QaW5uaW5nQ2hhbmdlOk8oYGNvbHVtblBpbm5pbmdgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5waW49bj0+e2xldCByPWUuZ2V0TGVhZkNvbHVtbnMoKS5tYXAoZT0+ZS5pZCkuZmlsdGVyKEJvb2xlYW4pO3Quc2V0Q29sdW1uUGlubmluZyhlPT5uPT09YHJpZ2h0YD97bGVmdDooZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSxyaWdodDpbLi4uKGU/LnJpZ2h0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLC4uLnJdfTpuPT09YGxlZnRgP3tsZWZ0OlsuLi4oZT8ubGVmdD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKSwuLi5yXSxyaWdodDooZT8ucmlnaHQ/P1tdKS5maWx0ZXIoZT0+IShyIT1udWxsJiZyLmluY2x1ZGVzKGUpKSl9OntsZWZ0OihlPy5sZWZ0Pz9bXSkuZmlsdGVyKGU9PiEociE9bnVsbCYmci5pbmNsdWRlcyhlKSkpLHJpZ2h0OihlPy5yaWdodD8/W10pLmZpbHRlcihlPT4hKHIhPW51bGwmJnIuaW5jbHVkZXMoZSkpKX0pfSxlLmdldENhblBpbj0oKT0+ZS5nZXRMZWFmQ29sdW1ucygpLnNvbWUoZT0+KGUuY29sdW1uRGVmLmVuYWJsZVBpbm5pbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVDb2x1bW5QaW5uaW5nPz90Lm9wdGlvbnMuZW5hYmxlUGlubmluZz8/ITApKSxlLmdldElzUGlubmVkPSgpPT57bGV0IG49ZS5nZXRMZWFmQ29sdW1ucygpLm1hcChlPT5lLmlkKSx7bGVmdDpyLHJpZ2h0Oml9PXQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YGxlZnRgOm8/YHJpZ2h0YDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e3ZhciBuO2xldCByPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gcj8oKG49dC5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcpPT1udWxsfHwobj1uW3JdKT09bnVsbD92b2lkIDA6bi5pbmRleE9mKGUuaWQpKT8/LTE6MH19LGNyZWF0ZVJvdzooZSx0KT0+e2UuZ2V0Q2VudGVyVmlzaWJsZUNlbGxzPUEoKCk9PltlLl9nZXRBbGxWaXNpYmxlQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0LG4pPT57bGV0IHI9Wy4uLnQ/P1tdLC4uLm4/P1tdXTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaW5jbHVkZXMoZS5jb2x1bW4uaWQpKX0saih0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclZpc2libGVDZWxsc2ApKSxlLmdldExlZnRWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLmxlZnRdLChlLHQpPT4odD8/W10pLm1hcCh0PT5lLmZpbmQoZT0+ZS5jb2x1bW4uaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT4oey4uLmUscG9zaXRpb246YGxlZnRgfSkpLGoodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBnZXRMZWZ0VmlzaWJsZUNlbGxzYCkpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuX2dldEFsbFZpc2libGVDZWxscygpLHQuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuY29sdW1uLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOmByaWdodGB9KSksaih0Lm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFJpZ2h0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57ZS5zZXRDb2x1bW5QaW5uaW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkNvbHVtblBpbm5pbmdDaGFuZ2UodCksZS5yZXNldENvbHVtblBpbm5pbmc9dD0+ZS5zZXRDb2x1bW5QaW5uaW5nKHQ/UigpOmUuaW5pdGlhbFN0YXRlPy5jb2x1bW5QaW5uaW5nPz9SKCkpLGUuZ2V0SXNTb21lQ29sdW1uc1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi5sZWZ0Py5sZW5ndGh8fG4ucmlnaHQ/Lmxlbmd0aCl9LGUuZ2V0TGVmdExlYWZDb2x1bW5zPUEoKCk9PltlLmdldEFsbExlYWZDb2x1bW5zKCksZS5nZXRTdGF0ZSgpLmNvbHVtblBpbm5pbmcubGVmdF0sKGUsdCk9Pih0Pz9bXSkubWFwKHQ9PmUuZmluZChlPT5lLmlkPT09dCkpLmZpbHRlcihCb29sZWFuKSxqKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0TGVmdExlYWZDb2x1bW5zYCkpLGUuZ2V0UmlnaHRMZWFmQ29sdW1ucz1BKCgpPT5bZS5nZXRBbGxMZWFmQ29sdW1ucygpLGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0KT0+KHQ/P1tdKS5tYXAodD0+ZS5maW5kKGU9PmUuaWQ9PT10KSkuZmlsdGVyKEJvb2xlYW4pLGooZS5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRSaWdodExlYWZDb2x1bW5zYCkpLGUuZ2V0Q2VudGVyTGVhZkNvbHVtbnM9QSgoKT0+W2UuZ2V0QWxsTGVhZkNvbHVtbnMoKSxlLmdldFN0YXRlKCkuY29sdW1uUGlubmluZy5sZWZ0LGUuZ2V0U3RhdGUoKS5jb2x1bW5QaW5uaW5nLnJpZ2h0XSwoZSx0LG4pPT57bGV0IHI9Wy4uLnQ/P1tdLC4uLm4/P1tdXTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaW5jbHVkZXMoZS5pZCkpfSxqKGUub3B0aW9ucyxgZGVidWdDb2x1bW5zYCxgZ2V0Q2VudGVyTGVhZkNvbHVtbnNgKSl9fTtmdW5jdGlvbiBGZShlKXtyZXR1cm4gZXx8KHR5cGVvZiBkb2N1bWVudDxgdWA/ZG9jdW1lbnQ6bnVsbCl9dmFyIHo9e3NpemU6MTUwLG1pblNpemU6MjAsbWF4U2l6ZToyKio1My0xfSxCPSgpPT4oe3N0YXJ0T2Zmc2V0Om51bGwsc3RhcnRTaXplOm51bGwsZGVsdGFPZmZzZXQ6bnVsbCxkZWx0YVBlcmNlbnRhZ2U6bnVsbCxpc1Jlc2l6aW5nQ29sdW1uOiExLGNvbHVtblNpemluZ1N0YXJ0OltdfSksSWU9e2dldERlZmF1bHRDb2x1bW5EZWY6KCk9PnosZ2V0SW5pdGlhbFN0YXRlOmU9Pih7Y29sdW1uU2l6aW5nOnt9LGNvbHVtblNpemluZ0luZm86QigpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe2NvbHVtblJlc2l6ZU1vZGU6YG9uRW5kYCxjb2x1bW5SZXNpemVEaXJlY3Rpb246YGx0cmAsb25Db2x1bW5TaXppbmdDaGFuZ2U6TyhgY29sdW1uU2l6aW5nYCxlKSxvbkNvbHVtblNpemluZ0luZm9DaGFuZ2U6TyhgY29sdW1uU2l6aW5nSW5mb2AsZSl9KSxjcmVhdGVDb2x1bW46KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgbj10LmdldFN0YXRlKCkuY29sdW1uU2l6aW5nW2UuaWRdO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLmNvbHVtbkRlZi5taW5TaXplPz96Lm1pblNpemUsbj8/ZS5jb2x1bW5EZWYuc2l6ZT8/ei5zaXplKSxlLmNvbHVtbkRlZi5tYXhTaXplPz96Lm1heFNpemUpfSxlLmdldFN0YXJ0PUEoZT0+W2UsVSh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKDAsZS5nZXRJbmRleCh0KSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLGoodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRTdGFydGApKSxlLmdldEFmdGVyPUEoZT0+W2UsVSh0LGUpLHQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmddLCh0LG4pPT5uLnNsaWNlKGUuZ2V0SW5kZXgodCkrMSkucmVkdWNlKChlLHQpPT5lK3QuZ2V0U2l6ZSgpLDApLGoodC5vcHRpb25zLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBZnRlcmApKSxlLnJlc2V0U2l6ZT0oKT0+e3Quc2V0Q29sdW1uU2l6aW5nKHQ9PntsZXR7W2UuaWRdOm4sLi4ucn09dDtyZXR1cm4gcn0pfSxlLmdldENhblJlc2l6ZT0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVJlc2l6aW5nPz8hMCkmJih0Lm9wdGlvbnMuZW5hYmxlQ29sdW1uUmVzaXppbmc/PyEwKSxlLmdldElzUmVzaXppbmc9KCk9PnQuZ2V0U3RhdGUoKS5jb2x1bW5TaXppbmdJbmZvLmlzUmVzaXppbmdDb2x1bW49PT1lLmlkfSxjcmVhdGVIZWFkZXI6KGUsdCk9PntlLmdldFNpemU9KCk9PntsZXQgdD0wLG49ZT0+e2Uuc3ViSGVhZGVycy5sZW5ndGg/ZS5zdWJIZWFkZXJzLmZvckVhY2gobik6dCs9ZS5jb2x1bW4uZ2V0U2l6ZSgpPz8wfTtyZXR1cm4gbihlKSx0fSxlLmdldFN0YXJ0PSgpPT57aWYoZS5pbmRleD4wKXtsZXQgdD1lLmhlYWRlckdyb3VwLmhlYWRlcnNbZS5pbmRleC0xXTtyZXR1cm4gdC5nZXRTdGFydCgpK3QuZ2V0U2l6ZSgpfXJldHVybiAwfSxlLmdldFJlc2l6ZUhhbmRsZXI9bj0+e2xldCByPXQuZ2V0Q29sdW1uKGUuY29sdW1uLmlkKSxpPXI/LmdldENhblJlc2l6ZSgpO3JldHVybiBhPT57aWYoIXJ8fCFpfHwoYS5wZXJzaXN0PT1udWxsfHxhLnBlcnNpc3QoKSxIKGEpJiZhLnRvdWNoZXMmJmEudG91Y2hlcy5sZW5ndGg+MSkpcmV0dXJuO2xldCBvPWUuZ2V0U2l6ZSgpLHM9ZT9lLmdldExlYWZIZWFkZXJzKCkubWFwKGU9PltlLmNvbHVtbi5pZCxlLmNvbHVtbi5nZXRTaXplKCldKTpbW3IuaWQsci5nZXRTaXplKCldXSxjPUgoYSk/TWF0aC5yb3VuZChhLnRvdWNoZXNbMF0uY2xpZW50WCk6YS5jbGllbnRYLGw9e30sdT0oZSxuKT0+e3R5cGVvZiBuPT1gbnVtYmVyYCYmKHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT57bGV0IHI9dC5vcHRpb25zLmNvbHVtblJlc2l6ZURpcmVjdGlvbj09PWBydGxgPy0xOjEsaT0obi0oZT8uc3RhcnRPZmZzZXQ/PzApKSpyLGE9TWF0aC5tYXgoaS8oZT8uc3RhcnRTaXplPz8wKSwtLjk5OTk5OSk7cmV0dXJuIGUuY29sdW1uU2l6aW5nU3RhcnQuZm9yRWFjaChlPT57bGV0W3Qsbl09ZTtsW3RdPU1hdGgucm91bmQoTWF0aC5tYXgobituKmEsMCkqMTAwKS8xMDB9KSx7Li4uZSxkZWx0YU9mZnNldDppLGRlbHRhUGVyY2VudGFnZTphfX0pLCh0Lm9wdGlvbnMuY29sdW1uUmVzaXplTW9kZT09PWBvbkNoYW5nZWB8fGU9PT1gZW5kYCkmJnQuc2V0Q29sdW1uU2l6aW5nKGU9Pih7Li4uZSwuLi5sfSkpKX0sZD1lPT51KGBtb3ZlYCxlKSxmPWU9Pnt1KGBlbmRgLGUpLHQuc2V0Q29sdW1uU2l6aW5nSW5mbyhlPT4oey4uLmUsaXNSZXNpemluZ0NvbHVtbjohMSxzdGFydE9mZnNldDpudWxsLHN0YXJ0U2l6ZTpudWxsLGRlbHRhT2Zmc2V0Om51bGwsZGVsdGFQZXJjZW50YWdlOm51bGwsY29sdW1uU2l6aW5nU3RhcnQ6W119KSl9LHA9RmUobiksbT17bW92ZUhhbmRsZXI6ZT0+ZChlLmNsaWVudFgpLHVwSGFuZGxlcjplPT57cD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbW91c2Vtb3ZlYCxtLm1vdmVIYW5kbGVyKSxwPy5yZW1vdmVFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlciksZihlLmNsaWVudFgpfX0saD17bW92ZUhhbmRsZXI6ZT0+KGUuY2FuY2VsYWJsZSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSxkKGUudG91Y2hlc1swXS5jbGllbnRYKSwhMSksdXBIYW5kbGVyOmU9PntwPy5yZW1vdmVFdmVudExpc3RlbmVyKGB0b3VjaG1vdmVgLGgubW92ZUhhbmRsZXIpLHA/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlciksZS5jYW5jZWxhYmxlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLGYoZS50b3VjaGVzWzBdPy5jbGllbnRYKX19LGc9TGUoKT97cGFzc2l2ZTohMX06ITE7SChhKT8ocD8uYWRkRXZlbnRMaXN0ZW5lcihgdG91Y2htb3ZlYCxoLm1vdmVIYW5kbGVyLGcpLHA/LmFkZEV2ZW50TGlzdGVuZXIoYHRvdWNoZW5kYCxoLnVwSGFuZGxlcixnKSk6KHA/LmFkZEV2ZW50TGlzdGVuZXIoYG1vdXNlbW92ZWAsbS5tb3ZlSGFuZGxlcixnKSxwPy5hZGRFdmVudExpc3RlbmVyKGBtb3VzZXVwYCxtLnVwSGFuZGxlcixnKSksdC5zZXRDb2x1bW5TaXppbmdJbmZvKGU9Pih7Li4uZSxzdGFydE9mZnNldDpjLHN0YXJ0U2l6ZTpvLGRlbHRhT2Zmc2V0OjAsZGVsdGFQZXJjZW50YWdlOjAsY29sdW1uU2l6aW5nU3RhcnQ6cyxpc1Jlc2l6aW5nQ29sdW1uOnIuaWR9KSl9fX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Q29sdW1uU2l6aW5nPXQ9PmUub3B0aW9ucy5vbkNvbHVtblNpemluZ0NoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uU2l6aW5nQ2hhbmdlKHQpLGUuc2V0Q29sdW1uU2l6aW5nSW5mbz10PT5lLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Db2x1bW5TaXppbmdJbmZvQ2hhbmdlKHQpLGUucmVzZXRDb2x1bW5TaXppbmc9dD0+e2Uuc2V0Q29sdW1uU2l6aW5nKHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uU2l6aW5nPz97fSl9LGUucmVzZXRIZWFkZXJTaXplSW5mbz10PT57ZS5zZXRDb2x1bW5TaXppbmdJbmZvKHQ/QigpOmUuaW5pdGlhbFN0YXRlLmNvbHVtblNpemluZ0luZm8/P0IoKSl9LGUuZ2V0VG90YWxTaXplPSgpPT5lLmdldEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldExlZnRUb3RhbFNpemU9KCk9PmUuZ2V0TGVmdEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MCxlLmdldENlbnRlclRvdGFsU2l6ZT0oKT0+ZS5nZXRDZW50ZXJIZWFkZXJHcm91cHMoKVswXT8uaGVhZGVycy5yZWR1Y2UoKGUsdCk9PmUrdC5nZXRTaXplKCksMCk/PzAsZS5nZXRSaWdodFRvdGFsU2l6ZT0oKT0+ZS5nZXRSaWdodEhlYWRlckdyb3VwcygpWzBdPy5oZWFkZXJzLnJlZHVjZSgoZSx0KT0+ZSt0LmdldFNpemUoKSwwKT8/MH19LFY9bnVsbDtmdW5jdGlvbiBMZSgpe2lmKHR5cGVvZiBWPT1gYm9vbGVhbmApcmV0dXJuIFY7bGV0IGU9ITE7dHJ5e2xldCB0PXtnZXQgcGFzc2l2ZSgpe3JldHVybiBlPSEwLCExfX0sbj0oKT0+e307d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG4sdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHRlc3RgLG4pfWNhdGNoe2U9ITF9cmV0dXJuIFY9ZSxWfWZ1bmN0aW9uIEgoZSl7cmV0dXJuIGUudHlwZT09PWB0b3VjaHN0YXJ0YH12YXIgUmU9e2dldEluaXRpYWxTdGF0ZTplPT4oe2NvbHVtblZpc2liaWxpdHk6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlOk8oYGNvbHVtblZpc2liaWxpdHlgLGUpfSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS50b2dnbGVWaXNpYmlsaXR5PW49PntlLmdldENhbkhpZGUoKSYmdC5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ9Pih7Li4udCxbZS5pZF06bj8/IWUuZ2V0SXNWaXNpYmxlKCl9KSl9LGUuZ2V0SXNWaXNpYmxlPSgpPT57bGV0IG49ZS5jb2x1bW5zO3JldHVybihuLmxlbmd0aD9uLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGUoKSk6dC5nZXRTdGF0ZSgpLmNvbHVtblZpc2liaWxpdHk/LltlLmlkXSk/PyEwfSxlLmdldENhbkhpZGU9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVIaWRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVIaWRpbmc/PyEwKSxlLmdldFRvZ2dsZVZpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVWaXNpYmlsaXR5PT1udWxsfHxlLnRvZ2dsZVZpc2liaWxpdHkodC50YXJnZXQuY2hlY2tlZCl9fSxjcmVhdGVSb3c6KGUsdCk9PntlLl9nZXRBbGxWaXNpYmxlQ2VsbHM9QSgoKT0+W2UuZ2V0QWxsQ2VsbHMoKSx0LmdldFN0YXRlKCkuY29sdW1uVmlzaWJpbGl0eV0sZT0+ZS5maWx0ZXIoZT0+ZS5jb2x1bW4uZ2V0SXNWaXNpYmxlKCkpLGoodC5vcHRpb25zLGBkZWJ1Z1Jvd3NgLGBfZ2V0QWxsVmlzaWJsZUNlbGxzYCkpLGUuZ2V0VmlzaWJsZUNlbGxzPUEoKCk9PltlLmdldExlZnRWaXNpYmxlQ2VsbHMoKSxlLmdldENlbnRlclZpc2libGVDZWxscygpLGUuZ2V0UmlnaHRWaXNpYmxlQ2VsbHMoKV0sKGUsdCxuKT0+Wy4uLmUsLi4udCwuLi5uXSxqKHQub3B0aW9ucyxgZGVidWdSb3dzYCxgZ2V0VmlzaWJsZUNlbGxzYCkpfSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9KHQsbik9PkEoKCk9PltuKCksbigpLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZSgpKS5tYXAoZT0+ZS5pZCkuam9pbihgX2ApXSxlPT5lLmZpbHRlcihlPT5lLmdldElzVmlzaWJsZT09bnVsbD92b2lkIDA6ZS5nZXRJc1Zpc2libGUoKSksaihlLm9wdGlvbnMsYGRlYnVnQ29sdW1uc2AsdCkpO2UuZ2V0VmlzaWJsZUZsYXRDb2x1bW5zPXQoYGdldFZpc2libGVGbGF0Q29sdW1uc2AsKCk9PmUuZ2V0QWxsRmxhdENvbHVtbnMoKSksZS5nZXRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpKSxlLmdldExlZnRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0TGVmdFZpc2libGVMZWFmQ29sdW1uc2AsKCk9PmUuZ2V0TGVmdExlYWZDb2x1bW5zKCkpLGUuZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0UmlnaHRWaXNpYmxlTGVhZkNvbHVtbnNgLCgpPT5lLmdldFJpZ2h0TGVhZkNvbHVtbnMoKSksZS5nZXRDZW50ZXJWaXNpYmxlTGVhZkNvbHVtbnM9dChgZ2V0Q2VudGVyVmlzaWJsZUxlYWZDb2x1bW5zYCwoKT0+ZS5nZXRDZW50ZXJMZWFmQ29sdW1ucygpKSxlLnNldENvbHVtblZpc2liaWxpdHk9dD0+ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZT09bnVsbD92b2lkIDA6ZS5vcHRpb25zLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSh0KSxlLnJlc2V0Q29sdW1uVmlzaWJpbGl0eT10PT57ZS5zZXRDb2x1bW5WaXNpYmlsaXR5KHQ/e306ZS5pbml0aWFsU3RhdGUuY29sdW1uVmlzaWJpbGl0eT8/e30pfSxlLnRvZ2dsZUFsbENvbHVtbnNWaXNpYmxlPXQ9Pnt0Pz89IWUuZ2V0SXNBbGxDb2x1bW5zVmlzaWJsZSgpLGUuc2V0Q29sdW1uVmlzaWJpbGl0eShlLmdldEFsbExlYWZDb2x1bW5zKCkucmVkdWNlKChlLG4pPT4oey4uLmUsW24uaWRdOnR8fCEobi5nZXRDYW5IaWRlIT1udWxsJiZuLmdldENhbkhpZGUoKSl9KSx7fSkpfSxlLmdldElzQWxsQ29sdW1uc1Zpc2libGU9KCk9PiFlLmdldEFsbExlYWZDb2x1bW5zKCkuc29tZShlPT4hKGUuZ2V0SXNWaXNpYmxlIT1udWxsJiZlLmdldElzVmlzaWJsZSgpKSksZS5nZXRJc1NvbWVDb2x1bW5zVmlzaWJsZT0oKT0+ZS5nZXRBbGxMZWFmQ29sdW1ucygpLnNvbWUoZT0+ZS5nZXRJc1Zpc2libGU9PW51bGw/dm9pZCAwOmUuZ2V0SXNWaXNpYmxlKCkpLGUuZ2V0VG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHlIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxDb2x1bW5zVmlzaWJsZSh0LnRhcmdldD8uY2hlY2tlZCl9fX07ZnVuY3Rpb24gVShlLHQpe3JldHVybiB0P3Q9PT1gY2VudGVyYD9lLmdldENlbnRlclZpc2libGVMZWFmQ29sdW1ucygpOnQ9PT1gbGVmdGA/ZS5nZXRMZWZ0VmlzaWJsZUxlYWZDb2x1bW5zKCk6ZS5nZXRSaWdodFZpc2libGVMZWFmQ29sdW1ucygpOmUuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKCl9dmFyIHplPXtjcmVhdGVUYWJsZTplPT57ZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsPWUub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRGYWNldGVkUm93TW9kZWwoZSxgX19nbG9iYWxfX2ApLGUuZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsPSgpPT5lLm9wdGlvbnMubWFudWFsRmlsdGVyaW5nfHwhZS5fZ2V0R2xvYmFsRmFjZXRlZFJvd01vZGVsP2UuZ2V0UHJlRmlsdGVyZWRSb3dNb2RlbCgpOmUuX2dldEdsb2JhbEZhY2V0ZWRSb3dNb2RlbCgpLGUuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM9ZS5vcHRpb25zLmdldEZhY2V0ZWRVbmlxdWVWYWx1ZXMmJmUub3B0aW9ucy5nZXRGYWNldGVkVW5pcXVlVmFsdWVzKGUsYF9fZ2xvYmFsX19gKSxlLmdldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM9KCk9PmUuX2dldEdsb2JhbEZhY2V0ZWRVbmlxdWVWYWx1ZXM/ZS5fZ2V0R2xvYmFsRmFjZXRlZFVuaXF1ZVZhbHVlcygpOm5ldyBNYXAsZS5fZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcz1lLm9wdGlvbnMuZ2V0RmFjZXRlZE1pbk1heFZhbHVlcyYmZS5vcHRpb25zLmdldEZhY2V0ZWRNaW5NYXhWYWx1ZXMoZSxgX19nbG9iYWxfX2ApLGUuZ2V0R2xvYmFsRmFjZXRlZE1pbk1heFZhbHVlcz0oKT0+e2lmKGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXMpcmV0dXJuIGUuX2dldEdsb2JhbEZhY2V0ZWRNaW5NYXhWYWx1ZXMoKX19fSxCZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Z2xvYmFsRmlsdGVyOnZvaWQgMCwuLi5lfSksZ2V0RGVmYXVsdE9wdGlvbnM6ZT0+KHtvbkdsb2JhbEZpbHRlckNoYW5nZTpPKGBnbG9iYWxGaWx0ZXJgLGUpLGdsb2JhbEZpbHRlckZuOmBhdXRvYCxnZXRDb2x1bW5DYW5HbG9iYWxGaWx0ZXI6dD0+e3ZhciBuO2xldCByPShuPWUuZ2V0Q29yZVJvd01vZGVsKCkuZmxhdFJvd3NbMF0pPT1udWxsfHwobj1uLl9nZXRBbGxDZWxsc0J5Q29sdW1uSWQoKVt0LmlkXSk9PW51bGw/dm9pZCAwOm4uZ2V0VmFsdWUoKTtyZXR1cm4gdHlwZW9mIHI9PWBzdHJpbmdgfHx0eXBlb2Ygcj09YG51bWJlcmB9fSksY3JlYXRlQ29sdW1uOihlLHQpPT57ZS5nZXRDYW5HbG9iYWxGaWx0ZXI9KCk9PihlLmNvbHVtbkRlZi5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVHbG9iYWxGaWx0ZXI/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVGaWx0ZXJzPz8hMCkmJigodC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcj09bnVsbD92b2lkIDA6dC5vcHRpb25zLmdldENvbHVtbkNhbkdsb2JhbEZpbHRlcihlKSk/PyEwKSYmISFlLmFjY2Vzc29yRm59LGNyZWF0ZVRhYmxlOmU9PntlLmdldEdsb2JhbEF1dG9GaWx0ZXJGbj0oKT0+Ri5pbmNsdWRlc1N0cmluZyxlLmdldEdsb2JhbEZpbHRlckZuPSgpPT57bGV0e2dsb2JhbEZpbHRlckZuOnR9PWUub3B0aW9ucztyZXR1cm4gayh0KT90OnQ9PT1gYXV0b2A/ZS5nZXRHbG9iYWxBdXRvRmlsdGVyRm4oKTplLm9wdGlvbnMuZmlsdGVyRm5zPy5bdF0/P0ZbdF19LGUuc2V0R2xvYmFsRmlsdGVyPXQ9PntlLm9wdGlvbnMub25HbG9iYWxGaWx0ZXJDaGFuZ2U9PW51bGx8fGUub3B0aW9ucy5vbkdsb2JhbEZpbHRlckNoYW5nZSh0KX0sZS5yZXNldEdsb2JhbEZpbHRlcj10PT57ZS5zZXRHbG9iYWxGaWx0ZXIodD92b2lkIDA6ZS5pbml0aWFsU3RhdGUuZ2xvYmFsRmlsdGVyKX19fSxWZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7ZXhwYW5kZWQ6e30sLi4uZX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25FeHBhbmRlZENoYW5nZTpPKGBleHBhbmRlZGAsZSkscGFnaW5hdGVFeHBhbmRlZFJvd3M6ITB9KSxjcmVhdGVUYWJsZTplPT57bGV0IHQ9ITEsbj0hMTtlLl9hdXRvUmVzZXRFeHBhbmRlZD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldEV4cGFuZGVkPz8hZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZyl7aWYobilyZXR1cm47bj0hMCxlLl9xdWV1ZSgoKT0+e2UucmVzZXRFeHBhbmRlZCgpLG49ITF9KX19LGUuc2V0RXhwYW5kZWQ9dD0+ZS5vcHRpb25zLm9uRXhwYW5kZWRDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vbkV4cGFuZGVkQ2hhbmdlKHQpLGUudG9nZ2xlQWxsUm93c0V4cGFuZGVkPXQ9Pnt0Pz8hZS5nZXRJc0FsbFJvd3NFeHBhbmRlZCgpP2Uuc2V0RXhwYW5kZWQoITApOmUuc2V0RXhwYW5kZWQoe30pfSxlLnJlc2V0RXhwYW5kZWQ9dD0+e2Uuc2V0RXhwYW5kZWQodD97fTplLmluaXRpYWxTdGF0ZT8uZXhwYW5kZWQ/P3t9KX0sZS5nZXRDYW5Tb21lUm93c0V4cGFuZD0oKT0+ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PmUuZ2V0Q2FuRXhwYW5kKCkpLGUuZ2V0VG9nZ2xlQWxsUm93c0V4cGFuZGVkSGFuZGxlcj0oKT0+dD0+e3QucGVyc2lzdD09bnVsbHx8dC5wZXJzaXN0KCksZS50b2dnbGVBbGxSb3dzRXhwYW5kZWQoKX0sZS5nZXRJc1NvbWVSb3dzRXhwYW5kZWQ9KCk9PntsZXQgdD1lLmdldFN0YXRlKCkuZXhwYW5kZWQ7cmV0dXJuIHQ9PT0hMHx8T2JqZWN0LnZhbHVlcyh0KS5zb21lKEJvb2xlYW4pfSxlLmdldElzQWxsUm93c0V4cGFuZGVkPSgpPT57bGV0IHQ9ZS5nZXRTdGF0ZSgpLmV4cGFuZGVkO3JldHVybiB0eXBlb2YgdD09YGJvb2xlYW5gP3Q9PT0hMDohKCFPYmplY3Qua2V5cyh0KS5sZW5ndGh8fGUuZ2V0Um93TW9kZWwoKS5mbGF0Um93cy5zb21lKGU9PiFlLmdldElzRXhwYW5kZWQoKSkpfSxlLmdldEV4cGFuZGVkRGVwdGg9KCk9PntsZXQgdD0wO3JldHVybihlLmdldFN0YXRlKCkuZXhwYW5kZWQ9PT0hMD9PYmplY3Qua2V5cyhlLmdldFJvd01vZGVsKCkucm93c0J5SWQpOk9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5leHBhbmRlZCkpLmZvckVhY2goZT0+e2xldCBuPWUuc3BsaXQoYC5gKTt0PU1hdGgubWF4KHQsbi5sZW5ndGgpfSksdH0sZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsPSgpPT5lLmdldFNvcnRlZFJvd01vZGVsKCksZS5nZXRFeHBhbmRlZFJvd01vZGVsPSgpPT4oIWUuX2dldEV4cGFuZGVkUm93TW9kZWwmJmUub3B0aW9ucy5nZXRFeHBhbmRlZFJvd01vZGVsJiYoZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbD1lLm9wdGlvbnMuZ2V0RXhwYW5kZWRSb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbEV4cGFuZGluZ3x8IWUuX2dldEV4cGFuZGVkUm93TW9kZWw/ZS5nZXRQcmVFeHBhbmRlZFJvd01vZGVsKCk6ZS5fZ2V0RXhwYW5kZWRSb3dNb2RlbCgpKX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVFeHBhbmRlZD1uPT57dC5zZXRFeHBhbmRlZChyPT57bGV0IGk9cj09PSEwfHwhIShyIT1udWxsJiZyW2UuaWRdKSxhPXt9O2lmKHI9PT0hMD9PYmplY3Qua2V5cyh0LmdldFJvd01vZGVsKCkucm93c0J5SWQpLmZvckVhY2goZT0+e2FbZV09ITB9KTphPXIsbj8/PSFpLCFpJiZuKXJldHVybnsuLi5hLFtlLmlkXTohMH07aWYoaSYmIW4pe2xldHtbZS5pZF06dCwuLi5ufT1hO3JldHVybiBufXJldHVybiByfSl9LGUuZ2V0SXNFeHBhbmRlZD0oKT0+e2xldCBuPXQuZ2V0U3RhdGUoKS5leHBhbmRlZDtyZXR1cm4hISgodC5vcHRpb25zLmdldElzUm93RXhwYW5kZWQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRJc1Jvd0V4cGFuZGVkKGUpKT8/KG49PT0hMHx8bj8uW2UuaWRdKSl9LGUuZ2V0Q2FuRXhwYW5kPSgpPT57dmFyIG47cmV0dXJuKHQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQ9PW51bGw/dm9pZCAwOnQub3B0aW9ucy5nZXRSb3dDYW5FeHBhbmQoZSkpPz8oKHQub3B0aW9ucy5lbmFibGVFeHBhbmRpbmc/PyEwKSYmISEoKG49ZS5zdWJSb3dzKSE9bnVsbCYmbi5sZW5ndGgpKX0sZS5nZXRJc0FsbFBhcmVudHNFeHBhbmRlZD0oKT0+e2xldCBuPSEwLHI9ZTtmb3IoO24mJnIucGFyZW50SWQ7KXI9dC5nZXRSb3coci5wYXJlbnRJZCwhMCksbj1yLmdldElzRXhwYW5kZWQoKTtyZXR1cm4gbn0sZS5nZXRUb2dnbGVFeHBhbmRlZEhhbmRsZXI9KCk9PntsZXQgdD1lLmdldENhbkV4cGFuZCgpO3JldHVybigpPT57dCYmZS50b2dnbGVFeHBhbmRlZCgpfX19fSxXPTAsRz0xMCxLPSgpPT4oe3BhZ2VJbmRleDpXLHBhZ2VTaXplOkd9KSxIZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7Li4uZSxwYWdpbmF0aW9uOnsuLi5LKCksLi4uZT8ucGFnaW5hdGlvbn19KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUGFnaW5hdGlvbkNoYW5nZTpPKGBwYWdpbmF0aW9uYCxlKX0pLGNyZWF0ZVRhYmxlOmU9PntsZXQgdD0hMSxuPSExO2UuX2F1dG9SZXNldFBhZ2VJbmRleD0oKT0+e2lmKCF0KXtlLl9xdWV1ZSgoKT0+e3Q9ITB9KTtyZXR1cm59aWYoZS5vcHRpb25zLmF1dG9SZXNldEFsbD8/ZS5vcHRpb25zLmF1dG9SZXNldFBhZ2VJbmRleD8/IWUub3B0aW9ucy5tYW51YWxQYWdpbmF0aW9uKXtpZihuKXJldHVybjtuPSEwLGUuX3F1ZXVlKCgpPT57ZS5yZXNldFBhZ2VJbmRleCgpLG49ITF9KX19LGUuc2V0UGFnaW5hdGlvbj10PT5lLm9wdGlvbnMub25QYWdpbmF0aW9uQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25QYWdpbmF0aW9uQ2hhbmdlKGU9PkQodCxlKSksZS5yZXNldFBhZ2luYXRpb249dD0+e2Uuc2V0UGFnaW5hdGlvbih0P0soKTplLmluaXRpYWxTdGF0ZS5wYWdpbmF0aW9uPz9LKCkpfSxlLnNldFBhZ2VJbmRleD10PT57ZS5zZXRQYWdpbmF0aW9uKG49PntsZXQgcj1EKHQsbi5wYWdlSW5kZXgpLGk9ZS5vcHRpb25zLnBhZ2VDb3VudD09PXZvaWQgMHx8ZS5vcHRpb25zLnBhZ2VDb3VudD09PS0xPzIqKjUzLTE6ZS5vcHRpb25zLnBhZ2VDb3VudC0xO3JldHVybiByPU1hdGgubWF4KDAsTWF0aC5taW4ocixpKSksey4uLm4scGFnZUluZGV4OnJ9fSl9LGUucmVzZXRQYWdlSW5kZXg9dD0+e3ZhciBuO2Uuc2V0UGFnZUluZGV4KHQ/VzooKG49ZS5pbml0aWFsU3RhdGUpPT1udWxsfHwobj1uLnBhZ2luYXRpb24pPT1udWxsP3ZvaWQgMDpuLnBhZ2VJbmRleCk/P1cpfSxlLnJlc2V0UGFnZVNpemU9dD0+e3ZhciBuO2Uuc2V0UGFnZVNpemUodD9HOigobj1lLmluaXRpYWxTdGF0ZSk9PW51bGx8fChuPW4ucGFnaW5hdGlvbik9PW51bGw/dm9pZCAwOm4ucGFnZVNpemUpPz9HKX0sZS5zZXRQYWdlU2l6ZT10PT57ZS5zZXRQYWdpbmF0aW9uKGU9PntsZXQgbj1NYXRoLm1heCgxLEQodCxlLnBhZ2VTaXplKSkscj1lLnBhZ2VTaXplKmUucGFnZUluZGV4LGk9TWF0aC5mbG9vcihyL24pO3JldHVybnsuLi5lLHBhZ2VJbmRleDppLHBhZ2VTaXplOm59fSl9LGUuc2V0UGFnZUNvdW50PXQ9PmUuc2V0UGFnaW5hdGlvbihuPT57bGV0IHI9RCh0LGUub3B0aW9ucy5wYWdlQ291bnQ/Py0xKTtyZXR1cm4gdHlwZW9mIHI9PWBudW1iZXJgJiYocj1NYXRoLm1heCgtMSxyKSksey4uLm4scGFnZUNvdW50OnJ9fSksZS5nZXRQYWdlT3B0aW9ucz1BKCgpPT5bZS5nZXRQYWdlQ291bnQoKV0sZT0+e2xldCB0PVtdO3JldHVybiBlJiZlPjAmJih0PVsuLi5BcnJheShlKV0uZmlsbChudWxsKS5tYXAoKGUsdCk9PnQpKSx0fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldFBhZ2VPcHRpb25zYCkpLGUuZ2V0Q2FuUHJldmlvdXNQYWdlPSgpPT5lLmdldFN0YXRlKCkucGFnaW5hdGlvbi5wYWdlSW5kZXg+MCxlLmdldENhbk5leHRQYWdlPSgpPT57bGV0e3BhZ2VJbmRleDp0fT1lLmdldFN0YXRlKCkucGFnaW5hdGlvbixuPWUuZ2V0UGFnZUNvdW50KCk7cmV0dXJuIG49PT0tMXx8biE9PTAmJnQ8bi0xfSxlLnByZXZpb3VzUGFnZT0oKT0+ZS5zZXRQYWdlSW5kZXgoZT0+ZS0xKSxlLm5leHRQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlPT5lKzEpLGUuZmlyc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleCgwKSxlLmxhc3RQYWdlPSgpPT5lLnNldFBhZ2VJbmRleChlLmdldFBhZ2VDb3VudCgpLTEpLGUuZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsPSgpPT5lLmdldEV4cGFuZGVkUm93TW9kZWwoKSxlLmdldFBhZ2luYXRpb25Sb3dNb2RlbD0oKT0+KCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwmJmUub3B0aW9ucy5nZXRQYWdpbmF0aW9uUm93TW9kZWwmJihlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw9ZS5vcHRpb25zLmdldFBhZ2luYXRpb25Sb3dNb2RlbChlKSksZS5vcHRpb25zLm1hbnVhbFBhZ2luYXRpb258fCFlLl9nZXRQYWdpbmF0aW9uUm93TW9kZWw/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKTplLl9nZXRQYWdpbmF0aW9uUm93TW9kZWwoKSksZS5nZXRQYWdlQ291bnQ9KCk9PmUub3B0aW9ucy5wYWdlQ291bnQ/P01hdGguY2VpbChlLmdldFJvd0NvdW50KCkvZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb24ucGFnZVNpemUpLGUuZ2V0Um93Q291bnQ9KCk9PmUub3B0aW9ucy5yb3dDb3VudD8/ZS5nZXRQcmVQYWdpbmF0aW9uUm93TW9kZWwoKS5yb3dzLmxlbmd0aH19LFVlPSgpPT4oe3RvcDpbXSxib3R0b206W119KSxXZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93UGlubmluZzpVZSgpLC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93UGlubmluZ0NoYW5nZTpPKGByb3dQaW5uaW5nYCxlKX0pLGNyZWF0ZVJvdzooZSx0KT0+e2UucGluPShuLHIsaSk9PntsZXQgYT1yP2UuZ2V0TGVhZlJvd3MoKS5tYXAoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSk6W10sbz1pP2UuZ2V0UGFyZW50Um93cygpLm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KTpbXSxzPW5ldyBTZXQoWy4uLm8sZS5pZCwuLi5hXSk7dC5zZXRSb3dQaW5uaW5nKGU9Pm49PT1gYm90dG9tYD97dG9wOihlPy50b3A/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpLGJvdHRvbTpbLi4uKGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksLi4uQXJyYXkuZnJvbShzKV19Om49PT1gdG9wYD97dG9wOlsuLi4oZT8udG9wPz9bXSkuZmlsdGVyKGU9PiEocyE9bnVsbCYmcy5oYXMoZSkpKSwuLi5BcnJheS5mcm9tKHMpXSxib3R0b206KGU/LmJvdHRvbT8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSl9Ont0b3A6KGU/LnRvcD8/W10pLmZpbHRlcihlPT4hKHMhPW51bGwmJnMuaGFzKGUpKSksYm90dG9tOihlPy5ib3R0b20/P1tdKS5maWx0ZXIoZT0+IShzIT1udWxsJiZzLmhhcyhlKSkpfSl9LGUuZ2V0Q2FuUGluPSgpPT57bGV0e2VuYWJsZVJvd1Bpbm5pbmc6bixlbmFibGVQaW5uaW5nOnJ9PXQub3B0aW9ucztyZXR1cm4gdHlwZW9mIG49PWBmdW5jdGlvbmA/bihlKTpuPz9yPz8hMH0sZS5nZXRJc1Bpbm5lZD0oKT0+e2xldCBuPVtlLmlkXSx7dG9wOnIsYm90dG9tOml9PXQuZ2V0U3RhdGUoKS5yb3dQaW5uaW5nLGE9bi5zb21lKGU9PnI/LmluY2x1ZGVzKGUpKSxvPW4uc29tZShlPT5pPy5pbmNsdWRlcyhlKSk7cmV0dXJuIGE/YHRvcGA6bz9gYm90dG9tYDohMX0sZS5nZXRQaW5uZWRJbmRleD0oKT0+e2xldCBuPWUuZ2V0SXNQaW5uZWQoKTtyZXR1cm4gbj8oKG49PT1gdG9wYD90LmdldFRvcFJvd3MoKTp0LmdldEJvdHRvbVJvd3MoKSk/Lm1hcChlPT57bGV0e2lkOnR9PWU7cmV0dXJuIHR9KSk/LmluZGV4T2YoZS5pZCk/Py0xOi0xfX0sY3JlYXRlVGFibGU6ZT0+e2Uuc2V0Um93UGlubmluZz10PT5lLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlPT1udWxsP3ZvaWQgMDplLm9wdGlvbnMub25Sb3dQaW5uaW5nQ2hhbmdlKHQpLGUucmVzZXRSb3dQaW5uaW5nPXQ9PmUuc2V0Um93UGlubmluZyh0P1VlKCk6ZS5pbml0aWFsU3RhdGU/LnJvd1Bpbm5pbmc/P1VlKCkpLGUuZ2V0SXNTb21lUm93c1Bpbm5lZD10PT57bGV0IG49ZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmc7cmV0dXJuIHQ/ISFuW3RdPy5sZW5ndGg6ISEobi50b3A/Lmxlbmd0aHx8bi5ib3R0b20/Lmxlbmd0aCl9LGUuX2dldFBpbm5lZFJvd3M9KHQsbixyKT0+KGUub3B0aW9ucy5rZWVwUGlubmVkUm93cz8/ITA/KG4/P1tdKS5tYXAodD0+e2xldCBuPWUuZ2V0Um93KHQsITApO3JldHVybiBuLmdldElzQWxsUGFyZW50c0V4cGFuZGVkKCk/bjpudWxsfSk6KG4/P1tdKS5tYXAoZT0+dC5maW5kKHQ9PnQuaWQ9PT1lKSkpLmZpbHRlcihCb29sZWFuKS5tYXAoZT0+KHsuLi5lLHBvc2l0aW9uOnJ9KSksZS5nZXRUb3BSb3dzPUEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3BdLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgdG9wYCksaihlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldFRvcFJvd3NgKSksZS5nZXRCb3R0b21Sb3dzPUEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy5ib3R0b21dLCh0LG4pPT5lLl9nZXRQaW5uZWRSb3dzKHQsbixgYm90dG9tYCksaihlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldEJvdHRvbVJvd3NgKSksZS5nZXRDZW50ZXJSb3dzPUEoKCk9PltlLmdldFJvd01vZGVsKCkucm93cyxlLmdldFN0YXRlKCkucm93UGlubmluZy50b3AsZS5nZXRTdGF0ZSgpLnJvd1Bpbm5pbmcuYm90dG9tXSwoZSx0LG4pPT57bGV0IHI9bmV3IFNldChbLi4udD8/W10sLi4ubj8/W11dKTtyZXR1cm4gZS5maWx0ZXIoZT0+IXIuaGFzKGUuaWQpKX0saihlLm9wdGlvbnMsYGRlYnVnUm93c2AsYGdldENlbnRlclJvd3NgKSl9fSxHZT17Z2V0SW5pdGlhbFN0YXRlOmU9Pih7cm93U2VsZWN0aW9uOnt9LC4uLmV9KSxnZXREZWZhdWx0T3B0aW9uczplPT4oe29uUm93U2VsZWN0aW9uQ2hhbmdlOk8oYHJvd1NlbGVjdGlvbmAsZSksZW5hYmxlUm93U2VsZWN0aW9uOiEwLGVuYWJsZU11bHRpUm93U2VsZWN0aW9uOiEwLGVuYWJsZVN1YlJvd1NlbGVjdGlvbjohMH0pLGNyZWF0ZVRhYmxlOmU9PntlLnNldFJvd1NlbGVjdGlvbj10PT5lLm9wdGlvbnMub25Sb3dTZWxlY3Rpb25DaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vblJvd1NlbGVjdGlvbkNoYW5nZSh0KSxlLnJlc2V0Um93U2VsZWN0aW9uPXQ9PmUuc2V0Um93U2VsZWN0aW9uKHQ/e306ZS5pbml0aWFsU3RhdGUucm93U2VsZWN0aW9uPz97fSksZS50b2dnbGVBbGxSb3dzU2VsZWN0ZWQ9dD0+e2Uuc2V0Um93U2VsZWN0aW9uKG49Pnt0PXQ9PT12b2lkIDA/IWUuZ2V0SXNBbGxSb3dzU2VsZWN0ZWQoKTp0O2xldCByPXsuLi5ufSxpPWUuZ2V0UHJlR3JvdXBlZFJvd01vZGVsKCkuZmxhdFJvd3M7cmV0dXJuIHQ/aS5mb3JFYWNoKGU9PntlLmdldENhblNlbGVjdCgpJiYocltlLmlkXT0hMCl9KTppLmZvckVhY2goZT0+e2RlbGV0ZSByW2UuaWRdfSkscn0pfSxlLnRvZ2dsZUFsbFBhZ2VSb3dzU2VsZWN0ZWQ9dD0+ZS5zZXRSb3dTZWxlY3Rpb24obj0+e2xldCByPXQ9PT12b2lkIDA/IWUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkKCk6dCxpPXsuLi5ufTtyZXR1cm4gZS5nZXRSb3dNb2RlbCgpLnJvd3MuZm9yRWFjaCh0PT57S2UoaSx0LmlkLHIsITAsZSl9KSxpfSksZS5nZXRQcmVTZWxlY3RlZFJvd01vZGVsPSgpPT5lLmdldENvcmVSb3dNb2RlbCgpLGUuZ2V0U2VsZWN0ZWRSb3dNb2RlbD1BKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldENvcmVSb3dNb2RlbCgpXSwodCxuKT0+T2JqZWN0LmtleXModCkubGVuZ3RoP3FlKGUsbik6e3Jvd3M6W10sZmxhdFJvd3M6W10scm93c0J5SWQ6e319LGooZS5vcHRpb25zLGBkZWJ1Z1RhYmxlYCxgZ2V0U2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldEZpbHRlcmVkU2VsZWN0ZWRSb3dNb2RlbD1BKCgpPT5bZS5nZXRTdGF0ZSgpLnJvd1NlbGVjdGlvbixlLmdldEZpbHRlcmVkUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9xZShlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldEZpbHRlcmVkU2VsZWN0ZWRSb3dNb2RlbGApKSxlLmdldEdyb3VwZWRTZWxlY3RlZFJvd01vZGVsPUEoKCk9PltlLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLGUuZ2V0U29ydGVkUm93TW9kZWwoKV0sKHQsbik9Pk9iamVjdC5rZXlzKHQpLmxlbmd0aD9xZShlLG4pOntyb3dzOltdLGZsYXRSb3dzOltdLHJvd3NCeUlkOnt9fSxqKGUub3B0aW9ucyxgZGVidWdUYWJsZWAsYGdldEdyb3VwZWRTZWxlY3RlZFJvd01vZGVsYCkpLGUuZ2V0SXNBbGxSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93cyx7cm93U2VsZWN0aW9uOm59PWUuZ2V0U3RhdGUoKSxyPSEhKHQubGVuZ3RoJiZPYmplY3Qua2V5cyhuKS5sZW5ndGgpO3JldHVybiByJiZ0LnNvbWUoZT0+ZS5nZXRDYW5TZWxlY3QoKSYmIW5bZS5pZF0pJiYocj0hMSkscn0sZS5nZXRJc0FsbFBhZ2VSb3dzU2VsZWN0ZWQ9KCk9PntsZXQgdD1lLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLmZsYXRSb3dzLmZpbHRlcihlPT5lLmdldENhblNlbGVjdCgpKSx7cm93U2VsZWN0aW9uOm59PWUuZ2V0U3RhdGUoKSxyPSEhdC5sZW5ndGg7cmV0dXJuIHImJnQuc29tZShlPT4hbltlLmlkXSkmJihyPSExKSxyfSxlLmdldElzU29tZVJvd3NTZWxlY3RlZD0oKT0+e2xldCB0PU9iamVjdC5rZXlzKGUuZ2V0U3RhdGUoKS5yb3dTZWxlY3Rpb24/P3t9KS5sZW5ndGg7cmV0dXJuIHQ+MCYmdDxlLmdldEZpbHRlcmVkUm93TW9kZWwoKS5mbGF0Um93cy5sZW5ndGh9LGUuZ2V0SXNTb21lUGFnZVJvd3NTZWxlY3RlZD0oKT0+e2xldCB0PWUuZ2V0UGFnaW5hdGlvblJvd01vZGVsKCkuZmxhdFJvd3M7cmV0dXJuIWUuZ2V0SXNBbGxQYWdlUm93c1NlbGVjdGVkKCkmJnQuZmlsdGVyKGU9PmUuZ2V0Q2FuU2VsZWN0KCkpLnNvbWUoZT0+ZS5nZXRJc1NlbGVjdGVkKCl8fGUuZ2V0SXNTb21lU2VsZWN0ZWQoKSl9LGUuZ2V0VG9nZ2xlQWxsUm93c1NlbGVjdGVkSGFuZGxlcj0oKT0+dD0+e2UudG9nZ2xlQWxsUm93c1NlbGVjdGVkKHQudGFyZ2V0LmNoZWNrZWQpfSxlLmdldFRvZ2dsZUFsbFBhZ2VSb3dzU2VsZWN0ZWRIYW5kbGVyPSgpPT50PT57ZS50b2dnbGVBbGxQYWdlUm93c1NlbGVjdGVkKHQudGFyZ2V0LmNoZWNrZWQpfX0sY3JlYXRlUm93OihlLHQpPT57ZS50b2dnbGVTZWxlY3RlZD0obixyKT0+e2xldCBpPWUuZ2V0SXNTZWxlY3RlZCgpO3Quc2V0Um93U2VsZWN0aW9uKGE9PntpZihuPW49PT12b2lkIDA/IWk6bixlLmdldENhblNlbGVjdCgpJiZpPT09bilyZXR1cm4gYTtsZXQgbz17Li4uYX07cmV0dXJuIEtlKG8sZS5pZCxuLHI/LnNlbGVjdENoaWxkcmVuPz8hMCx0KSxvfSl9LGUuZ2V0SXNTZWxlY3RlZD0oKT0+e2xldHtyb3dTZWxlY3Rpb246bn09dC5nZXRTdGF0ZSgpO3JldHVybiBKZShlLG4pfSxlLmdldElzU29tZVNlbGVjdGVkPSgpPT57bGV0e3Jvd1NlbGVjdGlvbjpufT10LmdldFN0YXRlKCk7cmV0dXJuIFllKGUsbik9PT1gc29tZWB9LGUuZ2V0SXNBbGxTdWJSb3dzU2VsZWN0ZWQ9KCk9PntsZXR7cm93U2VsZWN0aW9uOm59PXQuZ2V0U3RhdGUoKTtyZXR1cm4gWWUoZSxuKT09PWBhbGxgfSxlLmdldENhblNlbGVjdD0oKT0+dHlwZW9mIHQub3B0aW9ucy5lbmFibGVSb3dTZWxlY3Rpb249PWBmdW5jdGlvbmA/dC5vcHRpb25zLmVuYWJsZVJvd1NlbGVjdGlvbihlKTp0Lm9wdGlvbnMuZW5hYmxlUm93U2VsZWN0aW9uPz8hMCxlLmdldENhblNlbGVjdFN1YlJvd3M9KCk9PnR5cGVvZiB0Lm9wdGlvbnMuZW5hYmxlU3ViUm93U2VsZWN0aW9uPT1gZnVuY3Rpb25gP3Qub3B0aW9ucy5lbmFibGVTdWJSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZVN1YlJvd1NlbGVjdGlvbj8/ITAsZS5nZXRDYW5NdWx0aVNlbGVjdD0oKT0+dHlwZW9mIHQub3B0aW9ucy5lbmFibGVNdWx0aVJvd1NlbGVjdGlvbj09YGZ1bmN0aW9uYD90Lm9wdGlvbnMuZW5hYmxlTXVsdGlSb3dTZWxlY3Rpb24oZSk6dC5vcHRpb25zLmVuYWJsZU11bHRpUm93U2VsZWN0aW9uPz8hMCxlLmdldFRvZ2dsZVNlbGVjdGVkSGFuZGxlcj0oKT0+e2xldCB0PWUuZ2V0Q2FuU2VsZWN0KCk7cmV0dXJuIG49Pnt0JiZlLnRvZ2dsZVNlbGVjdGVkKG4udGFyZ2V0Py5jaGVja2VkKX19fX0sS2U9KGUsdCxuLHIsaSk9Pnt2YXIgYTtsZXQgbz1pLmdldFJvdyh0LCEwKTtuPyhvLmdldENhbk11bHRpU2VsZWN0KCl8fE9iamVjdC5rZXlzKGUpLmZvckVhY2godD0+ZGVsZXRlIGVbdF0pLG8uZ2V0Q2FuU2VsZWN0KCkmJihlW3RdPSEwKSk6ZGVsZXRlIGVbdF0sciYmKGE9by5zdWJSb3dzKSE9bnVsbCYmYS5sZW5ndGgmJm8uZ2V0Q2FuU2VsZWN0U3ViUm93cygpJiZvLnN1YlJvd3MuZm9yRWFjaCh0PT5LZShlLHQuaWQsbixyLGkpKX07ZnVuY3Rpb24gcWUoZSx0KXtsZXQgbj1lLmdldFN0YXRlKCkucm93U2VsZWN0aW9uLHI9W10saT17fSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubWFwKGU9Pnt2YXIgdDtsZXQgbz1KZShlLG4pO2lmKG8mJihyLnB1c2goZSksaVtlLmlkXT1lKSwodD1lLnN1YlJvd3MpIT1udWxsJiZ0Lmxlbmd0aCYmKGU9ey4uLmUsc3ViUm93czphKGUuc3ViUm93cyl9KSxvKXJldHVybiBlfSkuZmlsdGVyKEJvb2xlYW4pfTtyZXR1cm57cm93czphKHQucm93cyksZmxhdFJvd3M6cixyb3dzQnlJZDppfX1mdW5jdGlvbiBKZShlLHQpe3JldHVybiB0W2UuaWRdPz8hMX1mdW5jdGlvbiBZZShlLHQsbil7dmFyIHI7aWYoISgocj1lLnN1YlJvd3MpIT1udWxsJiZyLmxlbmd0aCkpcmV0dXJuITE7bGV0IGk9ITAsYT0hMTtyZXR1cm4gZS5zdWJSb3dzLmZvckVhY2goZT0+e2lmKCEoYSYmIWkpJiYoZS5nZXRDYW5TZWxlY3QoKSYmKEplKGUsdCk/YT0hMDppPSExKSxlLnN1YlJvd3MmJmUuc3ViUm93cy5sZW5ndGgpKXtsZXQgbj1ZZShlLHQpO249PT1gYWxsYD9hPSEwOihuPT09YHNvbWVgJiYoYT0hMCksaT0hMSl9fSksaT9gYWxsYDphP2Bzb21lYDohMX12YXIgWGU9LyhbMC05XSspL2dtLFplPShlLHQsbik9PnJ0KEooZS5nZXRWYWx1ZShuKSkudG9Mb3dlckNhc2UoKSxKKHQuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCkpLFFlPShlLHQsbik9PnJ0KEooZS5nZXRWYWx1ZShuKSksSih0LmdldFZhbHVlKG4pKSksJGU9KGUsdCxuKT0+cShKKGUuZ2V0VmFsdWUobikpLnRvTG93ZXJDYXNlKCksSih0LmdldFZhbHVlKG4pKS50b0xvd2VyQ2FzZSgpKSxldD0oZSx0LG4pPT5xKEooZS5nZXRWYWx1ZShuKSksSih0LmdldFZhbHVlKG4pKSksdHQ9KGUsdCxuKT0+e2xldCByPWUuZ2V0VmFsdWUobiksaT10LmdldFZhbHVlKG4pO3JldHVybiByPmk/MTpyPGk/LTE6MH0sbnQ9KGUsdCxuKT0+cShlLmdldFZhbHVlKG4pLHQuZ2V0VmFsdWUobikpO2Z1bmN0aW9uIHEoZSx0KXtyZXR1cm4gZT09PXQ/MDplPnQ/MTotMX1mdW5jdGlvbiBKKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmA/aXNOYU4oZSl8fGU9PT0xLzB8fGU9PT0tMS8wP2BgOlN0cmluZyhlKTp0eXBlb2YgZT09YHN0cmluZ2A/ZTpgYH1mdW5jdGlvbiBydChlLHQpe2xldCBuPWUuc3BsaXQoWGUpLmZpbHRlcihCb29sZWFuKSxyPXQuc3BsaXQoWGUpLmZpbHRlcihCb29sZWFuKTtmb3IoO24ubGVuZ3RoJiZyLmxlbmd0aDspe2xldCBlPW4uc2hpZnQoKSx0PXIuc2hpZnQoKSxpPXBhcnNlSW50KGUsMTApLGE9cGFyc2VJbnQodCwxMCksbz1baSxhXS5zb3J0KCk7aWYoaXNOYU4ob1swXSkpe2lmKGU+dClyZXR1cm4gMTtpZih0PmUpcmV0dXJuLTE7Y29udGludWV9aWYoaXNOYU4ob1sxXSkpcmV0dXJuIGlzTmFOKGkpPy0xOjE7aWYoaT5hKXJldHVybiAxO2lmKGE+aSlyZXR1cm4tMX1yZXR1cm4gbi5sZW5ndGgtci5sZW5ndGh9dmFyIFk9e2FscGhhbnVtZXJpYzpaZSxhbHBoYW51bWVyaWNDYXNlU2Vuc2l0aXZlOlFlLHRleHQ6JGUsdGV4dENhc2VTZW5zaXRpdmU6ZXQsZGF0ZXRpbWU6dHQsYmFzaWM6bnR9LGl0PVt2ZSxSZSxOZSxQZSxiZSxrZSx6ZSxCZSx7Z2V0SW5pdGlhbFN0YXRlOmU9Pih7c29ydGluZzpbXSwuLi5lfSksZ2V0RGVmYXVsdENvbHVtbkRlZjooKT0+KHtzb3J0aW5nRm46YGF1dG9gLHNvcnRVbmRlZmluZWQ6MX0pLGdldERlZmF1bHRPcHRpb25zOmU9Pih7b25Tb3J0aW5nQ2hhbmdlOk8oYHNvcnRpbmdgLGUpLGlzTXVsdGlTb3J0RXZlbnQ6ZT0+ZS5zaGlmdEtleX0pLGNyZWF0ZUNvbHVtbjooZSx0KT0+e2UuZ2V0QXV0b1NvcnRpbmdGbj0oKT0+e2xldCBuPXQuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpLmZsYXRSb3dzLnNsaWNlKDEwKSxyPSExO2ZvcihsZXQgdCBvZiBuKXtsZXQgbj10Py5nZXRWYWx1ZShlLmlkKTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobik9PT1gW29iamVjdCBEYXRlXWApcmV0dXJuIFkuZGF0ZXRpbWU7aWYodHlwZW9mIG49PWBzdHJpbmdgJiYocj0hMCxuLnNwbGl0KFhlKS5sZW5ndGg+MSkpcmV0dXJuIFkuYWxwaGFudW1lcmljfXJldHVybiByP1kudGV4dDpZLmJhc2ljfSxlLmdldEF1dG9Tb3J0RGlyPSgpPT50eXBlb2YgdC5nZXRGaWx0ZXJlZFJvd01vZGVsKCkuZmxhdFJvd3NbMF0/LmdldFZhbHVlKGUuaWQpPT1gc3RyaW5nYD9gYXNjYDpgZGVzY2AsZS5nZXRTb3J0aW5nRm49KCk9PntpZighZSl0aHJvdyBFcnJvcigpO3JldHVybiBrKGUuY29sdW1uRGVmLnNvcnRpbmdGbik/ZS5jb2x1bW5EZWYuc29ydGluZ0ZuOmUuY29sdW1uRGVmLnNvcnRpbmdGbj09PWBhdXRvYD9lLmdldEF1dG9Tb3J0aW5nRm4oKTp0Lm9wdGlvbnMuc29ydGluZ0Zucz8uW2UuY29sdW1uRGVmLnNvcnRpbmdGbl0/P1lbZS5jb2x1bW5EZWYuc29ydGluZ0ZuXX0sZS50b2dnbGVTb3J0aW5nPShuLHIpPT57bGV0IGk9ZS5nZXROZXh0U29ydGluZ09yZGVyKCksYT1uIT1udWxsO3Quc2V0U29ydGluZyhvPT57bGV0IHM9bz8uZmluZCh0PT50LmlkPT09ZS5pZCksYz1vPy5maW5kSW5kZXgodD0+dC5pZD09PWUuaWQpLGw9W10sdSxkPWE/bjppPT09YGRlc2NgO3JldHVybiB1PW8hPW51bGwmJm8ubGVuZ3RoJiZlLmdldENhbk11bHRpU29ydCgpJiZyP3M/YHRvZ2dsZWA6YGFkZGA6byE9bnVsbCYmby5sZW5ndGgmJmMhPT1vLmxlbmd0aC0xP2ByZXBsYWNlYDpzP2B0b2dnbGVgOmByZXBsYWNlYCx1PT09YHRvZ2dsZWAmJihhfHxpfHwodT1gcmVtb3ZlYCkpLHU9PT1gYWRkYD8obD1bLi4ubyx7aWQ6ZS5pZCxkZXNjOmR9XSxsLnNwbGljZSgwLGwubGVuZ3RoLSh0Lm9wdGlvbnMubWF4TXVsdGlTb3J0Q29sQ291bnQ/PzIqKjUzLTEpKSk6bD11PT09YHRvZ2dsZWA/by5tYXAodD0+dC5pZD09PWUuaWQ/ey4uLnQsZGVzYzpkfTp0KTp1PT09YHJlbW92ZWA/by5maWx0ZXIodD0+dC5pZCE9PWUuaWQpOlt7aWQ6ZS5pZCxkZXNjOmR9XSxsfSl9LGUuZ2V0Rmlyc3RTb3J0RGlyPSgpPT5lLmNvbHVtbkRlZi5zb3J0RGVzY0ZpcnN0Pz90Lm9wdGlvbnMuc29ydERlc2NGaXJzdD8/ZS5nZXRBdXRvU29ydERpcigpPT09YGRlc2NgP2BkZXNjYDpgYXNjYCxlLmdldE5leHRTb3J0aW5nT3JkZXI9bj0+e2xldCByPWUuZ2V0Rmlyc3RTb3J0RGlyKCksaT1lLmdldElzU29ydGVkKCk7cmV0dXJuIGk/aSE9PXImJih0Lm9wdGlvbnMuZW5hYmxlU29ydGluZ1JlbW92YWw/PyEwKSYmKCFufHwodC5vcHRpb25zLmVuYWJsZU11bHRpUmVtb3ZlPz8hMCkpPyExOmk9PT1gZGVzY2A/YGFzY2A6YGRlc2NgOnJ9LGUuZ2V0Q2FuU29ydD0oKT0+KGUuY29sdW1uRGVmLmVuYWJsZVNvcnRpbmc/PyEwKSYmKHQub3B0aW9ucy5lbmFibGVTb3J0aW5nPz8hMCkmJiEhZS5hY2Nlc3NvckZuLGUuZ2V0Q2FuTXVsdGlTb3J0PSgpPT5lLmNvbHVtbkRlZi5lbmFibGVNdWx0aVNvcnQ/P3Qub3B0aW9ucy5lbmFibGVNdWx0aVNvcnQ/PyEhZS5hY2Nlc3NvckZuLGUuZ2V0SXNTb3J0ZWQ9KCk9PntsZXQgbj10LmdldFN0YXRlKCkuc29ydGluZz8uZmluZCh0PT50LmlkPT09ZS5pZCk7cmV0dXJuIG4/bi5kZXNjP2BkZXNjYDpgYXNjYDohMX0sZS5nZXRTb3J0SW5kZXg9KCk9PnQuZ2V0U3RhdGUoKS5zb3J0aW5nPy5maW5kSW5kZXgodD0+dC5pZD09PWUuaWQpPz8tMSxlLmNsZWFyU29ydGluZz0oKT0+e3Quc2V0U29ydGluZyh0PT50IT1udWxsJiZ0Lmxlbmd0aD90LmZpbHRlcih0PT50LmlkIT09ZS5pZCk6W10pfSxlLmdldFRvZ2dsZVNvcnRpbmdIYW5kbGVyPSgpPT57bGV0IG49ZS5nZXRDYW5Tb3J0KCk7cmV0dXJuIHI9PntuJiYoci5wZXJzaXN0PT1udWxsfHxyLnBlcnNpc3QoKSxlLnRvZ2dsZVNvcnRpbmc9PW51bGx8fGUudG9nZ2xlU29ydGluZyh2b2lkIDAsZS5nZXRDYW5NdWx0aVNvcnQoKT90Lm9wdGlvbnMuaXNNdWx0aVNvcnRFdmVudD09bnVsbD92b2lkIDA6dC5vcHRpb25zLmlzTXVsdGlTb3J0RXZlbnQocik6ITEpKX19fSxjcmVhdGVUYWJsZTplPT57ZS5zZXRTb3J0aW5nPXQ9PmUub3B0aW9ucy5vblNvcnRpbmdDaGFuZ2U9PW51bGw/dm9pZCAwOmUub3B0aW9ucy5vblNvcnRpbmdDaGFuZ2UodCksZS5yZXNldFNvcnRpbmc9dD0+e2Uuc2V0U29ydGluZyh0P1tdOmUuaW5pdGlhbFN0YXRlPy5zb3J0aW5nPz9bXSl9LGUuZ2V0UHJlU29ydGVkUm93TW9kZWw9KCk9PmUuZ2V0R3JvdXBlZFJvd01vZGVsKCksZS5nZXRTb3J0ZWRSb3dNb2RlbD0oKT0+KCFlLl9nZXRTb3J0ZWRSb3dNb2RlbCYmZS5vcHRpb25zLmdldFNvcnRlZFJvd01vZGVsJiYoZS5fZ2V0U29ydGVkUm93TW9kZWw9ZS5vcHRpb25zLmdldFNvcnRlZFJvd01vZGVsKGUpKSxlLm9wdGlvbnMubWFudWFsU29ydGluZ3x8IWUuX2dldFNvcnRlZFJvd01vZGVsP2UuZ2V0UHJlU29ydGVkUm93TW9kZWwoKTplLl9nZXRTb3J0ZWRSb3dNb2RlbCgpKX19LGplLFZlLEhlLFdlLEdlLEllXTtmdW5jdGlvbiBhdChlKXtsZXQgdD1bLi4uaXQsLi4uZS5fZmVhdHVyZXM/P1tdXSxuPXtfZmVhdHVyZXM6dH0scj1uLl9mZWF0dXJlcy5yZWR1Y2UoKGUsdCk9Pk9iamVjdC5hc3NpZ24oZSx0LmdldERlZmF1bHRPcHRpb25zPT1udWxsP3ZvaWQgMDp0LmdldERlZmF1bHRPcHRpb25zKG4pKSx7fSksaT1lPT5uLm9wdGlvbnMubWVyZ2VPcHRpb25zP24ub3B0aW9ucy5tZXJnZU9wdGlvbnMocixlKTp7Li4uciwuLi5lfSxhPXsuLi5lLmluaXRpYWxTdGF0ZT8/e319O24uX2ZlYXR1cmVzLmZvckVhY2goZT0+e2E9KGUuZ2V0SW5pdGlhbFN0YXRlPT1udWxsP3ZvaWQgMDplLmdldEluaXRpYWxTdGF0ZShhKSk/P2F9KTtsZXQgbz1bXSxzPSExLGM9e19mZWF0dXJlczp0LG9wdGlvbnM6ey4uLnIsLi4uZX0saW5pdGlhbFN0YXRlOmEsX3F1ZXVlOmU9PntvLnB1c2goZSksc3x8KHM9ITAsUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2Zvcig7by5sZW5ndGg7KW8uc2hpZnQoKSgpO3M9ITF9KS5jYXRjaChlPT5zZXRUaW1lb3V0KCgpPT57dGhyb3cgZX0pKSl9LHJlc2V0OigpPT57bi5zZXRTdGF0ZShuLmluaXRpYWxTdGF0ZSl9LHNldE9wdGlvbnM6ZT0+e2xldCB0PUQoZSxuLm9wdGlvbnMpO24ub3B0aW9ucz1pKHQpfSxnZXRTdGF0ZTooKT0+bi5vcHRpb25zLnN0YXRlLHNldFN0YXRlOmU9PntuLm9wdGlvbnMub25TdGF0ZUNoYW5nZT09bnVsbHx8bi5vcHRpb25zLm9uU3RhdGVDaGFuZ2UoZSl9LF9nZXRSb3dJZDooZSx0LHIpPT4obi5vcHRpb25zLmdldFJvd0lkPT1udWxsP3ZvaWQgMDpuLm9wdGlvbnMuZ2V0Um93SWQoZSx0LHIpKT8/YCR7cj9bci5pZCx0XS5qb2luKGAuYCk6dH1gLGdldENvcmVSb3dNb2RlbDooKT0+KG4uX2dldENvcmVSb3dNb2RlbHx8PW4ub3B0aW9ucy5nZXRDb3JlUm93TW9kZWwobiksbi5fZ2V0Q29yZVJvd01vZGVsKCkpLGdldFJvd01vZGVsOigpPT5uLmdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLGdldFJvdzooZSx0KT0+e2xldCByPSh0P24uZ2V0UHJlUGFnaW5hdGlvblJvd01vZGVsKCk6bi5nZXRSb3dNb2RlbCgpKS5yb3dzQnlJZFtlXTtpZighciYmKHI9bi5nZXRDb3JlUm93TW9kZWwoKS5yb3dzQnlJZFtlXSwhcikpdGhyb3cgRXJyb3IoKTtyZXR1cm4gcn0sX2dldERlZmF1bHRDb2x1bW5EZWY6QSgoKT0+W24ub3B0aW9ucy5kZWZhdWx0Q29sdW1uXSxlPT4oZT8/PXt9LHtoZWFkZXI6ZT0+e2xldCB0PWUuaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWY7cmV0dXJuIHQuYWNjZXNzb3JLZXk/dC5hY2Nlc3NvcktleTp0LmFjY2Vzc29yRm4/dC5pZDpudWxsfSxjZWxsOmU9Pnt2YXIgdDtyZXR1cm4oKHQ9ZS5yZW5kZXJWYWx1ZSgpKT09bnVsbHx8dC50b1N0cmluZz09bnVsbD92b2lkIDA6dC50b1N0cmluZygpKT8/bnVsbH0sLi4ubi5fZmVhdHVyZXMucmVkdWNlKChlLHQpPT5PYmplY3QuYXNzaWduKGUsdC5nZXREZWZhdWx0Q29sdW1uRGVmPT1udWxsP3ZvaWQgMDp0LmdldERlZmF1bHRDb2x1bW5EZWYoKSkse30pLC4uLmV9KSxqKGUsYGRlYnVnQ29sdW1uc2AsYF9nZXREZWZhdWx0Q29sdW1uRGVmYCkpLF9nZXRDb2x1bW5EZWZzOigpPT5uLm9wdGlvbnMuY29sdW1ucyxnZXRBbGxDb2x1bW5zOkEoKCk9PltuLl9nZXRDb2x1bW5EZWZzKCldLGU9PntsZXQgdD1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPTApLGUubWFwKGU9PntsZXQgYT1nZShuLGUsaSxyKSxvPWU7cmV0dXJuIGEuY29sdW1ucz1vLmNvbHVtbnM/dChvLmNvbHVtbnMsYSxpKzEpOltdLGF9KX07cmV0dXJuIHQoZSl9LGooZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsQ29sdW1uc2ApKSxnZXRBbGxGbGF0Q29sdW1uczpBKCgpPT5bbi5nZXRBbGxDb2x1bW5zKCldLGU9PmUuZmxhdE1hcChlPT5lLmdldEZsYXRDb2x1bW5zKCkpLGooZSxgZGVidWdDb2x1bW5zYCxgZ2V0QWxsRmxhdENvbHVtbnNgKSksX2dldEFsbEZsYXRDb2x1bW5zQnlJZDpBKCgpPT5bbi5nZXRBbGxGbGF0Q29sdW1ucygpXSxlPT5lLnJlZHVjZSgoZSx0KT0+KGVbdC5pZF09dCxlKSx7fSksaihlLGBkZWJ1Z0NvbHVtbnNgLGBnZXRBbGxGbGF0Q29sdW1uc0J5SWRgKSksZ2V0QWxsTGVhZkNvbHVtbnM6QSgoKT0+W24uZ2V0QWxsQ29sdW1ucygpLG4uX2dldE9yZGVyQ29sdW1uc0ZuKCldLChlLHQpPT50KGUuZmxhdE1hcChlPT5lLmdldExlYWZDb2x1bW5zKCkpKSxqKGUsYGRlYnVnQ29sdW1uc2AsYGdldEFsbExlYWZDb2x1bW5zYCkpLGdldENvbHVtbjplPT5uLl9nZXRBbGxGbGF0Q29sdW1uc0J5SWQoKVtlXX07T2JqZWN0LmFzc2lnbihuLGMpO2ZvcihsZXQgZT0wO2U8bi5fZmVhdHVyZXMubGVuZ3RoO2UrKyl7bGV0IHQ9bi5fZmVhdHVyZXNbZV07dD09bnVsbHx8dC5jcmVhdGVUYWJsZT09bnVsbHx8dC5jcmVhdGVUYWJsZShuKX1yZXR1cm4gbn1mdW5jdGlvbiBvdCgpe3JldHVybiBlPT5BKCgpPT5bZS5vcHRpb25zLmRhdGFdLHQ9PntsZXQgbj17cm93czpbXSxmbGF0Um93czpbXSxyb3dzQnlJZDp7fX0scj1mdW5jdGlvbih0LGksYSl7aT09PXZvaWQgMCYmKGk9MCk7bGV0IG89W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKyspe2xldCBsPXllKGUsZS5fZ2V0Um93SWQodFtjXSxjLGEpLHRbY10sYyxpLHZvaWQgMCxhPy5pZCk7aWYobi5mbGF0Um93cy5wdXNoKGwpLG4ucm93c0J5SWRbbC5pZF09bCxvLnB1c2gobCksZS5vcHRpb25zLmdldFN1YlJvd3Mpe3ZhciBzO2wub3JpZ2luYWxTdWJSb3dzPWUub3B0aW9ucy5nZXRTdWJSb3dzKHRbY10sYyksKHM9bC5vcmlnaW5hbFN1YlJvd3MpIT1udWxsJiZzLmxlbmd0aCYmKGwuc3ViUm93cz1yKGwub3JpZ2luYWxTdWJSb3dzLGkrMSxsKSl9fXJldHVybiBvfTtyZXR1cm4gbi5yb3dzPXIodCksbn0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRSb3dNb2RlbGAsKCk9PmUuX2F1dG9SZXNldFBhZ2VJbmRleCgpKSl9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gZT0+QSgoKT0+W2UuZ2V0U3RhdGUoKS5zb3J0aW5nLGUuZ2V0UHJlU29ydGVkUm93TW9kZWwoKV0sKHQsbik9PntpZighbi5yb3dzLmxlbmd0aHx8ISh0IT1udWxsJiZ0Lmxlbmd0aCkpcmV0dXJuIG47bGV0IHI9ZS5nZXRTdGF0ZSgpLnNvcnRpbmcsaT1bXSxhPXIuZmlsdGVyKHQ9PmUuZ2V0Q29sdW1uKHQuaWQpPy5nZXRDYW5Tb3J0KCkpLG89e307YS5mb3JFYWNoKHQ9PntsZXQgbj1lLmdldENvbHVtbih0LmlkKTtuJiYob1t0LmlkXT17c29ydFVuZGVmaW5lZDpuLmNvbHVtbkRlZi5zb3J0VW5kZWZpbmVkLGludmVydFNvcnRpbmc6bi5jb2x1bW5EZWYuaW52ZXJ0U29ydGluZyxzb3J0aW5nRm46bi5nZXRTb3J0aW5nRm4oKX0pfSk7bGV0IHM9ZT0+e2xldCB0PWUubWFwKGU9Pih7Li4uZX0pKTtyZXR1cm4gdC5zb3J0KChlLHQpPT57Zm9yKGxldCBuPTA7bjxhLmxlbmd0aDtuKz0xKXtsZXQgcj1hW25dLGk9b1tyLmlkXSxzPWkuc29ydFVuZGVmaW5lZCxjPXI/LmRlc2M/PyExLGw9MDtpZihzKXtsZXQgbj1lLmdldFZhbHVlKHIuaWQpLGk9dC5nZXRWYWx1ZShyLmlkKSxhPW49PT12b2lkIDAsbz1pPT09dm9pZCAwO2lmKGF8fG8pe2lmKHM9PT1gZmlyc3RgKXJldHVybiBhPy0xOjE7aWYocz09PWBsYXN0YClyZXR1cm4gYT8xOi0xO2w9YSYmbz8wOmE/czotc319aWYobD09PTAmJihsPWkuc29ydGluZ0ZuKGUsdCxyLmlkKSksbCE9PTApcmV0dXJuIGMmJihsKj0tMSksaS5pbnZlcnRTb3J0aW5nJiYobCo9LTEpLGx9cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0pLHQuZm9yRWFjaChlPT57dmFyIHQ7aS5wdXNoKGUpLCh0PWUuc3ViUm93cykhPW51bGwmJnQubGVuZ3RoJiYoZS5zdWJSb3dzPXMoZS5zdWJSb3dzKSl9KSx0fTtyZXR1cm57cm93czpzKG4ucm93cyksZmxhdFJvd3M6aSxyb3dzQnlJZDpuLnJvd3NCeUlkfX0saihlLm9wdGlvbnMsYGRlYnVnVGFibGVgLGBnZXRTb3J0ZWRSb3dNb2RlbGAsKCk9PmUuX2F1dG9SZXNldFBhZ2VJbmRleCgpKSl9ZnVuY3Rpb24gWCgpe3JldHVybiEwfXZhciBjdD1TeW1ib2woYG1lcmdlLXByb3h5YCksbHQ9e2dldChlLHQsbil7cmV0dXJuIHQ9PT1jdD9uOmUuZ2V0KHQpfSxoYXMoZSx0KXtyZXR1cm4gZS5oYXModCl9LHNldDpYLGRlbGV0ZVByb3BlcnR5OlgsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl7cmV0dXJue2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBlLmdldCh0KX0sc2V0OlgsZGVsZXRlUHJvcGVydHk6WH19LG93bktleXMoZSl7cmV0dXJuIGUua2V5cygpfX07ZnVuY3Rpb24gdXQoZSl7cmV0dXJuYHZhbHVlYGluIGU/ZS52YWx1ZTplfWZ1bmN0aW9uIFooKXt2YXIgZT1bLi4uYXJndW1lbnRzXTtyZXR1cm4gbmV3IFByb3h5KHtnZXQodCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCByPXV0KGVbbl0pW3RdO2lmKHIhPT12b2lkIDApcmV0dXJuIHJ9fSxoYXModCl7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0paWYodCBpbiB1dChlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX0sa2V5cygpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQucHVzaCguLi5PYmplY3Qua2V5cyh1dChlW25dKSkpO3JldHVyblsuLi5BcnJheS5mcm9tKG5ldyBTZXQodCkpXX19LGx0KX12YXIgUT1UKHtwcm9wczpbYHJlbmRlcmAsYHByb3BzYF0sc2V0dXA6dD0+KCk9PnR5cGVvZiB0LnJlbmRlcj09YGZ1bmN0aW9uYHx8dHlwZW9mIHQucmVuZGVyPT1gb2JqZWN0YD9lKHQucmVuZGVyLHQucHJvcHMpOnQucmVuZGVyfSk7ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIFooZSx7ZGF0YTpTKGUuZGF0YSl9KX1mdW5jdGlvbiBmdChlKXtsZXQgdD1wKGUuZGF0YSksbj1hdChaKHtzdGF0ZTp7fSxvblN0YXRlQ2hhbmdlOigpPT57fSxyZW5kZXJGYWxsYmFja1ZhbHVlOm51bGwsbWVyZ2VPcHRpb25zKGUsbil7cmV0dXJuIHQ/ey4uLmUsLi4ubn06WihlLG4pfX0sdD9kdChlKTplKSk7aWYodCl7bGV0IHQ9ZChlLmRhdGEpO3IodCwoKT0+e24uc2V0U3RhdGUoZT0+KHsuLi5lLGRhdGE6dC52YWx1ZX0pKX0se2ltbWVkaWF0ZTohMH0pfWxldCBhPWwobi5pbml0aWFsU3RhdGUpO3JldHVybiBpKCgpPT57bi5zZXRPcHRpb25zKG49PntsZXQgcj1uZXcgUHJveHkoe30se2dldDooZSx0KT0+YS52YWx1ZVt0XX0pO3JldHVybiBaKG4sdD9kdChlKTplLHtzdGF0ZTpaKHIsZS5zdGF0ZT8/e30pLG9uU3RhdGVDaGFuZ2U6dD0+e3QgaW5zdGFuY2VvZiBGdW5jdGlvbj9hLnZhbHVlPXQoYS52YWx1ZSk6YS52YWx1ZT10LGUub25TdGF0ZUNoYW5nZT09bnVsbHx8ZS5vblN0YXRlQ2hhbmdlKHQpfX0pfSl9KSxufXZhciBwdD1bYHRpdGxlYF0sbXQ9eyJhcmlhLWhpZGRlbiI6YHRydWVgfSxodD17Y2xhc3M6YHNyLW9ubHlgfSxndD1UKHtfX25hbWU6YENvbXBhY3ROdW1iZXJgLHByb3BzOnt2YWx1ZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXkoKCk9PnNlKHQudmFsdWUpKSxyPXkoKCk9PmNlKHQudmFsdWUpKTtyZXR1cm4oZSx0KT0+KF8oKSxiKGBzcGFuYCx7dGl0bGU6ci52YWx1ZX0sW25lKGBzcGFuYCxtdCxDKG4udmFsdWUpLDEpLG5lKGBzcGFuYCxodCxDKHIudmFsdWUpLDEpXSw4LHB0KSl9fSksX3Q9W2BhcmlhLWxhYmVsYF0sdnQ9VCh7X19uYW1lOmBTb3J0SGVhZGVyQnV0dG9uYCxwcm9wczp7aGVhZGVyOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49eSgoKT0+dC5oZWFkZXIuY29sdW1uLmdldElzU29ydGVkKCkpLHI9eSgoKT0+bi52YWx1ZT09PWBhc2NgP2c6bi52YWx1ZT09PWBkZXNjYD9lZTp0ZSksaT15KCgpPT57bGV0IGU9dC5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXI7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9lOnQuaGVhZGVyLmNvbHVtbi5pZH0pLGE9eSgoKT0+e2xldCBlPW4udmFsdWU9PT1gYXNjYD9gYXNjZW5kaW5nYDpuLnZhbHVlPT09YGRlc2NgP2BkZXNjZW5kaW5nYDpgbm9uZWA7cmV0dXJuYFNvcnQgYnkgJHtpLnZhbHVlfSwgY3VycmVudGx5ICR7ZX1gfSk7ZnVuY3Rpb24gbygpe3QuaGVhZGVyLmNvbHVtbi50b2dnbGVTb3J0aW5nKG4udmFsdWU9PT1gYXNjYCl9cmV0dXJuKHQsaSk9PntsZXQgcz1tKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gXygpLGIoYGJ1dHRvbmAse3R5cGU6YGJ1dHRvbmAsImFyaWEtbGFiZWwiOmEudmFsdWUsY2xhc3M6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkIHB4LTEuNSBweS0wLjUgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nYCxvbkNsaWNrOm99LFtlLmhlYWRlci5pc1BsYWNlaG9sZGVyP3YoYGAsITApOihfKCksdShTKFEpLHtrZXk6MCxyZW5kZXI6ZS5oZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIscHJvcHM6ZS5oZWFkZXIuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKSksYyhzLHtpY29uOnIudmFsdWUsY2xhc3M6dyhbYHNpemUtMyBzaHJpbmstMGAsbi52YWx1ZT9gdGV4dC1mb3JlZ3JvdW5kYDpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kLzYwYF0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSldLDgsX3QpfX19KSx5dD1UKHtfX25hbWU6YERhdGFUYWJsZWAscHJvcHM6e2NvbHVtbnM6e30sZGF0YTp7fSxyb3dDbGFzczp7dHlwZTpGdW5jdGlvbn0sZW1wdHlNZXNzYWdlOnt9LHNvcnRpbmc6e319LGVtaXRzOltgdXBkYXRlOnNvcnRpbmdgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgcj1lLGk9dCxhPWwoW10pLG89ZnQoe2dldCBkYXRhKCl7cmV0dXJuIHIuZGF0YX0sZ2V0IGNvbHVtbnMoKXtyZXR1cm4gci5jb2x1bW5zfSxnZXRDb3JlUm93TW9kZWw6b3QoKSxnZXRTb3J0ZWRSb3dNb2RlbDpzdCgpLG9uU29ydGluZ0NoYW5nZTplPT57bGV0IHQ9ci5zb3J0aW5nPz9hLnZhbHVlLG49dHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0KTplO3Iuc29ydGluZz09PXZvaWQgMD9hLnZhbHVlPW46aShgdXBkYXRlOnNvcnRpbmdgLG4pfSxzdGF0ZTp7Z2V0IHNvcnRpbmcoKXtyZXR1cm4gci5zb3J0aW5nPz9hLnZhbHVlfX19KTtmdW5jdGlvbiBkKGUpe2lmKGU9PT1gYXNjYClyZXR1cm5gYXNjZW5kaW5nYDtpZihlPT09YGRlc2NgKXJldHVybmBkZXNjZW5kaW5nYH1yZXR1cm4odCxyKT0+KF8oKSx1KFMob2UpLG51bGwse2RlZmF1bHQ6bigoKT0+W2MoUyhyZSksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bKF8oITApLGIocyxudWxsLHgoUyhvKS5nZXRIZWFkZXJHcm91cHMoKSxlPT4oXygpLHUoUyhFKSx7a2V5OmUuaWR9LHtkZWZhdWx0Om4oKCk9PlsoXyghMCksYihzLG51bGwseChlLmhlYWRlcnMsZT0+KF8oKSx1KFModWUpLHtrZXk6ZS5pZCxjbGFzczp3KGUuY29sdW1uLmNvbHVtbkRlZi5tZXRhPy5hbGlnbj09PWByaWdodGA/YHRleHQtcmlnaHRgOnZvaWQgMCksImFyaWEtc29ydCI6ZS5jb2x1bW4uZ2V0Q2FuU29ydCgpP2QoZS5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSk/P2Bub25lYDp2b2lkIDB9LHtkZWZhdWx0Om4oKCk9PltlLmNvbHVtbi5nZXRDYW5Tb3J0KCk/KF8oKSx1KHZ0LHtrZXk6MCxoZWFkZXI6ZSxjbGFzczpgLW14LTEuNWB9LG51bGwsOCxbYGhlYWRlcmBdKSk6ZS5pc1BsYWNlaG9sZGVyP3YoYGAsITApOihfKCksdShTKFEpLHtrZXk6MSxyZW5kZXI6ZS5jb2x1bW4uY29sdW1uRGVmLmhlYWRlcixwcm9wczplLmdldENvbnRleHQoKX0sbnVsbCw4LFtgcmVuZGVyYCxgcHJvcHNgXSkpXSksXzoyfSwxMDMyLFtgY2xhc3NgLGBhcmlhLXNvcnRgXSkpKSwxMjgpKV0pLF86Mn0sMTAyNCkpKSwxMjgpKV0pLF86MX0pLGMoUyhpZSksbnVsbCx7ZGVmYXVsdDpuKCgpPT5bUyhvKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoPT09MD8oXygpLHUoUyhmZSkse2tleTowLGNvbHNwYW46ZS5jb2x1bW5zLmxlbmd0aCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6bigoKT0+W2goQyhlLmVtcHR5TWVzc2FnZT8/YG5vbmVgKSwxKV0pLF86MX0sOCxbYGNvbHNwYW5gXSkpOnYoYGAsITApLChfKCEwKSxiKHMsbnVsbCx4KFMobykuZ2V0Um93TW9kZWwoKS5yb3dzLHQ9PihfKCksdShTKEUpLHtrZXk6dC5pZCxjbGFzczp3KGUucm93Q2xhc3M/Lih0Lm9yaWdpbmFsKSl9LHtkZWZhdWx0Om4oKCk9PlsoXyghMCksYihzLG51bGwseCh0LmdldFZpc2libGVDZWxscygpLGU9PihfKCksdShTKGFlKSx7a2V5OmUuaWQsY2xhc3M6dyhlLmNvbHVtbi5jb2x1bW5EZWYubWV0YT8uYWxpZ249PT1gcmlnaHRgP2B0ZXh0LXJpZ2h0IHRhYnVsYXItbnVtc2A6dm9pZCAwKX0se2RlZmF1bHQ6bigoKT0+W2MoUyhRKSx7cmVuZGVyOmUuY29sdW1uLmNvbHVtbkRlZi5jZWxsLHByb3BzOmUuZ2V0Q29udGV4dCgpfSxudWxsLDgsW2ByZW5kZXJgLGBwcm9wc2BdKV0pLF86Mn0sMTAzMixbYGNsYXNzYF0pKSksMTI4KSldKSxfOjJ9LDEwMzIsW2BjbGFzc2BdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9KSl9fSk7ZnVuY3Rpb24gJCh0LG4scil7cmV0dXJue2lkOnQsaGVhZGVyOm4sbWV0YTp7YWxpZ246YHJpZ2h0YH0sYWNjZXNzb3JGbjplPT5yKGUpLGNlbGw6KHtyb3c6dH0pPT5lKGd0LHt2YWx1ZTpyKHQub3JpZ2luYWwpfSl9fWZ1bmN0aW9uIGJ0KGUsdCxuKXtyZXR1cm57aWQ6ZSxoZWFkZXI6dCxtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9Pm4oZSksY2VsbDooe3JvdzplfSk9PmxlKG4oZS5vcmlnaW5hbCkpfX1mdW5jdGlvbiB4dCh0LG4scixpLGEpe2xldCBvPWE/LnNvcnRTZW50aW5lbD8/MDtyZXR1cm57aWQ6dCxoZWFkZXI6bixtZXRhOnthbGlnbjpgcmlnaHRgfSxhY2Nlc3NvckZuOmU9PnIoZSk/P28sY2VsbDooe3Jvdzp0fSk9PntsZXQgbj1yKHQub3JpZ2luYWwpO3JldHVybiBlKGBzcGFuYCx7Y2xhc3M6YHRhYnVsYXItbnVtc2B9LG49PT12b2lkIDA/YOKAlGA6aShuKSl9fX1mdW5jdGlvbiBTdCgpe3JldHVyblskKGByZXF1ZXN0c2AsYFJlcXVlc3RzYCxlPT5lLnJlcXVlc3RzKSwkKGB0b2tlbnNJbmAsYFRva2VucyBpbmAsZT0+ZS50b2tlbnNJbiksJChgdG9rZW5zT3V0YCxgVG9rZW5zIG91dGAsZT0+ZS50b2tlbnNPdXQpLGJ0KGBjb3N0YCxgQ29zdGAsZT0+ZS5jb3N0TWljcm9Vc2QpXX1leHBvcnR7dnQgYXMgYSxvdCBhcyBjLHl0IGFzIGksc3QgYXMgbCx4dCBhcyBuLGd0IGFzIG8sU3QgYXMgcixmdCBhcyBzLCQgYXMgdH07", ), }, - "events-PUxhEega.js": { + "consumers-CwwkOiMv.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e18gYXMgZSxfdCBhcyB0LGIgYXMgbix2IGFzIHIseCBhcyBpLHkgYXMgYX1mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO3ZhciBvPTVlMyxzPTIwMCxjPXQoYGV2ZW50c2Ase3N0YXRlOigpPT4oe2V2ZW50czpbXSxzb3VyY2U6YHJlcGxpY2FgLHJlcGxpY2E6YGAsY2FwYWNpdHk6MCxkZWdyYWRlZDohMSxsYXN0VXBkYXRlZDpudWxsLGVycm9yOmBgLGtpbmRGaWx0ZXI6YGAsdXNlckZpbHRlcjpgYCxwb2xsZXI6dm9pZCAwLHJlZnJlc2hpbmc6ITEsdG9hc3RlZEZvckZhaWx1cmU6ITF9KSxhY3Rpb25zOnthc3luYyByZWZyZXNoKCl7aWYoIWkoKS5pc0F1dGhlbnRpY2F0ZWR8fHRoaXMucmVmcmVzaGluZylyZXR1cm47dGhpcy5yZWZyZXNoaW5nPSEwO2xldCB0PXRoaXMubGFzdFVwZGF0ZWQhPT1udWxsO3RyeXtsZXQgZT1hd2FpdCBuKGAvYWRtaW4vYXBpL2V2ZW50cz9saW1pdD0ke3N9YCk7dGhpcy5ldmVudHM9ZS5ldmVudHMsdGhpcy5zb3VyY2U9ZS5zb3VyY2UsdGhpcy5yZXBsaWNhPWUucmVwbGljYSx0aGlzLmNhcGFjaXR5PWUuY2FwYWNpdHksdGhpcy5kZWdyYWRlZD1lLmRlZ3JhZGVkPz8hMSx0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGAsdGhpcy50b2FzdGVkRm9yRmFpbHVyZT0hMX1jYXRjaChuKXtpZihuIGluc3RhbmNlb2YgYSYmKG4uc3RhdHVzPT09NDAxfHxuLnN0YXR1cz09PTQwMykpcmV0dXJuO3RoaXMuZXJyb3I9biBpbnN0YW5jZW9mIEVycm9yP24ubWVzc2FnZTpTdHJpbmcobiksdCYmIXRoaXMudG9hc3RlZEZvckZhaWx1cmUmJmUoKS5wdXNoKHtraW5kOmBlcnJvcmAsbWVzc2FnZTpgRXZlbnRzIHJlZnJlc2ggZmFpbGVkOiAke3RoaXMuZXJyb3J9YH0pLHRoaXMudG9hc3RlZEZvckZhaWx1cmU9ITB9ZmluYWxseXt0aGlzLnJlZnJlc2hpbmc9ITF9fSxzZXRLaW5kRmlsdGVyKGUpe3RoaXMua2luZEZpbHRlcj1lfSxzZXRVc2VyRmlsdGVyKGUpe3RoaXMudXNlckZpbHRlcj1lfSxzdGFydFBvbGxpbmcoKXt0aGlzLnBvbGxlcnx8KHRoaXMucG9sbGVyPXIoe2ludGVydmFsTXM6byx0aWNrOigpPT52b2lkIHRoaXMucmVmcmVzaCgpfSksdGhpcy5wb2xsZXIuc3RhcnQoKSl9LHN0b3BQb2xsaW5nKCl7dGhpcy5wb2xsZXI/LnN0b3AoKSx0aGlzLnBvbGxlcj12b2lkIDB9fX0pO2V4cG9ydHtjIGFzIHR9Ow==", + "aW1wb3J0e0MgYXMgZSxTIGFzIHQsYiBhcyBuLGMgYXMgcixkIGFzIGksZiBhcyBhLHggYXMgbyx5IGFzIHMseXQgYXMgY31mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO3ZhciBsPTZlNDtmdW5jdGlvbiB1KCl7cmV0dXJue2xvYWRpbmc6ITEscmVxRXJyb3I6YGAsY29zdEVycm9yOmBgLG1vZGVsRXJyb3I6YGAscmVxU2VyaWVzOm51bGwsY29zdFNlcmllczpudWxsLG1vZGVsVG90YWxzOm51bGwsbW9kZWxUb3RhbHNVbmF2YWlsYWJsZTohMSxmZXRjaGVkQXQ6bnVsbCxyZXFJZDowLHdpbmRvdzpudWxsLHNwYW46bnVsbH19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5zdGF0dXM9PT1gcmVqZWN0ZWRgP3QoZS5yZWFzb24pOmBgfXZhciBmPWMoYGNvbnN1bWVyc2Ase3N0YXRlOigpPT4oe2RhdGE6bnVsbCxsb2FkaW5nOiExLGVycm9yOmBgLGZldGNoZWRBdDpudWxsLGRldGFpbDp7fX0pLGFjdGlvbnM6e2FzeW5jIGZldGNoQ29uc3VtZXJzKCl7aWYoZSgpLmlzQXV0aGVudGljYXRlZCYmIXRoaXMubG9hZGluZyl7dGhpcy5sb2FkaW5nPSEwO3RyeXt0aGlzLmRhdGE9YXdhaXQgbihgL2FkbWluL2FwaS9jb25zdW1lcnNgKSx0aGlzLmVycm9yPWBgLHRoaXMuZmV0Y2hlZEF0PURhdGUubm93KCl9Y2F0Y2goZSl7aWYobyhlKSlyZXR1cm47dGhpcy5lcnJvcj10KGUpfWZpbmFsbHl7dGhpcy5sb2FkaW5nPSExfX19LGFzeW5jIGVuc3VyZUNvbnN1bWVycygpe3RoaXMubG9hZGluZ3x8dGhpcy5kYXRhJiZ0aGlzLmZldGNoZWRBdCE9PW51bGwmJkRhdGUubm93KCktdGhpcy5mZXRjaGVkQXQ8bHx8YXdhaXQgdGhpcy5mZXRjaENvbnN1bWVycygpfSxhc3luYyBmZXRjaFVzZXJEZXRhaWwodCxjLGwsZil7aWYoIWUoKS5pc0F1dGhlbnRpY2F0ZWQpcmV0dXJuO2xldCBwPXRoaXMuZGV0YWlsW3RdPz91KCksbT1wLnJlcUlkKzEsaD1wLndpbmRvdyE9PW51bGwmJihwLndpbmRvdyE9PWN8fHAuc3BhbiE9PWwpO3RoaXMuZGV0YWlsW3RdPXsuLi5wLGxvYWRpbmc6ITAscmVxSWQ6bSxyZXFTZXJpZXM6aD9udWxsOnAucmVxU2VyaWVzLGNvc3RTZXJpZXM6aD9udWxsOnAuY29zdFNlcmllcyxtb2RlbFRvdGFsczpoP251bGw6cC5tb2RlbFRvdGFscyxyZXFFcnJvcjpoP2BgOnAucmVxRXJyb3IsY29zdEVycm9yOmg/YGA6cC5jb3N0RXJyb3IsbW9kZWxFcnJvcjpoP2BgOnAubW9kZWxFcnJvcn07bGV0IGc9cihjLGwpLFtfLHYseV09YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtuKGkoe3Njb3BlOltgdXNlcjoke3R9YF0sbWV0cmljOmByZXFgLHdpbmRvdzpjLHNwYW46bH0pKSxuKGkoe3Njb3BlOltgdXNlcjoke3R9YF0sbWV0cmljOmBjb3N0YCx3aW5kb3c6YyxzcGFuOmx9KSksZj9uKGEoe2tpbmQ6YHVzZXJtb2RlbGAsdXNlcjp0LHdpbmRvdzpnLndpbmRvdyxzcGFuOmcuc3BhbixtZXRyaWNzOltgcmVxYCxgY29zdGBdfSkpOlByb21pc2UucmVzb2x2ZShudWxsKV0pO2lmKHRoaXMuZGV0YWlsW3RdPy5yZXFJZCE9PW18fFtfLHYseV0uc29tZShlPT5lLnN0YXR1cz09PWByZWplY3RlZGAmJm8oZS5yZWFzb24pKSlyZXR1cm47bGV0IGI9eS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZ5LnJlYXNvbiBpbnN0YW5jZW9mIHMmJnkucmVhc29uLnN0YXR1cz09PTQwNCx4PXRoaXMuZGV0YWlsW3RdPz91KCk7dGhpcy5kZXRhaWxbdF09e2xvYWRpbmc6ITEscmVxRXJyb3I6ZChfKSxjb3N0RXJyb3I6ZCh2KSxtb2RlbEVycm9yOmI/YGA6ZCh5KSxyZXFTZXJpZXM6Xy5zdGF0dXM9PT1gZnVsZmlsbGVkYD9fLnZhbHVlOngucmVxU2VyaWVzLGNvc3RTZXJpZXM6di5zdGF0dXM9PT1gZnVsZmlsbGVkYD92LnZhbHVlOnguY29zdFNlcmllcyxtb2RlbFRvdGFsczp5LnN0YXR1cz09PWBmdWxmaWxsZWRgP3kudmFsdWU6Yj9udWxsOngubW9kZWxUb3RhbHMsbW9kZWxUb3RhbHNVbmF2YWlsYWJsZTpiLGZldGNoZWRBdDpEYXRlLm5vdygpLHJlcUlkOm0sd2luZG93OmMsc3BhbjpsfX19fSk7ZXhwb3J0e2YgYXMgdH07", ), }, - "events-filter-XFnjIaR7.js": { + "events-R9yQlBc0.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "dmFyIGU9e3JhdGVfbGltaXQ6YFJhdGUgbGltaXRgLGJ1ZGdldDpgQnVkZ2V0YCxzdG9yZV9kb3duOmBTdG9yZSBkb3duYCx1cHN0cmVhbTpgVXBzdHJlYW0gZXJyb3JgLHRpbWVvdXQ6YFRpbWVvdXRgLHVucHJpY2VkOmBVbnByaWNlZCBtb2RlbGAsY2FwYWNpdHk6YENhcGFjaXR5YH0sdD1PYmplY3Qua2V5cyhlKTtmdW5jdGlvbiBuKGUpe3N3aXRjaChlKXtjYXNlYHJhdGVfbGltaXRgOmNhc2VgYnVkZ2V0YDpjYXNlYGNhcGFjaXR5YDpyZXR1cm5gZGVzdHJ1Y3RpdmVgO2Nhc2Vgc3RvcmVfZG93bmA6Y2FzZWB1cHN0cmVhbWA6Y2FzZWB0aW1lb3V0YDpyZXR1cm5gc2Vjb25kYXJ5YDtkZWZhdWx0OnJldHVybmBvdXRsaW5lYH19ZnVuY3Rpb24gcihlLHQpe2xldCBuPXQua2luZCxyPXQudXNlci50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gZS5maWx0ZXIoZT0+e2lmKG4mJmUua2luZCE9PW4pcmV0dXJuITE7aWYoIXIpcmV0dXJuITA7bGV0IHQ9ZS51c2VyPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHIpPz8hMSxpPWUuZ3JvdXA/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocik/PyExO3JldHVybiB0fHxpfSl9ZXhwb3J0e3IgYXMgaSxlIGFzIG4sbiBhcyByLHR9Ow==", + "aW1wb3J0e0MgYXMgZSxTIGFzIHQsXyBhcyBuLGIgYXMgcix2IGFzIGkseCBhcyBhLHl0IGFzIG99ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjt2YXIgcz01ZTMsYz0yMDAsbD1vKGBldmVudHNgLHtzdGF0ZTooKT0+KHtldmVudHM6W10sc291cmNlOmByZXBsaWNhYCxyZXBsaWNhOmBgLGNhcGFjaXR5OjAsZGVncmFkZWQ6ITEsbGFzdFVwZGF0ZWQ6bnVsbCxlcnJvcjpgYCxraW5kRmlsdGVyOmBgLHVzZXJGaWx0ZXI6YGAscG9sbGVyOnZvaWQgMCxyZWZyZXNoaW5nOiExLHRvYXN0ZWRGb3JGYWlsdXJlOiExfSksYWN0aW9uczp7YXN5bmMgcmVmcmVzaCgpe2lmKCFlKCkuaXNBdXRoZW50aWNhdGVkfHx0aGlzLnJlZnJlc2hpbmcpcmV0dXJuO3RoaXMucmVmcmVzaGluZz0hMDtsZXQgaT10aGlzLmxhc3RVcGRhdGVkIT09bnVsbDt0cnl7bGV0IGU9YXdhaXQgcihgL2FkbWluL2FwaS9ldmVudHM/bGltaXQ9JHtjfWApO3RoaXMuZXZlbnRzPWUuZXZlbnRzLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMucmVwbGljYT1lLnJlcGxpY2EsdGhpcy5jYXBhY2l0eT1lLmNhcGFjaXR5LHRoaXMuZGVncmFkZWQ9ZS5kZWdyYWRlZD8/ITEsdGhpcy5sYXN0VXBkYXRlZD1uZXcgRGF0ZSx0aGlzLmVycm9yPWBgLHRoaXMudG9hc3RlZEZvckZhaWx1cmU9ITF9Y2F0Y2goZSl7aWYoYShlKSlyZXR1cm47dGhpcy5lcnJvcj10KGUpLGkmJiF0aGlzLnRvYXN0ZWRGb3JGYWlsdXJlJiZuKCkucHVzaCh7a2luZDpgZXJyb3JgLG1lc3NhZ2U6YEV2ZW50cyByZWZyZXNoIGZhaWxlZDogJHt0aGlzLmVycm9yfWB9KSx0aGlzLnRvYXN0ZWRGb3JGYWlsdXJlPSEwfWZpbmFsbHl7dGhpcy5yZWZyZXNoaW5nPSExfX0sc2V0S2luZEZpbHRlcihlKXt0aGlzLmtpbmRGaWx0ZXI9ZX0sc2V0VXNlckZpbHRlcihlKXt0aGlzLnVzZXJGaWx0ZXI9ZX0sc3RhcnRQb2xsaW5nKCl7dGhpcy5wb2xsZXJ8fCh0aGlzLnBvbGxlcj1pKHtpbnRlcnZhbE1zOnMsdGljazooKT0+dm9pZCB0aGlzLnJlZnJlc2goKX0pLHRoaXMucG9sbGVyLnN0YXJ0KCkpfSxzdG9wUG9sbGluZygpe3RoaXMucG9sbGVyPy5zdG9wKCksdGhpcy5wb2xsZXI9dm9pZCAwfX19KTtleHBvcnR7bCBhcyB0fTs=", + ), + }, + "events-filter-Cieu1UBR.js": { + contentType: "text/javascript; charset=utf-8", + body: decodeAdminAsset( + "dmFyIGU9e3JhdGVfbGltaXQ6YFJhdGUgbGltaXRgLGJ1ZGdldDpgQnVkZ2V0YCxzdG9yZV9kb3duOmBTdG9yZSBkb3duYCx1cHN0cmVhbTpgVXBzdHJlYW0gZXJyb3JgLHRpbWVvdXQ6YFRpbWVvdXRgLHVucHJpY2VkOmBVbnByaWNlZCBtb2RlbGAsY2FwYWNpdHk6YENhcGFjaXR5YH0sdD1PYmplY3Qua2V5cyhlKTtmdW5jdGlvbiBuKHQpe3JldHVybiBlW3RdPz90fWZ1bmN0aW9uIHIoZSl7c3dpdGNoKGUpe2Nhc2VgcmF0ZV9saW1pdGA6Y2FzZWBidWRnZXRgOmNhc2VgY2FwYWNpdHlgOnJldHVybmBkZXN0cnVjdGl2ZWA7Y2FzZWBzdG9yZV9kb3duYDpjYXNlYHVwc3RyZWFtYDpjYXNlYHRpbWVvdXRgOnJldHVybmBzZWNvbmRhcnlgO2RlZmF1bHQ6cmV0dXJuYG91dGxpbmVgfX1mdW5jdGlvbiBpKGUsdCl7bGV0IG49dC5raW5kLHI9dC51c2VyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVybiBlLmZpbHRlcihlPT57aWYobiYmZS5raW5kIT09bilyZXR1cm4hMTtpZighcilyZXR1cm4hMDtsZXQgdD1lLnVzZXI/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocik/PyExLGk9ZS5ncm91cD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhyKT8/ITE7cmV0dXJuIHR8fGl9KX1leHBvcnR7biBhcyBhLGksZSBhcyBuLHIsdH07", + ), + }, + "index-88CTRNHP.js": { + contentType: "text/javascript; charset=utf-8", + body: decodeAdminAsset( + "Y29uc3QgX192aXRlX19tYXBEZXBzPShpLG09X192aXRlX19tYXBEZXBzLGQ9KG0uZnx8KG0uZj1bImFzc2V0cy9Ib21lUGFnZS1CdE5uMDBIVi5qcyIsImFzc2V0cy9Ta2VsZXRvbi1EME5udkhZMS5qcyIsImFzc2V0cy90YWJzLUN1aDZGUTBqLmpzIiwiYXNzZXRzL3VzZUlkLVRjWEJ3VU9oLmpzIiwiYXNzZXRzL0Vycm9yU3RhdGUtRERKT0tKbHouanMiLCJhc3NldHMvYmFkZ2UtQkpMZy1SM00uanMiLCJhc3NldHMvVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQmgxOXlpdjguanMiLCJhc3NldHMvTG9hZFN0YXRlVmlldy1CRWJzZXg3WS5qcyIsImFzc2V0cy9Ta2VsZXRvbkNoYXJ0LTFZXzVzOWYwLmpzIiwiYXNzZXRzL0VudGl0eUxpbmstQlI2cGxhV1YuanMiLCJhc3NldHMvZXZlbnRzLVI5eVFsQmMwLmpzIiwiYXNzZXRzL2V2ZW50cy1maWx0ZXItQ2lldTFVQlIuanMiLCJhc3NldHMva3BpLVAwOFV2cktpLmpzIiwiYXNzZXRzL3VzYWdlLWJhcnMtQkpPWUhzdVIuanMiLCJhc3NldHMvU3BlbmRQYWdlLUNONG93VlUwLmpzIiwiYXNzZXRzL2NvbHVtbnMtQ29lY25mNzQuanMiLCJhc3NldHMvYnVybmRvd24tZUdjYS1lbGMuanMiLCJhc3NldHMvY2xpcGJvYXJkLUI3M2ZaMGMxLmpzIiwiYXNzZXRzL0NoYXJ0Q2FyZC1DQUNTSVgxZi5qcyIsImFzc2V0cy9DbGFtcGVkUmFuZ2VOb3RpY2UtQ2hfSHF5Qk8uanMiLCJhc3NldHMvU3RhdERpc2FibGVkQWxlcnQtQkp0SFJYd0UuanMiLCJhc3NldHMvY2F0YWxvZy1DOTVOVGFYdC5qcyIsImFzc2V0cy9zZXJpZXMtRFpzdUFYSEkuanMiLCJhc3NldHMvY2hhcnQtcGFsZXR0ZS1obTRaSWtBWC5qcyIsImFzc2V0cy9Db25zdW1lcnNQYWdlLUJfNDlfVUNJLmpzIiwiYXNzZXRzL3NlYXJjaC1leHBhbmQtQi13Uk9jbkwuanMiLCJhc3NldHMvdXNlQ29weUZlZWRiYWNrLUNqUnpPTy1XLmpzIiwiYXNzZXRzL2NvbnN1bWVycy1Dd3drT2lNdi5qcyIsImFzc2V0cy91c2VTZWFyY2hRdWVyeS1CU2tDOGJHZC5qcyIsImFzc2V0cy9Nb2RlbHNQYWdlLURPLTE5Uk5YLmpzIiwiYXNzZXRzL3JlbGlhYmlsaXR5LUNZZEpxXzc0LmpzIiwiYXNzZXRzL1JlbGlhYmlsaXR5UGFnZS1ELXNPTHRXWi5qcyIsImFzc2V0cy9Db25maWdQYWdlLUJTRXEyLWZvLmpzIiwiYXNzZXRzL1RhcmdldHNQYWdlLUJMMGFvZnNYLmpzIl0pKSk9PmkubWFwKGk9PmRbaV0pOwppbXBvcnR7YSBhcyBlLGkgYXMgdCxuLG8gYXMgcixyIGFzIGkscyBhcyBhLHQgYXMgb31mcm9tIi4vdXNlSWQtVGNYQndVT2guanMiO2ltcG9ydHskIGFzIHMsQSBhcyBjLEFuIGFzIGwsQiBhcyB1LEJyIGFzIGQsQyBhcyBmLENpIGFzIHAsRCBhcyBtLERuIGFzIGgsRSBhcyBnLEYgYXMgXyxHIGFzIHYsR24gYXMgeSxIIGFzIGIsSG4gYXMgeCxJIGFzIFMsSm4gYXMgQyxLIGFzIHcsTCBhcyBULExyIGFzIEUsTSBhcyBlZSxNciBhcyBELE4gYXMgdGUsTnIgYXMgTyxPIGFzIG5lLFAgYXMgcmUsUHIgYXMgaWUsUSBhcyBhZSxRbiBhcyBvZSxSIGFzIHNlLFJuIGFzIGNlLFNpIGFzIGxlLFN0IGFzIHVlLFQgYXMgZGUsVSBhcyBmZSxVdCBhcyBwZSxWIGFzIG1lLFZ0IGFzIGhlLFcgYXMgZ2UsV24gYXMgayxXdCBhcyBfZSxYdCBhcyB2ZSxZIGFzIHllLFlyIGFzIGJlLF8gYXMgeGUsX24gYXMgQSxfdCBhcyBTZSxhIGFzIENlLGNpIGFzIGosY24gYXMgTSxjdCBhcyB3ZSxkaSBhcyBUZSxkciBhcyBOLGR0IGFzIEVlLGVpIGFzIERlLGVuIGFzIE9lLGZyIGFzIGtlLGcgYXMgQWUsZ2kgYXMgamUsZ24gYXMgTWUsZ3QgYXMgTmUsaCBhcyBQZSxoaSBhcyBGZSxpIGFzIEllLGlyIGFzIFAsaXQgYXMgTGUsaiBhcyBSZSxrIGFzIEYsa24gYXMgemUsbCBhcyBCZSxsbiBhcyBJLG0gYXMgVmUsbXIgYXMgSGUsbiBhcyBVZSxuaSBhcyBXZSxuciBhcyBHZSxvIGFzIEtlLG9pIGFzIHFlLG9uIGFzIEwsb3IgYXMgSmUscCBhcyBZZSxxIGFzIFhlLHIgYXMgWmUscmkgYXMgUWUscnQgYXMgJGUsc24gYXMgUixzdCBhcyBldCx0IGFzIHR0LHR0IGFzIG50LHUgYXMgcnQsdWkgYXMgaXQsdW4gYXMgeix1ciBhcyBhdCx2aSBhcyBCLHZuIGFzIG90LHZ0IGFzIHN0LHcgYXMgY3Qsd2kgYXMgVix3ciBhcyBsdCx3dCBhcyB1dCx4aSBhcyBkdCx5biBhcyBILHl0IGFzIGZ0LHogYXMgcHQsenIgYXMgbXR9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtmdW5jdGlvbiBodChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gZ3QoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBfdChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBodChlKX1mdW5jdGlvbiB2dChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uYCl9ZnVuY3Rpb24geXQoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxgdmFsdWVgaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLEF0KHIua2V5KSxyKX19ZnVuY3Rpb24gYnQoZSx0LG4pe3JldHVybiB0JiZ5dChlLnByb3RvdHlwZSx0KSxuJiZ5dChlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24geHQoZSx0KXt2YXIgbj10eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChuPU10KGUpKXx8dCYmZSYmdHlwZW9mIGUubGVuZ3RoPT1gbnVtYmVyYCl7biYmKGU9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjppfX10aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9bi5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxhPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bi5yZXR1cm49PW51bGx8fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gVShlLHQsbil7cmV0dXJuKHQ9QXQodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gU3QoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbYEBAaXRlcmF0b3JgXTtpZihuIT1udWxsKXt2YXIgcixpLGEsbyxzPVtdLGM9ITAsbD0hMTt0cnl7aWYoYT0obj1uLmNhbGwoZSkpLm5leHQsdD09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0ocj1hLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe2w9ITAsaT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZuLnJldHVybiE9bnVsbCYmKG89bi5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZihsKXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiB3dCgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFR0KCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gVyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF09PW51bGw/e306YXJndW1lbnRzW3RdO3QlMj9FdChPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24odCl7VShlLHQsblt0XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpFdChPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gRHQoZSx0KXtyZXR1cm4gZ3QoZSl8fEN0KGUsdCl8fE10KGUsdCl8fHd0KCl9ZnVuY3Rpb24gT3QoZSl7cmV0dXJuIF90KGUpfHxTdChlKXx8TXQoZSl8fFR0KCl9ZnVuY3Rpb24ga3QoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBBdChlKXt2YXIgdD1rdChlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBqdChlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBqdD10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sanQoZSl9ZnVuY3Rpb24gTXQoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGh0KGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9odChlLHQpOnZvaWQgMH19dmFyIE50PWZ1bmN0aW9uKCl7fSxQdD17fSxGdD17fSxJdD1udWxsLEx0PXttYXJrOk50LG1lYXN1cmU6TnR9O3RyeXt0eXBlb2Ygd2luZG93PGB1YCYmKFB0PXdpbmRvdyksdHlwZW9mIGRvY3VtZW50PGB1YCYmKEZ0PWRvY3VtZW50KSx0eXBlb2YgTXV0YXRpb25PYnNlcnZlcjxgdWAmJihJdD1NdXRhdGlvbk9ic2VydmVyKSx0eXBlb2YgcGVyZm9ybWFuY2U8YHVgJiYoTHQ9cGVyZm9ybWFuY2UpfWNhdGNoe312YXIgUnQ9KFB0Lm5hdmlnYXRvcnx8e30pLnVzZXJBZ2VudCx6dD1SdD09PXZvaWQgMD9gYDpSdCxCdD1QdCxHPUZ0LFZ0PUl0LEh0PUx0O0J0LmRvY3VtZW50O3ZhciBVdD0hIUcuZG9jdW1lbnRFbGVtZW50JiYhIUcuaGVhZCYmdHlwZW9mIEcuYWRkRXZlbnRMaXN0ZW5lcj09YGZ1bmN0aW9uYCYmdHlwZW9mIEcuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCxXdD1+enQuaW5kZXhPZihgTVNJRWApfHx+enQuaW5kZXhPZihgVHJpZGVudC9gKSxHdCxLdD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyxxdD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2ksSnQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LFl0PXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0sWHQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sSz1gY2xhc3NpY2AsWnQ9YGR1b3RvbmVgLFF0PWBzaGFycGAsJHQ9YHNoYXJwLWR1b3RvbmVgLGVuPWBjaGlzZWxgLHRuPWBldGNoYCxubj1gZ3JhcGhpdGVgLHJuPWBqZWxseWAsYW49YGplbGx5LWR1b2Asb249YGplbGx5LWZpbGxgLHNuPWBtb3NhaWNgLGNuPWBub3Rkb2dgLGxuPWBub3Rkb2ctZHVvYCx1bj1gcGl4ZWxgLGRuPWBzbGFiYCxmbj1gc2xhYi1kdW9gLHBuPWBzbGFiLXByZXNzYCxtbj1gc2xhYi1wcmVzcy1kdW9gLGhuPWB0aHVtYnByaW50YCxnbj1gdXRpbGl0eWAsX249YHV0aWxpdHktZHVvYCx2bj1gdXRpbGl0eS1maWxsYCx5bj1gdmVsbHVtYCxibj1gd2hpdGVib2FyZGAseG49YENsYXNzaWNgLFNuPWBEdW90b25lYCxDbj1gU2hhcnBgLHduPWBTaGFycCBEdW90b25lYCxUbj1gQ2hpc2VsYCxFbj1gRXRjaGAsRG49YEdyYXBoaXRlYCxPbj1gSmVsbHlgLGtuPWBKZWxseSBEdW9gLEFuPWBKZWxseSBGaWxsYCxqbj1gTW9zYWljYCxNbj1gTm90ZG9nYCxObj1gTm90ZG9nIER1b2AsUG49YFBpeGVsYCxGbj1gU2xhYmAsSW49YFNsYWIgRHVvYCxMbj1gU2xhYiBQcmVzc2AsUm49YFNsYWIgUHJlc3MgRHVvYCx6bj1gVGh1bWJwcmludGAsQm49YFV0aWxpdHlgLFZuPWBVdGlsaXR5IER1b2AsSG49YFV0aWxpdHkgRmlsbGAsVW49YFZlbGx1bWAsV249YFdoaXRlYm9hcmRgLEduPVtLLFp0LFF0LCR0LGVuLHRuLG5uLHJuLGFuLG9uLHNuLGNuLGxuLHVuLGRuLGZuLHBuLG1uLGhuLGduLF9uLHZuLHluLGJuXTtHdD17fSxVKFUoVShVKFUoVShVKFUoVShVKEd0LEsseG4pLFp0LFNuKSxRdCxDbiksJHQsd24pLGVuLFRuKSx0bixFbiksbm4sRG4pLHJuLE9uKSxhbixrbiksb24sQW4pLFUoVShVKFUoVShVKFUoVShVKFUoR3Qsc24sam4pLGNuLE1uKSxsbixObiksdW4sUG4pLGRuLEZuKSxmbixJbikscG4sTG4pLG1uLFJuKSxobix6biksZ24sQm4pLFUoVShVKFUoR3QsX24sVm4pLHZuLEhuKSx5bixVbiksYm4sV24pO3ZhciBLbj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LHFuPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0sSm49bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSksWW49e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxYbj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLFpuPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LFFuPVtga2l0YF07VShVKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciAkbj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSxlcj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sdHI9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSxucj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0scnIsaXI9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxhcj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtycj17fSxVKFUoVShVKFUoVShVKFUoVShVKHJyLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksVShVKFUoVShVKFUoVShVKFUoVShycixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLFUoVShVKFUocnIsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLFUoVSh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgb3I9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sc3I9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LGNyPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSxscj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQoYXIsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSksdXI9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSxkcj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLGZyPWRyLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxwcj1bXS5jb25jYXQoT3QoT2JqZWN0LmtleXMoc3IpKSx1cixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLGlyLkdST1VQLGlyLlNXQVBfT1BBQ0lUWSxpci5QUklNQVJZLGlyLlNFQ09OREFSWV0sZHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSxmci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSksbXI9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0saHI9YF9fX0ZPTlRfQVdFU09NRV9fX2AsZ3I9MTYsX3I9YGZhYCx2cj1gc3ZnLWlubGluZS0tZmFgLHlyPWBkYXRhLWZhLWkyc3ZnYCxicj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAseHI9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AsU3I9YGRhdGEtcHJlZml4YCxDcj1gZGF0YS1pY29uYCx3cj1gZm9udGF3ZXNvbWUtaTJzdmdgLFRyPWBhc3luY2AsRXI9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sRHI9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sT3I9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIGtyKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbS119fSl9dmFyIEFyPVcoe30sSnQpO0FyW0tdPVcoVyhXKFcoe30seyJmYS1kdW90b25lIjpgZHVvdG9uZWB9KSxKdFtLXSksWm4ua2l0KSxabltga2l0LWR1b3RvbmVgXSk7dmFyIGpyPWtyKEFyKSxNcj1XKHt9LFluKTtNcltLXT1XKFcoVyhXKHt9LHtkdW90b25lOmBmYWRgfSksTXJbS10pLG5yLmtpdCksbnJbYGtpdC1kdW90b25lYF0pO3ZhciBOcj1rcihNciksUHI9Vyh7fSxjcik7UHJbS109VyhXKHt9LFByW0tdKSx0ci5raXQpO3ZhciBGcj1rcihQciksSXI9Vyh7fSxvcik7SXJbS109VyhXKHt9LElyW0tdKSwkbi5raXQpLGtyKElyKTt2YXIgTHI9S3QsUnI9YGZhLWxheWVycy10ZXh0YCx6cj1xdDtrcihXKHt9LEtuKSk7dmFyIEJyPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sVnI9WXQsSHI9W10uY29uY2F0KE90KFFuKSxPdChwcikpLFVyPUJ0LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiBXcihlKXt2YXIgdD1HLnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtgK2UrYF1gKTtpZih0KXJldHVybiB0LmdldEF0dHJpYnV0ZShlKX1mdW5jdGlvbiBHcihlKXtyZXR1cm4gZT09PWBgPyEwOmU9PT1gZmFsc2VgPyExOmU9PT1gdHJ1ZWB8fGV9RyYmdHlwZW9mIEcucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PUR0KGUsMiksbj10WzBdLHI9dFsxXSxpPUdyKFdyKG4pKTtpIT1udWxsJiYoVXJbcl09aSl9KTt2YXIgS3I9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6Syxjc3NQcmVmaXg6X3IscmVwbGFjZW1lbnRDbGFzczp2cixhdXRvUmVwbGFjZVN2ZzohMCxhdXRvQWRkQ3NzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzOiExLHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3M6ITAsc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbjohMSxvYnNlcnZlTXV0YXRpb25zOiEwLG11dGF0ZUFwcHJvYWNoOmBhc3luY2Asa2VlcE9yaWdpbmFsU291cmNlOiEwLG1lYXN1cmVQZXJmb3JtYW5jZTohMSxzaG93TWlzc2luZ0ljb25zOiEwfTtVci5mYW1pbHlQcmVmaXgmJihVci5jc3NQcmVmaXg9VXIuZmFtaWx5UHJlZml4KTt2YXIgcXI9VyhXKHt9LEtyKSxVcik7cXIuYXV0b1JlcGxhY2VTdmd8fChxci5vYnNlcnZlTXV0YXRpb25zPSExKTt2YXIgcT17fTtPYmplY3Qua2V5cyhLcikuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocSxlLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbih0KXtxcltlXT10LEpyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHFyW2VdfX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImZhbWlseVByZWZpeCIse2VudW1lcmFibGU6ITAsc2V0OmZ1bmN0aW9uKGUpe3FyLmNzc1ByZWZpeD1lLEpyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHFyLmNzc1ByZWZpeH19KSxCdC5Gb250QXdlc29tZUNvbmZpZz1xO3ZhciBKcj1bXTtmdW5jdGlvbiBZcihlKXtyZXR1cm4gSnIucHVzaChlKSxmdW5jdGlvbigpe0pyLnNwbGljZShKci5pbmRleE9mKGUpLDEpfX12YXIgWHI9Z3IsWnI9e3NpemU6MTYseDowLHk6MCxyb3RhdGU6MCxmbGlwWDohMSxmbGlwWTohMX07ZnVuY3Rpb24gUXIoZSl7aWYoISghZXx8IVV0KSl7dmFyIHQ9Ry5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3Quc2V0QXR0cmlidXRlKGB0eXBlYCxgdGV4dC9jc3NgKSx0LmlubmVySFRNTD1lO2Zvcih2YXIgbj1HLmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gRy5oZWFkLmluc2VydEJlZm9yZSh0LHIpLGV9fXZhciAkcj1gMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpgO2Z1bmN0aW9uIGVpKCl7Zm9yKHZhciBlPTEyLHQ9YGA7ZS0tPjA7KXQrPSRyW01hdGgucmFuZG9tKCkqNjJ8MF07cmV0dXJuIHR9ZnVuY3Rpb24gdGkoZSl7Zm9yKHZhciB0PVtdLG49KGV8fFtdKS5sZW5ndGg+Pj4wO24tLTspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIG5pKGUpe3JldHVybiBlLmNsYXNzTGlzdD90aShlLmNsYXNzTGlzdCk6KGUuZ2V0QXR0cmlidXRlKGBjbGFzc2ApfHxgYCkuc3BsaXQoYCBgKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX1mdW5jdGlvbiByaShlKXtyZXR1cm5gJHtlfWAucmVwbGFjZSgvJi9nLGAmYW1wO2ApLnJlcGxhY2UoLyIvZyxgJnF1b3Q7YCkucmVwbGFjZSgvJy9nLGAmIzM5O2ApLnJlcGxhY2UoLzwvZyxgJmx0O2ApLnJlcGxhY2UoLz4vZyxgJmd0O2ApfWZ1bmN0aW9uIGlpKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrYCR7bn09IiR7cmkoZVtuXSl9IiBgfSxgYCkudHJpbSgpfWZ1bmN0aW9uIGFpKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrYCR7bn06ICR7ZVtuXS50cmltKCl9O2B9LGBgKX1mdW5jdGlvbiBvaShlKXtyZXR1cm4gZS5zaXplIT09WnIuc2l6ZXx8ZS54IT09WnIueHx8ZS55IT09WnIueXx8ZS5yb3RhdGUhPT1aci5yb3RhdGV8fGUuZmxpcFh8fGUuZmxpcFl9ZnVuY3Rpb24gc2koZSl7dmFyIHQ9ZS50cmFuc2Zvcm0sbj1lLmNvbnRhaW5lcldpZHRoLHI9ZS5pY29uV2lkdGg7cmV0dXJue291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke24vMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke3QueCozMn0sICR7dC55KjMyfSkgYH0gJHtgc2NhbGUoJHt0LnNpemUvMTYqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS8xNioodC5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke3Qucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMiotMX0gLTI1NilgfX19ZnVuY3Rpb24gY2koZSl7dmFyIHQ9ZS50cmFuc2Zvcm0sbj1lLndpZHRoLHI9bj09PXZvaWQgMD9ncjpuLGk9ZS5oZWlnaHQsYT1pPT09dm9pZCAwP2dyOmksbz1lLnN0YXJ0Q2VudGVyZWQscz1vIT09dm9pZCAwJiZvLGM9YGA7cmV0dXJuIGMrPXMmJld0P2B0cmFuc2xhdGUoJHt0LngvWHItci8yfWVtLCAke3QueS9Yci1hLzJ9ZW0pIGA6cz9gdHJhbnNsYXRlKGNhbGMoLTUwJSArICR7dC54L1hyfWVtKSwgY2FsYygtNTAlICsgJHt0LnkvWHJ9ZW0pKSBgOmB0cmFuc2xhdGUoJHt0LngvWHJ9ZW0sICR7dC55L1hyfWVtKSBgLGMrPWBzY2FsZSgke3Quc2l6ZS9YcioodC5mbGlwWD8tMToxKX0sICR7dC5zaXplL1hyKih0LmZsaXBZPy0xOjEpfSkgYCxjKz1gcm90YXRlKCR7dC5yb3RhdGV9ZGVnKSBgLGN9dmFyIGxpPWA6cm9vdCwgOmhvc3QgewogIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRnJlZSc7CiAgLS1mYS1mb250LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUHJvJzsKICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUHJvJzsKICAtLWZhLWZvbnQtZHVvdG9uZTogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRHVvdG9uZSc7CiAgLS1mYS1mb250LWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRHVvdG9uZSc7CiAgLS1mYS1mb250LWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEJyYW5kcyc7CiAgLS1mYS1mb250LXNoYXJwLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNsYWItcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYic7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyc7CiAgLS1mYS1mb250LXNsYWItZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgRHVvJzsKICAtLWZhLWZvbnQtc2xhYi1wcmVzcy1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8nOwogIC0tZmEtZm9udC1waXhlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBQaXhlbCc7CiAgLS1mYS1mb250LW1vc2FpYy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTW9zYWljJzsKICAtLWZhLWZvbnQtdmVsbHVtLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBWZWxsdW0nOwogIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkJzsKICAtLWZhLWZvbnQtdGh1bWJwcmludC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCc7CiAgLS1mYS1mb250LW5vdGRvZy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nJzsKICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byc7CiAgLS1mYS1mb250LWV0Y2gtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEV0Y2gnOwogIC0tZmEtZm9udC1ncmFwaGl0ZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBHcmFwaGl0ZSc7CiAgLS1mYS1mb250LWplbGx5LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5JzsKICAtLWZhLWZvbnQtamVsbHktZmlsbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsJzsKICAtLWZhLWZvbnQtamVsbHktZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5IER1byc7CiAgLS1mYS1mb250LWNoaXNlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBDaGlzZWwnOwogIC0tZmEtZm9udC11dGlsaXR5LXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5JzsKICAtLWZhLWZvbnQtdXRpbGl0eS1kdW8tc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRHVvJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1maWxsLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwnOwp9Cgouc3ZnLWlubGluZS0tZmEgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGRpc3BsYXk6IHZhcigtLWZhLWRpc3BsYXksIGlubGluZS1ibG9jayk7CiAgaGVpZ2h0OiAxZW07CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zbSB7CiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MTRlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGcgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLWxlZnQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGkgewogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgaW5zZXQtYmxvY2stc3RhcnQ6IDAuMjVlbTsgLyogc3luY2luZyB2ZXJ0aWNhbCBhbGlnbm1lbnQgd2l0aCBXZWIgRm9udCByZW5kZXJpbmcgKi8KfQoKLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouZmEtbGF5ZXJzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5mYS1sYXllcnMgLnN2Zy1pbmxpbmUtLWZhIHsKICBpbnNldDogMDsKICBtYXJnaW46IGF1dG87CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtdGV4dCB7CiAgbGVmdDogNTAlOwogIHRvcDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtY291bnRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmEtY291bnRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmYyNTNhKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7CiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpOwogIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7CiAgbWluLXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1pbi13aWR0aCwgMS41ZW0pOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtY291bnRlci1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tbGVmdCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0Owp9CgouZmEtbGF5ZXJzLXRvcC1yaWdodCB7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtdG9wLWxlZnQgewogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgouZmEtMXggewogIGZvbnQtc2l6ZTogMWVtOwp9CgouZmEtMnggewogIGZvbnQtc2l6ZTogMmVtOwp9CgouZmEtM3ggewogIGZvbnQtc2l6ZTogM2VtOwp9CgouZmEtNHggewogIGZvbnQtc2l6ZTogNGVtOwp9CgouZmEtNXggewogIGZvbnQtc2l6ZTogNWVtOwp9CgouZmEtNnggewogIGZvbnQtc2l6ZTogNmVtOwp9CgouZmEtN3ggewogIGZvbnQtc2l6ZTogN2VtOwp9CgouZmEtOHggewogIGZvbnQtc2l6ZTogOGVtOwp9CgouZmEtOXggewogIGZvbnQtc2l6ZTogOWVtOwp9CgouZmEtMTB4IHsKICBmb250LXNpemU6IDEwZW07Cn0KCi5mYS0yeHMgewogIGZvbnQtc2l6ZTogY2FsYygxMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14cyB7CiAgZm9udC1zaXplOiBjYWxjKDEyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXNtIHsKICBmb250LXNpemU6IGNhbGMoMTQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtbGcgewogIGZvbnQtc2l6ZTogY2FsYygyMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDIwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14bCB7CiAgZm9udC1zaXplOiBjYWxjKDI0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDI0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDI0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLTJ4bCB7CiAgZm9udC1zaXplOiBjYWxjKDMyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDMycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMzIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDMyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXdpZHRoLWF1dG8gewogIC0tZmEtd2lkdGg6IGF1dG87Cn0KCi5mYS1mdywKLmZhLXdpZHRoLWZpeGVkIHsKICAtLWZhLXdpZHRoOiAxLjI1ZW07Cn0KCi5mYS1jYW52YXMtc3F1YXJlIHsKICBwYWRkaW5nLWJsb2NrOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjEyNWVtOwp9CgouZmEtY2FudmFzLXJvb215IHsKICBwYWRkaW5nLWJsb2NrOiAwLjI1ZW07CiAgcGFkZGluZy1pbmxpbmU6IDAuMTI1ZW07CiAgbWFyZ2luLWJsb2NrLWVuZDogLTAuMjVlbTsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKfQoKLmZhLXVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7Cn0KLmZhLXVsID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhLWxpIHsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSEKICAtIFRoaXMgZmVhdHVyZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBGb250IEF3ZXNvbWUgKHY4KSEKICAtIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IGluIHRoaXMgdmVyc2lvbiAqdjcpLCBidXQgaXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIEZvbnQgQXdlc29tZSB2OC4KKi8KLyogTm90ZXM6CiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci13aWR0aCA9IDEvMTYgYnkgZGVmYXVsdCAodG8gcmVuZGVyIGFzIH4xcHggYmFzZWQgb24gYSAxNnB4IGRlZmF1bHQgZm9udC1zaXplKQoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9CiAgKiogMy8xNiBmb3IgdmVydGljYWwgcGFkZGluZyAodG8gZ2l2ZSB+MnB4IG9mIHZlcnRpY2FsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24gY29uc2lkZXJpbmcgaXQncyB2ZXJ0aWNhbCBhbGlnbm1lbnQpCiAgKiogNC8xNiBmb3IgaG9yaXpvbnRhbCBwYWRkaW5nICh0byBnaXZlIH40cHggb2YgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uKQoqLwouZmEtYm9yZGVyIHsKICBib3JkZXItY29sb3I6IHZhcigtLWZhLWJvcmRlci1jb2xvciwgI2VlZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pOwogIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7CiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1mYS1ib3JkZXItd2lkdGgsIDAuMDYyNWVtKTsKICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjE4NzVlbSAwLjI1ZW0pOwp9CgouZmEtcHVsbC1sZWZ0LAouZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLXB1bGwtcmlnaHQsCi5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLWJlYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1ib3VuY2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYmVhdC1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1mbGlwIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuNXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1mbGlwLTM2MCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXAtMzYwOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1zaGFrZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNoYWtlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC43NXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1zcGluIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tcmV2ZXJzZSB7CiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouZmEtcHVsc2UsCi5mYS1zcGluLXB1bHNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKLmZhLXNwaW4tc25hcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDNzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tc25hcC00IHsKICBhbmltYXRpb24tbmFtZTogZmEtc3Bpbi1zbmFwLTQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAyLjRzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tc25hcC04IHsKICBhbmltYXRpb24tbmFtZTogZmEtc3Bpbi1zbmFwLTg7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCA0cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1idXp6IHsKICBhbmltYXRpb24tbmFtZTogZmEtYnV6ejsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtd2FnIHsKICBhbmltYXRpb24tbmFtZTogZmEtd2FnOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC45cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2Utb3V0KTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gY2VudGVyOwp9CgouZmEtZmxvYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbG9hdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDNzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwogIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cn0KCi5mYS1zd2luZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXN3aW5nOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMS4ycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2Utb3V0KTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyOwp9CgouZmEtamVsbG8gewogIGFuaW1hdGlvbi1uYW1lOiBmYS1qZWxsbzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLmZhLWJlYXQsCiAgLmZhLWJvdW5jZSwKICAuZmEtZmFkZSwKICAuZmEtYmVhdC1mYWRlLAogIC5mYS1mbGlwLAogIC5mYS1mbGlwLTM2MCwKICAuZmEtcHVsc2UsCiAgLmZhLXNoYWtlLAogIC5mYS1zcGluLAogIC5mYS1zcGluLXB1bHNlLAogIC5mYS1idXp6LAogIC5mYS1mbG9hdCwKICAuZmEtamVsbG8sCiAgLmZhLXNwaW4tc25hcCwKICAuZmEtc3Bpbi1zbmFwLTQsCiAgLmZhLXNwaW4tc25hcC04LAogIC5mYS1zd2luZywKICAuZmEtd2FnIHsKICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDI1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yNSAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKSk7CiAgfQogIDQ1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yMiAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjIpKSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yNSAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJvdW5jZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZyk7CiAgfQogIDE0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOTQpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1hbnRpY2lwYXRpb24sIDNweCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAzMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjk0KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xMikpIHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIDAuNWVtKSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA1MiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkgKiAxLjEpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDEsIDAuNSk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDYpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjkyKSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjMzLCAwLjY2LCAxKTsKICB9CiAgODUlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCwgMS4wNCkgdHJhbnNsYXRlWShjYWxjKC0ycHggKiB2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgMSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA0MCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICAyNSUgewogICAgb3BhY2l0eTogY2FsYyh2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KSArIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4yOCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDUlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNCwgMSk7CiAgfQogIDglIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSh2YXIoLS1mYS1mbGlwLWFudGljaXBhdGlvbi1zY2FsZSwgMC45NSkpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKICB9CiAgNjUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC41KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkyJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmxpcC0zNjAgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNCwgMSk7CiAgfQogIDglIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSh2YXIoLS1mYS1mbGlwLWFudGljaXBhdGlvbi1zY2FsZSwgMC45NSkpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgODAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogdmFyKC0tZmEtZmxpcC1vdmVyc2hvb3QsIDEuMDQpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zaGFrZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNWRlZykgdHJhbnNsYXRlWCgxcHgpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZykgdHJhbnNsYXRlWCgtMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDM1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZykgdHJhbnNsYXRlWCgxcHgpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC05ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDc4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtM2RlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4gewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3Bpbi1zbmFwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDE2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMjguNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMzMuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDUuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNjIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI0MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjYuNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI0MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNzguNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMwMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgODMuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMwMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTUuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcC00IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDI1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNzUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcC04IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA5JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDIxLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDM0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDM3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA1OSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICA2Mi41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMjVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDcxLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNzUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgODQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgODcuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzE1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA5Ni41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1idXp6IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMSwgMCwgMC45LCAxKTsKICB9CiAgNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkpIHJvdGF0ZSgwLjVkZWcpOwogIH0KICAxMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSkgcm90YXRlKC0wLjVkZWcpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkpIHJvdGF0ZSgwLjNkZWcpOwogIH0KICAyMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSkgcm90YXRlKC0wLjNkZWcpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgwLjJkZWcpOwogIH0KICAzMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpICogMC43KSkgcm90YXRlKC0wLjJkZWcpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNCkpIHJvdGF0ZSgwLjFkZWcpOwogIH0KICA0MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXdhZyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjYsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMjQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjYsIDEpOwogIH0KICA1OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS13YWctYW5nbGUsIDEyZGVnKSAqIDAuNikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNjglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsb2F0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTAuNCAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgodmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpIHJvdGF0ZSh2YXIoLS1mYS1mbG9hdC10aWx0LCAxZGVnKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDM1JSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXN0cmV0Y2gteCwgMC45OCksIHZhcigtLWZhLWZsb2F0LXN0cmV0Y2gteSwgMS4wMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNSwgMCwgMC41LCAwKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjkyICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0wLjUgKiB2YXIoLS1mYS1mbG9hdC1kcmlmdCwgMXB4KSkpIHJvdGF0ZShjYWxjKC0wLjUgKiB2YXIoLS1mYS1mbG9hdC10aWx0LCAxZGVnKSkpIHNjYWxlKDAuOTk1LCAxLjAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjMgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1kcmlmdCwgMXB4KSkpIHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgxLCAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKDAuMDUgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zd2luZyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDE4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSAqIDAuODUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjY1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC42NSwgMSk7CiAgfQogIDM4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSAqIDAuNDUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjI1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA1NiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjEpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDY0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1qZWxsbyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuOCwgMSk7CiAgfQogIDEyJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpLCBjYWxjKDIgLSB2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMjQlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpLCB2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNiUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkgLSAxKSAqIDAuNSksIGNhbGMoMiAtICgxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSAtIDEpICogMC4zKSksIGNhbGMoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSAtIDEpICogMC4zKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA1OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyLCAwLjk4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgfQp9Ci5mYS1yb3RhdGUtOTAgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmZhLXJvdGF0ZS0xODAgewogIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMjcwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwp9CgouZmEtZmxpcC1ob3Jpem9udGFsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTsKfQoKLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOwp9CgouZmEtZmxpcC1ib3RoLAouZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoLTEsIC0xKTsKfQoKLmZhLXJvdGF0ZS1ieSB7CiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7CiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtc2Vjb25kYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSwKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogYmxhY2s7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1pbnZlcnNlIHsKICBmaWxsOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLmZhLXN0YWNrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAyZW07CiAgbGluZS1oZWlnaHQ6IDJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMi41ZW07Cn0KCi5mYS1pbnZlcnNlIHsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwogIGhlaWdodDogMWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4IHsKICAtLWZhLXdpZHRoOiAyLjVlbTsKICBoZWlnaHQ6IDJlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9CgouZmEtc3RhY2stMXgsCi5mYS1zdGFjay0yeCB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiB2YXIoLS1mYS1zdGFjay16LWluZGV4LCBhdXRvKTsKfWA7ZnVuY3Rpb24gdWkoKXt2YXIgZT1fcix0PXZyLG49cS5jc3NQcmVmaXgscj1xLnJlcGxhY2VtZW50Q2xhc3MsaT1saTtpZihuIT09ZXx8ciE9PXQpe3ZhciBhPVJlZ0V4cChgXFwuJHtlfVxcLWAsYGdgKSxvPVJlZ0V4cChgXFwtLSR7ZX1cXC1gLGBnYCkscz1SZWdFeHAoYFxcLiR7dH1gLGBnYCk7aT1pLnJlcGxhY2UoYSxgLiR7bn0tYCkucmVwbGFjZShvLGAtLSR7bn0tYCkucmVwbGFjZShzLGAuJHtyfWApfXJldHVybiBpfXZhciBkaT0hMTtmdW5jdGlvbiBmaSgpe3EuYXV0b0FkZENzcyYmIWRpJiYoUXIodWkoKSksZGk9ITApfXZhciBwaT17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbTp7Y3NzOnVpLGluc2VydENzczpmaX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntiZWZvcmVET01FbGVtZW50Q3JlYXRpb246ZnVuY3Rpb24oKXtmaSgpfSxiZWZvcmVJMnN2ZzpmdW5jdGlvbigpe2ZpKCl9fX19LG1pPUJ0fHx7fTttaVtocl18fChtaVtocl09e30pLG1pW2hyXS5zdHlsZXN8fChtaVtocl0uc3R5bGVzPXt9KSxtaVtocl0uaG9va3N8fChtaVtocl0uaG9va3M9e30pLG1pW2hyXS5zaGltc3x8KG1pW2hyXS5zaGltcz1bXSk7dmFyIGhpPW1pW2hyXSxnaT1bXSxfaT1mdW5jdGlvbigpe0cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsX2kpLHZpPTEsZ2kubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX0sdmk9ITE7VXQmJih2aT0oRy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChHLnJlYWR5U3RhdGUpLHZpfHxHLmFkZEV2ZW50TGlzdGVuZXIoYERPTUNvbnRlbnRMb2FkZWRgLF9pKSk7ZnVuY3Rpb24geWkoZSl7VXQmJih2aT9zZXRUaW1lb3V0KGUsMCk6Z2kucHVzaChlKSl9ZnVuY3Rpb24gYmkoZSl7dmFyIHQ9ZS50YWcsbj1lLmF0dHJpYnV0ZXMscj1uPT09dm9pZCAwP3t9Om4saT1lLmNoaWxkcmVuLGE9aT09PXZvaWQgMD9bXTppO3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/cmkoZSk6YDwke3R9ICR7aWkocil9PiR7YS5tYXAoYmkpLmpvaW4oYGApfTwvJHt0fT5gfWZ1bmN0aW9uIHhpKGUsdCxuKXtpZihlJiZlW3RdJiZlW3RdW25dKXJldHVybntwcmVmaXg6dCxpY29uTmFtZTpuLGljb246ZVt0XVtuXX19dmFyIFNpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpLGEpe3JldHVybiBlLmNhbGwodCxuLHIsaSxhKX19LENpPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5rZXlzKGUpLGE9aS5sZW5ndGgsbz1yPT09dm9pZCAwP3Q6U2kodCxyKSxzLGMsbDtmb3Iobj09PXZvaWQgMD8ocz0xLGw9ZVtpWzBdXSk6KHM9MCxsPW4pO3M8YTtzKyspYz1pW3NdLGw9byhsLGVbY10sYyxlKTtyZXR1cm4gbH07ZnVuY3Rpb24gd2koZSl7cmV0dXJuIE90KGUpLmxlbmd0aD09PTE/ZS5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNik6bnVsbH1mdW5jdGlvbiBUaShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVtuXTtyZXR1cm4gci5pY29uP3Rbci5pY29uTmFtZV09ci5pY29uOnRbbl09cix0fSx7fSl9ZnVuY3Rpb24gRWkoZSx0KXt2YXIgbj0oYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9KS5za2lwSG9va3Mscj1uIT09dm9pZCAwJiZuLGk9VGkodCk7dHlwZW9mIGhpLmhvb2tzLmFkZFBhY2s9PWBmdW5jdGlvbmAmJiFyP2hpLmhvb2tzLmFkZFBhY2soZSxUaSh0KSk6aGkuc3R5bGVzW2VdPVcoVyh7fSxoaS5zdHlsZXNbZV18fHt9KSxpKSxlPT09YGZhc2AmJkVpKGBmYWAsdCl9dmFyIERpPWhpLnN0eWxlcyxPaT1oaS5zaGltcyxraT1PYmplY3Qua2V5cyhGciksQWk9a2kucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09T2JqZWN0LmtleXMoRnJbdF0pLGV9LHt9KSxqaT1udWxsLE1pPXt9LE5pPXt9LFBpPXt9LEZpPXt9LElpPXt9O2Z1bmN0aW9uIExpKGUpe3JldHVybn5Ici5pbmRleE9mKGUpfWZ1bmN0aW9uIFJpKGUsdCl7dmFyIG49dC5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO3JldHVybiByPT09ZSYmaSE9PWBgJiYhTGkoaSk/aTpudWxsfXZhciB6aT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiBDaShEaSxmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbcl09Q2kobixlLHt9KSx0fSx7fSl9O01pPWUoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0WzNdJiYoZVt0WzNdXT1uKSx0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBudW1iZXJgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QudG9TdHJpbmcoMTYpXT1ufSksZX0pLE5pPWUoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW25dPW4sdFsyXSYmdFsyXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYH0pLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1ufSksZX0pLElpPWUoZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMl07cmV0dXJuIGVbbl09bixyLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1ufSksZX0pO3ZhciB0PWBmYXJgaW4gRGl8fHEuYXV0b0ZldGNoU3ZnLG49Q2koT2ksZnVuY3Rpb24oZSxuKXt2YXIgcj1uWzBdLGk9blsxXSxhPW5bMl07cmV0dXJuIGk9PT1gZmFyYCYmIXQmJihpPWBmYXNgKSx0eXBlb2Ygcj09YHN0cmluZ2AmJihlLm5hbWVzW3JdPXtwcmVmaXg6aSxpY29uTmFtZTphfSksdHlwZW9mIHI9PWBudW1iZXJgJiYoZS51bmljb2Rlc1tyLnRvU3RyaW5nKDE2KV09e3ByZWZpeDppLGljb25OYW1lOmF9KSxlfSx7bmFtZXM6e30sdW5pY29kZXM6e319KTtQaT1uLm5hbWVzLEZpPW4udW5pY29kZXMsamk9SmkocS5zdHlsZURlZmF1bHQse2ZhbWlseTpxLmZhbWlseURlZmF1bHR9KX07WXIoZnVuY3Rpb24oZSl7amk9SmkoZS5zdHlsZURlZmF1bHQse2ZhbWlseTpxLmZhbWlseURlZmF1bHR9KX0pLHppKCk7ZnVuY3Rpb24gQmkoZSx0KXtyZXR1cm4oTWlbZV18fHt9KVt0XX1mdW5jdGlvbiBWaShlLHQpe3JldHVybihOaVtlXXx8e30pW3RdfWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuKElpW2VdfHx7fSlbdF19ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIFBpW2VdfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gV2koZSl7dmFyIHQ9RmlbZV0sbj1CaShgZmFzYCxlKTtyZXR1cm4gdHx8KG4/e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpufTpudWxsKXx8e3ByZWZpeDpudWxsLGljb25OYW1lOm51bGx9fWZ1bmN0aW9uIEdpKCl7cmV0dXJuIGppfXZhciBLaT1mdW5jdGlvbigpe3JldHVybntwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsLHJlc3Q6W119fTtmdW5jdGlvbiBxaShlKXt2YXIgdD1LLG49a2kucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7cS5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gR24uZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBBaVtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIEppKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/Szp0LHI9anJbbl1bZV07aWYobj09PVp0JiYhZSlyZXR1cm5gZmFkYDt2YXIgaT1OcltuXVtlXXx8TnJbbl1bcl0sYT1lIGluIGhpLnN0eWxlcz9lOm51bGw7cmV0dXJuIGl8fGF8fG51bGx9ZnVuY3Rpb24gWWkoZSl7dmFyIHQ9W10sbj1udWxsO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9UmkocS5jc3NQcmVmaXgsZSk7cj9uPXI6ZSYmdC5wdXNoKGUpfSkse2ljb25OYW1lOm4scmVzdDp0fX1mdW5jdGlvbiBYaShlKXtyZXR1cm4gZS5zb3J0KCkuZmlsdGVyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbmRleE9mKGUpPT09dH0pfXZhciBaaT1sci5jb25jYXQoWG4pO2Z1bmN0aW9uIFFpKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLnNraXBMb29rdXBzLG49dCE9PXZvaWQgMCYmdCxyPW51bGwsaT1YaShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gWmkuaW5jbHVkZXMoZSl9KSksYT1YaShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hWmkuaW5jbHVkZXMoZSl9KSksbz1EdChpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gcj1lLCFYdC5pbmNsdWRlcyhlKX0pLDEpWzBdLHM9bz09PXZvaWQgMD9udWxsOm8sYz1xaShpKSxsPVcoVyh7fSxZaShhKSkse30se3ByZWZpeDpKaShzLHtmYW1pbHk6Y30pfSk7cmV0dXJuIFcoVyhXKHt9LGwpLG5hKHt2YWx1ZXM6ZSxmYW1pbHk6YyxzdHlsZXM6RGksY29uZmlnOnEsY2Fub25pY2FsOmwsZ2l2ZW5QcmVmaXg6cn0pKSwkaShuLHIsbCkpfWZ1bmN0aW9uICRpKGUsdCxuKXt2YXIgcj1uLnByZWZpeCxpPW4uaWNvbk5hbWU7aWYoZXx8IXJ8fCFpKXJldHVybntwcmVmaXg6cixpY29uTmFtZTppfTt2YXIgYT10PT09YGZhYD9VaShpKTp7fSxvPUhpKHIsaSk7cmV0dXJuIGk9YS5pY29uTmFtZXx8b3x8aSxyPWEucHJlZml4fHxyLHI9PT1gZmFyYCYmIURpLmZhciYmRGkuZmFzJiYhcS5hdXRvRmV0Y2hTdmcmJihyPWBmYXNgKSx7cHJlZml4OnIsaWNvbk5hbWU6aX19dmFyIGVhPUduLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PUt8fGUhPT1adH0pLHRhPU9iamVjdC5rZXlzKGNyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1LfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhjcltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gbmEoZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09WnQsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJmVhLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gdGEuaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9Sm4uZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9SGkoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PUdpKCl8fGBmYXNgKSxyfXZhciByYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2dCh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIGJ0KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPVcoVyh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksRWkobix0W25dKTt2YXIgcj1GcltLXVtuXTtyJiZFaShyLHRbbl0pLHppKCl9KX19LHtrZXk6YHJlc2V0YCx2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnM9e319fSx7a2V5OmBfcHVsbERlZmluaXRpb25zYCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQucHJlZml4JiZ0Lmljb25OYW1lJiZ0Lmljb24/ezA6dH06dDtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF0saT1yLnByZWZpeCxhPXIuaWNvbk5hbWUsbz1yLmljb24scz1vWzJdO2VbaV18fChlW2ldPXt9KSxzLmxlbmd0aD4wJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dHlwZW9mIHQ9PWBzdHJpbmdgJiYoZVtpXVt0XT1vKX0pLGVbaV1bYV09b30pLGV9fV0pfSgpLGlhPVtdLGFhPXt9LG9hPXt9LHNhPU9iamVjdC5rZXlzKG9hKTtmdW5jdGlvbiBjYShlLHQpe3ZhciBuPXQubWl4b3V0c1RvO3JldHVybiBpYT1lLGFhPXt9LE9iamVjdC5rZXlzKG9hKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3NhLmluZGV4T2YoZSk9PT0tMSYmZGVsZXRlIG9hW2VdfSksaWEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLm1peG91dD9lLm1peG91dCgpOnt9O2lmKE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dHlwZW9mIHRbZV09PWBmdW5jdGlvbmAmJihuW2VdPXRbZV0pLGp0KHRbZV0pPT09YG9iamVjdGAmJk9iamVjdC5rZXlzKHRbZV0pLmZvckVhY2goZnVuY3Rpb24ocil7bltlXXx8KG5bZV09e30pLG5bZV1bcl09dFtlXVtyXX0pfSksZS5ob29rcyl7dmFyIHI9ZS5ob29rcygpO09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7YWFbZV18fChhYVtlXT1bXSksYWFbZV0ucHVzaChyW2VdKX0pfWUucHJvdmlkZXMmJmUucHJvdmlkZXMob2EpfSksbn1mdW5jdGlvbiBsYShlLHQpe3ZhciBuPVsuLi5hcmd1bWVudHNdLnNsaWNlKDIpO3JldHVybihhYVtlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oZSl7dD1lLmFwcGx5KG51bGwsW3RdLmNvbmNhdChuKSl9KSx0fWZ1bmN0aW9uIHVhKGUpe3ZhciB0PVsuLi5hcmd1bWVudHNdLnNsaWNlKDEpOyhhYVtlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hcHBseShudWxsLHQpfSl9ZnVuY3Rpb24gZGEoKXt2YXIgZT1hcmd1bWVudHNbMF0sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG9hW2VdP29hW2VdLmFwcGx5KG51bGwsdCk6dm9pZCAwfWZ1bmN0aW9uIGZhKGUpe2UucHJlZml4PT09YGZhYCYmKGUucHJlZml4PWBmYXNgKTt2YXIgdD1lLmljb25OYW1lLG49ZS5wcmVmaXh8fEdpKCk7aWYodClyZXR1cm4gdD1IaShuLHQpfHx0LHhpKHBhLmRlZmluaXRpb25zLG4sdCl8fHhpKGhpLnN0eWxlcyxuLHQpfXZhciBwYT1uZXcgcmEsSj17bm9BdXRvOmZ1bmN0aW9uKCl7cS5hdXRvUmVwbGFjZVN2Zz0hMSxxLm9ic2VydmVNdXRhdGlvbnM9ITEsdWEoYG5vQXV0b2ApfSxjb25maWc6cSxkb206e2kyc3ZnOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O3JldHVybiBVdD8odWEoYGJlZm9yZUkyc3ZnYCxlKSxkYShgcHNldWRvRWxlbWVudHMyc3ZnYCxlKSxkYShgaTJzdmdgLGUpKTpQcm9taXNlLnJlamVjdChFcnJvcihgT3BlcmF0aW9uIHJlcXVpcmVzIGEgRE9NIG9mIHNvbWUga2luZC5gKSl9LHdhdGNoOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LHQ9ZS5hdXRvUmVwbGFjZVN2Z1Jvb3Q7cS5hdXRvUmVwbGFjZVN2Zz09PSExJiYocS5hdXRvUmVwbGFjZVN2Zz0hMCkscS5vYnNlcnZlTXV0YXRpb25zPSEwLHlpKGZ1bmN0aW9uKCl7bWEoe2F1dG9SZXBsYWNlU3ZnUm9vdDp0fSksdWEoYHdhdGNoYCxlKX0pfX0scGFyc2U6e2ljb246ZnVuY3Rpb24oZSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoanQoZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUpcmV0dXJue3ByZWZpeDplLnByZWZpeCxpY29uTmFtZTpIaShlLnByZWZpeCxlLmljb25OYW1lKXx8ZS5pY29uTmFtZX07aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg9PT0yKXt2YXIgdD1lWzFdLmluZGV4T2YoYGZhLWApPT09MD9lWzFdLnNsaWNlKDMpOmVbMV0sbj1KaShlWzBdKTtyZXR1cm57cHJlZml4Om4saWNvbk5hbWU6SGkobix0KXx8dH19aWYodHlwZW9mIGU9PWBzdHJpbmdgJiYoZS5pbmRleE9mKGAke3EuY3NzUHJlZml4fS1gKT4tMXx8ZS5tYXRjaChMcikpKXt2YXIgcj1RaShlLnNwbGl0KGAgYCkse3NraXBMb29rdXBzOiEwfSk7cmV0dXJue3ByZWZpeDpyLnByZWZpeHx8R2koKSxpY29uTmFtZTpIaShyLnByZWZpeCxyLmljb25OYW1lKXx8ci5pY29uTmFtZX19aWYodHlwZW9mIGU9PWBzdHJpbmdgKXt2YXIgaT1HaSgpO3JldHVybntwcmVmaXg6aSxpY29uTmFtZTpIaShpLGUpfHxlfX19fSxsaWJyYXJ5OnBhLGZpbmRJY29uRGVmaW5pdGlvbjpmYSx0b0h0bWw6Yml9LG1hPWZ1bmN0aW9uKCl7dmFyIGU9KGFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSkuYXV0b1JlcGxhY2VTdmdSb290LHQ9ZT09PXZvaWQgMD9HOmU7KE9iamVjdC5rZXlzKGhpLnN0eWxlcykubGVuZ3RoPjB8fHEuYXV0b0ZldGNoU3ZnKSYmVXQmJnEuYXV0b1JlcGxhY2VTdmcmJkouZG9tLmkyc3ZnKHtub2RlOnR9KX07ZnVuY3Rpb24gaGEoZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFic3RyYWN0Iix7Z2V0OnR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaHRtbCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmFic3RyYWN0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYmkoZSl9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibm9kZSIse2dldDpmdW5jdGlvbigpe2lmKFV0KXt2YXIgdD1HLmNyZWF0ZUVsZW1lbnQoYGRpdmApO3JldHVybiB0LmlubmVySFRNTD1lLmh0bWwsdC5jaGlsZHJlbn19fSksZX1mdW5jdGlvbiBnYShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5tYWluLHI9ZS5tYXNrLGk9ZS5hdHRyaWJ1dGVzLGE9ZS5zdHlsZXMsbz1lLnRyYW5zZm9ybTtpZihvaShvKSYmbi5mb3VuZCYmIXIuZm91bmQpe3ZhciBzPXt4Om4ud2lkdGgvbi5oZWlnaHQvMix5Oi41fTtpLnN0eWxlPWFpKFcoVyh7fSxhKSx7fSx7InRyYW5zZm9ybS1vcmlnaW4iOmAke3MueCtvLngvMTZ9ZW0gJHtzLnkrby55LzE2fWVtYH0pKX1yZXR1cm5be3RhZzpgc3ZnYCxhdHRyaWJ1dGVzOmksY2hpbGRyZW46dH1dfWZ1bmN0aW9uIF9hKGUpe3ZhciB0PWUucHJlZml4LG49ZS5pY29uTmFtZSxyPWUuY2hpbGRyZW4saT1lLmF0dHJpYnV0ZXMsYT1lLnN5bWJvbCxvPWE9PT0hMD9gJHt0fS0ke3EuY3NzUHJlZml4fS0ke259YDphO3JldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6e3N0eWxlOmBkaXNwbGF5OiBub25lO2B9LGNoaWxkcmVuOlt7dGFnOmBzeW1ib2xgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHtpZDpvfSksY2hpbGRyZW46cn1dfV19ZnVuY3Rpb24gdmEoZSl7cmV0dXJuW2BhcmlhLWxhYmVsYCxgYXJpYS1sYWJlbGxlZGJ5YCxgdGl0bGVgLGByb2xlYF0uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiBlfSl9ZnVuY3Rpb24geWEoZSl7dmFyIHQ9ZS5pY29ucyxuPXQubWFpbixyPXQubWFzayxpPWUucHJlZml4LGE9ZS5pY29uTmFtZSxvPWUudHJhbnNmb3JtLHM9ZS5zeW1ib2wsYz1lLm1hc2tJZCxsPWUuZXh0cmEsdT1lLndhdGNoYWJsZSxkPXUhPT12b2lkIDAmJnUsZj1yLmZvdW5kP3I6bixwPWYud2lkdGgsbT1mLmhlaWdodCxoPVtxLnJlcGxhY2VtZW50Q2xhc3MsYT9gJHtxLmNzc1ByZWZpeH0tJHthfWA6YGBdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbC5jbGFzc2VzLmluZGV4T2YoZSk9PT0tMX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWBgfHwhIWV9KS5jb25jYXQobC5jbGFzc2VzKS5qb2luKGAgYCksZz17Y2hpbGRyZW46W10sYXR0cmlidXRlczpXKFcoe30sbC5hdHRyaWJ1dGVzKSx7fSx7ImRhdGEtcHJlZml4IjppLCJkYXRhLWljb24iOmEsY2xhc3M6aCxyb2xlOmwuYXR0cmlidXRlcy5yb2xlfHxgaW1nYCx2aWV3Qm94OmAwIDAgJHtwfSAke219YH0pfTshdmEobC5hdHRyaWJ1dGVzKSYmIWwuYXR0cmlidXRlc1tgYXJpYS1oaWRkZW5gXSYmKGcuYXR0cmlidXRlc1tgYXJpYS1oaWRkZW5gXT1gdHJ1ZWApLGQmJihnLmF0dHJpYnV0ZXNbeXJdPWBgKTt2YXIgXz1XKFcoe30sZykse30se3ByZWZpeDppLGljb25OYW1lOmEsbWFpbjpuLG1hc2s6cixtYXNrSWQ6Yyx0cmFuc2Zvcm06byxzeW1ib2w6cyxzdHlsZXM6Vyh7fSxsLnN0eWxlcyl9KSx2PXIuZm91bmQmJm4uZm91bmQ/ZGEoYGdlbmVyYXRlQWJzdHJhY3RNYXNrYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319OmRhKGBnZW5lcmF0ZUFic3RyYWN0SWNvbmAsXyl8fHtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSx5PXYuY2hpbGRyZW4sYj12LmF0dHJpYnV0ZXM7cmV0dXJuIF8uY2hpbGRyZW49eSxfLmF0dHJpYnV0ZXM9YixzP19hKF8pOmdhKF8pfWZ1bmN0aW9uIGJhKGUpe3ZhciB0PWUuY29udGVudCxuPWUud2lkdGgscj1lLmhlaWdodCxpPWUudHJhbnNmb3JtLGE9ZS5leHRyYSxvPWUud2F0Y2hhYmxlLHM9byE9PXZvaWQgMCYmbyxjPVcoVyh7fSxhLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczphLmNsYXNzZXMuam9pbihgIGApfSk7cyYmKGNbeXJdPWBgKTt2YXIgbD1XKHt9LGEuc3R5bGVzKTtvaShpKSYmKGwudHJhbnNmb3JtPWNpKHt0cmFuc2Zvcm06aSxzdGFydENlbnRlcmVkOiEwLHdpZHRoOm4saGVpZ2h0OnJ9KSxsW2Atd2Via2l0LXRyYW5zZm9ybWBdPWwudHJhbnNmb3JtKTt2YXIgdT1haShsKTt1Lmxlbmd0aD4wJiYoYy5zdHlsZT11KTt2YXIgZD1bXTtyZXR1cm4gZC5wdXNoKHt0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6YyxjaGlsZHJlbjpbdF19KSxkfWZ1bmN0aW9uIHhhKGUpe3ZhciB0PWUuY29udGVudCxuPWUuZXh0cmEscj1XKFcoe30sbi5hdHRyaWJ1dGVzKSx7fSx7Y2xhc3M6bi5jbGFzc2VzLmpvaW4oYCBgKX0pLGk9YWkobi5zdHlsZXMpO2kubGVuZ3RoPjAmJihyLnN0eWxlPWkpO3ZhciBhPVtdO3JldHVybiBhLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpyLGNoaWxkcmVuOlt0XX0pLGF9dmFyIFNhPWhpLnN0eWxlcztmdW5jdGlvbiBDYShlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPUR0KGUuc2xpY2UoNCksMSlbMF0saT1udWxsO3JldHVybiBpPUFycmF5LmlzQXJyYXkocik/e3RhZzpgZ2AsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7VnIuR1JPVVB9YH0sY2hpbGRyZW46W3t0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2NsYXNzOmAke3EuY3NzUHJlZml4fS0ke1ZyLlNFQ09OREFSWX1gLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyWzBdfX0se3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7VnIuUFJJTUFSWX1gLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyWzFdfX1dfTp7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntmaWxsOmBjdXJyZW50Q29sb3JgLGQ6cn19LHtmb3VuZDohMCx3aWR0aDp0LGhlaWdodDpuLGljb246aX19dmFyIHdhPXtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMn07ZnVuY3Rpb24gVGEoZSx0KXshT3ImJiFxLnNob3dNaXNzaW5nSWNvbnMmJmUmJmNvbnNvbGUuZXJyb3IoYEljb24gd2l0aCBuYW1lICIke2V9IiBhbmQgcHJlZml4ICIke3R9IiBpcyBtaXNzaW5nLmApfWZ1bmN0aW9uIEVhKGUsdCl7dmFyIG49dDtyZXR1cm4gdD09PWBmYWAmJnEuc3R5bGVEZWZhdWx0IT09bnVsbCYmKHQ9R2koKSksbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihuPT09YGZhYCl7dmFyIGE9VWkoZSl8fHt9O2U9YS5pY29uTmFtZXx8ZSx0PWEucHJlZml4fHx0fWlmKGUmJnQmJlNhW3RdJiZTYVt0XVtlXSl7dmFyIG89U2FbdF1bZV07cmV0dXJuIHIoQ2EobykpfVRhKGUsdCkscihXKFcoe30sd2EpLHt9LHtpY29uOnEuc2hvd01pc3NpbmdJY29ucyYmZSYmZGEoYG1pc3NpbmdJY29uQWJzdHJhY3RgKXx8e319KSl9KX12YXIgRGE9ZnVuY3Rpb24oKXt9LE9hPXEubWVhc3VyZVBlcmZvcm1hbmNlJiZIdCYmSHQubWFyayYmSHQubWVhc3VyZT9IdDp7bWFyazpEYSxtZWFzdXJlOkRhfSxrYT1gRkEgIjcuMy4xImAsQWE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9hLm1hcmsoYCR7a2F9ICR7ZX0gYmVnaW5zYCksZnVuY3Rpb24oKXtyZXR1cm4gamEoZSl9fSxqYT1mdW5jdGlvbihlKXtPYS5tYXJrKGAke2thfSAke2V9IGVuZHNgKSxPYS5tZWFzdXJlKGAke2thfSAke2V9YCxgJHtrYX0gJHtlfSBiZWdpbnNgLGAke2thfSAke2V9IGVuZHNgKX0sTWE9e2JlZ2luOkFhLGVuZDpqYX0sTmE9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIFBhKGUpe3JldHVybiB0eXBlb2YoZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUoeXIpOm51bGwpPT1gc3RyaW5nYH1mdW5jdGlvbiBGYShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZShTcik6bnVsbCxuPWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKENyKTpudWxsO3JldHVybiB0JiZufWZ1bmN0aW9uIElhKGUpe3JldHVybiBlJiZlLmNsYXNzTGlzdCYmZS5jbGFzc0xpc3QuY29udGFpbnMmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKHEucmVwbGFjZW1lbnRDbGFzcyl9ZnVuY3Rpb24gTGEoKXtyZXR1cm4gcS5hdXRvUmVwbGFjZVN2Zz09PSEwP0hhLnJlcGxhY2U6SGFbcS5hdXRvUmVwbGFjZVN2Z118fEhhLnJlcGxhY2V9ZnVuY3Rpb24gUmEoZSl7cmV0dXJuIEcuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gemEoZSl7cmV0dXJuIEcuY3JlYXRlRWxlbWVudChlKX1mdW5jdGlvbiBCYShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5jZUZuLG49dD09PXZvaWQgMD9lLnRhZz09PWBzdmdgP1JhOnphOnQ7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBHLmNyZWF0ZVRleHROb2RlKGUpO3ZhciByPW4oZS50YWcpO3JldHVybiBPYmplY3Qua2V5cyhlLmF0dHJpYnV0ZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Iuc2V0QXR0cmlidXRlKHQsZS5hdHRyaWJ1dGVzW3RdKX0pLChlLmNoaWxkcmVufHxbXSkuZm9yRWFjaChmdW5jdGlvbihlKXtyLmFwcGVuZENoaWxkKEJhKGUse2NlRm46bn0pKX0pLHJ9ZnVuY3Rpb24gVmEoZSl7dmFyIHQ9YCAke2Uub3V0ZXJIVE1MfSBgO3JldHVybiB0PWAke3R9Rm9udCBBd2Vzb21lIGZvbnRhd2Vzb21lLmNvbSBgLHR9dmFyIEhhPXtyZXBsYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07aWYodC5wYXJlbnROb2RlKXtpZihlWzFdLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShCYShlKSx0KX0pLHQuZ2V0QXR0cmlidXRlKHlyKT09PW51bGwmJnEua2VlcE9yaWdpbmFsU291cmNlKXt2YXIgbj1HLmNyZWF0ZUNvbW1lbnQoVmEodCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH5uaSh0KS5pbmRleE9mKHEucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIEhhLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke3EuY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXEucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBiaShlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZSh5cixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uIFVhKGUpe2UoKX1mdW5jdGlvbiBXYShlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6TmE7aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPVVhO3EubXV0YXRlQXBwcm9hY2g9PT1UciYmKHI9QnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxVYSkscihmdW5jdGlvbigpe3ZhciB0PUxhKCkscj1NYS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgR2E9ITE7ZnVuY3Rpb24gS2EoKXtHYT0hMH1mdW5jdGlvbiBxYSgpe0dhPSExfXZhciBKYT1udWxsO2Z1bmN0aW9uIFlhKGUpe2lmKFZ0JiZxLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9OYTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP05hOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP05hOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9HOnM7SmE9bmV3IFZ0KGZ1bmN0aW9uKGUpe2lmKCFHYSl7dmFyIHQ9R2koKTt0aShlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUudHlwZT09PWBjaGlsZExpc3RgJiZlLmFkZGVkTm9kZXMubGVuZ3RoPjAmJiFQYShlLmFkZGVkTm9kZXNbMF0pJiYocS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmbyhlLnRhcmdldCksbihlLnRhcmdldCkpLGUudHlwZT09PWBhdHRyaWJ1dGVzYCYmZS50YXJnZXQucGFyZW50Tm9kZSYmcS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmbyhbZS50YXJnZXRdLCEwKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJlBhKGUudGFyZ2V0KSYmfkJyLmluZGV4T2YoZS5hdHRyaWJ1dGVOYW1lKSl7aWYoZS5hdHRyaWJ1dGVOYW1lPT09YGNsYXNzYCYmRmEoZS50YXJnZXQpKXt2YXIgcj1RaShuaShlLnRhcmdldCkpLGE9ci5wcmVmaXgscz1yLmljb25OYW1lO2UudGFyZ2V0LnNldEF0dHJpYnV0ZShTcixhfHx0KSxzJiZlLnRhcmdldC5zZXRBdHRyaWJ1dGUoQ3Iscyl9ZWxzZSBJYShlLnRhcmdldCkmJmkoZS50YXJnZXQpfX0pfX0pLFV0JiZKYS5vYnNlcnZlKGMse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsc3VidHJlZTohMH0pfX1mdW5jdGlvbiBYYSgpe0phJiZKYS5kaXNjb25uZWN0KCl9ZnVuY3Rpb24gWmEoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYHN0eWxlYCksbj1bXTtyZXR1cm4gdCYmKG49dC5zcGxpdChgO2ApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BsaXQoYDpgKSxyPW5bMF0saT1uLnNsaWNlKDEpO3JldHVybiByJiZpLmxlbmd0aD4wJiYoZVtyXT1pLmpvaW4oYDpgKS50cmltKCkpLGV9LHt9KSksbn1mdW5jdGlvbiBRYShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZShgZGF0YS1wcmVmaXhgKSxuPWUuZ2V0QXR0cmlidXRlKGBkYXRhLWljb25gKSxyPWUuaW5uZXJUZXh0PT09dm9pZCAwP2BgOmUuaW5uZXJUZXh0LnRyaW0oKSxpPVFpKG5pKGUpKTtyZXR1cm4gaS5wcmVmaXh8fD1HaSgpLHQmJm4mJihpLnByZWZpeD10LGkuaWNvbk5hbWU9biksaS5pY29uTmFtZSYmaS5wcmVmaXg/aTooaS5wcmVmaXgmJnIubGVuZ3RoPjAmJihpLmljb25OYW1lPVZpKGkucHJlZml4LGUuaW5uZXJUZXh0KXx8QmkoaS5wcmVmaXgsd2koZS5pbm5lclRleHQpKSksIWkuaWNvbk5hbWUmJnEuYXV0b0ZldGNoU3ZnJiZlLmZpcnN0Q2hpbGQmJmUuZmlyc3RDaGlsZC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiYoaS5pY29uTmFtZT1lLmZpcnN0Q2hpbGQuZGF0YSksaSl9ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIHRpKGUuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZSE9PWBjbGFzc2AmJmUubmFtZSE9PWBzdHlsZWAmJihlW3QubmFtZV09dC52YWx1ZSksZX0se30pfWZ1bmN0aW9uIGVvKCl7cmV0dXJue2ljb25OYW1lOm51bGwscHJlZml4Om51bGwsdHJhbnNmb3JtOlpyLHN5bWJvbDohMSxtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLGV4dHJhOntjbGFzc2VzOltdLHN0eWxlczp7fSxhdHRyaWJ1dGVzOnt9fX19ZnVuY3Rpb24gdG8oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOntzdHlsZVBhcnNlcjohMH0sbj1RYShlKSxyPW4uaWNvbk5hbWUsaT1uLnByZWZpeCxhPW4ucmVzdCxvPSRhKGUpLHM9bGEoYHBhcnNlTm9kZUF0dHJpYnV0ZXNgLHt9LGUpO3JldHVybiBXKHtpY29uTmFtZTpyLHByZWZpeDppLHRyYW5zZm9ybTpacixtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLHN5bWJvbDohMSxleHRyYTp7Y2xhc3NlczphLHN0eWxlczp0LnN0eWxlUGFyc2VyP1phKGUpOltdLGF0dHJpYnV0ZXM6b319LHMpfXZhciBubz1oaS5zdHlsZXM7ZnVuY3Rpb24gcm8oZSl7dmFyIHQ9cS5hdXRvUmVwbGFjZVN2Zz09PWBuZXN0YD90byhlLHtzdHlsZVBhcnNlcjohMX0pOnRvKGUpO3JldHVybn50LmV4dHJhLmNsYXNzZXMuaW5kZXhPZihScik/ZGEoYGdlbmVyYXRlTGF5ZXJzVGV4dGAsZSx0KTpkYShgZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uYCxlLHQpfWZ1bmN0aW9uIGlvKCl7cmV0dXJuW10uY29uY2F0KE90KFhuKSxPdChscikpfWZ1bmN0aW9uIGFvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFVdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIG49Ry5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uYWRkKGAke3dyfS0ke2V9YCl9LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVtb3ZlKGAke3dyfS0ke2V9YCl9LGE9cS5hdXRvRmV0Y2hTdmc/aW8oKTpYdC5jb25jYXQoT2JqZWN0LmtleXMobm8pKTthLmluY2x1ZGVzKGBmYWApfHxhLnB1c2goYGZhYCk7dmFyIG89W2AuJHtScn06bm90KFske3lyfV0pYF0uY29uY2F0KGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAuJHtlfTpub3QoWyR7eXJ9XSlgfSkpLmpvaW4oYCwgYCk7aWYoby5sZW5ndGg9PT0wKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgcz1bXTt0cnl7cz10aShlLnF1ZXJ5U2VsZWN0b3JBbGwobykpfWNhdGNoe31pZihzLmxlbmd0aD4wKXIoYHBlbmRpbmdgKSxpKGBjb21wbGV0ZWApO2Vsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBjPU1hLmJlZ2luKGBvblRyZWVgKSxsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciBuPXJvKHQpO24mJmUucHVzaChuKX1jYXRjaChlKXtPcnx8ZS5uYW1lPT09YE1pc3NpbmdJY29uYCYmY29uc29sZS5lcnJvcihlKX1yZXR1cm4gZX0sW10pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLG4pe1Byb21pc2UuYWxsKGwpLnRoZW4oZnVuY3Rpb24obil7V2EobixmdW5jdGlvbigpe3IoYGFjdGl2ZWApLHIoYGNvbXBsZXRlYCksaShgcGVuZGluZ2ApLHR5cGVvZiB0PT1gZnVuY3Rpb25gJiZ0KCksYygpLGUoKX0pfSkuY2F0Y2goZnVuY3Rpb24oZSl7YygpLG4oZSl9KX0pfWZ1bmN0aW9uIG9vKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO3JvKGUpLnRoZW4oZnVuY3Rpb24oZSl7ZSYmV2EoW2VdLHQpfSl9ZnVuY3Rpb24gc28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxyPSh0fHx7fSkuaWNvbj90OmZhKHR8fHt9KSxpPW4ubWFzaztyZXR1cm4gaSYmPShpfHx7fSkuaWNvbj9pOmZhKGl8fHt9KSxlKHIsVyhXKHt9LG4pLHt9LHttYXNrOml9KSl9fXZhciBjbz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sbj10LnRyYW5zZm9ybSxyPW49PT12b2lkIDA/WnI6bixpPXQuc3ltYm9sLGE9aSE9PXZvaWQgMCYmaSxvPXQubWFzayxzPW89PT12b2lkIDA/bnVsbDpvLGM9dC5tYXNrSWQsbD1jPT09dm9pZCAwP251bGw6Yyx1PXQuY2xhc3NlcyxkPXU9PT12b2lkIDA/W106dSxmPXQuYXR0cmlidXRlcyxwPWY9PT12b2lkIDA/e306ZixtPXQuc3R5bGVzLGg9bT09PXZvaWQgMD97fTptO2lmKGUpe3ZhciBnPWUucHJlZml4LF89ZS5pY29uTmFtZSx2PWUuaWNvbjtyZXR1cm4gaGEoVyh7dHlwZTpgaWNvbmB9LGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHVhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtpY29uRGVmaW5pdGlvbjplLHBhcmFtczp0fSkseWEoe2ljb25zOnttYWluOkNhKHYpLG1hc2s6cz9DYShzLmljb24pOntmb3VuZDohMSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGljb246e319fSxwcmVmaXg6ZyxpY29uTmFtZTpfLHRyYW5zZm9ybTpXKFcoe30sWnIpLHIpLHN5bWJvbDphLG1hc2tJZDpsLGV4dHJhOnthdHRyaWJ1dGVzOnAsc3R5bGVzOmgsY2xhc3NlczpkfX0pfSl9fSxsbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2ljb246c28oY28pfX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57bXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmVlQ2FsbGJhY2s9YW8sZS5ub2RlQ2FsbGJhY2s9b28sZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmkyc3ZnPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxuPXQ9PT12b2lkIDA/Rzp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gYW8obixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtFYShuLHIpLG8uaWNvbk5hbWU/RWEoby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPUR0KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLHlhKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89YWkoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIG9pKGkpJiYocz1kYShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSx1bz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gaGEoe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXt1YShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtxLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KE90KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSxmbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIGhhKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHVhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSx4YSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake3EuY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChPdChhKSl9fSl9KX19fX0scG89e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9acjpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIGhhKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHVhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxiYSh7Y29udGVudDplLHRyYW5zZm9ybTpXKFcoe30sWnIpLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7cS5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KE90KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoV3Qpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSxiYSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSxtbz1SZWdFeHAoYCJgLGB1Z2ApLGhvPVsxMTA1OTIwLDExMTIzMTldLGdvPVcoVyhXKFcoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLHFuKSxtciksZXIpLF9vPU9iamVjdC5rZXlzKGdvKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPWdvW3RdLGV9LHt9KSx2bz1PYmplY3Qua2V5cyhfbykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49X29bdF07cmV0dXJuIGVbdF09bls5MDBdfHxPdChPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIHlvKGUpe3JldHVybiB3aShPdChlLnJlcGxhY2UobW8sYGApKVswXXx8YGApfWZ1bmN0aW9uIGJvKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2UobW8sYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PWhvWzBdJiZyPD1ob1sxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKF9vW25dfHx7fSlbaV18fHZvW25dfWZ1bmN0aW9uIFNvKGUsdCl7dmFyIG49YCR7eHJ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT10aShlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKGJyKT09PXR9KVswXSxvPUJ0LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goenIpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj14byhzLGwpLHA9eW8oZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD1ibyhvKSxnPUJpKGYscCksXz1nO2lmKG0pe3ZhciB2PVdpKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKFNyKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKENyKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9ZW8oKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW2JyXT10LEVhKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT15YShXKFcoe30seSkse30se2ljb25zOnttYWluOmksbWFzazpLaSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89Ry5jcmVhdGVFbGVtZW50TlMoYGh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnYCxgc3ZnYCk7dD09PWA6OmJlZm9yZWA/ZS5pbnNlcnRCZWZvcmUobyxlLmZpcnN0Q2hpbGQpOmUuYXBwZW5kQ2hpbGQobyksby5vdXRlckhUTUw9YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGJpKGUpfSkuam9pbihgCmApLGUucmVtb3ZlQXR0cmlidXRlKG4pLHIoKX0pLmNhdGNoKGkpfWVsc2UgcigpfWVsc2UgcigpfSl9ZnVuY3Rpb24gQ28oZSl7cmV0dXJuIFByb21pc2UuYWxsKFtTbyhlLGA6OmJlZm9yZWApLFNvKGUsYDo6YWZ0ZXJgKV0pfWZ1bmN0aW9uIHdvKGUpe3JldHVybiBlLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkJiYhfkVyLmluZGV4T2YoZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpJiYhZS5nZXRBdHRyaWJ1dGUoYnIpJiYoIWUucGFyZW50Tm9kZXx8ZS5wYXJlbnROb2RlLnRhZ05hbWUhPT1gc3ZnYCl9dmFyIFRvPWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmRHIuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KX0pfSxFbz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgdD1uZXcgU2V0LG49ZS5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KTtuPW4uZmxhdE1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcyhgKGApP2U6ZS5zcGxpdChgLGApLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KX0pO3ZhciByPXh0KG4pLGk7dHJ5e2ZvcihyLnMoKTshKGk9ci5uKCkpLmRvbmU7KXt2YXIgYT1pLnZhbHVlO2lmKFRvKGEpKXt2YXIgbz1Eci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKHQsYGApfSxhKTtvIT09YGAmJm8hPT1gKmAmJnQuYWRkKG8pfX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9O2Z1bmN0aW9uIERvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwJiZhcmd1bWVudHNbMV07aWYoVXQpe3ZhciBuO2lmKHQpbj1lO2Vsc2UgaWYocS5zZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuKW49ZS5xdWVyeVNlbGVjdG9yQWxsKGAqYCk7ZWxzZXt2YXIgcj1uZXcgU2V0LGk9eHQoZG9jdW1lbnQuc3R5bGVTaGVldHMpLGE7dHJ5e2ZvcihpLnMoKTshKGE9aS5uKCkpLmRvbmU7KXt2YXIgbz1hLnZhbHVlO3RyeXt2YXIgcz14dChvLmNzc1J1bGVzKSxjO3RyeXtmb3Iocy5zKCk7IShjPXMubigpKS5kb25lOyl7dmFyIGw9Yy52YWx1ZSx1PXh0KEVvKGwuc2VsZWN0b3JUZXh0KSksZDt0cnl7Zm9yKHUucygpOyEoZD11Lm4oKSkuZG9uZTspe3ZhciBmPWQudmFsdWU7ci5hZGQoZil9fWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9fWNhdGNoKGUpe3Euc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncyYmY29uc29sZS53YXJuKGBGb250IEF3ZXNvbWU6IGNhbm5vdCBwYXJzZSBzdHlsZXNoZWV0OiAke28uaHJlZn0gKCR7ZS5tZXNzYWdlfSkKSWYgaXQgZGVjbGFyZXMgYW55IEZvbnQgQXdlc29tZSBDU1MgcHNldWRvLWVsZW1lbnRzLCB0aGV5IHdpbGwgbm90IGJlIHJlbmRlcmVkIGFzIFNWRyBpY29ucy4gQWRkIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHRvIHRoZSA8bGluaz4sIGVuYWJsZSBzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIGZvciBzbG93ZXIgYnV0IG1vcmUgdGhvcm91Z2ggRE9NIHBhcnNpbmcsIG9yIHN1cHByZXNzIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MgdG8gZmFsc2UuYCl9fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1pZighci5zaXplKXJldHVybjt2YXIgcD1BcnJheS5mcm9tKHIpLmpvaW4oYCwgYCk7dHJ5e249ZS5xdWVyeVNlbGVjdG9yQWxsKHApfWNhdGNoe319cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dGkobikuZmlsdGVyKHdvKS5tYXAoQ28pLGk9TWEuYmVnaW4oYHNlYXJjaFBzZXVkb0VsZW1lbnRzYCk7S2EoKSxQcm9taXNlLmFsbChyKS50aGVuKGZ1bmN0aW9uKCl7aSgpLHFhKCksZSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtpKCkscWEoKSx0KCl9KX0pfX12YXIgT289e2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHNldWRvRWxlbWVudHNDYWxsYmFjaz1EbyxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UucHNldWRvRWxlbWVudHMyc3ZnPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxuPXQ9PT12b2lkIDA/Rzp0O3Euc2VhcmNoUHNldWRvRWxlbWVudHMmJkRvKG4pfX19LGtvPSExLEFvPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9tOnt1bndhdGNoOmZ1bmN0aW9uKCl7S2EoKSxrbz0hMH19fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57Ym9vdHN0cmFwOmZ1bmN0aW9uKCl7WWEobGEoYG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3NgLHt9KSl9LG5vQXV0bzpmdW5jdGlvbigpe1hhKCl9LHdhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2JzZXJ2ZU11dGF0aW9uc1Jvb3Q7a28/cWEoKTpZYShsYShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase29ic2VydmVNdXRhdGlvbnNSb290OnR9KSl9fX19LGpvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkuc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoYC1gKSxyPW5bMF0saT1uLnNsaWNlKDEpLmpvaW4oYC1gKTtpZihyJiZpPT09YGhgKXJldHVybiBlLmZsaXBYPSEwLGU7aWYociYmaT09PWB2YClyZXR1cm4gZS5mbGlwWT0hMCxlO2lmKGk9cGFyc2VGbG9hdChpKSxpc05hTihpKSlyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZWBncm93YDplLnNpemUrPWk7YnJlYWs7Y2FzZWBzaHJpbmtgOmUuc2l6ZS09aTticmVhaztjYXNlYGxlZnRgOmUueC09aTticmVhaztjYXNlYHJpZ2h0YDplLngrPWk7YnJlYWs7Y2FzZWB1cGA6ZS55LT1pO2JyZWFrO2Nhc2VgZG93bmA6ZS55Kz1pO2JyZWFrO2Nhc2Vgcm90YXRlYDplLnJvdGF0ZSs9aX1yZXR1cm4gZX0se3NpemU6MTYseDowLHk6MCxmbGlwWDohMSxmbGlwWTohMSxyb3RhdGU6MH0pfSxNbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlOnt0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIGpvKGUpfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtdHJhbnNmb3JtYCk7cmV0dXJuIG4mJihlLnRyYW5zZm9ybT1qbyhuKSksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZz1mdW5jdGlvbihlKXt2YXIgdD1lLm1haW4sbj1lLnRyYW5zZm9ybSxyPWUuY29udGFpbmVyV2lkdGgsaT1lLmljb25XaWR0aCxhPXtvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHtuLngqMzJ9LCAke24ueSozMn0pIGB9ICR7YHNjYWxlKCR7bi5zaXplLzE2KihuLmZsaXBYPy0xOjEpfSwgJHtuLnNpemUvMTYqKG4uZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHtuLnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtpLzIqLTF9IC0yNTYpYH19O3JldHVybnt0YWc6YGdgLGF0dHJpYnV0ZXM6Vyh7fSxhLm91dGVyKSxjaGlsZHJlbjpbe3RhZzpgZ2AsYXR0cmlidXRlczpXKHt9LGEuaW5uZXIpLGNoaWxkcmVuOlt7dGFnOnQuaWNvbi50YWcsY2hpbGRyZW46dC5pY29uLmNoaWxkcmVuLGF0dHJpYnV0ZXM6VyhXKHt9LHQuaWNvbi5hdHRyaWJ1dGVzKSxhLnBhdGgpfV19XX19fX0sTm89e3g6MCx5OjAsd2lkdGg6YDEwMCVgLGhlaWdodDpgMTAwJWB9O2Z1bmN0aW9uIFBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZS5hdHRyaWJ1dGVzJiYoZS5hdHRyaWJ1dGVzLmZpbGx8fHQpJiYoZS5hdHRyaWJ1dGVzLmZpbGw9YGJsYWNrYCksZX1mdW5jdGlvbiBGbyhlKXtyZXR1cm4gZS50YWc9PT1gZ2A/ZS5jaGlsZHJlbjpbZV19Y2EoW3BpLGxvLHVvLGZvLHBvLE9vLEFvLE1vLHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtbWFza2ApLHI9bj9RaShuLnNwbGl0KGAgYCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pKTpLaSgpO3JldHVybiByLnByZWZpeHx8PUdpKCksZS5tYXNrPXIsZS5tYXNrSWQ9dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtbWFzay1pZGApLGV9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5nZW5lcmF0ZUFic3RyYWN0TWFzaz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5hdHRyaWJ1dGVzLHI9ZS5tYWluLGk9ZS5tYXNrLGE9ZS5tYXNrSWQsbz1lLnRyYW5zZm9ybSxzPXIud2lkdGgsYz1yLmljb24sbD1pLndpZHRoLHU9aS5pY29uLGQ9c2koe3RyYW5zZm9ybTpvLGNvbnRhaW5lcldpZHRoOmwsaWNvbldpZHRoOnN9KSxmPXt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6VyhXKHt9LE5vKSx7fSx7ZmlsbDpgd2hpdGVgfSl9LHA9Yy5jaGlsZHJlbj97Y2hpbGRyZW46Yy5jaGlsZHJlbi5tYXAoUG8pfTp7fSxtPXt0YWc6YGdgLGF0dHJpYnV0ZXM6Vyh7fSxkLmlubmVyKSxjaGlsZHJlbjpbUG8oVyh7dGFnOmMudGFnLGF0dHJpYnV0ZXM6VyhXKHt9LGMuYXR0cmlidXRlcyksZC5wYXRoKX0scCkpXX0saD17dGFnOmBnYCxhdHRyaWJ1dGVzOlcoe30sZC5vdXRlciksY2hpbGRyZW46W21dfSxnPWBtYXNrLSR7YXx8ZWkoKX1gLF89YGNsaXAtJHthfHxlaSgpfWAsdj17dGFnOmBtYXNrYCxhdHRyaWJ1dGVzOlcoVyh7fSxObykse30se2lkOmcsbWFza1VuaXRzOmB1c2VyU3BhY2VPblVzZWAsbWFza0NvbnRlbnRVbml0czpgdXNlclNwYWNlT25Vc2VgfSksY2hpbGRyZW46W2YsaF19LHk9e3RhZzpgZGVmc2AsY2hpbGRyZW46W3t0YWc6YGNsaXBQYXRoYCxhdHRyaWJ1dGVzOntpZDpffSxjaGlsZHJlbjpGbyh1KX0sdl19O3JldHVybiB0LnB1c2goeSx7dGFnOmByZWN0YCxhdHRyaWJ1dGVzOlcoe2ZpbGw6YGN1cnJlbnRDb2xvcmAsImNsaXAtcGF0aCI6YHVybCgjJHtffSlgLG1hc2s6YHVybCgjJHtnfSlgfSxObyl9KSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOm59fX19LHtwcm92aWRlczpmdW5jdGlvbihlKXt2YXIgdD0hMTtCdC5tYXRjaE1lZGlhJiYodD1CdC5tYXRjaE1lZGlhKGAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKWApLm1hdGNoZXMpLGUubWlzc2luZ0ljb25BYnN0cmFjdD1mdW5jdGlvbigpe3ZhciBlPVtdLG49e2ZpbGw6YGN1cnJlbnRDb2xvcmB9LHI9e2F0dHJpYnV0ZVR5cGU6YFhNTGAscmVwZWF0Q291bnQ6YGluZGVmaW5pdGVgLGR1cjpgMnNgfTtlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se2Q6YE0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHpgfSl9KTt2YXIgaT1XKFcoe30scikse30se2F0dHJpYnV0ZU5hbWU6YG9wYWNpdHlgfSksYT17dGFnOmBjaXJjbGVgLGF0dHJpYnV0ZXM6VyhXKHt9LG4pLHt9LHtjeDpgMjU2YCxjeTpgMzY0YCxyOmAyOGB9KSxjaGlsZHJlbjpbXX07cmV0dXJuIHR8fGEuY2hpbGRyZW4ucHVzaCh7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOlcoVyh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgcmAsdmFsdWVzOmAyODsxNDsyODsyODsxNDsyODtgfSl9LHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHt2YWx1ZXM6YDE7MDsxOzE7MDsxO2B9KX0pLGUucHVzaChhKSxlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se29wYWNpdHk6YDFgLGQ6YE0yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnpgfSksY2hpbGRyZW46dD9bXTpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpXKFcoe30saSkse30se3ZhbHVlczpgMTswOzA7MDswOzE7YH0pfV19KSx0fHxlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se29wYWNpdHk6YDBgLGQ6YE0yMzIuNSwxMzQuNWw3LDE2OGMwLjMsNi40LDUuNiwxMS41LDEyLDExLjVoOWM2LjQsMCwxMS43LTUuMSwxMi0xMS41bDctMTY4YzAuMy02LjgtNS4yLTEyLjUtMTItMTIuNWgtMjMgQzIzNy43LDEyMiwyMzIuMiwxMjcuNywyMzIuNSwxMzQuNXpgfSksY2hpbGRyZW46W3t0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHt2YWx1ZXM6YDA7MDsxOzE7MDswO2B9KX1dfSkse3RhZzpgZ2AsYXR0cmlidXRlczp7Y2xhc3M6YG1pc3NpbmdgfSxjaGlsZHJlbjplfX19fSx7aG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VOb2RlQXR0cmlidXRlczpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKGBkYXRhLWZhLXN5bWJvbGApO3JldHVybiBlLnN5bWJvbD1uPT09bnVsbD8hMTpuPT09YGB8fG4sZX19fX1dLHttaXhvdXRzVG86Sn0pLEoubm9BdXRvO3ZhciBJbz1KLmNvbmZpZztKLmxpYnJhcnksSi5kb207dmFyIExvPUoucGFyc2U7Si5maW5kSWNvbkRlZmluaXRpb24sSi50b0h0bWw7dmFyIFJvPUouaWNvbjtKLmxheWVyO3ZhciB6bz1KLnRleHQ7Si5jb3VudGVyO2Z1bmN0aW9uIEJvKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBWbyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBCbyhlKX1mdW5jdGlvbiBZKGUsdCxuKXtyZXR1cm4odD1Zbyh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBIbyhlKXtpZih0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlW2BAQGl0ZXJhdG9yYF0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gVW8oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gV28oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBYKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XT09bnVsbD97fTphcmd1bWVudHNbdF07dCUyP1dvKE9iamVjdChuKSwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtZKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOldvKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBHbyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPUtvKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiBLbyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIFZvKGUpfHxIbyhlKXx8Wm8oZSl8fFVvKCl9ZnVuY3Rpb24gSm8oZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBZbyhlKXt2YXIgdD1KbyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBYbyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBYbz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sWG8oZSl9ZnVuY3Rpb24gWm8oZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIEJvKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9CbyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gUW8oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WSh7fSxlLHQpOnt9fWZ1bmN0aW9uICRvKGUpe3ZhciB0LG49KHQ9eyJmYS1zcGluIjplLnNwaW4sImZhLXB1bHNlIjplLnB1bHNlLCJmYS1mdyI6ZS5maXhlZFdpZHRoLCJmYS1ib3JkZXIiOmUuYm9yZGVyLCJmYS1saSI6ZS5saXN0SXRlbSwiZmEtaW52ZXJzZSI6ZS5pbnZlcnNlLCJmYS1mbGlwIjplLmZsaXA9PT0hMCwiZmEtZmxpcC1ob3Jpem9udGFsIjplLmZsaXA9PT1gaG9yaXpvbnRhbGB8fGUuZmxpcD09PWBib3RoYCwiZmEtZmxpcC12ZXJ0aWNhbCI6ZS5mbGlwPT09YHZlcnRpY2FsYHx8ZS5mbGlwPT09YGJvdGhgfSxZKFkoWShZKFkoWShZKFkoWShZKHQsYGZhLSR7ZS5zaXplfWAsZS5zaXplIT09bnVsbCksYGZhLXJvdGF0ZS0ke2Uucm90YXRpb259YCxlLnJvdGF0aW9uIT09bnVsbCksYGZhLXJvdGF0ZS1ieWAsZS5yb3RhdGVCeSksYGZhLXB1bGwtJHtlLnB1bGx9YCxlLnB1bGwhPT1udWxsKSxgZmEtc3dhcC1vcGFjaXR5YCxlLnN3YXBPcGFjaXR5KSxgZmEtYm91bmNlYCxlLmJvdW5jZSksYGZhLXNoYWtlYCxlLnNoYWtlKSxgZmEtYmVhdGAsZS5iZWF0KSxgZmEtZmFkZWAsZS5mYWRlKSxgZmEtYmVhdC1mYWRlYCxlLmJlYXRGYWRlKSxZKFkoWShZKFkoWShZKFkoWShZKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFkoWShZKFkoWSh0LGBmYS1zcGluLXNuYXBgLGUuc3BpblNuYXApLGBmYS1zcGluLXNuYXAtNGAsZS5zcGluU25hcDQpLGBmYS1zcGluLXNuYXAtOGAsZS5zcGluU25hcDgpLGBmYS1zd2luZ2AsZS5zd2luZyksYGZhLXdhZ2AsZS53YWcpKTtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP2U6bnVsbH0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfXZhciBlcz10eXBlb2YgZ2xvYmFsVGhpczxgdWA/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PGB1YD93aW5kb3c6dHlwZW9mIGdsb2JhbDxgdWA/Z2xvYmFsOnR5cGVvZiBzZWxmPGB1YD9zZWxmOnt9LHRzPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyKXtpZighbCh0KXx8ZCh0KXx8Zih0KXx8cCh0KXx8Yyh0KSlyZXR1cm4gdDt2YXIgaSxhPTAsbz0wO2lmKHUodCkpZm9yKGk9W10sbz10Lmxlbmd0aDthPG87YSsrKWkucHVzaChuKGUsdFthXSxyKSk7ZWxzZSBmb3IodmFyIHMgaW4gaT17fSx0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHMpJiYoaVtlKHMscildPW4oZSx0W3NdLHIpKTtyZXR1cm4gaX0scj1mdW5jdGlvbihlLHQpe3R8fD17fTt2YXIgbj10LnNlcGFyYXRvcnx8YF9gLHI9dC5zcGxpdHx8Lyg/PVtBLVpdKS87cmV0dXJuIGUuc3BsaXQocikuam9pbihuKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbShlKT9lOihlPWUucmVwbGFjZSgvW1wtX1xzXSsoLik/L2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD90LnRvVXBwZXJDYXNlKCk6YGB9KSxlLnN1YnN0cigwLDEpLnRvTG93ZXJDYXNlKCkrZS5zdWJzdHIoMSkpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSk7cmV0dXJuIHQuc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbz1mdW5jdGlvbihlLHQpe3JldHVybiByKGUsdCkudG9Mb3dlckNhc2UoKX0scz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09T2JqZWN0KGUpfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IEFycmF5XWB9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgRGF0ZV1gfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IFJlZ0V4cF1gfSxwPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IEJvb2xlYW5dYH0sbT1mdW5jdGlvbihlKXtyZXR1cm4gZS09MCxlPT09ZX0saD1mdW5jdGlvbihlLHQpe3ZhciBuPXQmJmBwcm9jZXNzYGluIHQ/dC5wcm9jZXNzOnQ7cmV0dXJuIHR5cGVvZiBuPT1gZnVuY3Rpb25gP2Z1bmN0aW9uKHQscil7cmV0dXJuIG4odCxlLHIpfTplfSxnPXtjYW1lbGl6ZTppLGRlY2FtZWxpemU6byxwYXNjYWxpemU6YSxkZXBhc2NhbGl6ZTpvLGNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgoaSx0KSxlKX0sZGVjYW1lbGl6ZUtleXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihoKG8sdCksZSx0KX0scGFzY2FsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgoYSx0KSxlKX0sZGVwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjYW1lbGl6ZUtleXMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07ZS5leHBvcnRzP2UuZXhwb3J0cz1nOnQuaHVtcHM9Z30pKGVzKX0pKHRzKTt2YXIgbnM9dHMuZXhwb3J0cyxycz1bYGdyYWRpZW50RmlsbGBdLGlzPVtgY2xhc3NgLGBzdHlsZWBdLGFzPVtgdHlwZWAsYHN0b3BzYCxgaWRgXTtmdW5jdGlvbiBvcyhlKXtyZXR1cm4gZS5zcGxpdChgO2ApLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmluZGV4T2YoYDpgKSxyPW5zLmNhbWVsaXplKHQuc2xpY2UoMCxuKSk7cmV0dXJuIGVbcl09dC5zbGljZShuKzEpLnRyaW0oKSxlfSx7fSl9ZnVuY3Rpb24gc3MoZSl7cmV0dXJuIGUuc3BsaXQoL1xzKy8pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPSEwLGV9LHt9KX1mdW5jdGlvbiBjcyhlLHQpe3JldHVybiBsKGBzdG9wYCxYKHtrZXk6YCR7dH0tJHtlLm9mZnNldH1gLG9mZnNldDplLm9mZnNldCwic3RvcC1jb2xvciI6ZS5jb2xvcn0sZS5vcGFjaXR5IT09dm9pZCAwJiZ7InN0b3Atb3BhY2l0eSI6ZS5vcGFjaXR5fSkpfWZ1bmN0aW9uIGxzKGUpe2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTt2YXIgdD0oZS5jaGlsZHJlbnx8W10pLm1hcChscyk7cmV0dXJuIGUudGFnPT09YHBhdGhgJiZlLmF0dHJpYnV0ZXMmJmBmaWxsYGluIGUuYXR0cmlidXRlcz9YKFgoe30sZSkse30se2F0dHJpYnV0ZXM6WChYKHt9LGUuYXR0cmlidXRlcykse30se2ZpbGw6dm9pZCAwfSksY2hpbGRyZW46dH0pOlgoWCh7fSxlKSx7fSx7Y2hpbGRyZW46dH0pfWZ1bmN0aW9uIHVzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHI9dC5ncmFkaWVudEZpbGwsaT1yPT09dm9pZCAwP251bGw6cixhPUdvKHQscnMpLG89aXx8YGZpbGxgaW4gbj9scyhlKTplLHM9KG8uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHVzKGUse30se30pfSksYz1PYmplY3Qua2V5cyhvLmF0dHJpYnV0ZXN8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmF0dHJpYnV0ZXNbdF07c3dpdGNoKHQpe2Nhc2VgY2xhc3NgOmUuY2xhc3M9c3Mobik7YnJlYWs7Y2FzZWBzdHlsZWA6ZS5zdHlsZT1vcyhuKTticmVhaztkZWZhdWx0OmUuYXR0cnNbdF09bn1yZXR1cm4gZX0se2F0dHJzOnt9LGNsYXNzOnt9LHN0eWxlOnt9fSk7bi5jbGFzczt2YXIgdT1uLnN0eWxlLGQ9dT09PXZvaWQgMD97fTp1LGY9R28obixpcyk7aWYoaSYmaS5pZCYmKGkudHlwZT09PWBsaW5lYXJgfHxpLnR5cGU9PT1gcmFkaWFsYCkpe3ZhciBwPWkudHlwZSxtPWkuc3RvcHMsaD1tPT09dm9pZCAwP1tdOm0sZz1pLmlkLF89R28oaSxhcyksdj1sKHA9PT1gbGluZWFyYD9gbGluZWFyR3JhZGllbnRgOmByYWRpYWxHcmFkaWVudGAsWChYKHt9LF8pLHt9LHtpZDpnfSksaC5tYXAoY3MpKTtyZXR1cm4gbChvLnRhZyxYKFgoWChYKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOlgoWCh7fSxjLnN0eWxlKSxkKX0sYy5hdHRycyksZikse30se2ZpbGw6YHVybCgjJHtnfSlgfSksW3ZdLmNvbmNhdChxbyhzKSkpfXJldHVybiBsKGUudGFnLFgoWChYKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOlgoWCh7fSxjLnN0eWxlKSxkKX0sYy5hdHRycyksZikscyl9dmFyIGRzPSExO3RyeXtkcz0hMH1jYXRjaHt9ZnVuY3Rpb24gZnMoKXtpZighZHMmJmNvbnNvbGUmJnR5cGVvZiBjb25zb2xlLmVycm9yPT1gZnVuY3Rpb25gKXt2YXIgZTsoZT1jb25zb2xlKS5lcnJvci5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHBzKGUpe2lmKGUmJlhvKGUpPT09YG9iamVjdGAmJmUucHJlZml4JiZlLmljb25OYW1lJiZlLmljb24pcmV0dXJuIGU7aWYoTG8uaWNvbilyZXR1cm4gTG8uaWNvbihlKTtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZihYbyhlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm4gZTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpcmV0dXJue3ByZWZpeDplWzBdLGljb25OYW1lOmVbMV19O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm57cHJlZml4OmBmYXNgLGljb25OYW1lOmV9fXZhciBtcz1IKHtuYW1lOmBGb250QXdlc29tZUljb25gLHByb3BzOntib3JkZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmaXhlZFdpZHRoOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxpcDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITEsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVyblshMCwhMSxgaG9yaXpvbnRhbGAsYHZlcnRpY2FsYCxgYm90aGBdLmluZGV4T2YoZSk+LTF9fSxpY29uOnt0eXBlOltPYmplY3QsQXJyYXksU3RyaW5nXSxyZXF1aXJlZDohMH0sbWFzazp7dHlwZTpbT2JqZWN0LEFycmF5LFN0cmluZ10sZGVmYXVsdDpudWxsfSxtYXNrSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0sbGlzdEl0ZW06e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwdWxsOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybltgcmlnaHRgLGBsZWZ0YF0uaW5kZXhPZihlKT4tMX19LHB1bHNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scm90YXRpb246e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuWzkwLDE4MCwyNzBdLmluZGV4T2YoTnVtYmVyLnBhcnNlSW50KGUsMTApKT4tMX19LHJvdGF0ZUJ5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3dhcE9wYWNpdHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybltgMnhzYCxgeHNgLGBzbWAsYGxnYCxgeGxgLGAyeGxgLGAxeGAsYDJ4YCxgM3hgLGA0eGAsYDV4YCxgNnhgLGA3eGAsYDh4YCxgOXhgLGAxMHhgXS5pbmRleE9mKGUpPi0xfX0sc3Bpbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRyYW5zZm9ybTp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpudWxsfSxzeW1ib2w6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSx0aXRsZUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LGludmVyc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxib3VuY2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaGFrZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJlYXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmYWRlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYmVhdEZhZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbGFzaDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5QdWxzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5SZXZlcnNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sd2lkdGhBdXRvOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2FudmFzU3F1YXJlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2FudmFzUm9vbXk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxncmFkaWVudEZpbGw6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlLmlkIT1gc3RyaW5nYHx8IWUuaWQ/KGNvbnNvbGUud2FybihgRm9udEF3ZXNvbWVJY29uOiBncmFkaWVudEZpbGwuaWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKSwhMSk6ZS50eXBlIT09YGxpbmVhcmAmJmUudHlwZSE9PWByYWRpYWxgPyhjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lSWNvbjogZ3JhZGllbnRGaWxsLnR5cGUgbXVzdCBiZSAibGluZWFyIiBvciAicmFkaWFsImApLCExKTohMH19LGZsaXAzNjA6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxidXp6Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxvYXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxqZWxsbzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA4Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3dpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx3YWc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sc2V0dXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmF0dHJzLHI9TChmdW5jdGlvbigpe3JldHVybiBwcyhlLmljb24pfSksaT1MKGZ1bmN0aW9uKCl7cmV0dXJuIFFvKGBjbGFzc2VzYCwkbyhlKSl9KSxhPUwoZnVuY3Rpb24oKXtyZXR1cm4gUW8oYHRyYW5zZm9ybWAsdHlwZW9mIGUudHJhbnNmb3JtPT1gc3RyaW5nYD9Mby50cmFuc2Zvcm0oZS50cmFuc2Zvcm0pOmUudHJhbnNmb3JtKX0pLG89TChmdW5jdGlvbigpe3JldHVybiBRbyhgbWFza2AscHMoZS5tYXNrKSl9KSxzPUwoZnVuY3Rpb24oKXt2YXIgdD1YKFgoWChYKHt9LGkudmFsdWUpLGEudmFsdWUpLG8udmFsdWUpLHt9LHtzeW1ib2w6ZS5zeW1ib2wsbWFza0lkOmUubWFza0lkfSk7cmV0dXJuIHQudGl0bGU9ZS50aXRsZSx0LnRpdGxlSWQ9ZS50aXRsZUlkLFJvKHIudmFsdWUsdCl9KTtEKHMsZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIGZzKGBDb3VsZCBub3QgZmluZCBvbmUgb3IgbW9yZSBpY29uKHMpYCxyLnZhbHVlLG8udmFsdWUpfSx7aW1tZWRpYXRlOiEwfSksZS5ncmFkaWVudEZpbGwmJmUuc3ltYm9sJiZmcyhgZ3JhZGllbnRGaWxsIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBzeW1ib2wgaXMgdHJ1ZSBhbmQgd2lsbCBiZSBpZ25vcmVkYCk7dmFyIGM9TChmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlP3VzKHMudmFsdWUuYWJzdHJhY3RbMF0se2dyYWRpZW50RmlsbDplLnN5bWJvbD9udWxsOmUuZ3JhZGllbnRGaWxsfSxuKTpudWxsfSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMudmFsdWV9fX0pO0goe25hbWU6YEZvbnRBd2Vzb21lTGF5ZXJzYCxwcm9wczp7Zml4ZWRXaWR0aDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxzZXR1cDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc2xvdHMscj1Jby5mYW1pbHlQcmVmaXgsaT1MKGZ1bmN0aW9uKCl7cmV0dXJuW2Ake3J9LWxheWVyc2BdLmNvbmNhdChxbyhlLmZpeGVkV2lkdGg/W2Ake3J9LWZ3YF06W10pKX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBsKGBkaXZgLHtjbGFzczppLnZhbHVlfSxuLmRlZmF1bHQ/bi5kZWZhdWx0KCk6W10pfX19KSxIKHtuYW1lOmBGb250QXdlc29tZUxheWVyc1RleHRgLHByb3BzOnt2YWx1ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpgYH0sdHJhbnNmb3JtOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGNvdW50ZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYGJvdHRvbS1sZWZ0YCxgYm90dG9tLXJpZ2h0YCxgdG9wLWxlZnRgLGB0b3AtcmlnaHRgXS5pbmRleE9mKGUpPi0xfX19LHNldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hdHRycyxyPUlvLmZhbWlseVByZWZpeCxpPUwoZnVuY3Rpb24oKXtyZXR1cm4gUW8oYGNsYXNzZXNgLFtdLmNvbmNhdChxbyhlLmNvdW50ZXI/W2Ake3J9LWxheWVycy1jb3VudGVyYF06W10pLHFvKGUucG9zaXRpb24/W2Ake3J9LWxheWVycy0ke2UucG9zaXRpb259YF06W10pKSl9KSxhPUwoZnVuY3Rpb24oKXtyZXR1cm4gUW8oYHRyYW5zZm9ybWAsdHlwZW9mIGUudHJhbnNmb3JtPT1gc3RyaW5nYD9Mby50cmFuc2Zvcm0oZS50cmFuc2Zvcm0pOmUudHJhbnNmb3JtKX0pLG89TChmdW5jdGlvbigpe3ZhciB0PXpvKGUudmFsdWUudG9TdHJpbmcoKSxYKFgoe30sYS52YWx1ZSksaS52YWx1ZSkpLmFic3RyYWN0O3JldHVybiBlLmNvdW50ZXImJih0WzBdLmF0dHJpYnV0ZXMuY2xhc3M9dFswXS5hdHRyaWJ1dGVzLmNsYXNzLnJlcGxhY2UoYGZhLWxheWVycy10ZXh0YCxgYCkpLHRbMF19KSxzPUwoZnVuY3Rpb24oKXtyZXR1cm4gdXMoby52YWx1ZSx7fSxuKX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlfX19KTt2YXIgaHM9e3ByZWZpeDpgZmFiYCxpY29uTmFtZTpgZ2l0aHViYCxpY29uOls1MTIsNTEyLFtdLGBmMDliYCxgTTIxNi41IDM2Mi41Yy02Ni04LTExMi41LTU1LjUtMTEyLjUtMTE3IDAtMjUgOS01MiAyNC03MC02LjUtMTYuNS01LjUtNTEuNSAyLTY2IDIwLTIuNSA0NyA4IDYzIDIyLjUgMTktNiAzOS05IDYzLjUtOXM0NC41IDMgNjIuNSA4LjVjMTUuNS0xNCA0My0yNC41IDYzLTIyIDcgMTMuNSA4IDQ4LjUgMS41IDY1LjUgMTYgMTkgMjQuNSA0NC41IDI0LjUgNzAuNSAwIDYxLjUtNDYuNSAxMDgtMTEzLjUgMTE2LjUgMTcgMTEgMjguNSAzNSAyOC41IDYyLjVsMCA1MkMzMjMgNDkxLjUgMzM1LjUgNTAwIDM1MC41IDQ5NCA0NDEgNDU5LjUgNTEyIDM2OSA1MTIgMjU3IDUxMiAxMTUuNSAzOTcgMCAyNTUuNSAwUzAgMTE1LjUgMCAyNTdjMCAxMTEgNzAuNSAyMDMgMTY1LjUgMjM3LjUgMTMuNSA1IDI2LjUtNCAyNi41LTE3LjVsMC00MGMtNyAzLTE2IDUtMjQgNS0zMyAwLTUyLjUtMTgtNjYuNS01MS41LTUuNS0xMy41LTExLjUtMjEuNS0yMy0yMy02LS41LTgtMy04LTYgMC02IDEwLTEwLjUgMjAtMTAuNSAxNC41IDAgMjcgOSA0MCAyNy41IDEwIDE0LjUgMjAuNSAyMSAzMyAyMXMyMC41LTQuNSAzMi0xNmM4LjUtOC41IDE1LTE2IDIxLTIxemBdfSxncz1IKHtfX25hbWU6YEFsZXJ0YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sdmFyaWFudDp7fX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KFAoKSx6KGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnRgLGNsYXNzOmR0KEIodykoQih5cykoe3ZhcmlhbnQ6ZS52YXJpYW50fSksdC5jbGFzcykpLHJvbGU6YGFsZXJ0YH0sW04obi4kc2xvdHMsYGRlZmF1bHRgKV0sMikpfX0pLF9zPUgoe19fbmFtZTpgQWxlcnREZXNjcmlwdGlvbmAscHJvcHM6e2NsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oUCgpLHooYGRpdmAseyJkYXRhLXNsb3QiOmBhbGVydC1kZXNjcmlwdGlvbmAsY2xhc3M6ZHQoQih3KShgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20gdGV4dC1iYWxhbmNlIG1kOnRleHQtcHJldHR5IFsmX3A6bm90KDpsYXN0LWNoaWxkKV06bWItNCBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcykpfSxbTihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksdnM9SCh7X19uYW1lOmBBbGVydFRpdGxlYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihQKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGFsZXJ0LXRpdGxlYCxjbGFzczpkdChCKHcpKGBmb250LW1lZGl1bSBncm91cC1oYXMtWz5zdmddL2FsZXJ0OmNvbC1zdGFydC0yIGZvbnQtaGVhZGluZyBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcykpfSxbTihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSkseXM9WGUoYGdyaWQgZ2FwLTAuNSByb3VuZGVkLWxnIGJvcmRlciBweC0yLjUgcHktMiB0ZXh0LWxlZnQgdGV4dC1zbSBoYXMtZGF0YS1bc2xvdD1hbGVydC1hY3Rpb25dOnJlbGF0aXZlIGhhcy1kYXRhLVtzbG90PWFsZXJ0LWFjdGlvbl06cHItMTggaGFzLVs+c3ZnXTpncmlkLWNvbHMtW2F1dG9fMWZyXSBoYXMtWz5zdmddOmdhcC14LTIgKjpbc3ZnXTpyb3ctc3Bhbi0yICo6W3N2Z106dHJhbnNsYXRlLXktMC41ICo6W3N2Z106dGV4dC1jdXJyZW50ICo6W3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTQgZ3JvdXAvYWxlcnQgcmVsYXRpdmUgdy1mdWxsYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLWNhcmQgdGV4dC1jYXJkLWZvcmVncm91bmRgLGRlc3RydWN0aXZlOmB0ZXh0LWRlc3RydWN0aXZlIGJnLWNhcmQgKjpkYXRhLVtzbG90PWFsZXJ0LWRlc2NyaXB0aW9uXTp0ZXh0LWRlc3RydWN0aXZlLzkwICo6W3N2Z106dGV4dC1jdXJyZW50YCx3YXJuOmB0ZXh0LXN0YXR1cy13YXJuIGJnLWNhcmQgKjpkYXRhLVtzbG90PWFsZXJ0LWRlc2NyaXB0aW9uXTp0ZXh0LXN0YXR1cy13YXJuLzkwICo6W3N2Z106dGV4dC1jdXJyZW50YH19LGRlZmF1bHRWYXJpYW50czp7dmFyaWFudDpgZGVmYXVsdGB9fSk7ZnVuY3Rpb24gYnMoZSl7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYD9gJyR7ZX0nYDpuZXcgd3MoKS5zZXJpYWxpemUoZSl9dmFyIHhzPWAgXy0sOzohPy4nIigpW117fUAqL1xcJiMlXGBeKzw9Pnx+JDAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emAsU3M9KGZ1bmN0aW9uKCl7bGV0IGU9bmV3IFVpbnQ4QXJyYXkoMTI4KTtmb3IobGV0IHQ9MDt0PDY5O3QrKyllW3hzLmNoYXJDb2RlQXQodCldPXQrMTtmb3IobGV0IHQ9NjU7dDw9OTA7dCsrKWVbdF09ZVt0KzMyXTtyZXR1cm4gZX0pKCk7ZnVuY3Rpb24gQ3MoZSx0KXtpZihlPT09dClyZXR1cm4gMDtsZXQgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCkscj0wO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBuPWUuY2hhckNvZGVBdChpKSxhPXQuY2hhckNvZGVBdChpKTtpZihuPT09YSljb250aW51ZTtsZXQgbz1uPDEyOCYmU3Nbbl0/U3Nbbl06bisxMjgscz1hPDEyOCYmU3NbYV0/U3NbYV06YSsxMjg7aWYobyE9PXMpcmV0dXJuIG88cz8tMToxO3I9PT0wJiYocj1uPmE/LTE6MSl9cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGg/cjplLmxlbmd0aDx0Lmxlbmd0aD8tMToxfXZhciB3cz0oZnVuY3Rpb24oKXtjbGFzcyBleyNlPW5ldyBNYXA7Y29tcGFyZShlLHQpe2xldCBuPXR5cGVvZiBlLHI9dHlwZW9mIHQ7cmV0dXJuIG49PT1gc3RyaW5nYCYmcj09PWBzdHJpbmdgP0NzKGUsdCk6bj09PWBudW1iZXJgJiZyPT09YG51bWJlcmA/ZS10OkNzKHRoaXMuc2VyaWFsaXplKGUsITApLHRoaXMuc2VyaWFsaXplKHQsITApKX1zZXJpYWxpemUoZSx0KXtpZihlPT09bnVsbClyZXR1cm5gbnVsbGA7c3dpdGNoKHR5cGVvZiBlKXtjYXNlYHN0cmluZ2A6cmV0dXJuIHQ/ZTpgJyR7ZX0nYDtjYXNlYGJpZ2ludGA6cmV0dXJuYCR7ZX1uYDtjYXNlYG9iamVjdGA6cmV0dXJuIHRoaXMuJG9iamVjdChlKTtjYXNlYGZ1bmN0aW9uYDpyZXR1cm4gdGhpcy4kZnVuY3Rpb24oZSl9cmV0dXJuIFN0cmluZyhlKX1zZXJpYWxpemVPYmplY3QoZSl7bGV0IHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO2lmKHQhPT1gW29iamVjdCBPYmplY3RdYClyZXR1cm4gdGhpcy5zZXJpYWxpemVCdWlsdEluVHlwZSh0Lmxlbmd0aDwxMD9gdW5rbm93bjoke3R9YDp0LnNsaWNlKDgsLTEpLGUpO2xldCBuPWUuY29uc3RydWN0b3Iscj1uPT09T2JqZWN0fHxuPT09dm9pZCAwP2BgOm4ubmFtZTtpZihyIT09YGAmJmdsb2JhbFRoaXNbcl09PT1uKXJldHVybiB0aGlzLnNlcmlhbGl6ZUJ1aWx0SW5UeXBlKHIsZSk7aWYoYHRvSlNPTmBpbiBlJiZ0eXBlb2YgZS50b0pTT049PWBmdW5jdGlvbmApe2xldCB0PWUudG9KU09OKCk7cmV0dXJuIHIrKHR5cGVvZiB0PT1gb2JqZWN0YCYmdD90aGlzLiRvYmplY3QodCk6YCgke3RoaXMuc2VyaWFsaXplKHQpfSlgKX1sZXQgaT1PYmplY3Qua2V5cyhlKS5zb3J0KENzKSxhPWAke3J9e2A7Zm9yKGxldCB0PTA7dDxpLmxlbmd0aDt0Kyspe2xldCBuPWlbdF07YSs9YCR7bn06JHt0aGlzLnNlcmlhbGl6ZShlW25dKX1gLHQ8aS5sZW5ndGgtMSYmKGErPWAsYCl9cmV0dXJuIGErYH1gfXNlcmlhbGl6ZUJ1aWx0SW5UeXBlKGUsdCl7bGV0IG49dGhpc1tgJGArZV07aWYobilyZXR1cm4gbi5jYWxsKHRoaXMsdCk7aWYodHlwZW9mIHQuZW50cmllcz09YGZ1bmN0aW9uYClyZXR1cm4gdGhpcy5zZXJpYWxpemVPYmplY3RFbnRyaWVzKGUsdC5lbnRyaWVzKCkpO3Rocm93IEVycm9yKGBDYW5ub3Qgc2VyaWFsaXplICR7ZX1gKX1zZXJpYWxpemVPYmplY3RFbnRyaWVzKGUsdCl7bGV0IG49QXJyYXkuZnJvbSh0KS5zb3J0KChlLHQpPT50aGlzLmNvbXBhcmUoZVswXSx0WzBdKSkscj1gJHtlfXtgO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXRbdCxpXT1uW2VdO3IrPWAke3RoaXMuc2VyaWFsaXplKHQsITApfToke3RoaXMuc2VyaWFsaXplKGkpfWAsZTxuLmxlbmd0aC0xJiYocis9YCxgKX1yZXR1cm4gcitgfWB9JG9iamVjdChlKXtsZXQgdD10aGlzLiNlLmdldChlKTtyZXR1cm4gdD09PXZvaWQgMCYmKHRoaXMuI2Uuc2V0KGUsYCMke3RoaXMuI2Uuc2l6ZX1gKSx0PXRoaXMuc2VyaWFsaXplT2JqZWN0KGUpLHRoaXMuI2Uuc2V0KGUsdCkpLHR9JGZ1bmN0aW9uKGUpe2xldCB0PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO3JldHVybiB0LnNsaWNlKC0xNSk9PT1gW25hdGl2ZSBjb2RlXSB9YD9gJHtlLm5hbWV8fGBgfSgpW25hdGl2ZV1gOmAke2UubmFtZX0oJHtlLmxlbmd0aH0pJHt0LnJlcGxhY2UoL1xzKlxuXHMqL2csYGApfWB9JEFycmF5KGUpe2xldCB0PWBbYDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0Kz10aGlzLnNlcmlhbGl6ZShlW25dKSxuPGUubGVuZ3RoLTEmJih0Kz1gLGApO3JldHVybiB0K2BdYH0kRGF0ZShlKXt0cnl7cmV0dXJuYERhdGUoJHtlLnRvSVNPU3RyaW5nKCl9KWB9Y2F0Y2h7cmV0dXJuYERhdGUobnVsbClgfX0kQXJyYXlCdWZmZXIoZSl7cmV0dXJuYEFycmF5QnVmZmVyWyR7bmV3IFVpbnQ4QXJyYXkoZSkuam9pbihgLGApfV1gfSRTZXQoZSl7cmV0dXJuYFNldCR7dGhpcy4kQXJyYXkoQXJyYXkuZnJvbShlKS5zb3J0KChlLHQpPT50aGlzLmNvbXBhcmUoZSx0KSkpfWB9JE1hcChlKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVPYmplY3RFbnRyaWVzKGBNYXBgLGUuZW50cmllcygpKX19Zm9yKGxldCB0IG9mW2BFcnJvcmAsYFJlZ0V4cGAsYFVSTGBdKWUucHJvdG90eXBlW2AkYCt0XT1mdW5jdGlvbihlKXtyZXR1cm5gJHt0fSgke2V9KWB9O2ZvcihsZXQgdCBvZltgSW50OEFycmF5YCxgVWludDhBcnJheWAsYFVpbnQ4Q2xhbXBlZEFycmF5YCxgSW50MTZBcnJheWAsYFVpbnQxNkFycmF5YCxgSW50MzJBcnJheWAsYFVpbnQzMkFycmF5YCxgRmxvYXQzMkFycmF5YCxgRmxvYXQ2NEFycmF5YF0pZS5wcm90b3R5cGVbYCRgK3RdPWZ1bmN0aW9uKGUpe3JldHVybmAke3R9WyR7ZS5qb2luKGAsYCl9XWB9O2ZvcihsZXQgdCBvZltgQmlnSW50NjRBcnJheWAsYEJpZ1VpbnQ2NEFycmF5YF0pZS5wcm90b3R5cGVbYCRgK3RdPWZ1bmN0aW9uKGUpe3JldHVybmAke3R9WyR7ZS5qb2luKGBuLGApfSR7ZS5sZW5ndGg+MD9gbmA6YGB9XWB9O3JldHVybiBlfSkoKTtmdW5jdGlvbiBUcyhlLHQpe3JldHVybiBlPT09dHx8YnMoZSk9PT1icyh0KX1mdW5jdGlvbiBFcyhlLHQ9LTEvMCxuPTEvMCl7cmV0dXJuIE1hdGgubWluKG4sTWF0aC5tYXgodCxlKSl9ZnVuY3Rpb24gWigpe2xldCBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtmb3IoO2UhPW51bGwmJmUuc2hhZG93Um9vdCE9bnVsbCYmZS5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQhPW51bGw7KWU9ZS5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gRHMoZSx0LG4pe2xldCByPW4ub3JpZ2luYWxFdmVudC50YXJnZXQsaT1uZXcgQ3VzdG9tRXZlbnQoZSx7YnViYmxlczohMSxjYW5jZWxhYmxlOiEwLGRldGFpbDpufSk7dCYmci5hZGRFdmVudExpc3RlbmVyKGUsdCx7b25jZTohMH0pLHIuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBPcyhlKXtyZXR1cm4gZT09bnVsbH12YXIgUT1xZSh7bGF5ZXJzUm9vdDpuZXcgU2V0LGxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkOm5ldyBTZXQsb3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50czp2b2lkIDAsYnJhbmNoZXM6bmV3IFNldH0pO2Z1bmN0aW9uIGtzKGUpe2lmKHR5cGVvZiBlIT1gb2JqZWN0YHx8IWUpcmV0dXJuITE7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IT09bnVsbCYmdCE9PU9iamVjdC5wcm90b3R5cGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PW51bGx8fFN5bWJvbC5pdGVyYXRvciBpbiBlPyExOlN5bWJvbC50b1N0cmluZ1RhZyBpbiBlP09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PWBbb2JqZWN0IE1vZHVsZV1gOiEwfWZ1bmN0aW9uIEFzKGUsdCxuPWAuYCxyKXtpZigha3ModCkpcmV0dXJuIEFzKGUse30sbixyKTtsZXQgaT17Li4udH07Zm9yKGxldCB0IG9mIE9iamVjdC5rZXlzKGUpKXtpZih0PT09YF9fcHJvdG9fX2B8fHQ9PT1gY29uc3RydWN0b3JgKWNvbnRpbnVlO2xldCBhPWVbdF07YSE9bnVsbCYmKHImJnIoaSx0LGEsbil8fChpW3RdPUFycmF5LmlzQXJyYXkoYSkmJkFycmF5LmlzQXJyYXkoaVt0XSk/Wy4uLmEsLi4uaVt0XV06a3MoYSkmJmtzKGlbdF0pP0FzKGEsaVt0XSwobj9gJHtufS5gOmBgKSt0LnRvU3RyaW5nKCkscik6YSkpfXJldHVybiBpfWZ1bmN0aW9uIGpzKGUpe3JldHVybiguLi50KT0+dC5yZWR1Y2UoKHQsbik9PkFzKHQsbixgYCxlKSx7fSl9dmFyIE1zPWpzKCksTnM9dSgoKT0+e2xldCBlPWoobmV3IE1hcCksdD1qKCksbj1MKCgpPT57Zm9yKGxldCB0IG9mIGUudmFsdWUudmFsdWVzKCkpaWYodClyZXR1cm4hMDtyZXR1cm4hMX0pLGk9cih7c2Nyb2xsQm9keTpqKCEwKX0pLGE9bnVsbCxvPSgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9YGAsZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5SaWdodD1gYCxRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPWBgKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz10LnZhbHVlPz9gYCxiJiZhPy4oKSx0LnZhbHVlPXZvaWQgMH07cmV0dXJuIEQobiwoZSxyKT0+e2lmKCFtZSlyZXR1cm47aWYoIWUpe3ImJm8oKTtyZXR1cm59dC52YWx1ZT09PXZvaWQgMCYmKHQudmFsdWU9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyk7bGV0IHM9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGM9e3BhZGRpbmc6cyxtYXJnaW46MH0sbD1pLnNjcm9sbEJvZHk/LnZhbHVlP3R5cGVvZiBpLnNjcm9sbEJvZHkudmFsdWU9PWBvYmplY3RgP01zKHtwYWRkaW5nOmkuc2Nyb2xsQm9keS52YWx1ZS5wYWRkaW5nPT09ITA/czppLnNjcm9sbEJvZHkudmFsdWUucGFkZGluZyxtYXJnaW46aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbj09PSEwP3M6aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbn0sYyk6Yzp7cGFkZGluZzowLG1hcmdpbjowfTtzPjAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10eXBlb2YgbC5wYWRkaW5nPT1gbnVtYmVyYD9gJHtsLnBhZGRpbmd9cHhgOlN0cmluZyhsLnBhZGRpbmcpLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9dHlwZW9mIGwubWFyZ2luPT1gbnVtYmVyYD9gJHtsLm1hcmdpbn1weGA6U3RyaW5nKGwubWFyZ2luKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCxgJHtzfXB4YCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1gaGlkZGVuYCksYiYmKGE9Xyhkb2N1bWVudCxgdG91Y2htb3ZlYCxlPT5JcyhlKSx7cGFzc2l2ZTohMX0pKSx5KCgpPT57bi52YWx1ZSYmKGRvY3VtZW50LmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWAsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1gaGlkZGVuYCl9KX0se2ltbWVkaWF0ZTohMCxmbHVzaDpgc3luY2B9KSxlfSk7ZnVuY3Rpb24gUHMoZSl7bGV0IHQ9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsNyksbj1OcygpO24udmFsdWUuc2V0KHQsZT8/ITEpO2xldCByPUwoe2dldDooKT0+bi52YWx1ZS5nZXQodCk/PyExLHNldDplPT5uLnZhbHVlLnNldCh0LGUpfSk7cmV0dXJuIHYoKCk9PntuLnZhbHVlLmRlbGV0ZSh0KX0pLHJ9ZnVuY3Rpb24gRnMoZSl7bGV0IHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7aWYodC5vdmVyZmxvd1g9PT1gc2Nyb2xsYHx8dC5vdmVyZmxvd1k9PT1gc2Nyb2xsYHx8dC5vdmVyZmxvd1g9PT1gYXV0b2AmJmUuY2xpZW50V2lkdGg8ZS5zY3JvbGxXaWR0aHx8dC5vdmVyZmxvd1k9PT1gYXV0b2AmJmUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0KXJldHVybiEwO3tsZXQgdD1lLnBhcmVudE5vZGU7cmV0dXJuISh0IGluc3RhbmNlb2YgRWxlbWVudCl8fHQudGFnTmFtZT09PWBCT0RZYD8hMTpGcyh0KX19ZnVuY3Rpb24gSXMoZSl7bGV0IHQ9ZXx8d2luZG93LmV2ZW50LG49dC50YXJnZXQ7cmV0dXJuIG4gaW5zdGFuY2VvZiBFbGVtZW50JiZGcyhuKT8hMTp0LnRvdWNoZXMubGVuZ3RoPjF8fCh0LnByZXZlbnREZWZhdWx0JiZ0LmNhbmNlbGFibGUmJnQucHJldmVudERlZmF1bHQoKSwhMSl9dmFyIExzPTA7ZnVuY3Rpb24gUnMoKXtPKGU9PntpZighbWUpcmV0dXJuO2xldCB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtZm9jdXMtZ3VhcmRdYCk7ZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoYGFmdGVyYmVnaW5gLHRbMF0/P3pzKCkpLGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGBiZWZvcmVlbmRgLHRbMV0/P3pzKCkpLExzKyssZSgoKT0+e0xzPT09MSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcmVrYS1mb2N1cy1ndWFyZF1gKS5mb3JFYWNoKGU9PmUucmVtb3ZlKCkpLExzLS19KX0pfWZ1bmN0aW9uIHpzKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgc3BhbmApO3JldHVybiBlLnNldEF0dHJpYnV0ZShgZGF0YS1yZWthLWZvY3VzLWd1YXJkYCxgYCksZS50YWJJbmRleD0wLGUuc3R5bGUub3V0bGluZT1gbm9uZWAsZS5zdHlsZS5vcGFjaXR5PWAwYCxlLnN0eWxlLnBvc2l0aW9uPWBmaXhlZGAsZS5zdHlsZS5wb2ludGVyRXZlbnRzPWBub25lYCxlfWZ1bmN0aW9uIEJzKGUpe3JldHVybiBMKCgpPT4hamUoZSl8fCEhcmUoZSk/LmNsb3Nlc3QoYGZvcm1gKSl9dmFyIFZzPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ+YHVgP251bGw6KEFycmF5LmlzQXJyYXkoZSk/ZVswXTplKS5vd25lckRvY3VtZW50LmJvZHl9LEhzPW5ldyBXZWFrTWFwLFVzPW5ldyBXZWFrTWFwLFdzPXt9LEdzPTAsS3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihlLmhvc3R8fEtzKGUucGFyZW50Tm9kZSkpfSxxcz1mdW5jdGlvbihlLHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtpZihlLmNvbnRhaW5zKHQpKXJldHVybiB0O3ZhciBuPUtzKHQpO3JldHVybiBuJiZlLmNvbnRhaW5zKG4pP246KGNvbnNvbGUuZXJyb3IoYGFyaWEtaGlkZGVuYCx0LGBpbiBub3QgY29udGFpbmVkIGluc2lkZWAsZSxgLiBEb2luZyBub3RoaW5nYCksbnVsbCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISFlfSl9LEpzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXFzKHQsQXJyYXkuaXNBcnJheShlKT9lOltlXSk7V3Nbbl18fChXc1tuXT1uZXcgV2Vha01hcCk7dmFyIGE9V3Nbbl0sbz1bXSxzPW5ldyBTZXQsYz1uZXcgU2V0KGkpLGw9ZnVuY3Rpb24oZSl7IWV8fHMuaGFzKGUpfHwocy5hZGQoZSksbChlLnBhcmVudE5vZGUpKX07aS5mb3JFYWNoKGwpO3ZhciB1PWZ1bmN0aW9uKGUpeyFlfHxjLmhhcyhlKXx8QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLmNoaWxkcmVuLGZ1bmN0aW9uKGUpe2lmKHMuaGFzKGUpKXUoZSk7ZWxzZSB0cnl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUociksaT10IT09bnVsbCYmdCE9PWBmYWxzZWAsYz0oSHMuZ2V0KGUpfHwwKSsxLGw9KGEuZ2V0KGUpfHwwKSsxO0hzLnNldChlLGMpLGEuc2V0KGUsbCksby5wdXNoKGUpLGM9PT0xJiZpJiZVcy5zZXQoZSwhMCksbD09PTEmJmUuc2V0QXR0cmlidXRlKG4sYHRydWVgKSxpfHxlLnNldEF0dHJpYnV0ZShyLGB0cnVlYCl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcihgYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uIGAsZSx0KX19KX07cmV0dXJuIHUodCkscy5jbGVhcigpLEdzKyssZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9SHMuZ2V0KGUpLTEsaT1hLmdldChlKS0xO0hzLnNldChlLHQpLGEuc2V0KGUsaSksdHx8KFVzLmhhcyhlKXx8ZS5yZW1vdmVBdHRyaWJ1dGUociksVXMuZGVsZXRlKGUpKSxpfHxlLnJlbW92ZUF0dHJpYnV0ZShuKX0pLEdzLS0sR3N8fChIcz1uZXcgV2Vha01hcCxIcz1uZXcgV2Vha01hcCxVcz1uZXcgV2Vha01hcCxXcz17fSl9fSxZcz1mdW5jdGlvbihlLHQsbil7bj09PXZvaWQgMCYmKG49YGRhdGEtYXJpYS1oaWRkZW5gKTt2YXIgcj1BcnJheS5mcm9tKEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLGk9dHx8VnMoZSk7cmV0dXJuIGk/KHIucHVzaC5hcHBseShyLEFycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpYS1saXZlXSwgc2NyaXB0YCkpKSxKcyhyLGksbixgYXJpYS1oaWRkZW5gKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIFhzKGUpe2xldCB0O0QoKCk9PnJlKGUpLGU9PntsZXQgbj0hMTt0cnl7bj0hIWU/LmNsb3Nlc3QoYFtwb3BvdmVyXTpub3QoOnBvcG92ZXItb3BlbilgKX1jYXRjaHt9ZSYmIW4/dD1ZcyhlKTp0JiZ0KCl9KSxHZSgoKT0+e3QmJnQoKX0pfWZ1bmN0aW9uIFpzKGUpe2xldCB0PWooKSxuPUwoKCk9PnQudmFsdWU/LndpZHRoPz8wKSxyPUwoKCk9PnQudmFsdWU/LmhlaWdodD8/MCksaTtyZXR1cm4gb2UoKCk9PntsZXQgbj1yZShlKTtuPyh0LnZhbHVlPXt3aWR0aDpuLm9mZnNldFdpZHRoLGhlaWdodDpuLm9mZnNldEhlaWdodH0saT1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2lmKCFBcnJheS5pc0FycmF5KGUpfHwhZS5sZW5ndGgpcmV0dXJuO2xldCByPWVbMF0saSxhO2lmKGBib3JkZXJCb3hTaXplYGluIHIpe2xldCBlPXIuYm9yZGVyQm94U2l6ZSx0PUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO2k9dC5pbmxpbmVTaXplLGE9dC5ibG9ja1NpemV9ZWxzZSBpPW4ub2Zmc2V0V2lkdGgsYT1uLm9mZnNldEhlaWdodDt0LnZhbHVlPXt3aWR0aDppLGhlaWdodDphfX0pLGkub2JzZXJ2ZShuLHtib3g6YGJvcmRlci1ib3hgfSkpOnQudmFsdWU9dm9pZCAwfSksR2UoKCk9PntpPy5kaXNjb25uZWN0KCksaT12b2lkIDB9KSx7d2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gUXMoZSx0KXtsZXQgbj1qKGUpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHRbbi52YWx1ZV1bZV0/P24udmFsdWV9cmV0dXJue3N0YXRlOm4sZGlzcGF0Y2g6ZT0+e24udmFsdWU9cihlKX19fWZ1bmN0aW9uICRzKGUpe2xldCB0PWdlKGBgLDFlMyk7cmV0dXJue3NlYXJjaDp0LGhhbmRsZVR5cGVhaGVhZFNlYXJjaDoobixyKT0+e2lmKHQudmFsdWUrPW4sZSllKG4pO2Vsc2V7bGV0IGU9WigpLG49ci5tYXAoZT0+KHsuLi5lLHRleHRWYWx1ZTplLnZhbHVlPy50ZXh0VmFsdWU/P2UucmVmLnRleHRDb250ZW50Py50cmltKCk/P2BgfSkpLGk9bi5maW5kKHQ9PnQucmVmPT09ZSksYT10YyhuLm1hcChlPT5lLnRleHRWYWx1ZSksdC52YWx1ZSxpPy50ZXh0VmFsdWUpLG89bi5maW5kKGU9PmUudGV4dFZhbHVlPT09YSk7cmV0dXJuIG8mJm8ucmVmLmZvY3VzKCksbz8ucmVmfX0scmVzZXRUeXBlYWhlYWQ6KCk9Pnt0LnZhbHVlPWBgfX19ZnVuY3Rpb24gZWMoZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX1mdW5jdGlvbiB0YyhlLHQsbil7bGV0IHI9dC5sZW5ndGg+MSYmQXJyYXkuZnJvbSh0KS5ldmVyeShlPT5lPT09dFswXSk/dFswXTp0LGk9bj9lLmluZGV4T2Yobik6LTEsYT1lYyhlLE1hdGgubWF4KGksMCkpO3IubGVuZ3RoPT09MSYmKGE9YS5maWx0ZXIoZT0+ZSE9PW4pKTtsZXQgbz1hLmZpbmQoZT0+ZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoci50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIG89PT1uP3ZvaWQgMDpvfWZ1bmN0aW9uIG5jKGUsdCl7bGV0IG49aih7fSkscj1qKGBub25lYCksaT1qKGUpLGE9ZS52YWx1ZT9gbW91bnRlZGA6YHVubW91bnRlZGAsbyxzPXQudmFsdWU/Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/P2VlLHtzdGF0ZTpjLGRpc3BhdGNoOmx9PVFzKGEse21vdW50ZWQ6e1VOTU9VTlQ6YHVubW91bnRlZGAsQU5JTUFUSU9OX09VVDpgdW5tb3VudFN1c3BlbmRlZGB9LHVubW91bnRTdXNwZW5kZWQ6e01PVU5UOmBtb3VudGVkYCxBTklNQVRJT05fRU5EOmB1bm1vdW50ZWRgfSx1bm1vdW50ZWQ6e01PVU5UOmBtb3VudGVkYH19KSx1PWU9PntpZihtZSl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KGUse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pO3QudmFsdWU/LmRpc3BhdGNoRXZlbnQobil9fTtEKGUsYXN5bmMoZSxpKT0+e2xldCBhPWkhPT1lO2lmKGF3YWl0IHkoKSxhKXtsZXQgYT1yLnZhbHVlLG89cmModC52YWx1ZSk7ZT8obChgTU9VTlRgKSx1KGBlbnRlcmApLG89PT1gbm9uZWAmJnUoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8obChgVU5NT1VOVGApLHUoYGxlYXZlYCksdShgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGwoYEFOSU1BVElPTl9PVVRgKSx1KGBsZWF2ZWApKToobChgVU5NT1VOVGApLHUoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBkPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPXJjKHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9Yy52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKHUoYGFmdGVyLSR7YX1gKSxsKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmbChgQU5JTUFUSU9OX0VORGApfSxmPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPXJjKHQudmFsdWUpKX0scD1EKHQsKGUsdCk9PntlPyhuLnZhbHVlPWdldENvbXB1dGVkU3R5bGUoZSksZS5hZGRFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsZiksZS5hZGRFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLGQpLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSk6KGwoYEFOSU1BVElPTl9FTkRgKSxvIT09dm9pZCAwJiZzPy5jbGVhclRpbWVvdXQobyksdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmNhbmNlbGAsZCksdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxkKSl9LHtpbW1lZGlhdGU6ITB9KSxtPUQoYywoKT0+e2xldCBlPXJjKHQudmFsdWUpO3IudmFsdWU9Yy52YWx1ZT09PWBtb3VudGVkYD9lOmBub25lYH0pO3JldHVybiBHZSgoKT0+e3AoKSxtKCksdC52YWx1ZSYmKHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLGYpLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxkKSx0LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAsZCkpLG8hPT12b2lkIDAmJnM/LmNsZWFyVGltZW91dChvKX0pLHtpc1ByZXNlbnQ6TCgoKT0+W2Btb3VudGVkYCxgdW5tb3VudFN1c3BlbmRlZGBdLmluY2x1ZGVzKGMudmFsdWUpKX19ZnVuY3Rpb24gcmMoZSl7cmV0dXJuIGUmJmdldENvbXB1dGVkU3R5bGUoZSkuYW5pbWF0aW9uTmFtZXx8YG5vbmVgfXZhciBpYz1IKHtuYW1lOmBQcmVzZW5jZWAscHJvcHM6e3ByZXNlbnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMH0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFufX0sc2xvdHM6e30sc2V0dXAoZSx7c2xvdHM6dCxleHBvc2U6bn0pe2xldHtwcmVzZW50OnIsZm9yY2VNb3VudDppfT1GZShlKSxhPWooKSx7aXNQcmVzZW50Om99PW5jKHIsYSk7bih7cHJlc2VudDpvfSk7bGV0IHM9dC5kZWZhdWx0KHtwcmVzZW50Om8udmFsdWV9KTtzPVJlKHN8fFtdKTtsZXQgYz1oKCk7aWYocyYmcz8ubGVuZ3RoPjEpe2xldCBlPWM/LnBhcmVudD8udHlwZS5uYW1lP2A8JHtjLnBhcmVudC50eXBlLm5hbWV9IC8+YDpgY29tcG9uZW50YDt0aHJvdyBFcnJvcihbYERldGVjdGVkIGFuIGludmFsaWQgY2hpbGRyZW4gZm9yIFxgJHtlfVxgIGZvciAgXGBQcmVzZW5jZVxgIGNvbXBvbmVudC5gLGBgLCJOb3RlOiBQcmVzZW5jZSB3b3JrcyBzaW1pbGFybHkgdG8gYHYtaWZgIGRpcmVjdGx5LCBidXQgaXQgd2FpdHMgZm9yIGFuaW1hdGlvbi90cmFuc2l0aW9uIHRvIGZpbmlzaGVkIGJlZm9yZSB1bm1vdW50aW5nLiBTbyBpdCBleHBlY3Qgb25seSBvbmUgZGlyZWN0IGNoaWxkIG9mIHZhbGlkIFZOb2RlIHR5cGUuIixgWW91IGNhbiBhcHBseSBhIGZldyBzb2x1dGlvbnM6YCxbIlByb3ZpZGUgYSBzaW5nbGUgY2hpbGQgZWxlbWVudCBzbyB0aGF0IGBwcmVzZW5jZWAgZGlyZWN0aXZlIGF0dGFjaCBjb3JyZWN0bHkuIixgRW5zdXJlIHRoZSBmaXJzdCBjaGlsZCBpcyBhbiBhY3R1YWwgZWxlbWVudCBpbnN0ZWFkIG9mIGEgcmF3IHRleHQgbm9kZSBvciBjb21tZW50IG5vZGUuYF0ubWFwKGU9PmAgIC0gJHtlfWApLmpvaW4oYApgKV0uam9pbihgCmApKX1yZXR1cm4oKT0+aS52YWx1ZXx8ci52YWx1ZXx8by52YWx1ZT9sKHQuZGVmYXVsdCh7cHJlc2VudDpvLnZhbHVlfSlbMF0se3JlZjplPT57bGV0IHQ9cmUoZSk7cmV0dXJuIHQ/Lmhhc0F0dHJpYnV0ZT09PXZvaWQgMHx8KHQ/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9hLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6YS52YWx1ZT10KSx0fX0pOm51bGx9fSk7ZnVuY3Rpb24gYWMoKXtsZXQgZT1qKCk7cmV0dXJue3ByaW1pdGl2ZUVsZW1lbnQ6ZSxjdXJyZW50RWxlbWVudDpMKCgpPT5bYCN0ZXh0YCxgI2NvbW1lbnRgXS5pbmNsdWRlcyhlLnZhbHVlPy4kZWwubm9kZU5hbWUpP2UudmFsdWU/LiRlbC5uZXh0RWxlbWVudFNpYmxpbmc6cmUoZSkpfX12YXIgb2M9YGRpc21pc3NhYmxlTGF5ZXIucG9pbnRlckRvd25PdXRzaWRlYCxzYz1gZGlzbWlzc2FibGVMYXllci5mb2N1c091dHNpZGVgO2Z1bmN0aW9uIGNjKGUsdCl7aWYoISh0IGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuITE7bGV0IG49dC5jbG9zZXN0KGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSxyPWUuZGF0YXNldC5kaXNtaXNzYWJsZUxheWVyPT09YGA/ZTplLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApLGk9QXJyYXkuZnJvbShlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCkpO3JldHVybiEhKG4mJihyPT09bnx8aS5pbmRleE9mKHIpPGkuaW5kZXhPZihuKSkpfWZ1bmN0aW9uIGxjKGUsdCxuPSEwKXtsZXQgcj10Py52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcz8uZG9jdW1lbnQsaT1qKCExKSxhPWooKCk9Pnt9KTtyZXR1cm4gTyhvPT57aWYoIW1lfHwhamUobikpcmV0dXJuO2xldCBzPWFzeW5jIG49PntsZXQgbz1uLnRhcmdldDtpZighKCF0Py52YWx1ZXx8IW8pKXtpZihjYyh0LnZhbHVlLG8pKXtpLnZhbHVlPSExO3JldHVybn1pZihuLnRhcmdldCYmIWkudmFsdWUpe2xldCB0PXtvcmlnaW5hbEV2ZW50Om59O2Z1bmN0aW9uIGkoKXtEcyhvYyxlLHQpfW4ucG9pbnRlclR5cGU9PT1gdG91Y2hgPyhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKSxhLnZhbHVlPWksci5hZGRFdmVudExpc3RlbmVyKGBjbGlja2AsYS52YWx1ZSx7b25jZTohMH0pKTppKCl9ZWxzZSByLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKTtpLnZhbHVlPSExfX0sYz13aW5kb3cuc2V0VGltZW91dCgoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcmRvd25gLHMpfSwwKTtvKCgpPT57d2luZG93LmNsZWFyVGltZW91dChjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBvaW50ZXJkb3duYCxzKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlKX0pfSkse29uUG9pbnRlckRvd25DYXB0dXJlOigpPT57amUobikmJihpLnZhbHVlPSEwKX19fWZ1bmN0aW9uIHVjKGUsdCxuPSEwKXtsZXQgcj10Py52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcz8uZG9jdW1lbnQsaT1qKCExKTtyZXR1cm4gTyhhPT57aWYoIW1lfHwhamUobikpcmV0dXJuO2xldCBvPWFzeW5jIG49PntpZighdD8udmFsdWUpcmV0dXJuO2F3YWl0IHkoKSxhd2FpdCB5KCk7bGV0IHI9bi50YXJnZXQ7IXQudmFsdWV8fCFyfHxjYyh0LnZhbHVlLHIpfHxuLnRhcmdldCYmIWkudmFsdWUmJkRzKHNjLGUse29yaWdpbmFsRXZlbnQ6bn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG8pLGEoKCk9PnIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbykpfSkse29uRm9jdXNDYXB0dXJlOigpPT57amUobikmJihpLnZhbHVlPSEwKX0sb25CbHVyQ2FwdHVyZTooKT0+e2plKG4pJiYoaS52YWx1ZT0hMSl9fX12YXIgZGM9SCh7X19uYW1lOmBEaXNtaXNzYWJsZUxheWVyYCxwcm9wczp7ZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxwcmVzZW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH19LGVtaXRzOltgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWAsYGZvY3VzT3V0c2lkZWAsYGludGVyYWN0T3V0c2lkZWAsYGRpc21pc3NgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bix7Zm9yd2FyZFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXQoKSxzPUwoKCk9Pm8udmFsdWU/Lm93bmVyRG9jdW1lbnQ/P2dsb2JhbFRoaXMuZG9jdW1lbnQpLGM9TCgoKT0+US5sYXllcnNSb290KSxsPUwoKCk9Pm8udmFsdWU/QXJyYXkuZnJvbShjLnZhbHVlKS5pbmRleE9mKG8udmFsdWUpOi0xKSx1PUwoKCk9PlEubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wKSxkPUwoKCk9PntsZXQgZT1BcnJheS5mcm9tKGMudmFsdWUpLFt0XT1bLi4uUS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZF0uc2xpY2UoLTEpLG49ZS5pbmRleE9mKHQpO3JldHVybiBsLnZhbHVlPj1ufSksZj1sYyhhc3luYyBlPT57bGV0IHQ9Wy4uLlEuYnJhbmNoZXNdLnNvbWUodD0+dD8uY29udGFpbnMoZS50YXJnZXQpKTshci5wcmVzZW50fHwhZC52YWx1ZXx8dHx8KGkoYHBvaW50ZXJEb3duT3V0c2lkZWAsZSksaShgaW50ZXJhY3RPdXRzaWRlYCxlKSxhd2FpdCB5KCksZS5kZWZhdWx0UHJldmVudGVkfHxpKGBkaXNtaXNzYCkpfSxvKSxtPXVjKGU9PntsZXQgdD1bLi4uUS5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFyLnByZXNlbnR8fHR8fChpKGBmb2N1c091dHNpZGVgLGUpLGkoYGludGVyYWN0T3V0c2lkZWAsZSksZS5kZWZhdWx0UHJldmVudGVkfHxpKGBkaXNtaXNzYCkpfSxvKTtyZXR1cm4gdGUoYEVzY2FwZWAsZT0+e3IucHJlc2VudCYmbC52YWx1ZT09PWMudmFsdWUuc2l6ZS0xJiYoaShgZXNjYXBlS2V5RG93bmAsZSksZS5kZWZhdWx0UHJldmVudGVkfHxpKGBkaXNtaXNzYCkpfSksRChbbywoKT0+ci5kaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHMsKCk9PnIucHJlc2VudF0sKFtlLHQsbl0scixpKT0+eyFlfHwhbnx8dCYmKFEubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT09PTAmJihRLm9yaWdpbmFsQm9keVBvaW50ZXJFdmVudHM9cy52YWx1ZS5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMscy52YWx1ZS5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgKSxRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChlKSxpKCgpPT57US5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoZSksUS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmIU9zKFEub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cykmJihzLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1RLm9yaWdpbmFsQm9keVBvaW50ZXJFdmVudHMpfSkpfSx7aW1tZWRpYXRlOiEwfSksRChbbywoKT0+ci5wcmVzZW50XSwoW2UsdF0sbixyKT0+eyFlfHwhdHx8KGMudmFsdWUuYWRkKGUpLHIoKCk9PntjLnZhbHVlLmRlbGV0ZShlKX0pKX0se2ltbWVkaWF0ZTohMH0pLE8oZT0+e2UoKCk9PntvLnZhbHVlJiYoYy52YWx1ZS5kZWxldGUoby52YWx1ZSksUS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5kZWxldGUoby52YWx1ZSkpfSl9KSwoZSx0KT0+KFAoKSxNKEIoRikse3JlZjpCKGEpLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImRhdGEtZGlzbWlzc2FibGUtbGF5ZXIiOmBgLHN0eWxlOnAoe3BvaW50ZXJFdmVudHM6dS52YWx1ZT9kLnZhbHVlP2BhdXRvYDpgbm9uZWA6dm9pZCAwfSksb25Gb2N1c0NhcHR1cmU6QihtKS5vbkZvY3VzQ2FwdHVyZSxvbkJsdXJDYXB0dXJlOkIobSkub25CbHVyQ2FwdHVyZSxvblBvaW50ZXJkb3duQ2FwdHVyZTpCKGYpLm9uUG9pbnRlckRvd25DYXB0dXJlfSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYHN0eWxlYCxgb25Gb2N1c0NhcHR1cmVgLGBvbkJsdXJDYXB0dXJlYCxgb25Qb2ludGVyZG93bkNhcHR1cmVgXSkpfX0pLGZjPXB0KCgpPT5qKFtdKSk7ZnVuY3Rpb24gcGMoKXtsZXQgZT1mYygpO3JldHVybnthZGQodCl7bGV0IG49ZS52YWx1ZVswXTt0IT09biYmbj8ucGF1c2UoKSxlLnZhbHVlPW1jKGUudmFsdWUsdCksZS52YWx1ZS51bnNoaWZ0KHQpfSxyZW1vdmUodCl7ZS52YWx1ZT1tYyhlLnZhbHVlLHQpLGUudmFsdWVbMF0/LnJlc3VtZSgpfX19ZnVuY3Rpb24gbWMoZSx0KXtsZXQgbj1bLi4uZV0scj1uLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufXZhciBoYz1gZm9jdXNTY29wZS5hdXRvRm9jdXNPbk1vdW50YCxnYz1gZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnRgLF9jPXtidWJibGVzOiExLGNhbmNlbGFibGU6ITB9O2Z1bmN0aW9uIHZjKGUse3NlbGVjdDp0PSExfT17fSl7bGV0IG49WigpO2ZvcihsZXQgciBvZiBlKWlmKHdjKHIse3NlbGVjdDp0fSksWigpIT09bilyZXR1cm4hMH1mdW5jdGlvbiB5YyhlKXtsZXQgdD1iYyhlKTtyZXR1cm5beGModCxlKSx4Yyh0LnJldmVyc2UoKSxlKV19ZnVuY3Rpb24gYmMoZSl7bGV0IHQ9W10sbj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGUsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQse2FjY2VwdE5vZGU6ZT0+e2xldCB0PWUudGFnTmFtZT09PWBJTlBVVGAmJmUudHlwZT09PWBoaWRkZW5gO3JldHVybiBlLmRpc2FibGVkfHxlLmhpZGRlbnx8dD9Ob2RlRmlsdGVyLkZJTFRFUl9TS0lQOmUudGFiSW5kZXg+PTA/Tm9kZUZpbHRlci5GSUxURVJfQUNDRVBUOk5vZGVGaWx0ZXIuRklMVEVSX1NLSVB9fSk7Zm9yKDtuLm5leHROb2RlKCk7KXQucHVzaChuLmN1cnJlbnROb2RlKTtyZXR1cm4gdH1mdW5jdGlvbiB4YyhlLHQpe2ZvcihsZXQgbiBvZiBlKWlmKCFTYyhuLHt1cFRvOnR9KSlyZXR1cm4gbn1mdW5jdGlvbiBTYyhlLHt1cFRvOnR9KXtpZihnZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHk9PT1gaGlkZGVuYClyZXR1cm4hMDtmb3IoO2U7KXtpZih0IT09dm9pZCAwJiZlPT09dClyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKGUpLmRpc3BsYXk9PT1gbm9uZWApcmV0dXJuITA7ZT1lLnBhcmVudEVsZW1lbnR9cmV0dXJuITF9ZnVuY3Rpb24gQ2MoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiZgc2VsZWN0YGluIGV9ZnVuY3Rpb24gd2MoZSx7c2VsZWN0OnQ9ITF9PXt9KXtpZihlJiZlLmZvY3VzKXtsZXQgbj1aKCk7ZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUhPT1uJiZDYyhlKSYmdCYmZS5zZWxlY3QoKX19dmFyIFRjPUgoe19fbmFtZTpgRm9jdXNTY29wZWAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSx0cmFwcGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0scHJlc2VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgbW91bnRBdXRvRm9jdXNgLGB1bm1vdW50QXV0b0ZvY3VzYF0sc2V0dXAoZSx7ZW1pdDpufSl7bGV0IHI9ZSxpPW4se2N1cnJlbnRSZWY6YSxjdXJyZW50RWxlbWVudDpvfT10KCkscz1qKG51bGwpLGM9cGMoKSxsPXFlKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSk7TyhlPT57aWYoIW1lKXJldHVybjtsZXQgdD1vLnZhbHVlO2lmKCFyLnRyYXBwZWQpcmV0dXJuO2Z1bmN0aW9uIG4oZSl7aWYobC5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnRhcmdldDt0LmNvbnRhaW5zKG4pP3MudmFsdWU9bjp3YyhzLnZhbHVlLHtzZWxlY3Q6ITB9KX1mdW5jdGlvbiBpKGUpe2lmKGwucGF1c2VkfHwhdClyZXR1cm47bGV0IG49ZS5yZWxhdGVkVGFyZ2V0O24hPT1udWxsJiYodC5jb250YWlucyhuKXx8d2Mocy52YWx1ZSx7c2VsZWN0OiEwfSkpfWZ1bmN0aW9uIGEoZSl7bGV0IG49cy52YWx1ZTtuIT09bnVsbCYmZS5zb21lKGU9PmUucmVtb3ZlZE5vZGVzLmxlbmd0aD4wKSYmKHQuY29udGFpbnMobil8fHdjKHQpKX1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBmb2N1c2luYCxuKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGBmb2N1c291dGAsaSk7bGV0IGM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoYSk7dCYmYy5vYnNlcnZlKHQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZSgoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKSxjLmRpc2Nvbm5lY3QoKX0pfSk7ZnVuY3Rpb24gdShlLHQpe2xldCBuPW5ldyBDdXN0b21FdmVudChoYyxfYykscj1lPT5pKGBtb3VudEF1dG9Gb2N1c2AsZSk7ZS5hZGRFdmVudExpc3RlbmVyKGhjLHIpLGUuZGlzcGF0Y2hFdmVudChuKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaGMsciksbi5kZWZhdWx0UHJldmVudGVkfHwodmMoYmMoZSkse3NlbGVjdDohMH0pLFooKT09PXQmJndjKGUpKX1PKGFzeW5jIGU9PntsZXQgdD1vLnZhbHVlO2lmKGF3YWl0IHkoKSwhdClyZXR1cm47ci5wcmVzZW50IT09ITEmJmMuYWRkKGwpO2xldCBuPVooKTshdC5jb250YWlucyhuKSYmci5wcmVzZW50IT09ITEmJnUodCxuKSxlKCgpPT57bGV0IGU9bmV3IEN1c3RvbUV2ZW50KGdjLF9jKSxyPWU9PntpKGB1bm1vdW50QXV0b0ZvY3VzYCxlKX07dC5hZGRFdmVudExpc3RlbmVyKGdjLHIpLHQuZGlzcGF0Y2hFdmVudChlKSx0LnNldEF0dHJpYnV0ZShgZGF0YS1mb2N1cy1zY29wZS11bm1vdW50aW5nYCxgYCksc2V0VGltZW91dCgoKT0+e2UuZGVmYXVsdFByZXZlbnRlZHx8d2Mobj8/ZG9jdW1lbnQuYm9keSx7c2VsZWN0OiEwfSksdC5yZW1vdmVFdmVudExpc3RlbmVyKGdjLHIpLGMucmVtb3ZlKGwpLHQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWZvY3VzLXNjb3BlLXVubW91bnRpbmdgKX0sMCl9KX0pLEQoKCk9PnIucHJlc2VudCxhc3luYyhlLHQpPT57aWYoIW1lKXJldHVybjtpZihlPT09ITEmJnQ9PT0hMCl7Yy5yZW1vdmUobCk7cmV0dXJufWlmKGUhPT0hMHx8dCE9PSExKXJldHVybjtjLmFkZChsKSxhd2FpdCB5KCk7bGV0IG49by52YWx1ZTtpZighbilyZXR1cm47bGV0IHI9WigpO24uY29udGFpbnMocil8fHUobixyKX0pO2Z1bmN0aW9uIGQoZSl7aWYoIXIubG9vcCYmIXIudHJhcHBlZHx8bC5wYXVzZWQpcmV0dXJuO2xldCB0PWUua2V5PT09YFRhYmAmJiFlLmFsdEtleSYmIWUuY3RybEtleSYmIWUubWV0YUtleSxuPVooKTtpZih0JiZuKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQsW2ksYV09eWModCk7aSYmYT8hZS5zaGlmdEtleSYmbj09PWE/KGUucHJldmVudERlZmF1bHQoKSxyLmxvb3AmJndjKGkse3NlbGVjdDohMH0pKTplLnNoaWZ0S2V5JiZuPT09aSYmKGUucHJldmVudERlZmF1bHQoKSxyLmxvb3AmJndjKGEse3NlbGVjdDohMH0pKTpuPT09dCYmZS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4oZSx0KT0+KFAoKSxNKEIoRikse3JlZl9rZXk6YGN1cnJlbnRSZWZgLHJlZjphLHRhYmluZGV4OmAtMWAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcyxvbktleWRvd246ZH0se2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgXSkpfX0pLEVjPVtgRW50ZXJgLGAgYF0sRGM9W2BBcnJvd0Rvd25gLGBQYWdlVXBgLGBIb21lYF0sT2M9W2BBcnJvd1VwYCxgUGFnZURvd25gLGBFbmRgXTtbLi4uRGMsLi4uT2NdLFsuLi5FY10sWy4uLkVjXTtmdW5jdGlvbiBrYyhlKXtsZXQgdD1aKCk7Zm9yKGxldCBuIG9mIGUpaWYobj09PXR8fChuLmZvY3VzKCksWigpIT09dCkpcmV0dXJufXZhciBBYz1IKHtfX25hbWU6YFRlbGVwb3J0YCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXIoe30pLGk9TCgoKT0+dC50bz8/bi50ZWxlcG9ydFRvPy52YWx1ZT8/YGJvZHlgKSxhPVMoKTtyZXR1cm4oZSx0KT0+QihhKXx8ZS5mb3JjZU1vdW50PyhQKCksTShPZSx7a2V5OjAsdG86aS52YWx1ZSxkaXNhYmxlZDplLmRpc2FibGVkLGRlZmVyOmUuZGVmZXJ9LFtOKGUuJHNsb3RzLGBkZWZhdWx0YCldLDgsW2B0b2AsYGRpc2FibGVkYCxgZGVmZXJgXSkpOkkoYHYtaWZgLCEwKX19KSxqYz1gZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbWA7ZnVuY3Rpb24gTWMoZT17fSl7bGV0e2tleTp0PWBgLGlzUHJvdmlkZXI6bj0hMX09ZSxyPWAke3R9Q29sbGVjdGlvblByb3ZpZGVyYCxpO2lmKG4pe2xldCBlPWoobmV3IE1hcCk7aT17Y29sbGVjdGlvblJlZjpqKCksaXRlbU1hcDplfSxKZShyLGkpfWVsc2UgaT1jZShyKTtsZXQgYT0oZT0hMSk9PntsZXQgdD1pLmNvbGxlY3Rpb25SZWYudmFsdWU7aWYoIXQpcmV0dXJuW107bGV0IG49QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske2pjfV1gKSkscj1uZXcgTWFwKG4ubWFwKChlLHQpPT5bZSx0XSkpLGE9QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpLnNvcnQoKGUsdCk9PihyLmdldChlLnJlZik/Py0xKS0oci5nZXQodC5yZWYpPz8tMSkpO3JldHVybiBlP2E6YS5maWx0ZXIoZT0+ZS5yZWYuZGF0YXNldC5kaXNhYmxlZCE9PWBgKX0sbz1IKHtuYW1lOmBDb2xsZWN0aW9uU2xvdGAsaW5oZXJpdEF0dHJzOiExLHNldHVwKGUse3Nsb3RzOnQsYXR0cnM6bn0pe2xldHtwcmltaXRpdmVFbGVtZW50OnIsY3VycmVudEVsZW1lbnQ6YX09YWMoKTtyZXR1cm4gRChhLCgpPT57aS5jb2xsZWN0aW9uUmVmLnZhbHVlPWEudmFsdWV9KSwoKT0+bChjLHtyZWY6ciwuLi5ufSx0KX19KSxzPUgoe25hbWU6YENvbGxlY3Rpb25JdGVtYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e3ZhbHVlOnt2YWxpZGF0b3I6KCk9PiEwfX0sc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1hYygpO3JldHVybiBPKHQ9PntpZihhLnZhbHVlKXtsZXQgbj1XZShhLnZhbHVlKTtpLml0ZW1NYXAudmFsdWUuc2V0KG4se3JlZjphLnZhbHVlLHZhbHVlOmUudmFsdWV9KSx0KCgpPT5pLml0ZW1NYXAudmFsdWUuZGVsZXRlKG4pKX19KSwoKT0+bChjLHsuLi5uLFtqY106YGAscmVmOnJ9LHQpfX0pO3JldHVybntnZXRJdGVtczphLHJlYWN0aXZlSXRlbXM6TCgoKT0+QXJyYXkuZnJvbShpLml0ZW1NYXAudmFsdWUudmFsdWVzKCkpKSxpdGVtTWFwU2l6ZTpMKCgpPT5pLml0ZW1NYXAudmFsdWUuc2l6ZSksQ29sbGVjdGlvblNsb3Q6byxDb2xsZWN0aW9uSXRlbTpzfX12YXIgTmM9SCh7X19uYW1lOmBWaXN1YWxseUhpZGRlbmAscHJvcHM6e2ZlYXR1cmU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGZvY3VzYWJsZWB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe3JldHVybihlLHQpPT4oUCgpLE0oQihGKSx7YXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCwiYXJpYS1oaWRkZW4iOmUuZmVhdHVyZT09PWBmb2N1c2FibGVgfHxlLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gdHJ1ZWA6dm9pZCAwLCJkYXRhLWhpZGRlbiI6ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YGA6dm9pZCAwLHRhYmluZGV4OmUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2AtMWA6dm9pZCAwLHN0eWxlOntwb3NpdGlvbjpgYWJzb2x1dGVgLGJvcmRlcjowLHdpZHRoOmAxcHhgLGhlaWdodDpgMXB4YCxwYWRkaW5nOjAsbWFyZ2luOmAtMXB4YCxvdmVyZmxvdzpgaGlkZGVuYCxjbGlwOmByZWN0KDAsIDAsIDAsIDApYCxjbGlwUGF0aDpgaW5zZXQoNTAlKWAsd2hpdGVTcGFjZTpgbm93cmFwYCx3b3JkV3JhcDpgbm9ybWFsYCx0b3A6YC0xcHhgLGxlZnQ6YC0xcHhgfX0se2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWhpZGRlbmAsYGRhdGEtaGlkZGVuYCxgdGFiaW5kZXhgXSkpfX0pLFtQYyxGY109YShgUG9wcGVyUm9vdGApLEljPUgoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFBvcHBlclJvb3RgLHNldHVwKGUpe2xldCB0PWooKTtyZXR1cm4gRmMoe2FuY2hvcjp0LG9uQW5jaG9yQ2hhbmdlOmU9PnQudmFsdWU9ZX0pLChlLHQpPT5OKGUuJHNsb3RzLGBkZWZhdWx0YCl9fSksTGM9SCh7X19uYW1lOmBQb3BwZXJBbmNob3JgLHByb3BzOntyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IG49ZSx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PXQoKSxhPVBjKCk7cmV0dXJuIGllKCgpPT57YS5vbkFuY2hvckNoYW5nZShuLnJlZmVyZW5jZT8/aS52YWx1ZSl9KSwoZSx0KT0+KFAoKSxNKEIoRikse3JlZjpCKHIpLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGR9LHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYF0pKX19KTtmdW5jdGlvbiBSYyhlKXtyZXR1cm4gZSE9PW51bGx9ZnVuY3Rpb24gemMoZSl7cmV0dXJue25hbWU6YHRyYW5zZm9ybU9yaWdpbmAsb3B0aW9uczplLGZuKHQpe2xldHtwbGFjZW1lbnQ6bixyZWN0czpyLG1pZGRsZXdhcmVEYXRhOml9PXQsYT1pLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wLG89YT8wOmUuYXJyb3dXaWR0aCxzPWE/MDplLmFycm93SGVpZ2h0LFtjLGxdPUJjKG4pLHU9e3N0YXJ0OmUuZGlyPT09YHJ0bGA/YDEwMCVgOmAwJWAsY2VudGVyOmA1MCVgLGVuZDplLmRpcj09PWBydGxgP2AwJWA6YDEwMCVgfVtsXSxkPXtzdGFydDpgMCVgLGNlbnRlcjpgNTAlYCxlbmQ6YDEwMCVgfVtsXSxmPShpLmFycm93Py54Pz8wKStvLzIscD0oaS5hcnJvdz8ueT8/MCkrcy8yLG09YGAsaD1gYDtyZXR1cm4gYz09PWBib3R0b21gPyhtPWE/dTpgJHtmfXB4YCxoPWAkey1zfXB4YCk6Yz09PWB0b3BgPyhtPWE/dTpgJHtmfXB4YCxoPWAke3IuZmxvYXRpbmcuaGVpZ2h0K3N9cHhgKTpjPT09YHJpZ2h0YD8obT1gJHstc31weGAsaD1hP2Q6YCR7cH1weGApOmM9PT1gbGVmdGAmJihtPWAke3IuZmxvYXRpbmcud2lkdGgrc31weGAsaD1hP2Q6YCR7cH1weGApLHtkYXRhOnt4Om0seTpofX19fX1mdW5jdGlvbiBCYyhlKXtsZXRbdCxuPWBjZW50ZXJgXT1lLnNwbGl0KGAtYCk7cmV0dXJuW3Qsbl19dmFyIFZjPVtgdG9wYCxgcmlnaHRgLGBib3R0b21gLGBsZWZ0YF0sSGM9TWF0aC5taW4sVWM9TWF0aC5tYXgsV2M9TWF0aC5yb3VuZCxHYz1NYXRoLmZsb29yLEtjPWU9Pih7eDplLHk6ZX0pLHFjPXtsZWZ0OmByaWdodGAscmlnaHQ6YGxlZnRgLGJvdHRvbTpgdG9wYCx0b3A6YGJvdHRvbWB9O2Z1bmN0aW9uIEpjKGUsdCxuKXtyZXR1cm4gVWMoZSxIYyh0LG4pKX1mdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0eXBlb2YgZT09YGZ1bmN0aW9uYD9lKHQpOmV9ZnVuY3Rpb24gWGMoZSl7cmV0dXJuIGUuc3BsaXQoYC1gKVswXX1mdW5jdGlvbiBaYyhlKXtyZXR1cm4gZS5zcGxpdChgLWApWzFdfWZ1bmN0aW9uIFFjKGUpe3JldHVybiBlPT09YHhgP2B5YDpgeGB9ZnVuY3Rpb24gJGMoZSl7cmV0dXJuIGU9PT1geWA/YGhlaWdodGA6YHdpZHRoYH1mdW5jdGlvbiBlbChlKXtsZXQgdD1lWzBdO3JldHVybiB0PT09YHRgfHx0PT09YGJgP2B5YDpgeGB9ZnVuY3Rpb24gdGwoZSl7cmV0dXJuIFFjKGVsKGUpKX1mdW5jdGlvbiBubChlLHQsbil7bj09PXZvaWQgMCYmKG49ITEpO2xldCByPVpjKGUpLGk9dGwoZSksYT0kYyhpKSxvPWk9PT1geGA/cj09PShuP2BlbmRgOmBzdGFydGApP2ByaWdodGA6YGxlZnRgOnI9PT1gc3RhcnRgP2Bib3R0b21gOmB0b3BgO3JldHVybiB0LnJlZmVyZW5jZVthXT50LmZsb2F0aW5nW2FdJiYobz1kbChvKSksW28sZGwobyldfWZ1bmN0aW9uIHJsKGUpe2xldCB0PWRsKGUpO3JldHVybltpbChlKSx0LGlsKHQpXX1mdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5pbmNsdWRlcyhgc3RhcnRgKT9lLnJlcGxhY2UoYHN0YXJ0YCxgZW5kYCk6ZS5yZXBsYWNlKGBlbmRgLGBzdGFydGApfXZhciBhbD1bYGxlZnRgLGByaWdodGBdLG9sPVtgcmlnaHRgLGBsZWZ0YF0sc2w9W2B0b3BgLGBib3R0b21gXSxjbD1bYGJvdHRvbWAsYHRvcGBdO2Z1bmN0aW9uIGxsKGUsdCxuKXtzd2l0Y2goZSl7Y2FzZWB0b3BgOmNhc2VgYm90dG9tYDpyZXR1cm4gbj90P29sOmFsOnQ/YWw6b2w7Y2FzZWBsZWZ0YDpjYXNlYHJpZ2h0YDpyZXR1cm4gdD9zbDpjbDtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiB1bChlLHQsbixyKXtsZXQgaT1aYyhlKSxhPWxsKFhjKGUpLG49PT1gc3RhcnRgLHIpO3JldHVybiBpJiYoYT1hLm1hcChlPT5lK2AtYCtpKSx0JiYoYT1hLmNvbmNhdChhLm1hcChpbCkpKSksYX1mdW5jdGlvbiBkbChlKXtsZXQgdD1YYyhlKTtyZXR1cm4gcWNbdF0rZS5zbGljZSh0Lmxlbmd0aCl9ZnVuY3Rpb24gZmwoZSl7cmV0dXJue3RvcDplLnRvcD8/MCxyaWdodDplLnJpZ2h0Pz8wLGJvdHRvbTplLmJvdHRvbT8/MCxsZWZ0OmUubGVmdD8/MH19ZnVuY3Rpb24gcGwoZSl7cmV0dXJuIHR5cGVvZiBlPT1gbnVtYmVyYD97dG9wOmUscmlnaHQ6ZSxib3R0b206ZSxsZWZ0OmV9OmZsKGUpfWZ1bmN0aW9uIG1sKGUpe2xldHt4OnQseTpuLHdpZHRoOnIsaGVpZ2h0Oml9PWU7cmV0dXJue3dpZHRoOnIsaGVpZ2h0OmksdG9wOm4sbGVmdDp0LHJpZ2h0OnQrcixib3R0b206bitpLHg6dCx5Om59fWZ1bmN0aW9uIGhsKGUsdCxuKXtsZXR7cmVmZXJlbmNlOnIsZmxvYXRpbmc6aX09ZSxhPWVsKHQpLG89dGwodCkscz0kYyhvKSxjPVhjKHQpLGw9YT09PWB5YCx1PXIueCtyLndpZHRoLzItaS53aWR0aC8yLGQ9ci55K3IuaGVpZ2h0LzItaS5oZWlnaHQvMixmPXJbc10vMi1pW3NdLzIscDtzd2l0Y2goYyl7Y2FzZWB0b3BgOnA9e3g6dSx5OnIueS1pLmhlaWdodH07YnJlYWs7Y2FzZWBib3R0b21gOnA9e3g6dSx5OnIueStyLmhlaWdodH07YnJlYWs7Y2FzZWByaWdodGA6cD17eDpyLngrci53aWR0aCx5OmR9O2JyZWFrO2Nhc2VgbGVmdGA6cD17eDpyLngtaS53aWR0aCx5OmR9O2JyZWFrO2RlZmF1bHQ6cD17eDpyLngseTpyLnl9fWxldCBtPVpjKHQpO3JldHVybiBtJiYocFtvXSs9ZioobT09PWBlbmRgPzE6LTEpKihuJiZsPy0xOjEpKSxwfWFzeW5jIGZ1bmN0aW9uIGdsKGUsdCl7dD09PXZvaWQgMCYmKHQ9e30pO2xldHt4Om4seTpyLHBsYXRmb3JtOmkscmVjdHM6YSxlbGVtZW50czpvLHN0cmF0ZWd5OnN9PWUse2JvdW5kYXJ5OmM9YGNsaXBwaW5nQW5jZXN0b3JzYCxyb290Qm91bmRhcnk6bD1gdmlld3BvcnRgLGVsZW1lbnRDb250ZXh0OnU9YGZsb2F0aW5nYCxhbHRCb3VuZGFyeTpkPSExLHBhZGRpbmc6Zj0wfT1ZYyh0LGUpLHA9cGwoZiksbT1vW2Q/dT09PWBmbG9hdGluZ2A/YHJlZmVyZW5jZWA6YGZsb2F0aW5nYDp1XSxoPW1sKGF3YWl0IGkuZ2V0Q2xpcHBpbmdSZWN0KHtlbGVtZW50OmF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChtKSk/PyEwP206bS5jb250ZXh0RWxlbWVudHx8YXdhaXQoaS5nZXREb2N1bWVudEVsZW1lbnQ9PW51bGw/dm9pZCAwOmkuZ2V0RG9jdW1lbnRFbGVtZW50KG8uZmxvYXRpbmcpKSxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTpsLHN0cmF0ZWd5OnN9KSksZz11PT09YGZsb2F0aW5nYD97eDpuLHk6cix3aWR0aDphLmZsb2F0aW5nLndpZHRoLGhlaWdodDphLmZsb2F0aW5nLmhlaWdodH06YS5yZWZlcmVuY2UsXz1hd2FpdChpLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6aS5nZXRPZmZzZXRQYXJlbnQoby5mbG9hdGluZykpLHY9YXdhaXQoaS5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOmkuaXNFbGVtZW50KF8pKSYmYXdhaXQoaS5nZXRTY2FsZT09bnVsbD92b2lkIDA6aS5nZXRTY2FsZShfKSl8fHt4OjEseToxfSx5PW1sKGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q/YXdhaXQgaS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7ZWxlbWVudHM6byxyZWN0Omcsb2Zmc2V0UGFyZW50Ol8sc3RyYXRlZ3k6c30pOmcpO3JldHVybnt0b3A6KGgudG9wLXkudG9wK3AudG9wKS92LnksYm90dG9tOih5LmJvdHRvbS1oLmJvdHRvbStwLmJvdHRvbSkvdi55LGxlZnQ6KGgubGVmdC15LmxlZnQrcC5sZWZ0KS92LngscmlnaHQ6KHkucmlnaHQtaC5yaWdodCtwLnJpZ2h0KS92Lnh9fXZhciBfbD01MCx2bD1hc3luYyhlLHQsbik9PntsZXR7cGxhY2VtZW50OnI9YGJvdHRvbWAsc3RyYXRlZ3k6aT1gYWJzb2x1dGVgLG1pZGRsZXdhcmU6YT1bXSxwbGF0Zm9ybTpvfT1uLHM9by5kZXRlY3RPdmVyZmxvdz9vOnsuLi5vLGRldGVjdE92ZXJmbG93OmdsfSxjPWF3YWl0KG8uaXNSVEw9PW51bGw/dm9pZCAwOm8uaXNSVEwodCkpLGw9YXdhaXQgby5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6aX0pLHt4OnUseTpkfT1obChsLHIsYyksZj1yLHA9MCxtPXt9O2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bisrKXtsZXQgaD1hW25dO2lmKCFoKWNvbnRpbnVlO2xldHtuYW1lOmcsZm46X309aCx7eDp2LHksZGF0YTpiLHJlc2V0Onh9PWF3YWl0IF8oe3g6dSx5OmQsaW5pdGlhbFBsYWNlbWVudDpyLHBsYWNlbWVudDpmLHN0cmF0ZWd5OmksbWlkZGxld2FyZURhdGE6bSxyZWN0czpsLHBsYXRmb3JtOnMsZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOnR9fSk7dT12Pz91LGQ9eT8/ZCxtW2ddPXsuLi5tW2ddLC4uLmJ9LHgmJnA8X2wmJihwKyssdHlwZW9mIHg9PWBvYmplY3RgJiYoeC5wbGFjZW1lbnQmJihmPXgucGxhY2VtZW50KSx4LnJlY3RzJiYobD14LnJlY3RzPT09ITA/YXdhaXQgby5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOnQsc3RyYXRlZ3k6aX0pOngucmVjdHMpLHt4OnUseTpkfT1obChsLGYsYykpLG49LTEpfXJldHVybnt4OnUseTpkLHBsYWNlbWVudDpmLHN0cmF0ZWd5OmksbWlkZGxld2FyZURhdGE6bX19LHlsPWU9Pih7bmFtZTpgYXJyb3dgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxyZWN0czphLHBsYXRmb3JtOm8sZWxlbWVudHM6cyxtaWRkbGV3YXJlRGF0YTpjfT10LHtlbGVtZW50OmwscGFkZGluZzp1PTB9PVljKGUsdCl8fHt9O2lmKGw9PW51bGwpcmV0dXJue307bGV0IGQ9cGwodSksZj17eDpuLHk6cn0scD10bChpKSxtPSRjKHApLGg9YXdhaXQgby5nZXREaW1lbnNpb25zKGwpLGc9cD09PWB5YCxfPWc/YHRvcGA6YGxlZnRgLHY9Zz9gYm90dG9tYDpgcmlnaHRgLHk9Zz9gY2xpZW50SGVpZ2h0YDpgY2xpZW50V2lkdGhgLGI9YS5yZWZlcmVuY2VbbV0rYS5yZWZlcmVuY2VbcF0tZltwXS1hLmZsb2F0aW5nW21dLHg9ZltwXS1hLnJlZmVyZW5jZVtwXSxTPWF3YWl0KG8uZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpvLmdldE9mZnNldFBhcmVudChsKSksQz1TP1NbeV06MDsoIUN8fCFhd2FpdChvLmlzRWxlbWVudD09bnVsbD92b2lkIDA6by5pc0VsZW1lbnQoUykpKSYmKEM9cy5mbG9hdGluZ1t5XXx8YS5mbG9hdGluZ1ttXSk7bGV0IHc9Yi8yLXgvMixUPUMvMi1oW21dLzItMSxFPUhjKGRbX10sVCksZWU9SGMoZFt2XSxUKSxEPUMtaFttXS1lZSx0ZT1DLzItaFttXS8yK3csTz1KYyhFLHRlLEQpLG5lPSFjLmFycm93JiZaYyhpKSE9bnVsbCYmdGUhPT1PJiZhLnJlZmVyZW5jZVttXS8yLSh0ZTxFP0U6ZWUpLWhbbV0vMjwwLHJlPW5lP3RlPEU/dGUtRTp0ZS1EOjA7cmV0dXJue1twXTpmW3BdK3JlLGRhdGE6e1twXTpPLGNlbnRlck9mZnNldDp0ZS1PLXJlLC4uLm5lJiZ7YWxpZ25tZW50T2Zmc2V0OnJlfX0scmVzZXQ6bmV9fX0pLGJsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YGZsaXBgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXt2YXIgbjtsZXR7cGxhY2VtZW50OnIsbWlkZGxld2FyZURhdGE6aSxyZWN0czphLGluaXRpYWxQbGFjZW1lbnQ6byxwbGF0Zm9ybTpzLGVsZW1lbnRzOmN9PXQse21haW5BeGlzOmw9ITAsY3Jvc3NBeGlzOnU9ITAsZmFsbGJhY2tQbGFjZW1lbnRzOmQsZmFsbGJhY2tTdHJhdGVneTpmPWBiZXN0Rml0YCxmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uOnA9YG5vbmVgLGZsaXBBbGlnbm1lbnQ6bT0hMCwuLi5ofT1ZYyhlLHQpO2lmKChuPWkuYXJyb3cpIT1udWxsJiZuLmFsaWdubWVudE9mZnNldClyZXR1cm57fTtsZXQgZz1YYyhyKSxfPWVsKG8pLHY9WGMobyk9PT1vLHk9YXdhaXQocy5pc1JUTD09bnVsbD92b2lkIDA6cy5pc1JUTChjLmZsb2F0aW5nKSksYj1kfHwodnx8IW0/W2RsKG8pXTpybChvKSkseD1wIT09YG5vbmVgOyFkJiZ4JiZiLnB1c2goLi4udWwobyxtLHAseSkpO2xldCBTPVtvLC4uLmJdLEM9YXdhaXQgcy5kZXRlY3RPdmVyZmxvdyh0LGgpLHc9W10sVD1pLmZsaXA/Lm92ZXJmbG93c3x8W107aWYobCYmdy5wdXNoKENbZ10pLHUpe2xldCBlPW5sKHIsYSx5KTt3LnB1c2goQ1tlWzBdXSxDW2VbMV1dKX1pZihUPVsuLi5ULHtwbGFjZW1lbnQ6cixvdmVyZmxvd3M6d31dLCF3LmV2ZXJ5KGU9PmU8PTApKXtsZXQgZT0oaS5mbGlwPy5pbmRleHx8MCkrMSx0PVNbZV07aWYodCYmKHUhPT1gYWxpZ25tZW50YHx8Xz09PWVsKHQpfHxULmV2ZXJ5KGU9PmVsKGUucGxhY2VtZW50KSE9PV98fGUub3ZlcmZsb3dzWzBdPjApKSlyZXR1cm57ZGF0YTp7aW5kZXg6ZSxvdmVyZmxvd3M6VH0scmVzZXQ6e3BsYWNlbWVudDp0fX07bGV0IG49VC5maWx0ZXIoZT0+ZS5vdmVyZmxvd3NbMF08PTApLnNvcnQoKGUsdCk9PmUub3ZlcmZsb3dzWzFdLXQub3ZlcmZsb3dzWzFdKVswXT8ucGxhY2VtZW50O2lmKCFuKXN3aXRjaChmKXtjYXNlYGJlc3RGaXRgOntsZXQgZT1ULmZpbHRlcihlPT57aWYoeCl7bGV0IHQ9ZWwoZS5wbGFjZW1lbnQpO3JldHVybiB0PT09X3x8dD09PWB5YH1yZXR1cm4hMH0pLm1hcChlPT5bZS5wbGFjZW1lbnQsZS5vdmVyZmxvd3MuZmlsdGVyKGU9PmU+MCkucmVkdWNlKChlLHQpPT5lK3QsMCldKS5zb3J0KChlLHQpPT5lWzFdLXRbMV0pWzBdPy5bMF07ZSYmKG49ZSk7YnJlYWt9Y2FzZWBpbml0aWFsUGxhY2VtZW50YDpuPW99aWYociE9PW4pcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6bn19fXJldHVybnt9fX19O2Z1bmN0aW9uIHhsKGUsdCl7cmV0dXJue3RvcDplLnRvcC10LmhlaWdodCxyaWdodDplLnJpZ2h0LXQud2lkdGgsYm90dG9tOmUuYm90dG9tLXQuaGVpZ2h0LGxlZnQ6ZS5sZWZ0LXQud2lkdGh9fWZ1bmN0aW9uIFNsKGUpe3JldHVybiBWYy5zb21lKHQ9PmVbdF0+PTApfXZhciBDbD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBoaWRlYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3JlY3RzOm4scGxhdGZvcm06cn09dCx7c3RyYXRlZ3k6aT1gcmVmZXJlbmNlSGlkZGVuYCwuLi5hfT1ZYyhlLHQpO3N3aXRjaChpKXtjYXNlYHJlZmVyZW5jZUhpZGRlbmA6e2xldCBlPXhsKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxlbGVtZW50Q29udGV4dDpgcmVmZXJlbmNlYH0pLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czplLHJlZmVyZW5jZUhpZGRlbjpTbChlKX19fWNhc2VgZXNjYXBlZGA6e2xldCBlPXhsKGF3YWl0IHIuZGV0ZWN0T3ZlcmZsb3codCx7Li4uYSxhbHRCb3VuZGFyeTohMH0pLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czplLGVzY2FwZWQ6U2woZSl9fX1kZWZhdWx0OnJldHVybnt9fX19fSx3bD1uZXcgU2V0KFtgbGVmdGAsYHRvcGBdKTthc3luYyBmdW5jdGlvbiBUbChlLHQpe2xldHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PWUsYT1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKSxvPVhjKG4pLHM9WmMobiksYz1lbChuKT09PWB5YCxsPXdsLmhhcyhvKT8tMToxLHU9YSYmYz8tMToxLGQ9WWModCxlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOm19PXR5cGVvZiBkPT1gbnVtYmVyYD97bWFpbkF4aXM6ZCxjcm9zc0F4aXM6MCxhbGlnbm1lbnRBeGlzOm51bGx9OnttYWluQXhpczpkLm1haW5BeGlzfHwwLGNyb3NzQXhpczpkLmNyb3NzQXhpc3x8MCxhbGlnbm1lbnRBeGlzOmQuYWxpZ25tZW50QXhpc307cmV0dXJuIHMmJnR5cGVvZiBtPT1gbnVtYmVyYCYmKHA9cz09PWBlbmRgP20qLTE6bSksYz97eDpwKnUseTpmKmx9Ont4OmYqbCx5OnAqdX19dmFyIEVsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSx7bmFtZTpgb2Zmc2V0YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG47bGV0e3g6cix5OmkscGxhY2VtZW50OmEsbWlkZGxld2FyZURhdGE6b309dCxzPWF3YWl0IFRsKHQsZSk7cmV0dXJuIGE9PT1vLm9mZnNldD8ucGxhY2VtZW50JiYobj1vLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQ/e306e3g6citzLngseTppK3MueSxkYXRhOnsuLi5zLHBsYWNlbWVudDphfX19fX0sRGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2hpZnRgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7eDpuLHk6cixwbGFjZW1lbnQ6aSxwbGF0Zm9ybTphfT10LHttYWluQXhpczpvPSEwLGNyb3NzQXhpczpzPSExLGxpbWl0ZXI6Yz17Zm46ZT0+e2xldHt4OnQseTpufT1lO3JldHVybnt4OnQseTpufX19LC4uLmx9PVljKGUsdCksdT17eDpuLHk6cn0sZD1hd2FpdCBhLmRldGVjdE92ZXJmbG93KHQsbCksZj1lbChpKSxwPVFjKGYpLG09dVtwXSxoPXVbZl0sZz0oZSx0KT0+SmModCtkW2U9PT1geWA/YHRvcGA6YGxlZnRgXSx0LHQtZFtlPT09YHlgP2Bib3R0b21gOmByaWdodGBdKTtvJiYobT1nKHAsbSkpLHMmJihoPWcoZixoKSk7bGV0IF89Yy5mbih7Li4udCxbcF06bSxbZl06aH0pO3JldHVybnsuLi5fLGRhdGE6e3g6Xy54LW4seTpfLnktcixlbmFibGVkOntbcF06byxbZl06c319fX19fSxPbD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtvcHRpb25zOmUsZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxtaWRkbGV3YXJlRGF0YTpvfT10LHtvZmZzZXQ6cz0wLG1haW5BeGlzOmM9ITAsY3Jvc3NBeGlzOmw9ITB9PVljKGUsdCksdT17eDpuLHk6cn0sZD1lbChpKSxmPVFjKGQpLHA9dVtmXSxtPXVbZF0saD1ZYyhzLHQpLGc9dHlwZW9mIGg9PWBudW1iZXJgP3ttYWluQXhpczpoLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6aC5tYWluQXhpcz8/MCxjcm9zc0F4aXM6aC5jcm9zc0F4aXM/PzB9O2lmKGMpe2xldCBlPWY9PT1geWA/YGhlaWdodGA6YHdpZHRoYCx0PWEucmVmZXJlbmNlW2ZdLWEuZmxvYXRpbmdbZV0rZy5tYWluQXhpcyxuPWEucmVmZXJlbmNlW2ZdK2EucmVmZXJlbmNlW2VdLWcubWFpbkF4aXM7cDx0P3A9dDpwPm4mJihwPW4pfWlmKGwpe2xldCBlPWY9PT1geWA/YHdpZHRoYDpgaGVpZ2h0YCx0PXdsLmhhcyhYYyhpKSksbj1hLnJlZmVyZW5jZVtkXS1hLmZsb2F0aW5nW2VdKyh0JiZvLm9mZnNldD8uW2RdfHwwKSsodD8wOmcuY3Jvc3NBeGlzKSxyPWEucmVmZXJlbmNlW2RdK2EucmVmZXJlbmNlW2VdKyh0PzA6by5vZmZzZXQ/LltkXXx8MCktKHQ/Zy5jcm9zc0F4aXM6MCk7bTxuP209bjptPnImJihtPXIpfXJldHVybntbZl06cCxbZF06bX19fX0sa2w9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgc2l6ZWAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOmksZWxlbWVudHM6YX09dCx7YXBwbHk6bz0oKT0+e30sLi4uc309WWMoZSx0KSxjPWF3YWl0IGkuZGV0ZWN0T3ZlcmZsb3codCxzKSxsPVhjKG4pLHU9WmMobiksZD1lbChuKT09PWB5YCx7d2lkdGg6ZixoZWlnaHQ6cH09ci5mbG9hdGluZyxtLGg7bD09PWB0b3BgfHxsPT09YGJvdHRvbWA/KG09bCxoPXU9PT0oYXdhaXQoaS5pc1JUTD09bnVsbD92b2lkIDA6aS5pc1JUTChhLmZsb2F0aW5nKSk/YHN0YXJ0YDpgZW5kYCk/YGxlZnRgOmByaWdodGApOihoPWwsbT11PT09YGVuZGA/YHRvcGA6YGJvdHRvbWApO2xldCBnPXAtYy50b3AtYy5ib3R0b20sXz1mLWMubGVmdC1jLnJpZ2h0LHY9SGMocC1jW21dLGcpLHk9SGMoZi1jW2hdLF8pLGI9dC5taWRkbGV3YXJlRGF0YS5zaGlmdCx4PSFiLFM9dixDPXk7YiE9bnVsbCYmYi5lbmFibGVkLngmJihDPV8pLGIhPW51bGwmJmIuZW5hYmxlZC55JiYoUz1nKSx4JiYhdSYmKGQ/Qz1mLTIqVWMoYy5sZWZ0LGMucmlnaHQpOlM9cC0yKlVjKGMudG9wLGMuYm90dG9tKSksYXdhaXQgbyh7Li4udCxhdmFpbGFibGVXaWR0aDpDLGF2YWlsYWJsZUhlaWdodDpTfSk7bGV0IHc9YXdhaXQgaS5nZXREaW1lbnNpb25zKGEuZmxvYXRpbmcpO3JldHVybiBmIT09dy53aWR0aHx8cCE9PXcuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiBBbCgpe3JldHVybiB0eXBlb2Ygd2luZG93PGB1YH1mdW5jdGlvbiBqbChlKXtyZXR1cm4gTmwoZSk/KGUubm9kZU5hbWV8fGBgKS50b0xvd2VyQ2FzZSgpOmAjZG9jdW1lbnRgfWZ1bmN0aW9uICQoZSl7dmFyIHQ7cmV0dXJuKGU9PW51bGx8fCh0PWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuZGVmYXVsdFZpZXcpfHx3aW5kb3d9ZnVuY3Rpb24gTWwoZSl7cmV0dXJuKChObChlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk/LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBObChlKXtyZXR1cm4gQWwoKT9lIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mICQoZSkuTm9kZTohMX1mdW5jdGlvbiBQbChlKXtyZXR1cm4gQWwoKT9lIGluc3RhbmNlb2YgRWxlbWVudHx8ZSBpbnN0YW5jZW9mICQoZSkuRWxlbWVudDohMX1mdW5jdGlvbiBGbChlKXtyZXR1cm4gQWwoKT9lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGUgaW5zdGFuY2VvZiAkKGUpLkhUTUxFbGVtZW50OiExfWZ1bmN0aW9uIElsKGUpe3JldHVybiFBbCgpfHx0eXBlb2YgU2hhZG93Um9vdD5gdWA/ITE6ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fGUgaW5zdGFuY2VvZiAkKGUpLlNoYWRvd1Jvb3R9ZnVuY3Rpb24gTGwoZSl7bGV0e292ZXJmbG93OnQsb3ZlcmZsb3dYOm4sb3ZlcmZsb3dZOnIsZGlzcGxheTppfT1KbChlKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdCh0K3IrbikmJmkhPT1gaW5saW5lYCYmaSE9PWBjb250ZW50c2B9ZnVuY3Rpb24gUmwoZSl7cmV0dXJuL14odGFibGV8dGR8dGgpJC8udGVzdChqbChlKSl9ZnVuY3Rpb24gemwoZSl7dHJ5e2lmKGUubWF0Y2hlcyhgOnBvcG92ZXItb3BlbmApKXJldHVybiEwfWNhdGNoe310cnl7cmV0dXJuIGUubWF0Y2hlcyhgOm1vZGFsYCl9Y2F0Y2h7cmV0dXJuITF9fXZhciBCbD0vdHJhbnNmb3JtfHRyYW5zbGF0ZXxzY2FsZXxyb3RhdGV8cGVyc3BlY3RpdmV8ZmlsdGVyLyxWbD0vcGFpbnR8bGF5b3V0fHN0cmljdHxjb250ZW50LyxIbD1lPT4hIWUmJmUhPT1gbm9uZWAsVWw7ZnVuY3Rpb24gV2woZSl7bGV0IHQ9UGwoZSk/SmwoZSk6ZTtyZXR1cm4gSGwodC50cmFuc2Zvcm0pfHxIbCh0LnRyYW5zbGF0ZSl8fEhsKHQuc2NhbGUpfHxIbCh0LnJvdGF0ZSl8fEhsKHQucGVyc3BlY3RpdmUpfHwhS2woKSYmKEhsKHQuYmFja2Ryb3BGaWx0ZXIpfHxIbCh0LmZpbHRlcikpfHxCbC50ZXN0KHQud2lsbENoYW5nZXx8YGApfHxWbC50ZXN0KHQuY29udGFpbnx8YGApfWZ1bmN0aW9uIEdsKGUpe2xldCB0PVhsKGUpO2Zvcig7RmwodCkmJiFxbCh0KTspe2lmKFdsKHQpKXJldHVybiB0O2lmKHpsKHQpKXJldHVybiBudWxsO3Q9WGwodCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gS2woKXtyZXR1cm4gVWw/Pz10eXBlb2YgQ1NTPGB1YCYmQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoYC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyYCxgbm9uZWApLFVsfWZ1bmN0aW9uIHFsKGUpe3JldHVybi9eKGh0bWx8Ym9keXwjZG9jdW1lbnQpJC8udGVzdChqbChlKSl9ZnVuY3Rpb24gSmwoZSl7cmV0dXJuICQoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBZbChlKXtyZXR1cm4gUGwoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIFhsKGUpe2lmKGpsKGUpPT09YGh0bWxgKXJldHVybiBlO2xldCB0PWUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGV8fElsKGUpJiZlLmhvc3R8fE1sKGUpO3JldHVybiBJbCh0KT90Lmhvc3Q6dH1mdW5jdGlvbiBabChlKXtsZXQgdD1YbChlKTtyZXR1cm4gcWwodCk/KGUub3duZXJEb2N1bWVudHx8ZSkuYm9keTpGbCh0KSYmTGwodCk/dDpabCh0KX1mdW5jdGlvbiBRbChlLHQsbil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPSEwKTtsZXQgcj1abChlKSxpPXI9PT1lLm93bmVyRG9jdW1lbnQ/LmJvZHksYT0kKHIpO2lmKGkpe2xldCBlPSRsKGEpO3JldHVybiB0LmNvbmNhdChhLGEudmlzdWFsVmlld3BvcnR8fFtdLExsKHIpP3I6W10sZSYmbj9RbChlKTpbXSl9cmV0dXJuIHQuY29uY2F0KHIsUWwocixbXSxuKSl9ZnVuY3Rpb24gJGwoZSl7cmV0dXJuIGUucGFyZW50JiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wYXJlbnQpP2UuZnJhbWVFbGVtZW50Om51bGx9ZnVuY3Rpb24gZXUoZSl7bGV0IHQ9SmwoZSksbj1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLHI9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDAsaT1GbChlKSxhPWk/ZS5vZmZzZXRXaWR0aDpuLG89aT9lLm9mZnNldEhlaWdodDpyLHM9V2MobikhPT1hfHxXYyhyKSE9PW87cmV0dXJuIHMmJihuPWEscj1vKSx7d2lkdGg6bixoZWlnaHQ6ciwkOnN9fWZ1bmN0aW9uIHR1KGUpe3JldHVybiBQbChlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gbnUoZSl7bGV0IHQ9dHUoZSk7aWYoIUZsKHQpKXJldHVybiBLYygxKTtsZXQgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDppLCQ6YX09ZXUodCksbz0oYT9XYyhuLndpZHRoKTpuLndpZHRoKS9yLHM9KGE/V2Mobi5oZWlnaHQpOm4uaGVpZ2h0KS9pO3JldHVybighb3x8IU51bWJlci5pc0Zpbml0ZShvKSkmJihvPTEpLCghc3x8IU51bWJlci5pc0Zpbml0ZShzKSkmJihzPTEpLHt4Om8seTpzfX12YXIgcnU9S2MoMCk7ZnVuY3Rpb24gaXUoZSl7bGV0IHQ9JChlKTtyZXR1cm4hS2woKXx8IXQudmlzdWFsVmlld3BvcnQ/cnU6e3g6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6dC52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIGF1KGUsdCxuKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ITEpLCEhbiYmdCYmbj09PSQoZSl9ZnVuY3Rpb24gb3UoZSx0LG4scil7dD09PXZvaWQgMCYmKHQ9ITEpLG49PT12b2lkIDAmJihuPSExKTtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dHUoZSksbz1LYygxKTt0JiYocj9QbChyKSYmKG89bnUocikpOm89bnUoZSkpO2xldCBzPWF1KGEsbixyKT9pdShhKTpLYygwKSxjPShpLmxlZnQrcy54KS9vLngsbD0oaS50b3Arcy55KS9vLnksdT1pLndpZHRoL28ueCxkPWkuaGVpZ2h0L28ueTtpZihhJiZyKXtsZXQgZT0kKGEpLHQ9UGwocik/JChyKTpyLG49ZSxpPSRsKG4pO2Zvcig7aSYmdCE9PW47KXtsZXQgZT1udShpKSx0PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1KbChpKSxhPXQubGVmdCsoaS5jbGllbnRMZWZ0K3BhcnNlRmxvYXQoci5wYWRkaW5nTGVmdCkpKmUueCxvPXQudG9wKyhpLmNsaWVudFRvcCtwYXJzZUZsb2F0KHIucGFkZGluZ1RvcCkpKmUueTtjKj1lLngsbCo9ZS55LHUqPWUueCxkKj1lLnksYys9YSxsKz1vLG49JChpKSxpPSRsKG4pfX1yZXR1cm4gbWwoe3dpZHRoOnUsaGVpZ2h0OmQseDpjLHk6bH0pfWZ1bmN0aW9uIHN1KGUsdCl7bGV0IG49WWwoZSkuc2Nyb2xsTGVmdDtyZXR1cm4gdD90LmxlZnQrbjpvdShNbChlKSkubGVmdCtufWZ1bmN0aW9uIGN1KGUsdCl7bGV0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDpuLmxlZnQrdC5zY3JvbGxMZWZ0LXN1KGUsbikseTpuLnRvcCt0LnNjcm9sbFRvcH19ZnVuY3Rpb24gbHUoZSl7bGV0e2VsZW1lbnRzOnQscmVjdDpuLG9mZnNldFBhcmVudDpyLHN0cmF0ZWd5Oml9PWUsYT1pPT09YGZpeGVkYCxvPU1sKHIpLHM9dD96bCh0LmZsb2F0aW5nKTohMTtpZihyPT09b3x8cyYmYSlyZXR1cm4gbjtsZXQgYz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxsPUtjKDEpLHU9S2MoMCksZD1GbChyKTtpZigoZHx8IWEpJiYoKGpsKHIpIT09YGJvZHlgfHxMbChvKSkmJihjPVlsKHIpKSxkKSl7bGV0IGU9b3Uocik7bD1udShyKSx1Lng9ZS54K3IuY2xpZW50TGVmdCx1Lnk9ZS55K3IuY2xpZW50VG9wfWxldCBmPW8mJiFkJiYhYT9jdShvLGMpOktjKDApO3JldHVybnt3aWR0aDpuLndpZHRoKmwueCxoZWlnaHQ6bi5oZWlnaHQqbC55LHg6bi54KmwueC1jLnNjcm9sbExlZnQqbC54K3UueCtmLngseTpuLnkqbC55LWMuc2Nyb2xsVG9wKmwueSt1LnkrZi55fX1mdW5jdGlvbiB1dShlKXtyZXR1cm4gZS5nZXRDbGllbnRSZWN0cz9BcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSk6W119ZnVuY3Rpb24gZHUoZSl7bGV0IHQ9WWwoZSksbj1lLm93bmVyRG9jdW1lbnQuYm9keSxyPVVjKGUuc2Nyb2xsV2lkdGgsZS5jbGllbnRXaWR0aCxuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgpLGk9VWMoZS5zY3JvbGxIZWlnaHQsZS5jbGllbnRIZWlnaHQsbi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQpLGE9LXQuc2Nyb2xsTGVmdCtzdShlKSxvPS10LnNjcm9sbFRvcDtyZXR1cm4gSmwobikuZGlyZWN0aW9uPT09YHJ0bGAmJihhKz1VYyhlLmNsaWVudFdpZHRoLG4uY2xpZW50V2lkdGgpLXIpLHt3aWR0aDpyLGhlaWdodDppLHg6YSx5Om99fXZhciBmdT0yNTtmdW5jdGlvbiBwdShlLHQsbil7bj09PXZvaWQgMCYmKG49YHZpZXdwb3J0YCk7bGV0IHI9bj09PWBsYXlvdXRWaWV3cG9ydGAsaT0kKGUpLGE9TWwoZSksbz1pLnZpc3VhbFZpZXdwb3J0LHM9YS5jbGllbnRXaWR0aCxjPWEuY2xpZW50SGVpZ2h0LGw9MCx1PTA7aWYobyl7bGV0IGU9IUtsKCl8fHQ9PT1gZml4ZWRgO3I/ZXx8KGw9LW8ub2Zmc2V0TGVmdCx1PS1vLm9mZnNldFRvcCk6KHM9by53aWR0aCxjPW8uaGVpZ2h0LGUmJihsPW8ub2Zmc2V0TGVmdCx1PW8ub2Zmc2V0VG9wKSl9aWYoc3UoYSk8PTApe2xldCBlPWEub3duZXJEb2N1bWVudCx0PWUuYm9keSxuPWdldENvbXB1dGVkU3R5bGUodCkscj1lLmNvbXBhdE1vZGU9PT1gQ1NTMUNvbXBhdGAmJnBhcnNlRmxvYXQobi5tYXJnaW5MZWZ0KStwYXJzZUZsb2F0KG4ubWFyZ2luUmlnaHQpfHwwLGk9TWF0aC5hYnMoYS5jbGllbnRXaWR0aC10LmNsaWVudFdpZHRoLXIpLG89Z2V0Q29tcHV0ZWRTdHlsZShhKS5zY3JvbGxiYXJHdXR0ZXI9PT1gc3RhYmxlIGJvdGgtZWRnZXNgP2kvMjppO288PWZ1JiYocy09byl9cmV0dXJue3dpZHRoOnMsaGVpZ2h0OmMseDpsLHk6dX19ZnVuY3Rpb24gbXUoZSx0KXtsZXQgbj1vdShlLCEwLHQ9PT1gZml4ZWRgKSxyPW4udG9wK2UuY2xpZW50VG9wLGk9bi5sZWZ0K2UuY2xpZW50TGVmdCxhPW51KGUpO3JldHVybnt3aWR0aDplLmNsaWVudFdpZHRoKmEueCxoZWlnaHQ6ZS5jbGllbnRIZWlnaHQqYS55LHg6aSphLngseTpyKmEueX19ZnVuY3Rpb24gaHUoZSx0LG4pe2xldCByO2lmKHQ9PT1gdmlld3BvcnRgfHx0PT09YGxheW91dFZpZXdwb3J0YClyPXB1KGUsbix0KTtlbHNlIGlmKHQ9PT1gZG9jdW1lbnRgKXI9ZHUoTWwoZSkpO2Vsc2UgaWYoUGwodCkpcj1tdSh0LG4pO2Vsc2V7bGV0IG49aXUoZSk7cj17eDp0Lngtbi54LHk6dC55LW4ueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIG1sKHIpfWZ1bmN0aW9uIGd1KGUsdCl7bGV0IG49dC5nZXQoZSk7aWYobilyZXR1cm4gbjtsZXQgcj1RbChlLFtdLCExKS5maWx0ZXIoZT0+UGwoZSkmJmpsKGUpIT09YGJvZHlgKSxpPW51bGwsYT1KbChlKS5wb3NpdGlvbj09PWBmaXhlZGAsbz1hP1hsKGUpOmU7Zm9yKDtQbChvKSYmIXFsKG8pOyl7bGV0IGU9SmwobyksdD1XbChvKSxuPWk/aS5wb3NpdGlvbjphP2BmaXhlZGA6YGA7IXQmJihuPT09YGZpeGVkYHx8bj09PWBhYnNvbHV0ZWAmJmUucG9zaXRpb249PT1gc3RhdGljYCk/cj1yLmZpbHRlcihlPT5lIT09byk6aT1lLG89WGwobyl9cmV0dXJuIHQuc2V0KGUscikscn1mdW5jdGlvbiBfdShlKXtsZXR7ZWxlbWVudDp0LGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6aX09ZSxhPVsuLi5uPT09YGNsaXBwaW5nQW5jZXN0b3JzYD96bCh0KT9bXTpndSh0LHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxvPWh1KHQsYVswXSxpKSxzPW8udG9wLGM9by5yaWdodCxsPW8uYm90dG9tLHU9by5sZWZ0O2ZvcihsZXQgZT0xO2U8YS5sZW5ndGg7ZSsrKXtsZXQgbj1odSh0LGFbZV0saSk7cz1VYyhuLnRvcCxzKSxjPUhjKG4ucmlnaHQsYyksbD1IYyhuLmJvdHRvbSxsKSx1PVVjKG4ubGVmdCx1KX1yZXR1cm57d2lkdGg6Yy11LGhlaWdodDpsLXMseDp1LHk6c319ZnVuY3Rpb24gdnUoZSl7bGV0e3dpZHRoOnQsaGVpZ2h0Om59PWV1KGUpO3JldHVybnt3aWR0aDp0LGhlaWdodDpufX1mdW5jdGlvbiB5dShlLHQsbil7bGV0IHI9RmwodCksaT1NbCh0KSxhPW49PT1gZml4ZWRgLG89b3UoZSwhMCxhLHQpLHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYz1LYygwKTtpZigocnx8IWEpJiYoKGpsKHQpIT09YGJvZHlgfHxMbChpKSkmJihzPVlsKHQpKSxyKSl7bGV0IGU9b3UodCwhMCxhLHQpO2MueD1lLngrdC5jbGllbnRMZWZ0LGMueT1lLnkrdC5jbGllbnRUb3B9IXImJmkmJihjLng9c3UoaSkpO2xldCBsPWkmJiFyJiYhYT9jdShpLHMpOktjKDApO3JldHVybnt4Om8ubGVmdCtzLnNjcm9sbExlZnQtYy54LWwueCx5Om8udG9wK3Muc2Nyb2xsVG9wLWMueS1sLnksd2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHR9fWZ1bmN0aW9uIGJ1KGUpe3JldHVybiBKbChlKS5wb3NpdGlvbj09PWBzdGF0aWNgfWZ1bmN0aW9uIHh1KGUsdCl7aWYoIUZsKGUpfHxKbChlKS5wb3NpdGlvbj09PWBmaXhlZGApcmV0dXJuIG51bGw7aWYodClyZXR1cm4gdChlKTtsZXQgbj1lLm9mZnNldFBhcmVudDtyZXR1cm4gTWwoZSk9PT1uJiYobj1uLm93bmVyRG9jdW1lbnQuYm9keSksbn1mdW5jdGlvbiBTdShlLHQpe2xldCBuPSQoZSk7aWYoemwoZSkpcmV0dXJuIG47aWYoIUZsKGUpKXtsZXQgdD1YbChlKTtmb3IoO3QmJiFxbCh0KTspe2lmKFBsKHQpJiYhYnUodCkpcmV0dXJuIHQ7dD1YbCh0KX1yZXR1cm4gbn1sZXQgcj14dShlLHQpO2Zvcig7ciYmUmwocikmJmJ1KHIpOylyPXh1KHIsdCk7cmV0dXJuIHImJnFsKHIpJiZidShyKSYmIVdsKHIpP246cnx8R2woZSl8fG59dmFyIEN1PWFzeW5jIGZ1bmN0aW9uKGUpe2xldCB0PXRoaXMuZ2V0T2Zmc2V0UGFyZW50fHxTdSxuPXRoaXMuZ2V0RGltZW5zaW9ucyxyPWF3YWl0IG4oZS5mbG9hdGluZyk7cmV0dXJue3JlZmVyZW5jZTp5dShlLnJlZmVyZW5jZSxhd2FpdCB0KGUuZmxvYXRpbmcpLGUuc3RyYXRlZ3kpLGZsb2F0aW5nOnt4OjAseTowLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fX19O2Z1bmN0aW9uIHd1KGUpe3JldHVybiBKbChlKS5kaXJlY3Rpb249PT1gcnRsYH12YXIgVHU9e2NvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0Omx1LGdldERvY3VtZW50RWxlbWVudDpNbCxnZXRDbGlwcGluZ1JlY3Q6X3UsZ2V0T2Zmc2V0UGFyZW50OlN1LGdldEVsZW1lbnRSZWN0czpDdSxnZXRDbGllbnRSZWN0czp1dSxnZXREaW1lbnNpb25zOnZ1LGdldFNjYWxlOm51LGlzRWxlbWVudDpQbCxpc1JUTDp3dX07ZnVuY3Rpb24gRXUoZSx0KXtyZXR1cm4gZS54PT09dC54JiZlLnk9PT10LnkmJmUud2lkdGg9PT10LndpZHRoJiZlLmhlaWdodD09PXQuaGVpZ2h0fWZ1bmN0aW9uIER1KGUsdCxuKXtsZXQgcj1udWxsLGksYT1NbChlKTtmdW5jdGlvbiBvKCl7dmFyIGU7Y2xlYXJUaW1lb3V0KGkpLChlPXIpPT1udWxsfHxlLmRpc2Nvbm5lY3QoKSxyPW51bGx9ZnVuY3Rpb24gcyhuLGMpe249PT12b2lkIDAmJihuPSExKSxjPT09dm9pZCAwJiYoYz0xKSxvKCk7bGV0IGw9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7bGVmdDp1LHRvcDpkLHdpZHRoOmYsaGVpZ2h0OnB9PWw7aWYobnx8dCgpLCFmfHwhcClyZXR1cm47bGV0IG09R2MoZCksaD1HYyhhLmNsaWVudFdpZHRoLSh1K2YpKSxnPUdjKGEuY2xpZW50SGVpZ2h0LShkK3ApKSxfPUdjKHUpLHY9e3Jvb3RNYXJnaW46LW0rYHB4IGArLWgrYHB4IGArLWcrYHB4IGArLV8rYHB4YCx0aHJlc2hvbGQ6VWMoMCxIYygxLGMpKXx8MX0seT0hMDtmdW5jdGlvbiBiKHQpe2xldCBuPXRbMF0uaW50ZXJzZWN0aW9uUmF0aW87aWYoIUV1KGwsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkpcmV0dXJuIHMoKTtpZihuIT09Yyl7aWYoIXkpcmV0dXJuIHMoKTtuP3MoITEsbik6aT1zZXRUaW1lb3V0KCgpPT57cyghMSwxZS03KX0sMWUzKX15PSExfXRyeXtyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihiLHsuLi52LHJvb3Q6YS5vd25lckRvY3VtZW50fSl9Y2F0Y2h7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix2KX1yLm9ic2VydmUoZSl9bGV0IGM9JChlKSxsPSgpPT5zKG4pO3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCkscyghMCksKCk9PntjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHJlc2l6ZWAsbCksbygpfX1mdW5jdGlvbiBPdShlLHQsbixyKXtyPT09dm9pZCAwJiYocj17fSk7bGV0e2FuY2VzdG9yU2Nyb2xsOmk9ITAsYW5jZXN0b3JSZXNpemU6YT0hMCxlbGVtZW50UmVzaXplOm89dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT1gZnVuY3Rpb25gLGxheW91dFNoaWZ0OnM9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT1gZnVuY3Rpb25gLGFuaW1hdGlvbkZyYW1lOmM9ITF9PXIsbD10dShlKSx1PWl8fGE/Wy4uLmw/UWwobCk6W10sLi4udD9RbCh0KTpbXV06W107dS5mb3JFYWNoKGU9PntpJiZlLmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSk7bGV0IGQ9bCYmcz9EdShsLG4sYSk6bnVsbCxmPS0xLHA9bnVsbDtvJiYocD1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2xldFtyXT1lO3ImJnIudGFyZ2V0PT09bCYmcCYmdCYmKHAudW5vYnNlcnZlKHQpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpLGY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGU7KGU9cCk9PW51bGx8fGUub2JzZXJ2ZSh0KX0pKSxuKCl9KSxsJiYhYyYmcC5vYnNlcnZlKGwpLHQmJnAub2JzZXJ2ZSh0KSk7bGV0IG0saD1jP291KGUpOm51bGw7YyYmZygpO2Z1bmN0aW9uIGcoKXtsZXQgdD1vdShlKTtoJiYhRXUoaCx0KSYmbigpLGg9dCxtPXJlcXVlc3RBbmltYXRpb25GcmFtZShnKX1yZXR1cm4gbigpLCgpPT57dmFyIGU7dS5mb3JFYWNoKGU9PntpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsbiksYSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLG4pfSksZD8uKCksKGU9cCk9PW51bGx8fGUuZGlzY29ubmVjdCgpLHA9bnVsbCxjJiZjYW5jZWxBbmltYXRpb25GcmFtZShtKX19dmFyIGt1PUVsLEF1PURsLGp1PWJsLE11PWtsLE51PUNsLFB1PXlsLEZ1PU9sLEl1PShlLHQsbik9PntsZXQgcj1uZXcgTWFwLGk9bj8/e30sYT17Li4uVHUsLi4uaS5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gdmwoZSx0LHsuLi5pLHBsYXRmb3JtOmF9KX07ZnVuY3Rpb24gTHUoZSl7cmV0dXJuIHR5cGVvZiBlPT1gb2JqZWN0YCYmISFlJiZgJGVsYGluIGV9ZnVuY3Rpb24gUnUoZSl7aWYoTHUoZSkpe2xldCB0PWUuJGVsO3JldHVybiBObCh0KSYmamwodCk9PT1gI2NvbW1lbnRgP251bGw6dH1yZXR1cm4gZX1mdW5jdGlvbiB6dShlKXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSgpOkIoZSl9ZnVuY3Rpb24gQnUoZSl7cmV0dXJue25hbWU6YGFycm93YCxvcHRpb25zOmUsZm4odCl7bGV0IG49UnUoenUoZS5lbGVtZW50KSk7cmV0dXJuIG49PW51bGw/e306UHUoe2VsZW1lbnQ6bixwYWRkaW5nOmUucGFkZGluZ30pLmZuKHQpfX19ZnVuY3Rpb24gVnUoZSl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+YHVgPzE6KGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIEh1KGUsdCl7bGV0IG49VnUoZSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufWZ1bmN0aW9uIFV1KGUsdCxuKXtuPT09dm9pZCAwJiYobj17fSk7bGV0IHI9bi53aGlsZUVsZW1lbnRzTW91bnRlZCxpPUwoKCk9Pnp1KG4ub3Blbik/PyEwKSxhPUwoKCk9Pnp1KG4ubWlkZGxld2FyZSkpLG89TCgoKT0+enUobi5wbGFjZW1lbnQpPz9gYm90dG9tYCkscz1MKCgpPT56dShuLnN0cmF0ZWd5KT8/YGFic29sdXRlYCksYz1MKCgpPT56dShuLnRyYW5zZm9ybSk/PyEwKSxsPUwoKCk9PlJ1KGUudmFsdWUpKSx1PUwoKCk9PlJ1KHQudmFsdWUpKSxkPWooMCksZj1qKDApLHA9aihzLnZhbHVlKSxtPWooby52YWx1ZSksaD1UZSh7fSksZz1qKCExKSxfPUwoKCk9PntsZXQgZT17cG9zaXRpb246cC52YWx1ZSxsZWZ0OmAwYCx0b3A6YDBgfTtpZighdS52YWx1ZSlyZXR1cm4gZTtsZXQgdD1IdSh1LnZhbHVlLGQudmFsdWUpLG49SHUodS52YWx1ZSxmLnZhbHVlKTtyZXR1cm4gYy52YWx1ZT97Li4uZSx0cmFuc2Zvcm06YHRyYW5zbGF0ZShgK3QrYHB4LCBgK24rYHB4KWAsLi4uVnUodS52YWx1ZSk+PTEuNSYme3dpbGxDaGFuZ2U6YHRyYW5zZm9ybWB9fTp7cG9zaXRpb246cC52YWx1ZSxsZWZ0OnQrYHB4YCx0b3A6bitgcHhgfX0pLHY7ZnVuY3Rpb24geSgpe2lmKGwudmFsdWU9PW51bGx8fHUudmFsdWU9PW51bGwpcmV0dXJuO2xldCBlPWkudmFsdWU7SXUobC52YWx1ZSx1LnZhbHVlLHttaWRkbGV3YXJlOmEudmFsdWUscGxhY2VtZW50Om8udmFsdWUsc3RyYXRlZ3k6cy52YWx1ZX0pLnRoZW4odD0+e2QudmFsdWU9dC54LGYudmFsdWU9dC55LHAudmFsdWU9dC5zdHJhdGVneSxtLnZhbHVlPXQucGxhY2VtZW50LGgudmFsdWU9dC5taWRkbGV3YXJlRGF0YSxnLnZhbHVlPWUhPT0hMX0pfWZ1bmN0aW9uIGIoKXt0eXBlb2Ygdj09YGZ1bmN0aW9uYCYmKHYoKSx2PXZvaWQgMCl9ZnVuY3Rpb24geCgpe2lmKGIoKSxyPT09dm9pZCAwKXt5KCk7cmV0dXJufWlmKGwudmFsdWUhPW51bGwmJnUudmFsdWUhPW51bGwpe3Y9cihsLnZhbHVlLHUudmFsdWUseSk7cmV0dXJufX1mdW5jdGlvbiBTKCl7aS52YWx1ZXx8KGcudmFsdWU9ITEpfXJldHVybiBEKFthLG8scyxpXSx5LHtmbHVzaDpgc3luY2B9KSxEKFtsLHVdLHgse2ZsdXNoOmBzeW5jYH0pLEQoaSxTLHtmbHVzaDpgc3luY2B9KSxiZSgpJiZRZShiKSx7eDppdChkKSx5Oml0KGYpLHN0cmF0ZWd5Oml0KHApLHBsYWNlbWVudDppdChtKSxtaWRkbGV3YXJlRGF0YTppdChoKSxpc1Bvc2l0aW9uZWQ6aXQoZyksZmxvYXRpbmdTdHlsZXM6Xyx1cGRhdGU6eX19dmFyIFd1PVtgZGlyYF0sR3U9e3NpZGU6YGJvdHRvbWAsc2lkZU9mZnNldDowLHNpZGVGbGlwOiEwLGFsaWduOmBjZW50ZXJgLGFsaWduT2Zmc2V0OjAsYWxpZ25GbGlwOiEwLGFycm93UGFkZGluZzowLGhpZGVTaGlmdGVkQXJyb3c6ITAsYXZvaWRDb2xsaXNpb25zOiEwLGNvbGxpc2lvbkJvdW5kYXJ5OigpPT5bXSxjb2xsaXNpb25QYWRkaW5nOjAsc3RpY2t5OmBwYXJ0aWFsYCxoaWRlV2hlbkRldGFjaGVkOiExLHBvc2l0aW9uU3RyYXRlZ3k6YGZpeGVkYCx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5OmBvcHRpbWl6ZWRgLHByaW9yaXRpemVQb3NpdGlvbjohMX0sW0t1LHF1XT1hKGBQb3BwZXJDb250ZW50YCksSnU9SCh7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgUG9wcGVyQ29udGVudGAscHJvcHM6eCh7bWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHsuLi5HdX0pLGVtaXRzOltgcGxhY2VkYF0sc2V0dXAobix7ZW1pdDpyfSl7bGV0IGk9bixhPXIsbz1QYygpLHtmb3J3YXJkUmVmOnMsY3VycmVudEVsZW1lbnQ6Y309dCgpLGw9ZShMKCgpPT5pLmRpcikpLHU9aigpLGY9aigpLHt3aWR0aDptLGhlaWdodDpofT1acyhmKSxnPUwoKCk9Pmkuc2lkZSsoaS5hbGlnbj09PWBjZW50ZXJgP2BgOmAtJHtpLmFsaWdufWApKSxfPUwoKCk9PnR5cGVvZiBpLmNvbGxpc2lvblBhZGRpbmc9PWBudW1iZXJgP2kuY29sbGlzaW9uUGFkZGluZzp7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjAsLi4uaS5jb2xsaXNpb25QYWRkaW5nfSksdj1MKCgpPT5BcnJheS5pc0FycmF5KGkuY29sbGlzaW9uQm91bmRhcnkpP2kuY29sbGlzaW9uQm91bmRhcnk6W2kuY29sbGlzaW9uQm91bmRhcnldKSx5PUwoKCk9Pih7cGFkZGluZzpfLnZhbHVlLGJvdW5kYXJ5OnYudmFsdWUuZmlsdGVyKFJjKSxhbHRCb3VuZGFyeTp2LnZhbHVlLmxlbmd0aD4wfSkpLGI9TCgoKT0+KHttYWluQXhpczppLnNpZGVGbGlwLGNyb3NzQXhpczppLmFsaWduRmxpcH0pKSx4PUwoKCk9PltrdSh7bWFpbkF4aXM6aS5zaWRlT2Zmc2V0K2gudmFsdWUsYWxpZ25tZW50QXhpczppLmFsaWduT2Zmc2V0fSksaS5wcmlvcml0aXplUG9zaXRpb24mJmkuYXZvaWRDb2xsaXNpb25zJiZqdSh7Li4ueS52YWx1ZSwuLi5iLnZhbHVlfSksaS5hdm9pZENvbGxpc2lvbnMmJkF1KHttYWluQXhpczohMCxjcm9zc0F4aXM6ISFpLnByaW9yaXRpemVQb3NpdGlvbixsaW1pdGVyOmkuc3RpY2t5PT09YHBhcnRpYWxgP0Z1KCk6dm9pZCAwLC4uLnkudmFsdWV9KSwhaS5wcmlvcml0aXplUG9zaXRpb24mJmkuYXZvaWRDb2xsaXNpb25zJiZqdSh7Li4ueS52YWx1ZSwuLi5iLnZhbHVlfSksTXUoey4uLnkudmFsdWUsYXBwbHk6KHtlbGVtZW50czplLHJlY3RzOnQsYXZhaWxhYmxlV2lkdGg6bixhdmFpbGFibGVIZWlnaHQ6cn0pPT57bGV0e3dpZHRoOmksaGVpZ2h0OmF9PXQucmVmZXJlbmNlLG89ZS5mbG9hdGluZy5zdHlsZTtvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS13aWR0aGAsYCR7bn1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodGAsYCR7cn1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLXdpZHRoYCxgJHtpfXB4YCksby5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hbmNob3ItaGVpZ2h0YCxgJHthfXB4YCl9fSksZi52YWx1ZSYmQnUoe2VsZW1lbnQ6Zi52YWx1ZSxwYWRkaW5nOmkuYXJyb3dQYWRkaW5nfSksemMoe2Fycm93V2lkdGg6bS52YWx1ZSxhcnJvd0hlaWdodDpoLnZhbHVlLGRpcjpsLnZhbHVlfSksaS5oaWRlV2hlbkRldGFjaGVkJiZOdSh7c3RyYXRlZ3k6YHJlZmVyZW5jZUhpZGRlbmAsLi4ueS52YWx1ZX0pXSkse2Zsb2F0aW5nU3R5bGVzOlMscGxhY2VtZW50OkMsaXNQb3NpdGlvbmVkOncsbWlkZGxld2FyZURhdGE6VCx1cGRhdGU6ZWV9PVV1KEwoKCk9PmkucmVmZXJlbmNlPz9vLmFuY2hvci52YWx1ZSksdSx7c3RyYXRlZ3k6aS5wb3NpdGlvblN0cmF0ZWd5LHBsYWNlbWVudDpnLHdoaWxlRWxlbWVudHNNb3VudGVkOiguLi5lKT0+T3UoLi4uZSx7bGF5b3V0U2hpZnQ6IWkuZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQsYW5pbWF0aW9uRnJhbWU6aS51cGRhdGVQb3NpdGlvblN0cmF0ZWd5PT09YGFsd2F5c2B9KSxtaWRkbGV3YXJlOnh9KSxEPUwoKCk9PkJjKEMudmFsdWUpWzBdKSx0ZT1MKCgpPT5CYyhDLnZhbHVlKVsxXSk7aWUoKCk9Pnt3LnZhbHVlJiZhKGBwbGFjZWRgKX0pO2xldCBuZT1MKCgpPT57bGV0IGU9VC52YWx1ZS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MDtyZXR1cm4gaS5oaWRlU2hpZnRlZEFycm93JiZlfSkscmU9aihgYCk7cmV0dXJuIE8oKCk9PntjLnZhbHVlJiYocmUudmFsdWU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYy52YWx1ZSkuekluZGV4KX0pLHF1KHtwbGFjZWRTaWRlOkQsb25BcnJvd0NoYW5nZTplPT5mLnZhbHVlPWUsYXJyb3dYOkwoKCk9PlQudmFsdWUuYXJyb3c/Lng/PzApLGFycm93WTpMKCgpPT5ULnZhbHVlLmFycm93Py55Pz8wKSxzaG91bGRIaWRlQXJyb3c6bmV9KSwoZSx0KT0+KFAoKSx6KGBkaXZgLHtyZWZfa2V5OmBmbG9hdGluZ1JlZmAscmVmOnUsImRhdGEtcmVrYS1wb3BwZXItY29udGVudC13cmFwcGVyIjpgYCxkaXI6QihsKSxzdHlsZTpwKHsuLi5CKFMpLHRyYW5zZm9ybTpCKHcpP0IoUykudHJhbnNmb3JtOmB0cmFuc2xhdGUoMCwgLTIwMCUpYCxtaW5XaWR0aDpgbWF4LWNvbnRlbnRgLHpJbmRleDpyZS52YWx1ZSwiLS1yZWthLXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luIjpbQihUKS50cmFuc2Zvcm1PcmlnaW4/LngsQihUKS50cmFuc2Zvcm1PcmlnaW4/LnldLmpvaW4oYCBgKSwuLi5CKFQpLmhpZGU/LnJlZmVyZW5jZUhpZGRlbiYme3Zpc2liaWxpdHk6YGhpZGRlbmAscG9pbnRlckV2ZW50czpgbm9uZWB9fSl9LFtpLm1lbW9EZXBlbmRlbmNpZXM/ZChbaS5hc0NoaWxkLGkuYXMsRC52YWx1ZSx0ZS52YWx1ZSxCKHcpLC4uLk9iamVjdC52YWx1ZXMoZS4kYXR0cnMpLC4uLmkubWVtb0RlcGVuZGVuY2llc10sKCk9PihQKCksTShCKEYpLGsoe2tleTowLHJlZjpCKHMpfSxlLiRhdHRycyx7ImFzLWNoaWxkIjppLmFzQ2hpbGQsYXM6aS5hcywiZGF0YS1zaWRlIjpELnZhbHVlLCJkYXRhLWFsaWduIjp0ZS52YWx1ZSxzdHlsZTp7YW5pbWF0aW9uOkIodyk/dm9pZCAwOmBub25lYH19KSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGFzLWNoaWxkYCxgYXNgLGBkYXRhLXNpZGVgLGBkYXRhLWFsaWduYCxgc3R5bGVgXSkpLHQsMCk6KFAoKSxNKEIoRiksayh7a2V5OjEscmVmOkIocyl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOmkuYXNDaGlsZCxhczppLmFzLCJkYXRhLXNpZGUiOkQudmFsdWUsImRhdGEtYWxpZ24iOnRlLnZhbHVlLGRpcjpCKGwpLHN0eWxlOnthbmltYXRpb246Qih3KT92b2lkIDA6YG5vbmVgfX0pLHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgYXMtY2hpbGRgLGBhc2AsYGRhdGEtc2lkZWAsYGRhdGEtYWxpZ25gLGBkaXJgLGBzdHlsZWBdKSldLDEyLFd1KSl9fSk7ZnVuY3Rpb24gWXUoZSl7bGV0IHQ9cih7bm9uY2U6aigpfSk7cmV0dXJuIEwoKCk9PmU/LnZhbHVlfHx0Lm5vbmNlPy52YWx1ZSl9dmFyIFh1PVtgIGAsYEVudGVyYCxgQXJyb3dVcGAsYEFycm93RG93bmBdLFp1PVtgIGAsYEVudGVyYF07ZnVuY3Rpb24gUXUoZSx0LG4pe3JldHVybiBlPT09dm9pZCAwPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKGU9PiR1KGUsdCxuKSk6JHUoZSx0LG4pfWZ1bmN0aW9uICR1KGUsdCxuKXtyZXR1cm4gZT09PXZvaWQgMHx8dD09PXZvaWQgMD8hMTp0eXBlb2YgZT09YHN0cmluZ2A/ZT09PXQ6dHlwZW9mIG49PWBmdW5jdGlvbmA/bihlLHQpOnR5cGVvZiBuPT1gc3RyaW5nYD9lPy5bbl09PT10Py5bbl06VHMoZSx0KX1mdW5jdGlvbiBlZChlKXtyZXR1cm4gZT09bnVsbHx8ZT09PWBgfHxBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTB9dmFyIHRkPVtgdmFsdWVgXSxbbmQscmRdPWEoYFNlbGVjdFJvb3RgKSxpZD1IKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RSb290YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxudWxsYWJsZVZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXSxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cCh0LHtlbWl0Om59KXtsZXQgcj10LGk9bix7cmVxdWlyZWQ6YSxkaXNhYmxlZDpvLG11bHRpcGxlOnMsZGlyOmN9PUZlKHIpLGw9c2UocixgbW9kZWxWYWx1ZWAsaSx7ZGVmYXVsdFZhbHVlOnIuZGVmYXVsdFZhbHVlPz8ocy52YWx1ZT9bXTp2b2lkIDApLHBhc3NpdmU6ci5tb2RlbFZhbHVlPT09dm9pZCAwLGRlZXA6ITB9KSx1PXNlKHIsYG9wZW5gLGkse2RlZmF1bHRWYWx1ZTpyLmRlZmF1bHRPcGVuLHBhc3NpdmU6ci5vcGVuPT09dm9pZCAwfSksZD1qKCksZj1qKCkscD1qKHt4OjAseTowfSksbT1MKCgpPT5zLnZhbHVlJiZBcnJheS5pc0FycmF5KGwudmFsdWUpP2wudmFsdWU/Lmxlbmd0aD09PTA6T3MobC52YWx1ZSkpO01jKHtpc1Byb3ZpZGVyOiEwfSk7bGV0IGg9ZShjKSxnPUJzKGQpLF89aihuZXcgU2V0KSx2PUwoKCk9PkFycmF5LmZyb20oXy52YWx1ZSkubWFwKGU9PmUudmFsdWUpLmpvaW4oYDtgKSk7ZnVuY3Rpb24geShlKXtpZihzLnZhbHVlKXtsZXQgdD1BcnJheS5pc0FycmF5KGwudmFsdWUpP1suLi5sLnZhbHVlXTpbXSxuPXQuZmluZEluZGV4KHQ9PiR1KHQsZSxyLmJ5KSk7bj09PS0xP3QucHVzaChlKTp0LnNwbGljZShuLDEpLGwudmFsdWU9Wy4uLnRdfWVsc2UgbC52YWx1ZT1lfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIEFycmF5LmZyb20oXy52YWx1ZSkuZmluZCh0PT5RdShlLHQudmFsdWUsci5ieSkpfXJldHVybiByZCh7dHJpZ2dlckVsZW1lbnQ6ZCxvblRyaWdnZXJDaGFuZ2U6ZT0+e2QudmFsdWU9ZX0sdmFsdWVFbGVtZW50OmYsb25WYWx1ZUVsZW1lbnRDaGFuZ2U6ZT0+e2YudmFsdWU9ZX0sY29udGVudElkOmBgLG1vZGVsVmFsdWU6bCxvblZhbHVlQ2hhbmdlOnksYnk6ci5ieSxvcGVuOnUsbXVsdGlwbGU6cyxyZXF1aXJlZDphLG9uT3BlbkNoYW5nZTplPT57dS52YWx1ZT1lfSxkaXI6aCx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6cCxkaXNhYmxlZDpvLGlzRW1wdHlNb2RlbFZhbHVlOm0sb3B0aW9uc1NldDpfLG9uT3B0aW9uQWRkOmU9PntsZXQgdD1iKGUudmFsdWUpO3QmJl8udmFsdWUuZGVsZXRlKHQpLF8udmFsdWUuYWRkKGUpfSxvbk9wdGlvblJlbW92ZTplPT57bGV0IHQ9YihlLnZhbHVlKTt0JiZfLnZhbHVlLmRlbGV0ZSh0KX19KSwoZSx0KT0+KFAoKSxNKEIoSWMpLG51bGwse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOkIobCksb3BlbjpCKHUpfSksQihnKSYmZS5uYW1lPyhQKCksTShhZCx7a2V5OnYudmFsdWUsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsdGFiaW5kZXg6YC0xYCxtdWx0aXBsZTpCKHMpLHJlcXVpcmVkOkIoYSksbmFtZTplLm5hbWUsYXV0b2NvbXBsZXRlOmUuYXV0b2NvbXBsZXRlLGRpc2FibGVkOkIobyksdmFsdWU6QihsKX0se2RlZmF1bHQ6RSgoKT0+W0IoT3MpKEIobCkpPyhQKCkseihgb3B0aW9uYCx7a2V5OjAsdmFsdWU6ZS5udWxsYWJsZVZhbHVlfSxudWxsLDgsdGQpKTpJKGB2LWlmYCwhMCksKFAoITApLHoodmUsbnVsbCxhdChBcnJheS5mcm9tKF8udmFsdWUpLGU9PihQKCkseihgb3B0aW9uYCxrKHtrZXk6ZS52YWx1ZT8/YGB9LHtyZWZfZm9yOiEwfSxlKSxudWxsLDE2KSkpLDEyOCkpXSksXzoxfSw4LFtgbXVsdGlwbGVgLGByZXF1aXJlZGAsYG5hbWVgLGBhdXRvY29tcGxldGVgLGBkaXNhYmxlZGAsYHZhbHVlYF0pKTpJKGB2LWlmYCwhMCldKSxfOjN9KSl9fSksYWQ9SCh7X19uYW1lOmBCdWJibGVTZWxlY3RgLHByb3BzOnthdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhdXRvZm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9ybTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LG5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzaXplOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sdmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1qKCkscj1uZCgpO0QoKCk9PnQudmFsdWUsKGUsdCk9PntsZXQgcj13aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGB2YWx1ZWApLnNldDtpZihlIT09dCYmaSYmbi52YWx1ZSl7bGV0IHQ9bmV3IEV2ZW50KGBjaGFuZ2VgLHtidWJibGVzOiEwfSk7aS5jYWxsKG4udmFsdWUsZSksbi52YWx1ZS5kaXNwYXRjaEV2ZW50KHQpfX0pO2Z1bmN0aW9uIGkoZSl7ci5vblZhbHVlQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1yZXR1cm4oZSxyKT0+KFAoKSxNKEIoTmMpLHsiYXMtY2hpbGQiOmBgfSx7ZGVmYXVsdDpFKCgpPT5bUihgc2VsZWN0YCxrKHtyZWZfa2V5OmBzZWxlY3RFbGVtZW50YCxyZWY6bn0sdCx7b25JbnB1dDppfSksW04oZS4kc2xvdHMsYGRlZmF1bHRgKV0sMTYpXSksXzozfSkpfX0pLG9kPUgoe19fbmFtZTpgU2VsZWN0UG9wcGVyUG9zaXRpb25gLHByb3BzOnttZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHN0YXJ0YH0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExLGRlZmF1bHQ6MTB9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9aShlKTtyZXR1cm4oZSxuKT0+KFAoKSxNKEIoSnUpLGsoQih0KSx7c3R5bGU6e2JveFNpemluZzpgYm9yZGVyLWJveGAsIi0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjpgdmFyKC0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClgLCItLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3Itd2lkdGgpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWFuY2hvci1oZWlnaHQpYH19KSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLHNkPXtvblZpZXdwb3J0Q2hhbmdlOigpPT57fSxpdGVtVGV4dFJlZkNhbGxiYWNrOigpPT57fSxpdGVtUmVmQ2FsbGJhY2s6KCk9Pnt9fSxbY2QsbGRdPWEoYFNlbGVjdENvbnRlbnRgKSx1ZD1IKHtfX25hbWU6YFNlbGVjdENvbnRlbnRJbXBsYCxwcm9wczp7cG9zaXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGl0ZW0tYWxpZ25lZGB9LGJvZHlMb2NrOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzdGFydGB9LGFsaWduT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxjb2xsaXNpb25Cb3VuZGFyeTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxjb2xsaXNpb25QYWRkaW5nOnt0eXBlOltOdW1iZXIsT2JqZWN0XSxyZXF1aXJlZDohMX0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGE9bmQoKTtScygpLFBzKG4uYm9keUxvY2spO2xldHtDb2xsZWN0aW9uU2xvdDpvLGdldEl0ZW1zOnN9PU1jKCksYz1qKCk7WHMoYyk7bGV0e3NlYXJjaDpsLGhhbmRsZVR5cGVhaGVhZFNlYXJjaDp1fT0kcygpLGQ9aigpLGY9aigpLHA9aigpLG09aighMSksaD1qKCExKSxnPWooITEpO2Z1bmN0aW9uIF8oKXtmLnZhbHVlJiZjLnZhbHVlJiZrYyhbZi52YWx1ZSxjLnZhbHVlXSl9RChtLCgpPT57XygpfSk7bGV0e29uT3BlbkNoYW5nZTp2LHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjp5fT1hO08oZT0+e2lmKCFjLnZhbHVlKXJldHVybjtsZXQgdD17eDowLHk6MH0sbj1lPT57dD17eDpNYXRoLmFicyhNYXRoLnJvdW5kKGUucGFnZVgpLSh5LnZhbHVlPy54Pz8wKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKGUucGFnZVkpLSh5LnZhbHVlPy55Pz8wKSl9fSxyPWU9PntlLnBvaW50ZXJUeXBlIT09YHRvdWNoYCYmKHQueDw9MTAmJnQueTw9MTA/ZS5wcmV2ZW50RGVmYXVsdCgpOmMudmFsdWU/LmNvbnRhaW5zKGUudGFyZ2V0KXx8dighMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcm1vdmVgLG4pLHkudmFsdWU9bnVsbCl9O3kudmFsdWUhPT1udWxsJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcm1vdmVgLG4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYHBvaW50ZXJ1cGAscix7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLGUoKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcnVwYCxyLHtjYXB0dXJlOiEwfSl9KX0pO2Z1bmN0aW9uIGIoZSl7bGV0IHQ9ZS5jdHJsS2V5fHxlLmFsdEtleXx8ZS5tZXRhS2V5O2lmKGUua2V5PT09YFRhYmAmJmUucHJldmVudERlZmF1bHQoKSwhdCYmZS5rZXkubGVuZ3RoPT09MSYmdShlLmtleSxzKCkpLFtgQXJyb3dVcGAsYEFycm93RG93bmAsYEhvbWVgLGBFbmRgXS5pbmNsdWRlcyhlLmtleSkpe2xldCB0PVsuLi5zKCkubWFwKGU9PmUucmVmKV07aWYoW2BBcnJvd1VwYCxgRW5kYF0uaW5jbHVkZXMoZS5rZXkpJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpKSxbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhlLmtleSkpe2xldCBuPWUudGFyZ2V0LHI9dC5pbmRleE9mKG4pO3Q9dC5zbGljZShyKzEpfXNldFRpbWVvdXQoKCk9PmtjKHQpKSxlLnByZXZlbnREZWZhdWx0KCl9fWxldCB4PUwoKCk9Pm4ucG9zaXRpb249PT1gcG9wcGVyYD9uOnt9KSxTPWkoeC52YWx1ZSk7cmV0dXJuIGxkKHtjb250ZW50OmMsdmlld3BvcnQ6ZCxvblZpZXdwb3J0Q2hhbmdlOmU9PntkLnZhbHVlPWV9LGl0ZW1SZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IWgudmFsdWUmJiFuLGk9UXUoYS5tb2RlbFZhbHVlLnZhbHVlLHQsYS5ieSk7aWYoYS5tdWx0aXBsZS52YWx1ZSl7aWYoZy52YWx1ZSlyZXR1cm47KGl8fHIpJiYoZi52YWx1ZT1lLGkmJihnLnZhbHVlPSEwKSl9ZWxzZShpfHxyKSYmKGYudmFsdWU9ZSk7ciYmKGgudmFsdWU9ITApfSxzZWxlY3RlZEl0ZW06ZixzZWxlY3RlZEl0ZW1UZXh0OnAsb25JdGVtTGVhdmU6KCk9PntjLnZhbHVlPy5mb2N1cygpfSxpdGVtVGV4dFJlZkNhbGxiYWNrOihlLHQsbik9PntsZXQgcj0haC52YWx1ZSYmIW47KFF1KGEubW9kZWxWYWx1ZS52YWx1ZSx0LGEuYnkpfHxyKSYmKHAudmFsdWU9ZSl9LGZvY3VzU2VsZWN0ZWRJdGVtOl8scG9zaXRpb246bi5wb3NpdGlvbixpc1Bvc2l0aW9uZWQ6bSxzZWFyY2hSZWY6bH0pLChlLHQpPT4oUCgpLE0oQihvKSxudWxsLHtkZWZhdWx0OkUoKCk9PltBKEIoVGMpLHsiYXMtY2hpbGQiOmBgLG9uTW91bnRBdXRvRm9jdXM6dFs2XXx8PV9lKCgpPT57fSxbYHByZXZlbnRgXSksb25Vbm1vdW50QXV0b0ZvY3VzOnRbN118fD1lPT57cihgY2xvc2VBdXRvRm9jdXNgLGUpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihCKGEpLnRyaWdnZXJFbGVtZW50LnZhbHVlPy5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGUucHJldmVudERlZmF1bHQoKSl9fSx7ZGVmYXVsdDpFKCgpPT5bQShCKGRjKSx7ImFzLWNoaWxkIjpgYCwiZGlzYWJsZS1vdXRzaWRlLXBvaW50ZXItZXZlbnRzIjplLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cyxvbkZvY3VzT3V0c2lkZTp0WzJdfHw9X2UoKCk9Pnt9LFtgcHJldmVudGBdKSxvbkRpc21pc3M6dFszXXx8PWU9PkIoYSkub25PcGVuQ2hhbmdlKCExKSxvbkVzY2FwZUtleURvd246dFs0XXx8PWU9PnIoYGVzY2FwZUtleURvd25gLGUpLG9uUG9pbnRlckRvd25PdXRzaWRlOnRbNV18fD1lPT5yKGBwb2ludGVyRG93bk91dHNpZGVgLGUpfSx7ZGVmYXVsdDpFKCgpPT5bKFAoKSxNKEhlKGUucG9zaXRpb249PT1gcG9wcGVyYD9vZDpwZCksayh7Li4uZS4kYXR0cnMsLi4uQihTKX0se2lkOkIoYSkuY29udGVudElkLHJlZjplPT57aWYoIWUpcmV0dXJuO2xldCB0PUIocmUpKGUpO3Q/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9jLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6Yy52YWx1ZT10fSxyb2xlOmBsaXN0Ym94YCwiZGF0YS1zdGF0ZSI6QihhKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCxkaXI6QihhKS5kaXIudmFsdWUsc3R5bGU6e2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAsb3V0bGluZTpgbm9uZWB9LG9uQ29udGV4dG1lbnU6dFswXXx8PV9lKCgpPT57fSxbYHByZXZlbnRgXSksb25QbGFjZWQ6dFsxXXx8PWU9Pm0udmFsdWU9ITAsb25LZXlkb3duOmJ9KSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGlkYCxgZGF0YS1zdGF0ZWAsYGRpcmAsYG9uS2V5ZG93bmBdKSldKSxfOjN9LDgsW2BkaXNhYmxlLW91dHNpZGUtcG9pbnRlci1ldmVudHNgXSldKSxfOjN9KV0pLF86M30pKX19KSxbZGQsZmRdPWEoYFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25gKSxwZD1IKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RJdGVtQWxpZ25lZFBvc2l0aW9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BwbGFjZWRgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bix7Z2V0SXRlbXM6YX09TWMoKSxvPW5kKCkscz1jZCgpLGM9aighMSksbD1qKCEwKSx1PWooKSx7Zm9yd2FyZFJlZjpkLGN1cnJlbnRFbGVtZW50OmZ9PXQoKSx7dmlld3BvcnQ6bSxzZWxlY3RlZEl0ZW06aCxzZWxlY3RlZEl0ZW1UZXh0OmcsZm9jdXNTZWxlY3RlZEl0ZW06X309cztmdW5jdGlvbiB2KCl7aWYoby50cmlnZ2VyRWxlbWVudC52YWx1ZSYmby52YWx1ZUVsZW1lbnQudmFsdWUmJnUudmFsdWUmJmYudmFsdWUmJm0/LnZhbHVlJiZoPy52YWx1ZSYmZz8udmFsdWUpe2xldCBlPW8udHJpZ2dlckVsZW1lbnQudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdD1mLnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49by52YWx1ZUVsZW1lbnQudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1nLnZhbHVlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKG8uZGlyLnZhbHVlIT09YHJ0bGApe2xldCBpPXIubGVmdC10LmxlZnQsYT1uLmxlZnQtaSxvPWUubGVmdC1hLHM9ZS53aWR0aCtvLGM9TWF0aC5tYXgocyx0LndpZHRoKSxsPXdpbmRvdy5pbm5lcldpZHRoLTEwLGQ9RXMoYSwxMCxNYXRoLm1heCgxMCxsLWMpKTt1LnZhbHVlLnN0eWxlLm1pbldpZHRoPWAke3N9cHhgLHUudmFsdWUuc3R5bGUubGVmdD1gJHtkfXB4YH1lbHNle2xldCBpPXQucmlnaHQtci5yaWdodCxhPXdpbmRvdy5pbm5lcldpZHRoLW4ucmlnaHQtaSxvPXdpbmRvdy5pbm5lcldpZHRoLWUucmlnaHQtYSxzPWUud2lkdGgrbyxjPU1hdGgubWF4KHMsdC53aWR0aCksbD13aW5kb3cuaW5uZXJXaWR0aC0xMCxkPUVzKGEsMTAsTWF0aC5tYXgoMTAsbC1jKSk7dS52YWx1ZS5zdHlsZS5taW5XaWR0aD1gJHtzfXB4YCx1LnZhbHVlLnN0eWxlLnJpZ2h0PWAke2R9cHhgfWxldCBzPWEoKS5tYXAoZT0+ZS5yZWYpLGw9d2luZG93LmlubmVySGVpZ2h0LTIwLGQ9bS52YWx1ZS5zY3JvbGxIZWlnaHQscD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnZhbHVlKSxfPU51bWJlci5wYXJzZUludChwLmJvcmRlclRvcFdpZHRoLDEwKSx2PU51bWJlci5wYXJzZUludChwLnBhZGRpbmdUb3AsMTApLHk9TnVtYmVyLnBhcnNlSW50KHAuYm9yZGVyQm90dG9tV2lkdGgsMTApLGI9TnVtYmVyLnBhcnNlSW50KHAucGFkZGluZ0JvdHRvbSwxMCkseD1fK3YrZCtiK3ksUz1NYXRoLm1pbihoLnZhbHVlLm9mZnNldEhlaWdodCo1LHgpLEM9d2luZG93LmdldENvbXB1dGVkU3R5bGUobS52YWx1ZSksdz1OdW1iZXIucGFyc2VJbnQoQy5wYWRkaW5nVG9wLDEwKSxUPU51bWJlci5wYXJzZUludChDLnBhZGRpbmdCb3R0b20sMTApLEU9ZS50b3ArZS5oZWlnaHQvMi0xMCxlZT1sLUUsRD1oLnZhbHVlLm9mZnNldEhlaWdodC8yLHRlPWgudmFsdWUub2Zmc2V0VG9wK0QsTz1fK3YrdGUsbmU9eC1PO2lmKE88PUUpe2xldCBlPWgudmFsdWU9PT1zLmF0KC0xKTt1LnZhbHVlLnN0eWxlLmJvdHRvbT1gMHB4YDtsZXQgdD1mLnZhbHVlLmNsaWVudEhlaWdodC1tLnZhbHVlLm9mZnNldFRvcC1tLnZhbHVlLm9mZnNldEhlaWdodCxuPU8rTWF0aC5tYXgoZWUsRCsoZT9UOjApK3QreSk7dS52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7bn1weGB9ZWxzZXtsZXQgZT1oLnZhbHVlPT09c1swXTt1LnZhbHVlLnN0eWxlLnRvcD1gMHB4YDtsZXQgdD1NYXRoLm1heChFLF8rbS52YWx1ZS5vZmZzZXRUb3ArKGU/dzowKStEKStuZTt1LnZhbHVlLnN0eWxlLmhlaWdodD1gJHt0fXB4YCxtLnZhbHVlLnNjcm9sbFRvcD1PLUUrbS52YWx1ZS5vZmZzZXRUb3B9dS52YWx1ZS5zdHlsZS5tYXJnaW49YDEwcHggMGAsdS52YWx1ZS5zdHlsZS5taW5IZWlnaHQ9YCR7U31weGAsdS52YWx1ZS5zdHlsZS5tYXhIZWlnaHQ9YCR7bH1weGAsaShgcGxhY2VkYCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5jLnZhbHVlPSEwKX19bGV0IGI9aihgYCk7b2UoYXN5bmMoKT0+e2F3YWl0IHkoKSx2KCksZi52YWx1ZSYmKGIudmFsdWU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZi52YWx1ZSkuekluZGV4KX0pO2Z1bmN0aW9uIHgoZSl7ZSYmbC52YWx1ZT09PSEwJiYodigpLF8/LigpLGwudmFsdWU9ITEpfXJldHVybiBUKG8udHJpZ2dlckVsZW1lbnQsKCk9Pnt2KCl9KSxmZCh7Y29udGVudFdyYXBwZXI6dSxzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpjLG9uU2Nyb2xsQnV0dG9uQ2hhbmdlOnh9KSwoZSx0KT0+KFAoKSx6KGBkaXZgLHtyZWZfa2V5OmBjb250ZW50V3JhcHBlckVsZW1lbnRgLHJlZjp1LHN0eWxlOnAoe2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAscG9zaXRpb246YGZpeGVkYCx6SW5kZXg6Yi52YWx1ZX0pfSxbQShCKEYpLGsoe3JlZjpCKGQpLHN0eWxlOntib3hTaXppbmc6YGJvcmRlci1ib3hgLG1heEhlaWdodDpgMTAwJWB9fSx7Li4uZS4kYXR0cnMsLi4ucn0pLHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0sNCkpfX0pLG1kPUgoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdFByb3ZpZGVyYCxwcm9wczp7Y29udGV4dDp7dHlwZTpPYmplY3QscmVxdWlyZWQ6ITB9fSxzZXR1cChlKXtyZXR1cm4gcmQoZS5jb250ZXh0KSxsZChzZCksKGUsdCk9Pk4oZS4kc2xvdHMsYGRlZmF1bHRgKX19KSxoZD17a2V5OjF9LGdkPUgoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdENvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExfSxhcnJvd1BhZGRpbmc6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxoaWRlU2hpZnRlZEFycm93Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHN0aWNreTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGhpZGVXaGVuRGV0YWNoZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxkaXNhYmxlVXBkYXRlT25MYXlvdXRTaGlmdDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwcmlvcml0aXplUG9zaXRpb246e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCByPWUsaT1uKHIsdCksYT1uZCgpLG89aigpO29lKCgpPT57by52YWx1ZT1uZXcgRG9jdW1lbnRGcmFnbWVudH0pO2xldCBzPWooKSxjPUwoKCk9PnIuZm9yY2VNb3VudHx8YS5vcGVuLnZhbHVlKSxsPWooYy52YWx1ZSksdTtmdW5jdGlvbiBkKCl7dSYmPShjbGVhclRpbWVvdXQodSksdm9pZCAwKX1yZXR1cm4gRChjLChlLHQsbik9PntkKCksdT1zZXRUaW1lb3V0KCgpPT57bC52YWx1ZT1jLnZhbHVlLHU9dm9pZCAwfSksbihkKX0pLEdlKGQpLChlLHQpPT5jLnZhbHVlfHxsLnZhbHVlfHxzLnZhbHVlPy5wcmVzZW50PyhQKCksTShCKGljKSx7a2V5OjAscmVmX2tleTpgcHJlc2VuY2VSZWZgLHJlZjpzLHByZXNlbnQ6Yy52YWx1ZX0se2RlZmF1bHQ6RSgoKT0+W0EodWQsbGUoemUoey4uLkIoaSksLi4uZS4kYXR0cnN9KSkse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpXSksXzozfSw4LFtgcHJlc2VudGBdKSk6by52YWx1ZT8oUCgpLHooYGRpdmAsaGQsWyhQKCksTShPZSx7dG86by52YWx1ZX0sW0EobWQse2NvbnRleHQ6QihhKX0se2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGNvbnRleHRgXSldLDgsW2B0b2BdKSldKSk6SShgdi1pZmAsITApfX0pLF9kPUgoe19fbmFtZTpgU2VsZWN0SWNvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe3JldHVybihlLHQpPT4oUCgpLE0oQihGKSx7ImFyaWEtaGlkZGVuIjpgdHJ1ZWAsYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZH0se2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bdFswXXx8PU1lKGDilrxgKV0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGBdKSl9fSksW3ZkLHlkXT1hKGBTZWxlY3RJdGVtYCksYmQ9SCh7X19uYW1lOmBTZWxlY3RJdGVtYCxwcm9wczp7dmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdGV4dFZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2BzZWxlY3RgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bix7ZGlzYWJsZWQ6YX09RmUocikscz1uZCgpLGM9Y2QoKSx7Zm9yd2FyZFJlZjpsLGN1cnJlbnRFbGVtZW50OnV9PXQoKSx7Q29sbGVjdGlvbkl0ZW06ZH09TWMoKSxmPUwoKCk9PlF1KHMubW9kZWxWYWx1ZT8udmFsdWUsci52YWx1ZSxzLmJ5KSkscD1qKCExKSxtPWooci50ZXh0VmFsdWU/P2BgKSxoPW8odm9pZCAwLGByZWthLXNlbGVjdC1pdGVtLXRleHRgKTthc3luYyBmdW5jdGlvbiBnKGUpe2UuZGVmYXVsdFByZXZlbnRlZHx8RHMoYHNlbGVjdC5zZWxlY3RgLF8se29yaWdpbmFsRXZlbnQ6ZSx2YWx1ZTpyLnZhbHVlfSl9YXN5bmMgZnVuY3Rpb24gXyhlKXthd2FpdCB5KCksaShgc2VsZWN0YCxlKSwhZS5kZWZhdWx0UHJldmVudGVkJiYoYS52YWx1ZXx8KHMub25WYWx1ZUNoYW5nZShyLnZhbHVlKSxzLm11bHRpcGxlLnZhbHVlfHxzLm9uT3BlbkNoYW5nZSghMSkpKX1hc3luYyBmdW5jdGlvbiB2KGUpe2F3YWl0IHkoKSwhZS5kZWZhdWx0UHJldmVudGVkJiYoYS52YWx1ZT9jLm9uSXRlbUxlYXZlPy4oKTplLmN1cnJlbnRUYXJnZXQ/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpfWFzeW5jIGZ1bmN0aW9uIGIoZSl7YXdhaXQgeSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJmUuY3VycmVudFRhcmdldD09PVooKSYmYy5vbkl0ZW1MZWF2ZT8uKCl9YXN5bmMgZnVuY3Rpb24geChlKXthd2FpdCB5KCksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGMuc2VhcmNoUmVmPy52YWx1ZT09PWBgfHxlLmtleSE9PWAgYCkmJihadS5pbmNsdWRlcyhlLmtleSkmJmcoZSksZS5rZXk9PT1gIGAmJmUucHJldmVudERlZmF1bHQoKSl9aWYoci52YWx1ZT09PWBgKXRocm93IEVycm9yKGBBIDxTZWxlY3RJdGVtIC8+IG11c3QgaGF2ZSBhIHZhbHVlIHByb3AgdGhhdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFNlbGVjdCB2YWx1ZSBjYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGFuZCBzaG93IHRoZSBwbGFjZWhvbGRlci5gKTtyZXR1cm4gb2UoKCk9Pnt1LnZhbHVlJiZjLml0ZW1SZWZDYWxsYmFjayh1LnZhbHVlLHIudmFsdWUsci5kaXNhYmxlZCl9KSx5ZCh7dmFsdWU6ci52YWx1ZSxkaXNhYmxlZDphLHRleHRJZDpoLGlzU2VsZWN0ZWQ6Zixvbkl0ZW1UZXh0Q2hhbmdlOmU9PnttLnZhbHVlPSgobS52YWx1ZXx8ZT8udGV4dENvbnRlbnQpPz9gYCkudHJpbSgpfX0pLChlLHQpPT4oUCgpLE0oQihkKSx7dmFsdWU6e3RleHRWYWx1ZTptLnZhbHVlfX0se2RlZmF1bHQ6RSgoKT0+W0EoQihGKSx7cmVmOkIobCkscm9sZTpgb3B0aW9uYCwiYXJpYS1sYWJlbGxlZGJ5IjpCKGgpLCJkYXRhLWhpZ2hsaWdodGVkIjpwLnZhbHVlP2BgOnZvaWQgMCwiYXJpYS1zZWxlY3RlZCI6Zi52YWx1ZSwiZGF0YS1zdGF0ZSI6Zi52YWx1ZT9gY2hlY2tlZGA6YHVuY2hlY2tlZGAsImFyaWEtZGlzYWJsZWQiOkIoYSl8fHZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6QihhKT9gYDp2b2lkIDAsdGFiaW5kZXg6QihhKT92b2lkIDA6LTEsYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCxvbkZvY3VzOnRbMF18fD1lPT5wLnZhbHVlPSEwLG9uQmx1cjp0WzFdfHw9ZT0+cC52YWx1ZT0hMSxvblBvaW50ZXJ1cDpnLG9uUG9pbnRlcmRvd246dFsyXXx8PWU9PntlLmN1cnJlbnRUYXJnZXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sb25Ub3VjaGVuZDp0WzNdfHw9X2UoKCk9Pnt9LFtgcHJldmVudGAsYHN0b3BgXSksb25Qb2ludGVybW92ZTp2LG9uUG9pbnRlcmxlYXZlOmIsb25LZXlkb3duOnh9LHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLWhpZ2hsaWdodGVkYCxgYXJpYS1zZWxlY3RlZGAsYGRhdGEtc3RhdGVgLGBhcmlhLWRpc2FibGVkYCxgZGF0YS1kaXNhYmxlZGAsYHRhYmluZGV4YCxgYXNgLGBhcy1jaGlsZGBdKV0pLF86M30sOCxbYHZhbHVlYF0pKX19KSx4ZD1IKHtfX25hbWU6YFNlbGVjdEl0ZW1JbmRpY2F0b3JgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49dmQoKTtyZXR1cm4oZSxyKT0+QihuKS5pc1NlbGVjdGVkLnZhbHVlPyhQKCksTShCKEYpLGsoe2tleTowLCJhcmlhLWhpZGRlbiI6YHRydWVgfSx0KSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpOkkoYHYtaWZgLCEwKX19KSxTZD1IKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RJdGVtVGV4dGAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe2xldCBuPWUscj1uZCgpLGk9Y2QoKSxhPXZkKCkse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT10KCksYz1MKCgpPT4oe3ZhbHVlOmEudmFsdWUsZGlzYWJsZWQ6YS5kaXNhYmxlZC52YWx1ZSx0ZXh0Q29udGVudDpzLnZhbHVlPy50ZXh0Q29udGVudD8/YS52YWx1ZT8udG9TdHJpbmcoKT8/YGB9KSk7cmV0dXJuIG9lKCgpPT57cy52YWx1ZSYmKGEub25JdGVtVGV4dENoYW5nZShzLnZhbHVlKSxpLml0ZW1UZXh0UmVmQ2FsbGJhY2socy52YWx1ZSxhLnZhbHVlLGEuZGlzYWJsZWQudmFsdWUpLHIub25PcHRpb25BZGQoYy52YWx1ZSkpfSksR2UoKCk9PntyLm9uT3B0aW9uUmVtb3ZlKGMudmFsdWUpfSksKGUsdCk9PihQKCksTShCKEYpLGsoe2lkOkIoYSkudGV4dElkLHJlZjpCKG8pfSx7Li4ubiwuLi5lLiRhdHRyc30pLHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgXSkpfX0pLENkPUgoe19fbmFtZTpgU2VsZWN0UG9ydGFsYCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KFAoKSxNKEIoQWMpLGxlKHplKHQpKSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLHdkPUgoe19fbmFtZTpgU2VsZWN0U2Nyb2xsQnV0dG9uSW1wbGAsZW1pdHM6W2BhdXRvU2Nyb2xsYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49dCx7Z2V0SXRlbXM6cn09TWMoKSxpPWNkKCksYT1qKG51bGwpO2Z1bmN0aW9uIG8oKXthLnZhbHVlIT09bnVsbCYmKHdpbmRvdy5jbGVhckludGVydmFsKGEudmFsdWUpLGEudmFsdWU9bnVsbCl9TygoKT0+e3IoKS5tYXAoZT0+ZS5yZWYpLmZpbmQoZT0+ZT09PVooKSk/LnNjcm9sbEludG9WaWV3KHtibG9jazpgbmVhcmVzdGB9KX0pO2Z1bmN0aW9uIHMoKXthLnZhbHVlPT09bnVsbCYmKGEudmFsdWU9d2luZG93LnNldEludGVydmFsKCgpPT57bihgYXV0b1Njcm9sbGApfSw1MCkpfWZ1bmN0aW9uIGMoKXtpLm9uSXRlbUxlYXZlPy4oKSxhLnZhbHVlPT09bnVsbCYmKGEudmFsdWU9d2luZG93LnNldEludGVydmFsKCgpPT57bihgYXV0b1Njcm9sbGApfSw1MCkpfXJldHVybiBDKCgpPT5vKCkpLChlLHQpPT4oUCgpLE0oQihGKSxrKHsiYXJpYS1oaWRkZW4iOmB0cnVlYCxzdHlsZTp7ZmxleFNocmluazowfX0sZS4kcGFyZW50Py4kcHJvcHMse29uUG9pbnRlcmRvd246cyxvblBvaW50ZXJtb3ZlOmMsb25Qb2ludGVybGVhdmU6dFswXXx8PSgpPT57bygpfX0pLHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KSl9fSksVGQ9SCh7X19uYW1lOmBTZWxlY3RTY3JvbGxEb3duQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IG49Y2QoKSxyPW4ucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD9kZCgpOnZvaWQgMCx7Zm9yd2FyZFJlZjppLGN1cnJlbnRFbGVtZW50OmF9PXQoKSxvPWooITEpO3JldHVybiBPKGU9PntpZihuLnZpZXdwb3J0Py52YWx1ZSYmbi5pc1Bvc2l0aW9uZWQ/LnZhbHVlKXtsZXQgdD1uLnZpZXdwb3J0LnZhbHVlO2Z1bmN0aW9uIHIoKXtsZXQgZT10LnNjcm9sbEhlaWdodC10LmNsaWVudEhlaWdodDtvLnZhbHVlPU1hdGguY2VpbCh0LnNjcm9sbFRvcCk8ZX1yKCksdC5hZGRFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpLGUoKCk9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSl9fSksRChhLCgpPT57YS52YWx1ZSYmcj8ub25TY3JvbGxCdXR0b25DaGFuZ2UoYS52YWx1ZSl9KSwoZSx0KT0+by52YWx1ZT8oUCgpLE0od2Qse2tleTowLHJlZjpCKGkpLG9uQXV0b1Njcm9sbDp0WzBdfHw9KCk9PntsZXR7dmlld3BvcnQ6ZSxzZWxlY3RlZEl0ZW06dH09QihuKTtlPy52YWx1ZSYmdD8udmFsdWUmJihlLnZhbHVlLnNjcm9sbFRvcD1lLnZhbHVlLnNjcm9sbFRvcCt0LnZhbHVlLm9mZnNldEhlaWdodCl9fSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw1MTIpKTpJKGB2LWlmYCwhMCl9fSksRWQ9SCh7X19uYW1lOmBTZWxlY3RTY3JvbGxVcEJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCBuPWNkKCkscj1uLnBvc2l0aW9uPT09YGl0ZW0tYWxpZ25lZGA/ZGQoKTp2b2lkIDAse2ZvcndhcmRSZWY6aSxjdXJyZW50RWxlbWVudDphfT10KCksbz1qKCExKTtyZXR1cm4gTyhlPT57aWYobi52aWV3cG9ydD8udmFsdWUmJm4uaXNQb3NpdGlvbmVkPy52YWx1ZSl7bGV0IHQ9bi52aWV3cG9ydC52YWx1ZTtmdW5jdGlvbiByKCl7by52YWx1ZT10LnNjcm9sbFRvcD4wfXIoKSx0LmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsciksZSgoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpKX19KSxEKGEsKCk9PnthLnZhbHVlJiZyPy5vblNjcm9sbEJ1dHRvbkNoYW5nZShhLnZhbHVlKX0pLChlLHQpPT5vLnZhbHVlPyhQKCksTSh3ZCx7a2V5OjAscmVmOkIoaSksb25BdXRvU2Nyb2xsOnRbMF18fD0oKT0+e2xldHt2aWV3cG9ydDplLHNlbGVjdGVkSXRlbTp0fT1CKG4pO2U/LnZhbHVlJiZ0Py52YWx1ZSYmKGUudmFsdWUuc2Nyb2xsVG9wPWUudmFsdWUuc2Nyb2xsVG9wLXQudmFsdWUub2Zmc2V0SGVpZ2h0KX19LHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDUxMikpOkkoYHYtaWZgLCEwKX19KSxEZD1IKHtfX25hbWU6YFNlbGVjdFRyaWdnZXJgLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGJ1dHRvbmB9fSxzZXR1cChlKXtsZXQgbj1lLHI9bmQoKSx7Zm9yd2FyZFJlZjppLGN1cnJlbnRFbGVtZW50OmF9PXQoKSxzPUwoKCk9PnIuZGlzYWJsZWQ/LnZhbHVlfHxuLmRpc2FibGVkKTtyLmNvbnRlbnRJZHx8PW8odm9pZCAwLGByZWthLXNlbGVjdC1jb250ZW50YCksb2UoKCk9PntyLm9uVHJpZ2dlckNoYW5nZShhLnZhbHVlKX0pO2xldHtnZXRJdGVtczpjfT1NYygpLHtzZWFyY2g6bCxoYW5kbGVUeXBlYWhlYWRTZWFyY2g6dSxyZXNldFR5cGVhaGVhZDpkfT0kcygpO2Z1bmN0aW9uIGYoKXtzLnZhbHVlfHwoci5vbk9wZW5DaGFuZ2UoITApLGQoKSl9ZnVuY3Rpb24gcChlKXtmKCksci50cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWYudmFsdWU9e3g6TWF0aC5yb3VuZChlLnBhZ2VYKSx5Ok1hdGgucm91bmQoZS5wYWdlWSl9fWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUuYnV0dG9uPT09MCYmZS5jdHJsS2V5PT09ITF9bGV0IGg9ITE7ZnVuY3Rpb24gZyhlKXtpZihlLnBvaW50ZXJUeXBlPT09YHRvdWNoYClyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO2xldCB0PWUudGFyZ2V0O3QuaGFzUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpJiZ0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCksbShlKSYmKHAoZSksaD0hMCl9ZnVuY3Rpb24gXyhlKXttKGUpJiZlLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gdihlKXtofHxlLmN1cnJlbnRUYXJnZXQ/LmZvY3VzKCksaD0hMX1yZXR1cm4oZSx0KT0+KFAoKSxNKEIoTGMpLHsiYXMtY2hpbGQiOmBgLHJlZmVyZW5jZTplLnJlZmVyZW5jZX0se2RlZmF1bHQ6RSgoKT0+W0EoQihGKSx7cmVmOkIoaSkscm9sZTpgY29tYm9ib3hgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCwiYXJpYS1jb250cm9scyI6QihyKS5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOkIocikub3Blbi52YWx1ZXx8ITEsImFyaWEtcmVxdWlyZWQiOkIocikucmVxdWlyZWQ/LnZhbHVlLCJhcmlhLWF1dG9jb21wbGV0ZSI6YG5vbmVgLGRpc2FibGVkOnMudmFsdWUsZGlyOkIocik/LmRpci52YWx1ZSwiZGF0YS1zdGF0ZSI6QihyKT8ub3Blbi52YWx1ZT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOnMudmFsdWU/YGA6dm9pZCAwLCJkYXRhLXBsYWNlaG9sZGVyIjpCKGVkKShCKHIpLm1vZGVsVmFsdWU/LnZhbHVlKT9gYDp2b2lkIDAsImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcyxvbkNsaWNrOnYsb25Qb2ludGVyZG93bjpnLG9uTW91c2Vkb3duOl8sb25Qb2ludGVydXA6dFswXXx8PV9lKGU9PntlLnBvaW50ZXJUeXBlPT09YHRvdWNoYCYmcChlKX0sW2BwcmV2ZW50YF0pLG9uS2V5ZG93bjp0WzFdfHw9ZT0+e2xldCB0PUIobCkhPT1gYDshKGUuY3RybEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleSkmJmUua2V5Lmxlbmd0aD09PTEmJnQmJmUua2V5PT09YCBgfHwoQih1KShlLmtleSxCKGMpKCkpLEIoWHUpLmluY2x1ZGVzKGUua2V5KSYmKGYoKSxlLnByZXZlbnREZWZhdWx0KCkpKX19LHtkZWZhdWx0OkUoKCk9PltOKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0eXBlYCxgYXJpYS1jb250cm9sc2AsYGFyaWEtZXhwYW5kZWRgLGBhcmlhLXJlcXVpcmVkYCxgZGlzYWJsZWRgLGBkaXJgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtcGxhY2Vob2xkZXJgLGBhcy1jaGlsZGAsYGFzYF0pXSksXzozfSw4LFtgcmVmZXJlbmNlYF0pKX19KSxPZD1IKHtfX25hbWU6YFNlbGVjdFZhbHVlYCxwcm9wczp7cGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe2xldCBuPWUse2ZvcndhcmRSZWY6cixjdXJyZW50RWxlbWVudDppfT10KCksYT1uZCgpO29lKCgpPT57YS52YWx1ZUVsZW1lbnQ9aX0pO2xldCBvPUwoKCk9PntsZXQgZT1bXSx0PUFycmF5LmZyb20oYS5vcHRpb25zU2V0LnZhbHVlKSxuPWU9PnQuZmluZCh0PT5RdShlLHQudmFsdWUsYS5ieSkpO3JldHVybiBlPUFycmF5LmlzQXJyYXkoYS5tb2RlbFZhbHVlLnZhbHVlKT9hLm1vZGVsVmFsdWUudmFsdWUubWFwKGU9Pm4oZSk/LnRleHRDb250ZW50Pz9gYCk6W24oYS5tb2RlbFZhbHVlLnZhbHVlKT8udGV4dENvbnRlbnQ/P2BgXSxlLmZpbHRlcihCb29sZWFuKX0pLHM9TCgoKT0+by52YWx1ZS5sZW5ndGg/by52YWx1ZS5qb2luKGAsIGApOm4ucGxhY2Vob2xkZXIpO3JldHVybihlLHQpPT4oUCgpLE0oQihGKSx7cmVmOkIociksYXM6ZS5hcywiYXMtY2hpbGQiOmUuYXNDaGlsZCxzdHlsZTp7cG9pbnRlckV2ZW50czpgbm9uZWB9LCJkYXRhLXBsYWNlaG9sZGVyIjpvLnZhbHVlLmxlbmd0aD92b2lkIDA6bi5wbGFjZWhvbGRlcn0se2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgLHtzZWxlY3RlZExhYmVsOm8udmFsdWUsbW9kZWxWYWx1ZTpCKGEpLm1vZGVsVmFsdWUudmFsdWV9LCgpPT5bTWUoVihzLnZhbHVlKSwxKV0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtcGxhY2Vob2xkZXJgXSkpfX0pLGtkPUgoe19fbmFtZTpgU2VsZWN0Vmlld3BvcnRgLHByb3BzOntub25jZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCBuPWUse25vbmNlOnJ9PUZlKG4pLGk9WXUociksYT1jZCgpLG89YS5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP2RkKCk6dm9pZCAwLHtmb3J3YXJkUmVmOnMsY3VycmVudEVsZW1lbnQ6Y309dCgpO29lKCgpPT57YT8ub25WaWV3cG9ydENoYW5nZShjLnZhbHVlKX0pO2xldCBsPWooMCk7ZnVuY3Rpb24gdShlKXtsZXQgdD1lLmN1cnJlbnRUYXJnZXQse3Nob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOm4sY29udGVudFdyYXBwZXI6cn09bz8/e307aWYobj8udmFsdWUmJnI/LnZhbHVlKXtsZXQgZT1NYXRoLmFicyhsLnZhbHVlLXQuc2Nyb2xsVG9wKTtpZihlPjApe2xldCBuPXdpbmRvdy5pbm5lckhlaWdodC0yMCxpPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUubWluSGVpZ2h0KSxhPU51bWJlci5wYXJzZUZsb2F0KHIudmFsdWUuc3R5bGUuaGVpZ2h0KSxvPU1hdGgubWF4KGksYSk7aWYobzxuKXtsZXQgaT1vK2UsYT1NYXRoLm1pbihuLGkpLHM9aS1hO3IudmFsdWUuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLHIudmFsdWUuc3R5bGUuYm90dG9tPT09YDBweGAmJih0LnNjcm9sbFRvcD1zPjA/czowLHIudmFsdWUuc3R5bGUuanVzdGlmeUNvbnRlbnQ9YGZsZXgtZW5kYCl9fX1sLnZhbHVlPXQuc2Nyb2xsVG9wfXJldHVybihlLHQpPT4oUCgpLHoodmUsbnVsbCxbQShCKEYpLGsoe3JlZjpCKHMpLCJkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0IjpgYCxyb2xlOmBwcmVzZW50YXRpb25gfSx7Li4uZS4kYXR0cnMsLi4ubn0se3N0eWxlOntwb3NpdGlvbjpgcmVsYXRpdmVgLGZsZXg6MSxvdmVyZmxvdzpgaGlkZGVuIGF1dG9gfSxvblNjcm9sbDp1fSkse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpLEEoQihGKSx7YXM6YHN0eWxlYCxub25jZTpCKGkpfSx7ZGVmYXVsdDpFKCgpPT50WzBdfHw9W01lKGAgLyogSGlkZSBzY3JvbGxiYXJzIGNyb3NzLWJyb3dzZXIgYW5kIGVuYWJsZSBtb21lbnR1bSBzY3JvbGwgZm9yIHRvdWNoIGRldmljZXMgKi8gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdIHsgc2Nyb2xsYmFyLXdpZHRoOm5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9IFtkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9IGApXSksXzoxLF9fOlswXX0sOCxbYG5vbmNlYF0pXSw2NCkpfX0pLEFkPUgoe19fbmFtZTpgQ2FyZERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihQKCkseihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtZGVzY3JpcHRpb25gLGNsYXNzOmR0KEIodykoYHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtYCx0LmNsYXNzKSl9LFtOKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxqZD1IKHtfX25hbWU6YElucHV0YCxwcm9wczp7ZGVmYXVsdFZhbHVlOnt9LG1vZGVsVmFsdWU6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj1lLHI9c2UobixgbW9kZWxWYWx1ZWAsdCx7cGFzc2l2ZTohMCxkZWZhdWx0VmFsdWU6bi5kZWZhdWx0VmFsdWV9KTtyZXR1cm4oZSx0KT0+bXQoKFAoKSx6KGBpbnB1dGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+RGUocik/ci52YWx1ZT1lOm51bGwsImRhdGEtc2xvdCI6YGlucHV0YCxjbGFzczpkdChCKHcpKGBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZGlzYWJsZWQ6YmctaW5wdXQvNTAgZGFyazpkaXNhYmxlZDpiZy1pbnB1dC84MCBoLTggcm91bmRlZC1sZyBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMi41IHB5LTEgdGV4dC1iYXNlIHRyYW5zaXRpb24tY29sb3JzIGZpbGU6aC02IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZvY3VzLXZpc2libGU6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLTMgbWQ6dGV4dC1zbSB3LWZ1bGwgbWluLXctMCBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBgLG4uY2xhc3MpKX0sbnVsbCwyKSksW1toZSxCKHIpXV0pfX0pLE1kPXtjbGFzczpgbXgtYXV0byBmbGV4IG1pbi1oLVs3MHZoXSBtYXgtdy1tZCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBweC00YH0sTmQ9e2NsYXNzOmBmbGV4IHNpemUtMTIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeWB9LFBkPXtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTFgfSxGZD17ImFyaWEtbGFiZWxsZWRieSI6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xLjUgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxJZD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LExkPXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0sUmQ9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSx6ZD17Y2xhc3M6YHJlbGF0aXZlYH0sQmQ9KChlLHQpPT57bGV0IG49ZS5fX3ZjY09wdHN8fGU7Zm9yKGxldFtlLHJdb2YgdCluW2VdPXI7cmV0dXJuIG59KShIKHtfX25hbWU6YEF1dGhHYXRlYCxzZXR1cChlKXtsZXQgdD1mKCksbj1BZSgpLHI9aihgYCksaT1qKCExKSxhPWoobnVsbCksbz1MKCgpPT5yLnZhbHVlLnRyaW0oKSE9PWBgKTtmdW5jdGlvbiBzKCl7bGV0IGU9ci52YWx1ZTtyLnZhbHVlPWBgLHQuc3VibWl0KGUpLG4ucmVmcmVzaCgpfWZ1bmN0aW9uIGMoKXt5KCgpPT5hLnZhbHVlPy4kZWw/LmZvY3VzKCkpfXJldHVybiBvZShjKSxEKCgpPT50LmVycm9yLGU9PntlJiZjKCl9KSwoZSxuKT0+e2xldCBjPWtlKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUCgpLHooYGRpdmAsTWQsW0EoQihtKSxudWxsLHtkZWZhdWx0OkUoKCk9PltBKEIoZGUpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1jZW50ZXJgfSx7ZGVmYXVsdDpFKCgpPT5bUihgZGl2YCxOZCxbQShjLHtpY29uOkIoRWUpLGNsYXNzOmBzaXplLTVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksUihgZGl2YCxQZCxbblszXXx8PVIoYHNwYW5gLHtjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgTExNIEdhdGV3YXlgLC0xKSxBKEIoY3QpLHtjbGFzczpgdGV4dC1sZyBmb250LXNlbWlib2xkYH0se2RlZmF1bHQ6RSgoKT0+Wy4uLm5bMl18fD1bTWUoYEFkbWluIGtleSByZXF1aXJlZGAsLTEpXV0pLF86MX0pXSksQShCKEFkKSxudWxsLHtkZWZhdWx0OkUoKCk9PlsuLi5uWzRdfHw9W01lKGBFbnRlciBhbiBhZG1pbiBBUEkga2V5IHRvIGNvbnRpbnVlLmAsLTEpXV0pLF86MX0pXSksXzoxfSksQShCKGcpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0OkUoKCk9PltuWzEwXXx8PVIoYGgyYCx7aWQ6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBzci1vbmx5YH0sYCBIb3cgdGhpcyBrZXkgaXMgaGFuZGxlZCBgLC0xKSxSKGB1bGAsRmQsW1IoYGxpYCxJZCxbQShjLHtpY29uOkIoYWUpLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzVdfHw9Uihgc3BhbmAsbnVsbCxgS2VwdCBvbmx5IGluIHRoaXMgdGFiJ3Mgc2Vzc2lvbiBzdG9yYWdlYCwtMSldKSxSKGBsaWAsTGQsW0EoYyx7aWNvbjpCKGFlKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls2XXx8PVIoYHNwYW5gLG51bGwsYE5ldmVyIHdyaXR0ZW4gdG8gZGlza2AsLTEpXSksUihgbGlgLFJkLFtBKGMse2ljb246QihhZSksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bN118fD1SKGBzcGFuYCxudWxsLGBTZW50IG9ubHkgdG8gdGhpcyBwYWdlJ3Mgb3duIC9hZG1pbi9hcGkvKiByZXF1ZXN0c2AsLTEpXSldKSxSKGBmb3JtYCx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgLG9uU3VibWl0Ol9lKHMsW2BwcmV2ZW50YF0pfSxbUihgZGl2YCx6ZCxbQShCKGpkKSx7cmVmX2tleTpga2V5SW5wdXRFbGAscmVmOmEsbW9kZWxWYWx1ZTpyLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpuWzBdfHw9ZT0+ci52YWx1ZT1lLHR5cGU6aS52YWx1ZT9gdGV4dGA6YHBhc3N3b3JkYCxhdXRvY29tcGxldGU6YG9mZmAscGxhY2Vob2xkZXI6YEFQSSBrZXlgLCJhcmlhLWxhYmVsIjpgQWRtaW4gQVBJIGtleWAsImFyaWEtaW52YWxpZCI6ISFCKHQpLmVycm9yLCJhcmlhLWRlc2NyaWJlZGJ5IjpCKHQpLmVycm9yP2BhdXRoZ2F0ZS1lcnJvcmA6dm9pZCAwLGNsYXNzOmR0KFtgaC0xMCBwci0xMGAseyJhdXRoZ2F0ZS1zaGFrZSI6Qih0KS5lcnJvcn1dKX0sbnVsbCw4LFtgbW9kZWxWYWx1ZWAsYHR5cGVgLGBhcmlhLWludmFsaWRgLGBhcmlhLWRlc2NyaWJlZGJ5YCxgY2xhc3NgXSksQShCKG5lKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbi14c2AsY2xhc3M6YGFic29sdXRlIHRvcC0xLzIgcmlnaHQtMS41IC10cmFuc2xhdGUteS0xLzIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZGAsImFyaWEtbGFiZWwiOmkudmFsdWU/YEhpZGUga2V5YDpgU2hvdyBrZXlgLG9uQ2xpY2s6blsxXXx8PWU9PmkudmFsdWU9IWkudmFsdWV9LHtkZWZhdWx0OkUoKCk9PltBKGMse2ljb246aS52YWx1ZT9CKHdlKTpCKGV0KSxjbGFzczpgc2l6ZS0zLjVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSw4LFtgYXJpYS1sYWJlbGBdKV0pLEEoQihuZSkse3R5cGU6YHN1Ym1pdGAsY2xhc3M6YGgtMTAgdy1mdWxsYCxkaXNhYmxlZDohby52YWx1ZX0se2RlZmF1bHQ6RSgoKT0+Wy4uLm5bOF18fD1bTWUoYCBDb250aW51ZSBgLC0xKV1dKSxfOjF9LDgsW2BkaXNhYmxlZGBdKV0sMzIpLEIodCkuZXJyb3I/KFAoKSxNKEIoZ3MpLHtrZXk6MCxpZDpgYXV0aGdhdGUtZXJyb3JgLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6RSgoKT0+W0EoQih2cyksbnVsbCx7ZGVmYXVsdDpFKCgpPT5bLi4ubls5XXx8PVtNZShgQXV0aGVudGljYXRpb24gZmFpbGVkYCwtMSldXSksXzoxfSksQShCKF9zKSxudWxsLHtkZWZhdWx0OkUoKCk9PltNZShWKEIodCkuZXJyb3IpLDEpXSksXzoxfSldKSxfOjF9KSk6SShgYCwhMCldKSxfOjF9KV0pLF86MX0pXSl9fX0pLFtbYF9fc2NvcGVJZGAsYGRhdGEtdi1iNmQ2ZmIxZWBdXSksVmQ9e2NsYXNzOmBtdC0xIGxpc3QtZGlzYyBzcGFjZS15LTAuNSBwbC00IGZvbnQtbW9ubyB0ZXh0LXhzYH0sSGQ9e2tleTowLGNsYXNzOmBtdC0xIHRleHQteHNgfSxVZD1IKHtfX25hbWU6YENvbmZpZ1dhcm5pbmdzQmFubmVyYCxwcm9wczp7d2FybmluZ3M6e30sd2FybmluZ3NEcm9wcGVkOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49aighMSk7ZnVuY3Rpb24gcigpe24udmFsdWU9IW4udmFsdWV9cmV0dXJuKGUsaSk9PntsZXQgYT1rZShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIHQud2FybmluZ3MubGVuZ3RoPjA/KFAoKSxNKEIoZ3MpLHtrZXk6MCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6RSgoKT0+W0EoYSx7aWNvbjpCKE5lKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxBKEIodnMpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0se2RlZmF1bHQ6RSgoKT0+W1IoYHNwYW5gLG51bGwsVih0Lndhcm5pbmdzLmxlbmd0aCkrYCBjb25maWd1cmF0aW9uIGArVih0Lndhcm5pbmdzLmxlbmd0aD09PTE/YHdhcm5pbmdgOmB3YXJuaW5nc2ApLDEpLEEoQihuZSkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YHhzYCwiYXJpYS1leHBhbmRlZCI6bi52YWx1ZSwiYXJpYS1sYWJlbCI6YCR7bi52YWx1ZT9gSGlkZWA6YFNob3dgfSBjb25maWd1cmF0aW9uIHdhcm5pbmcgZGV0YWlsc2Asb25DbGljazpyfSx7ZGVmYXVsdDpFKCgpPT5bTWUoVihuLnZhbHVlP2BIaWRlYDpgU2hvd2ApLDEpXSksXzoxfSw4LFtgYXJpYS1leHBhbmRlZGAsYGFyaWEtbGFiZWxgXSldKSxfOjF9KSxuLnZhbHVlPyhQKCksTShCKF9zKSx7a2V5OjB9LHtkZWZhdWx0OkUoKCk9PltSKGB1bGAsVmQsWyhQKCEwKSx6KHZlLG51bGwsYXQodC53YXJuaW5ncywoZSx0KT0+KFAoKSx6KGBsaWAse2tleTp0fSxWKGUpLDEpKSksMTI4KSldKSx0Lndhcm5pbmdzRHJvcHBlZD8oUCgpLHooYHBgLEhkLGBhbmQgYCtWKHQud2FybmluZ3NEcm9wcGVkKStgIG1vcmUgd2VyZSBub3Qga2VwdGAsMSkpOkkoYGAsITApXSksXzoxfSkpOkkoYGAsITApXSksXzoxfSkpOkkoYGAsITApfX19KSxXZD1IKHtfX25hbWU6YFNlbGVjdGAscHJvcHM6e29wZW46e3R5cGU6Qm9vbGVhbn0sZGVmYXVsdE9wZW46e3R5cGU6Qm9vbGVhbn0sZGVmYXVsdFZhbHVlOnt9LG1vZGVsVmFsdWU6e30sbnVsbGFibGVWYWx1ZTp7fSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXX0sZGlyOnt9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LGF1dG9jb21wbGV0ZTp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxuYW1lOnt9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW59fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgcj1uKGUsdCk7cmV0dXJuKGUsdCk9PihQKCksTShCKGlkKSxrKHsiZGF0YS1zbG90Ijpgc2VsZWN0YH0sQihyKSkse2RlZmF1bHQ6RSh0PT5bTihlLiRzbG90cyxgZGVmYXVsdGAsbGUoemUodCkpKV0pLF86M30sMTYpKX19KSxHZD1IKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RDb250ZW50YCxwcm9wczp7Zm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxwb3NpdGlvbjp7ZGVmYXVsdDpgaXRlbS1hbGlnbmVkYH0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbn0sbWVtb0RlcGVuZGVuY2llczp7fSxzaWRlOnt9LHNpZGVPZmZzZXQ6e30sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbn0sYWxpZ246e2RlZmF1bHQ6YGNlbnRlcmB9LGFsaWduT2Zmc2V0Ont9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFufSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbn0sY29sbGlzaW9uQm91bmRhcnk6e30sY29sbGlzaW9uUGFkZGluZzp7fSxhcnJvd1BhZGRpbmc6e30saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFufSxzdGlja3k6e30saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblN0cmF0ZWd5Ont9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e30sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbn0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW59LHJlZmVyZW5jZTp7fSxkaXI6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbn0sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgY2xvc2VBdXRvRm9jdXNgLGBlc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IHI9ZSxpPXQsYT1mZShyLGBjbGFzc2ApLG89bihhLGkpO3JldHVybih0LG4pPT4oUCgpLE0oQihDZCksbnVsbCx7ZGVmYXVsdDpFKCgpPT5bQShCKGdkKSxrKHsiZGF0YS1zbG90Ijpgc2VsZWN0LWNvbnRlbnRgLCJkYXRhLWFsaWduLXRyaWdnZXIiOmUucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYH0sey4uLnQuJGF0dHJzLC4uLkIobyl9LHtjbGFzczpCKHcpKGBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtb3BlbjphbmltYXRlLWluIGRhdGEtY2xvc2VkOmFuaW1hdGUtb3V0IGRhdGEtY2xvc2VkOmZhZGUtb3V0LTAgZGF0YS1vcGVuOmZhZGUtaW4tMCBkYXRhLWNsb3NlZDp6b29tLW91dC05NSBkYXRhLW9wZW46em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByaW5nLWZvcmVncm91bmQvMTAgbWluLXctMzYgcm91bmRlZC1sZyBzaGFkb3ctbWQgcmluZy0xIGR1cmF0aW9uLTEwMCBkYXRhLVtzaWRlPWlubGluZS1zdGFydF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9aW5saW5lLWVuZF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgY24tbWVudS10cmFuc2x1Y2VudCByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgb3JpZ2luLSgtLXJla2Etc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIGRhdGEtW2FsaWduLXRyaWdnZXI9dHJ1ZV06YW5pbWF0ZS1ub25lYCxlLnBvc2l0aW9uPT09YHBvcHBlcmAmJmBkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xYCxyLmNsYXNzKX0pLHtkZWZhdWx0OkUoKCk9PltBKEIoWWQpKSxBKEIoa2QpLHsiZGF0YS1wb3NpdGlvbiI6ZS5wb3NpdGlvbixjbGFzczpkdChCKHcpKGBkYXRhLVtwb3NpdGlvbj1wb3BwZXJdOmgtKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06dy1mdWxsIGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06bWluLXctKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci13aWR0aClgKSl9LHtkZWZhdWx0OkUoKCk9PltOKHQuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BkYXRhLXBvc2l0aW9uYCxgY2xhc3NgXSksQShCKEpkKSldKSxfOjN9LDE2LFtgZGF0YS1hbGlnbi10cmlnZ2VyYCxgY2xhc3NgXSldKSxfOjN9KSl9fSksS2Q9e2NsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyYH0scWQ9SCh7X19uYW1lOmBTZWxlY3RJdGVtYCxwcm9wczp7dmFsdWU6e30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdGV4dFZhbHVlOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1mZSh0LGBjbGFzc2ApLHI9aShuKTtyZXR1cm4oZSxuKT0+KFAoKSxNKEIoYmQpLGsoeyJkYXRhLXNsb3QiOmBzZWxlY3QtaXRlbWB9LEIocikse2NsYXNzOkIodykoYGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIG5vdC1kYXRhLVt2YXJpYW50PWRlc3RydWN0aXZlXTpmb2N1czoqKjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGdhcC0xLjUgcm91bmRlZC1tZCBweS0xIHByLTggcGwtMS41IHRleHQtc20gWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMiByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6RSgoKT0+W1IoYHNwYW5gLEtkLFtBKEIoeGQpLG51bGwse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGluZGljYXRvci1pY29uYCx7fSwoKT0+W0EoQihtcykse2ljb246QihhZSksY2xhc3M6YHBvaW50ZXItZXZlbnRzLW5vbmUgc2l6ZS0zLjVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9KV0pLEEoQihTZCksbnVsbCx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLEpkPUgoe19fbmFtZTpgU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1mZSh0LGBjbGFzc2ApLHI9aShuKTtyZXR1cm4oZSxuKT0+KFAoKSxNKEIoVGQpLGsoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uYH0sQihyKSx7Y2xhc3M6Qih3KShgYmctcG9wb3ZlciB6LTEwIGZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpFKCgpPT5bTihlLiRzbG90cyxgZGVmYXVsdGAse30sKCk9PltBKEIobXMpLHtpY29uOkIocyksY2xhc3M6YHNpemUtNGB9LG51bGwsOCxbYGljb25gXSldKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksWWQ9SCh7X19uYW1lOmBTZWxlY3RTY3JvbGxVcEJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1mZSh0LGBjbGFzc2ApLHI9aShuKTtyZXR1cm4oZSxuKT0+KFAoKSxNKEIoRWQpLGsoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvbmB9LEIocikse2NsYXNzOkIodykoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bQShCKG1zKSx7aWNvbjpCKG50KSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxYZD1IKHtfX25hbWU6YFNlbGVjdFRyaWdnZXJgLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxyZWZlcmVuY2U6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSxzaXplOntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1mZSh0LGBjbGFzc2AsYHNpemVgKSxyPWkobik7cmV0dXJuKG4saSk9PihQKCksTShCKERkKSxrKHsiZGF0YS1zbG90Ijpgc2VsZWN0LXRyaWdnZXJgLCJkYXRhLXNpemUiOmUuc2l6ZX0sQihyKSx7Y2xhc3M6Qih3KShgYm9yZGVyLWlucHV0IGRhdGEtcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZ2FwLTEuNSByb3VuZGVkLWxnIGJvcmRlciBiZy10cmFuc3BhcmVudCBweS0yIHByLTIgcGwtMi41IHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTMgYXJpYS1pbnZhbGlkOnJpbmctMyBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOCBkYXRhLVtzaXplPXNtXTpoLTcgZGF0YS1bc2l6ZT1zbV06cm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gd2hpdGVzcGFjZS1ub3dyYXAgb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpFKCgpPT5bTihuLiRzbG90cyxgZGVmYXVsdGApLEEoQihfZCkseyJhcy1jaGlsZCI6YGB9LHtkZWZhdWx0OkUoKCk9PltBKEIobXMpLHtpY29uOkIocyksY2xhc3M6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzaXplLTQgcG9pbnRlci1ldmVudHMtbm9uZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9KV0pLF86M30sMTYsW2BkYXRhLXNpemVgLGBjbGFzc2BdKSl9fSksWmQ9SCh7X19uYW1lOmBTZWxlY3RWYWx1ZWAscHJvcHM6e3BsYWNlaG9sZGVyOnt9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e319LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9PihQKCksTShCKE9kKSxrKHsiZGF0YS1zbG90Ijpgc2VsZWN0LXZhbHVlYH0sdCkse2RlZmF1bHQ6RSgoKT0+W04oZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSxRZD17Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTFgfSwkZD1gX19hbGxfX2AsZWY9SCh7X19uYW1lOmBMYWJlbGVkU2VsZWN0YCxwcm9wczp7bGFiZWw6e30sbW9kZWxWYWx1ZTp7fSxvcHRpb25zOnt9LGFsbExhYmVsOntkZWZhdWx0OnZvaWQgMH0scGxhY2Vob2xkZXI6e2RlZmF1bHQ6dm9pZCAwfSx0cmlnZ2VyQ2xhc3M6e2RlZmF1bHQ6dm9pZCAwfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGk9YGxhYmVsZWQtc2VsZWN0LSR7bHQoKX1gLGE9TCgoKT0+bi5tb2RlbFZhbHVlPT09YGAmJm4uYWxsTGFiZWwhPT12b2lkIDA/JGQ6bi5tb2RlbFZhbHVlKTtmdW5jdGlvbiBvKGUpe3R5cGVvZiBlPT1gc3RyaW5nYCYmcihgdXBkYXRlOm1vZGVsVmFsdWVgLGU9PT0kZD9gYDplKX1yZXR1cm4odCxuKT0+KFAoKSx6KGBkaXZgLFFkLFtSKGBsYWJlbGAse2lkOmksY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sVihlLmxhYmVsKSwxKSxBKEIoV2QpLHsibW9kZWwtdmFsdWUiOmEudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm99LHtkZWZhdWx0OkUoKCk9PltBKEIoWGQpLHsiYXJpYS1sYWJlbGxlZGJ5IjppLGNsYXNzOmR0KGUudHJpZ2dlckNsYXNzKX0se2RlZmF1bHQ6RSgoKT0+W0EoQihaZCkse3BsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXJ9LG51bGwsOCxbYHBsYWNlaG9sZGVyYF0pXSksXzoxfSw4LFtgY2xhc3NgXSksQShCKEdkKSxudWxsLHtkZWZhdWx0OkUoKCk9PltlLmFsbExhYmVsPT09dm9pZCAwP0koYGAsITApOihQKCksTShCKHFkKSx7a2V5OjAsdmFsdWU6JGR9LHtkZWZhdWx0OkUoKCk9PltNZShWKGUuYWxsTGFiZWwpLDEpXSksXzoxfSkpLChQKCEwKSx6KHZlLG51bGwsYXQoZS5vcHRpb25zLGU9PihQKCksTShCKHFkKSx7a2V5OmUudmFsdWUsdmFsdWU6ZS52YWx1ZX0se2RlZmF1bHQ6RSgoKT0+W01lKFYoZS5sYWJlbCksMSldKSxfOjJ9LDEwMzIsW2B2YWx1ZWBdKSkpLDEyOCkpXSksXzoxfSldKSxfOjF9LDgsW2Btb2RlbC12YWx1ZWBdKV0pKX19KSx0Zj17cHJvdmlkZXJzOmBtb2RlbHNgLHVzYWdlOmBjb25zdW1lcnNgLGNoYXJ0czpgc3BlbmRgLGV2ZW50czpgcmVsaWFiaWxpdHlgLHRhcmdldHM6YHRhcmdldHNgfTtmdW5jdGlvbiBuZihlKXtsZXQgdD1lLnN0YXJ0c1dpdGgoYCNgKT9lLnNsaWNlKDEpOmUsbj10LmluZGV4T2YoYD9gKSxyPW49PT0tMT90OnQuc2xpY2UoMCxuKSxpPW49PT0tMT9gYDp0LnNsaWNlKG4rMSk7aWYoUGUocikpcmV0dXJue3BhZ2U6cixxdWVyeTpuZXcgVVJMU2VhcmNoUGFyYW1zKGkpfTtsZXQgYT10ZltyXTtyZXR1cm4gYT97cGFnZTphLHF1ZXJ5Om5ldyBVUkxTZWFyY2hQYXJhbXN9OntwYWdlOlllLHF1ZXJ5Om5ldyBVUkxTZWFyY2hQYXJhbXMoaSl9fWZ1bmN0aW9uIHJmKGUsdCl7bGV0IG49T2JqZWN0LmVudHJpZXModCkuZmlsdGVyKChbLGVdKT0+ZSE9PWBgKTtyZXR1cm4gbi5sZW5ndGg9PT0wP2AjJHtlfWA6YCMke2V9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhuKS50b1N0cmluZygpfWB9dmFyIGFmPS9eKGFsbHxncm91cDouK3x1c2VyOi4rfHByb3ZpZGVyOi4rKSQvO2Z1bmN0aW9uIG9mKGUpe2xldCB0PXt9LG49ZS5nZXQoYHJhbmdlYCk7biYmcnQobikmJih0LnJhbmdlPW4pO2xldCByPWUuZ2V0KGBjbXBgKTtyJiZCZShyKSYmKHQuY21wPXIpO2xldCBpPWUuZ2V0KGBzY29wZWApO3JldHVybiBpJiZhZi50ZXN0KGkpJiYodC5zY29wZT1pKSx0fXZhciBzZj1uZXcgU2V0KFtgcmFuZ2VgLGBjbXBgLGBzY29wZWBdKTtmdW5jdGlvbiBjZihlKXtsZXQgdD17fTtmb3IobGV0W24scl1vZiBlLmVudHJpZXMoKSlzZi5oYXMobil8fHIhPT1gYCYmKHRbbl09cik7cmV0dXJuIHR9dmFyIGxmPWZ0KGBmaWx0ZXJzYCx7c3RhdGU6KCk9Pih7cmFuZ2U6YDdkYCxjbXA6WmUsc2NvcGU6YGFsbGB9KSxnZXR0ZXJzOnt3aW5kb3c6ZT0+Q2VbZS5yYW5nZV0ud2luZG93LHNwYW46ZT0+Q2VbZS5yYW5nZV0uc3BhbixjbXBTcGVjOmU9PntsZXQgdD1LZShlLnJhbmdlKTtyZXR1cm57Li4udCxyZXF1ZXN0ZWQ6ZS5jbXA9PT1gcHJldmAmJnQuYXZhaWxhYmxlfX19LGFjdGlvbnM6e3NldEZpbHRlcnMoZSl7ZS5yYW5nZSE9PXZvaWQgMCYmKHRoaXMucmFuZ2U9ZS5yYW5nZSksZS5jbXAhPT12b2lkIDAmJih0aGlzLmNtcD1lLmNtcCksZS5zY29wZSE9PXZvaWQgMCYmKHRoaXMuc2NvcGU9ZS5zY29wZSl9fX0pLHVmPXtjbGFzczpgZmxleCBmbGV4LXdyYXAgaXRlbXMtZW5kIGdhcC0zYH0sZGY9e2NsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC0xYH0sZmY9SCh7X19uYW1lOmBHbG9iYWxGaWx0ZXJCYXJgLHNldHVwKGUpe2xldCB0PXsiMjRoIjpgTGFzdCAyNCBob3Vyc2AsIjQ4aCI6YExhc3QgNDggaG91cnNgLCI3ZCI6YExhc3QgNyBkYXlzYCwiMTRkIjpgTGFzdCAxNCBkYXlzYCwiMzBkIjpgTGFzdCAzMCBkYXlzYCwiM21vIjpgTGFzdCAzIG1vbnRoc2AsIjZtbyI6YExhc3QgNiBtb250aHNgLCIxMm1vIjpgTGFzdCAxMiBtb250aHNgfSxuPUllLm1hcChlPT4oe3ZhbHVlOmUsbGFiZWw6dFtlXX0pKSxyPWxmKCk7ZnVuY3Rpb24gaShlKXt0eXBlb2YgZT09YHN0cmluZ2AmJnIuc2V0RmlsdGVycyh7cmFuZ2U6ZX0pfWZ1bmN0aW9uIGEoKXtpZihyLmNtcD09PWBwcmV2YCl7ci5zZXRGaWx0ZXJzKHtjbXA6YG5vbmVgfSk7cmV0dXJufXIuY21wU3BlYy5hdmFpbGFibGUmJnIuc2V0RmlsdGVycyh7Y21wOmBwcmV2YH0pfWxldCBvPUwoKCk9PnIuY21wIT09YHByZXZgJiYhci5jbXBTcGVjLmF2YWlsYWJsZSkscz1MKCgpPT5yLmNtcD09PWBwcmV2YCYmIXIuY21wU3BlYy5hdmFpbGFibGU/YENvbXBhcmlzb24gdW5hdmFpbGFibGUgZm9yIHRoaXMgcmFuZ2UgKCR7ci5jbXBTcGVjLnJlYXNvbn0pIOKAlCBjbGljayB0byB0dXJuIG9mZmA6ci5jbXBTcGVjLmF2YWlsYWJsZT9gQ29tcGFyZSBhZ2FpbnN0IHRoZSBwcmV2aW91cyBlcXVhbC1sZW5ndGggcGVyaW9kYDpgQ29tcGFyaXNvbiB1bmF2YWlsYWJsZSBmb3IgdGhpcyByYW5nZTogJHtyLmNtcFNwZWMucmVhc29ufWApLGM9aihyLnNjb3BlKTtEKCgpPT5yLnNjb3BlLGU9PntjLnZhbHVlPWV9KTtmdW5jdGlvbiBsKCl7bGV0IGU9Yy52YWx1ZS50cmltKCl8fGBhbGxgO2FmLnRlc3QoZSk/ci5zZXRGaWx0ZXJzKHtzY29wZTplfSk6Yy52YWx1ZT1yLnNjb3BlfXJldHVybihlLHQpPT57bGV0IHU9a2UoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBQKCkseihgZGl2YCx1ZixbQShlZix7bGFiZWw6YFJhbmdlYCwibW9kZWwtdmFsdWUiOkIocikucmFuZ2Usb3B0aW9uczpCKG4pLCJ0cmlnZ2VyLWNsYXNzIjpgdy0zNmAsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOml9LG51bGwsOCxbYG1vZGVsLXZhbHVlYCxgb3B0aW9uc2BdKSxBKEIobmUpLHt0eXBlOmBidXR0b25gLHZhcmlhbnQ6YG91dGxpbmVgLCJhcmlhLXByZXNzZWQiOkIocikuY21wPT09YHByZXZgLGRpc2FibGVkOm8udmFsdWUsdGl0bGU6cy52YWx1ZSxvbkNsaWNrOmF9LHtkZWZhdWx0OkUoKCk9PltBKHUse2ljb246Qih5ZSksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSx0WzFdfHw9TWUoYCB2cyBwcmV2aW91cyBwZXJpb2QgYCwtMSldKSxfOjF9LDgsW2BhcmlhLXByZXNzZWRgLGBkaXNhYmxlZGAsYHRpdGxlYF0pLFIoYGRpdmAsZGYsW3RbMl18fD1SKGBsYWJlbGAse2ZvcjpgZ2xvYmFsLWZpbHRlci1zY29wZWAsY2xhc3M6YHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sYFNjb3BlYCwtMSksQShCKGpkKSx7aWQ6YGdsb2JhbC1maWx0ZXItc2NvcGVgLG1vZGVsVmFsdWU6Yy52YWx1ZSwib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFswXXx8PWU9PmMudmFsdWU9ZSxjbGFzczpgdy00OGAscGxhY2Vob2xkZXI6YGFsbGAsdGl0bGU6YGFsbCwgZ3JvdXA6PG5hbWU+LCB1c2VyOjxuYW1lPiwgb3IgcHJvdmlkZXI6PG5hbWU+YCxvbktleXVwOnBlKGwsW2BlbnRlcmBdKSxvbkJsdXI6bH0sbnVsbCw4LFtgbW9kZWxWYWx1ZWBdKV0pXSl9fX0pLHBmPXsiYXJpYS1sYWJlbCI6YFByaW1hcnlgLGNsYXNzOmBmbGV4IGdhcC0xIG92ZXJmbG93LXgtYXV0byBib3JkZXItYiBib3JkZXItYm9yZGVyIHBiLTIgbWQ6dy01MiBtZDpzaHJpbmstMCBtZDpmbGV4LWNvbCBtZDpib3JkZXItciBtZDpib3JkZXItYi0wIG1kOnByLTMgbWQ6cGItMGB9LG1mPVtgYXJpYS1jdXJyZW50YCxgb25DbGlja2BdLGhmPUgoe19fbmFtZTpgU2lkZWJhck5hdmAsc2V0dXAoZSl7bGV0IHQ9VWUoKTtyZXR1cm4oZSxuKT0+e2xldCByPWtlKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gUCgpLHooYG5hdmAscGYsWyhQKCEwKSx6KHZlLG51bGwsYXQoQihWZSksZT0+KFAoKSx6KGBidXR0b25gLHtrZXk6ZS5pZCx0eXBlOmBidXR0b25gLCJhcmlhLWN1cnJlbnQiOkIodCkucGFnZT09PWUuaWQ/YHBhZ2VgOnZvaWQgMCxjbGFzczpkdChbYGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgbWQ6dy1mdWxsYCxCKHQpLnBhZ2U9PT1lLmlkP2BiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZGA6YHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3ZlcjpiZy1tdXRlZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgXSksb25DbGljazpuPT5CKHQpLmdvVG8oZS5pZCl9LFtBKHIse2ljb246ZS5pY29uLGNsYXNzOmBzaXplLTRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLFIoYHNwYW5gLG51bGwsVihlLmxhYmVsKSwxKV0sMTAsbWYpKSksMTI4KSldKX19fSksZ2Y9e2NsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGZpeGVkIGluc2V0LXgtMCBib3R0b20tMCB6LTUwIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBwLTQgcGItW2NhbGMoZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKzFyZW0pXSBzbTppbnNldC14LWF1dG8gc206cmlnaHQtNCBzbTpib3R0b20tNCBzbTp3LTk2YH0sX2Y9eyJhcmlhLWxpdmUiOmBhc3NlcnRpdmVgLGNsYXNzOmBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTJgfSx2Zj17Y2xhc3M6YG1pbi13LTAgZmxleC0xIHRleHQtc21gfSx5Zj17ImFyaWEtbGl2ZSI6YHBvbGl0ZWAsY2xhc3M6YGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMmB9LGJmPXtjbGFzczpgbWluLXctMCBmbGV4LTEgdGV4dC1zbWB9LHhmPUgoe19fbmFtZTpgVG9hc3RWaWV3cG9ydGAsc2V0dXAoZSl7bGV0IHQ9eGUoKSxuPXtzdWNjZXNzOmFlLGVycm9yOk5lLGluZm86TGV9LHI9e3N1Y2Nlc3M6YHRleHQtY2hhcnQtcmVxdWVzdHNgLGVycm9yOmB0ZXh0LWRlc3RydWN0aXZlYCxpbmZvOmB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxpPUwoKCk9PnQudG9hc3RzLmZpbHRlcihlPT5lLmtpbmQhPT1gZXJyb3JgKSksYT1MKCgpPT50LnRvYXN0cy5maWx0ZXIoZT0+ZS5raW5kPT09YGVycm9yYCkpO2Z1bmN0aW9uIG8oZSl7dC5kaXNtaXNzKGUuaWQpfXJldHVybihlLHQpPT57bGV0IHM9a2UoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBQKCkseihgZGl2YCxnZixbUihgZGl2YCxfZixbQSh1ZSx7dGFnOmBkaXZgLGNsYXNzOmBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTJgLCJlbnRlci1hY3RpdmUtY2xhc3MiOmB0cmFuc2l0aW9uIGR1cmF0aW9uLTE1MCBlYXNlLW91dCBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZWAsImVudGVyLWZyb20tY2xhc3MiOmB0cmFuc2xhdGUteS0yIG9wYWNpdHktMGAsImxlYXZlLWFjdGl2ZS1jbGFzcyI6YHRyYW5zaXRpb24gZHVyYXRpb24tMTUwIGVhc2UtaW4gbW90aW9uLXJlZHVjZTp0cmFuc2l0aW9uLW5vbmVgLCJsZWF2ZS10by1jbGFzcyI6YG9wYWNpdHktMGB9LHtkZWZhdWx0OkUoKCk9PlsoUCghMCkseih2ZSxudWxsLGF0KGEudmFsdWUsZT0+KFAoKSx6KGBkaXZgLHtrZXk6ZS5pZCxjbGFzczpgcG9pbnRlci1ldmVudHMtYXV0byBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJnLXBvcG92ZXIgcHgtMyBweS0yLjUgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LWxnYH0sW0Eocyx7aWNvbjpuW2Uua2luZF0sY2xhc3M6ZHQoW2BtdC0wLjUgc2l6ZS0zLjUgc2hyaW5rLTBgLHJbZS5raW5kXV0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksUihgcGAsdmYsVihlLm1lc3NhZ2UpLDEpLEEoQihuZSkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb25gLGNsYXNzOmAtbXQtMSAtbXItMSBzaXplLTYgc2hyaW5rLTAgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZGAsImFyaWEtbGFiZWwiOmBEaXNtaXNzOiAke2UubWVzc2FnZX1gLG9uQ2xpY2s6dD0+byhlKX0se2RlZmF1bHQ6RSgoKT0+W0Eocyx7aWNvbjpCKFNlKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGFyaWEtbGFiZWxgLGBvbkNsaWNrYF0pXSkpKSwxMjgpKV0pLF86MX0pXSksUihgZGl2YCx5ZixbQSh1ZSx7dGFnOmBkaXZgLGNsYXNzOmBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTJgLCJlbnRlci1hY3RpdmUtY2xhc3MiOmB0cmFuc2l0aW9uIGR1cmF0aW9uLTE1MCBlYXNlLW91dCBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZWAsImVudGVyLWZyb20tY2xhc3MiOmB0cmFuc2xhdGUteS0yIG9wYWNpdHktMGAsImxlYXZlLWFjdGl2ZS1jbGFzcyI6YHRyYW5zaXRpb24gZHVyYXRpb24tMTUwIGVhc2UtaW4gbW90aW9uLXJlZHVjZTp0cmFuc2l0aW9uLW5vbmVgLCJsZWF2ZS10by1jbGFzcyI6YG9wYWNpdHktMGB9LHtkZWZhdWx0OkUoKCk9PlsoUCghMCkseih2ZSxudWxsLGF0KGkudmFsdWUsZT0+KFAoKSx6KGBkaXZgLHtrZXk6ZS5pZCxjbGFzczpgcG9pbnRlci1ldmVudHMtYXV0byBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJnLXBvcG92ZXIgcHgtMyBweS0yLjUgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LWxnYH0sW0Eocyx7aWNvbjpuW2Uua2luZF0sY2xhc3M6ZHQoW2BtdC0wLjUgc2l6ZS0zLjUgc2hyaW5rLTBgLHJbZS5raW5kXV0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksUihgcGAsYmYsVihlLm1lc3NhZ2UpLDEpLEEoQihuZSkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb25gLGNsYXNzOmAtbXQtMSAtbXItMSBzaXplLTYgc2hyaW5rLTAgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZGAsImFyaWEtbGFiZWwiOmBEaXNtaXNzOiAke2UubWVzc2FnZX1gLG9uQ2xpY2s6dD0+byhlKX0se2RlZmF1bHQ6RSgoKT0+W0Eocyx7aWNvbjpCKFNlKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGFyaWEtbGFiZWxgLGBvbkNsaWNrYF0pXSkpKSwxMjgpKV0pLF86MX0pXSldKX19fSk7ZnVuY3Rpb24gU2YoKXtsZXQgZT1sZigpLHQ9VWUoKTtmdW5jdGlvbiBuKG4pe2xldHtwYWdlOnIscXVlcnk6aX09bmYobiksYT1vZihpKTtlLnNldEZpbHRlcnMoe3JhbmdlOmEucmFuZ2U/P2A3ZGAsY21wOmEuY21wPz9gbm9uZWAsc2NvcGU6YS5zY29wZT8/YGFsbGB9KSx0LmdvVG8ocixjZihpKSl9bGV0IHI9dHlwZW9mIHdpbmRvdzxgdWA7ciYmbih3aW5kb3cubG9jYXRpb24uaGFzaCk7bGV0IGk9TCgoKT0+e2xldCBuPXt9O3JldHVybiBlLnJhbmdlIT09YDdkYCYmKG4ucmFuZ2U9ZS5yYW5nZSksZS5jbXAhPT1gbm9uZWAmJihuLmNtcD1lLmNtcCksZS5zY29wZSE9PWBhbGxgJiYobi5zY29wZT1lLnNjb3BlKSxPYmplY3QuYXNzaWduKG4sdC5wYXJhbXMpLHJmKHQucGFnZSxuKX0pO0QoaSxlPT57ciYmd2luZG93LmxvY2F0aW9uLmhhc2ghPT1lJiZ3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxgYCxlKX0se2ltbWVkaWF0ZTohMH0pO2Z1bmN0aW9uIGEoKXtuKHdpbmRvdy5sb2NhdGlvbi5oYXNoKX1yJiYob2UoKCk9PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxhKSksR2UoKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxhKSkpfXZhciBDZj0oZnVuY3Rpb24oKXtsZXQgZT10eXBlb2YgZG9jdW1lbnQ8YHVgJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYCkucmVsTGlzdDtyZXR1cm4gZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApP2Btb2R1bGVwcmVsb2FkYDpgcHJlbG9hZGB9KSgpLHdmPWZ1bmN0aW9uKGUpe3JldHVybmAvYWRtaW4vYCtlfSxUZj17fSxFZj1mdW5jdGlvbihlLHQsbil7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYodCYmdC5sZW5ndGg+MCl7bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGxpbmtgKSxpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXWApLGE9aT8ubm9uY2V8fGk/LmdldEF0dHJpYnV0ZShgbm9uY2VgKTtmdW5jdGlvbiBvKGUpe3JldHVybiBQcm9taXNlLmFsbChlLm1hcChlPT5Qcm9taXNlLnJlc29sdmUoZSkudGhlbihlPT4oe3N0YXR1czpgZnVsZmlsbGVkYCx2YWx1ZTplfSksZT0+KHtzdGF0dXM6YHJlamVjdGVkYCxyZWFzb246ZX0pKSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGltcG9ydC5tZXRhLnJlc29sdmU/aW1wb3J0Lm1ldGEucmVzb2x2ZShlKTpuZXcgVVJMKGUsaW1wb3J0Lm1ldGEudXJsKS5ocmVmfXI9byh0Lm1hcCh0PT57aWYodD13Zih0LG4pLHQ9cyh0KSx0IGluIFRmKXJldHVybjtUZlt0XT0hMDtsZXQgcj10LmVuZHNXaXRoKGAuY3NzYCk7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCBpPWVbbl07aWYoaS5ocmVmPT09dCYmKCFyfHxpLnJlbD09PWBzdHlsZXNoZWV0YCkpcmV0dXJufWxldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKTtpZihpLnJlbD1yP2BzdHlsZXNoZWV0YDpDZixyfHwoaS5hcz1gc2NyaXB0YCksaS5jcm9zc09yaWdpbj1gYCxpLmhyZWY9dCxhJiZpLnNldEF0dHJpYnV0ZShgbm9uY2VgLGEpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkscilyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9PntpLmFkZEV2ZW50TGlzdGVuZXIoYGxvYWRgLGUpLGkuYWRkRXZlbnRMaXN0ZW5lcihgZXJyb3JgLCgpPT5uKEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7dH1gKSkpfSl9KSl9ZnVuY3Rpb24gaShlKXtsZXQgdD1uZXcgRXZlbnQoYHZpdGU6cHJlbG9hZEVycm9yYCx7Y2FuY2VsYWJsZTohMH0pO2lmKHQucGF5bG9hZD1lLHdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQpdGhyb3cgZX1yZXR1cm4gci50aGVuKHQ9Pntmb3IobGV0IGUgb2YgdHx8W10pZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpKGUucmVhc29uKTtyZXR1cm4gZSgpLmNhdGNoKGkpfSl9LERmPXtjbGFzczpgZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTQgcHgtNCBweS02IHNtOnB4LTYgbGc6cHgtOGB9LE9mPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LGtmPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0sQWY9e2tleTowLGNsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0samY9e2tleToyLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IG1kOmZsZXgtcm93YH0sTWY9e2NsYXNzOmBtaW4tdy0wIGZsZXgtMWB9LE5mPWBodHRwczovL2dpdGh1Yi5jb20vbHVrYXN6cmFjenlsby90cmFlZmlrLWxsbWdhdGV3YXlgLFBmPXV0KEgoe19fbmFtZTpgQXBwYCxzZXR1cChlKXtsZXQgdD1mKCksbj1BZSgpLHI9VWUoKTtTZigpO2xldCBpPXtob21lOm90KCgpPT5FZigoKT0+aW1wb3J0KGAuL0hvbWVQYWdlLUJ0Tm4wMEhWLmpzYCksX192aXRlX19tYXBEZXBzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzXSkpKSxzcGVuZDpvdCgoKT0+RWYoKCk9PmltcG9ydChgLi9TcGVuZFBhZ2UtQ040b3dWVTAuanNgKSxfX3ZpdGVfX21hcERlcHMoWzE0LDEsMiwzLDQsNSwxNSwxNiwxNyw2LDcsOCw5LDE4LDE5LDIwLDIxLDIyLDEyLDEzLDIzXSkpKSxjb25zdW1lcnM6b3QoKCk9PkVmKCgpPT5pbXBvcnQoYC4vQ29uc3VtZXJzUGFnZS1CXzQ5X1VDSS5qc2ApLF9fdml0ZV9fbWFwRGVwcyhbMjQsMSwyNSwzLDI2LDE3LDUsMiw0LDI3LDE1LDEzLDE2LDYsNyw4LDI4LDksMTgsMTksMjAsMTBdKSkpLG1vZGVsczpvdCgoKT0+RWYoKCk9PmltcG9ydChgLi9Nb2RlbHNQYWdlLURPLTE5Uk5YLmpzYCksX192aXRlX19tYXBEZXBzKFsyOSwxLDI1LDMsMjYsMTcsNSw0LDE1LDI4LDksMjAsMTIsMTMsMjEsMzAsMjJdKSkpLHJlbGlhYmlsaXR5Om90KCgpPT5FZigoKT0+aW1wb3J0KGAuL1JlbGlhYmlsaXR5UGFnZS1ELXNPTHRXWi5qc2ApLF9fdml0ZV9fbWFwRGVwcyhbMzEsMSw0LDUsMTUsOCwyOCwxOCwyMCwxMCwxMSwxMiwxMywyMiwzMCwyM10pKSksY29uZmlnOm90KCgpPT5FZigoKT0+aW1wb3J0KGAuL0NvbmZpZ1BhZ2UtQlNFcTItZm8uanNgKSxfX3ZpdGVfX21hcERlcHMoWzMyLDEsMiwzLDI2LDE3LDQsMjddKSkpLHRhcmdldHM6b3QoKCk9PkVmKCgpPT5pbXBvcnQoYC4vVGFyZ2V0c1BhZ2UtQkwwYW9mc1guanNgKSxfX3ZpdGVfX21hcERlcHMoWzMzLDEsNCw1LDE1LDcsOCwyOCwxOV0pKSl9LGE9TCgoKT0+aVtyLnBhZ2VdKSxvPUwoKCk9PntpZihuLmVycm9yKXJldHVybmByZWZyZXNoIGZhaWxlZDogJHtuLmVycm9yfWA7bGV0IGU9bi5vdmVydmlldz8ucmVwbGljYTtyZXR1cm5gbGFzdCB1cGRhdGVkICR7bi5sYXN0VXBkYXRlZD8udG9Mb2NhbGVUaW1lU3RyaW5nKCk/P2BgfSR7ZT9gIMK3IHJlcGxpY2EgJHtlfWA6YGB9YH0pLHM9TCgoKT0+IW4uZXJyb3ImJiFuLmxhc3RVcGRhdGVkKTtyZXR1cm4gb2UoKCk9PntuLnN0YXJ0UG9sbGluZygpfSksKGUscik9PntsZXQgaT1rZShgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIFAoKSx6KHZlLG51bGwsW1IoYGRpdmAsRGYsW1IoYGhlYWRlcmAsT2YsW1IoYGRpdmAsa2YsW3JbMF18fD1SKGBoMWAse2NsYXNzOmB0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHRgfSxgTExNIEdhdGV3YXkg4oCUIEFkbWluYCwtMSksQShCKG5lKSx7YXM6YGFgLGhyZWY6TmYsdGFyZ2V0OmBfYmxhbmtgLHJlbDpgbm9vcGVuZXIgbm9yZWZlcnJlcmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb25gLCJhcmlhLWxhYmVsIjpgR2l0SHViIHJlcG9zaXRvcnlgLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYH0se2RlZmF1bHQ6RSgoKT0+W0EoaSx7aWNvbjpCKGhzKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0pXSksQih0KS5pc0F1dGhlbnRpY2F0ZWQ/KFAoKSx6KGBwYCxBZixbcy52YWx1ZT8oUCgpLHoodmUse2tleTowfSxbQShCKHR0KSx7Y2xhc3M6YGgtNCB3LTQwYH0pLHJbMV18fD1SKGBzcGFuYCx7Y2xhc3M6YHNyLW9ubHlgfSxgTG9hZGluZyBkYXNoYm9hcmQgc3RhdHVz4oCmYCwtMSldLDY0KSk6KFAoKSx6KHZlLHtrZXk6MX0sW0IobikuZXJyb3I/KFAoKSxNKGkse2tleTowLGljb246QigkZSksY2xhc3M6YHNpemUtMy41IHRleHQtZGVzdHJ1Y3RpdmVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pKTpJKGBgLCEwKSxSKGBzcGFuYCx7Y2xhc3M6ZHQoQihuKS5lcnJvcj9gdGV4dC1kZXN0cnVjdGl2ZWA6dm9pZCAwKX0sVihvLnZhbHVlKSwzKV0sNjQpKV0pKTpJKGBgLCEwKSxCKHQpLmlzQXV0aGVudGljYXRlZD8oUCgpLE0oZmYse2tleToxfSkpOkkoYGAsITApXSksQih0KS5pc0F1dGhlbnRpY2F0ZWQ/KFAoKSxNKFVkLHtrZXk6MCx3YXJuaW5nczpCKG4pLm92ZXJ2aWV3Py53YXJuaW5ncz8/W10sIndhcm5pbmdzLWRyb3BwZWQiOkIobikub3ZlcnZpZXc/Lndhcm5pbmdzRHJvcHBlZH0sbnVsbCw4LFtgd2FybmluZ3NgLGB3YXJuaW5ncy1kcm9wcGVkYF0pKTpJKGBgLCEwKSxCKHQpLmlzQXV0aGVudGljYXRlZD8oUCgpLHooYGRpdmAsamYsW0EoaGYpLFIoYG1haW5gLE1mLFsoUCgpLE0oSGUoYS52YWx1ZSkpKV0pXSkpOihQKCksTShCZCx7a2V5OjF9KSldKSxBKHhmKV0sNjQpfX19KSk7UGYudXNlKHN0KCkpLFBmLmNvbXBvbmVudChgRm9udEF3ZXNvbWVJY29uYCxtcyksUGYubW91bnQoYCNhcHBgKTtleHBvcnR7Z3MgYXMgXyxxZCBhcyBhLGpkIGFzIGMsaWMgYXMgZCxPcyBhcyBmLF9zIGFzIGcsdnMgYXMgaCxYZCBhcyBpLEFkIGFzIGwsVHMgYXMgbSxlZiBhcyBuLEdkIGFzIG8sWiBhcyBwLFpkIGFzIHIsV2QgYXMgcyxsZiBhcyB0LE1jIGFzIHUsbXMgYXMgdn07", ), }, "index-BD5bBisO.css": { @@ -184,58 +202,58 @@ var adminAssets = map[string]adminAsset{ "QGtleWZyYW1lcyBhdXRoZ2F0ZS1zaGFrZS1iNmQ2ZmIxZXsxMCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTFweCl9MjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDJweCl9MzAlLDUwJSw3MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNHB4KX00MCUsNjAle3RyYW5zZm9ybTp0cmFuc2xhdGUoNHB4KX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey5hdXRoZ2F0ZS1zaGFrZVtkYXRhLXYtYjZkNmZiMWVde2FuaW1hdGlvbjouNHMgZWFzZS1pbi1vdXQgYXV0aGdhdGUtc2hha2UtYjZkNmZiMWV9fUBsYXllciBwcm9wZXJ0aWVze0BzdXBwb3J0cyAoKCgtd2Via2l0LWh5cGhlbnM6bm9uZSkpIGFuZCAobm90IChtYXJnaW4tdHJpbTppbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDppbmxpbmUpIGFuZCAobm90IChjb2xvcjpyZ2IoZnJvbSByZWQgciBnIGIpKSkpezpyb290LDpob3N0ey0tc2hpbW1lci1hbmdsZToyMGRlZ30qLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctc3BhY2UteS1yZXZlcnNlOjA7LS10dy1ib3JkZXItc3R5bGU6c29saWQ7LS10dy1sZWFkaW5nOmluaXRpYWw7LS10dy1mb250LXdlaWdodDppbml0aWFsOy0tdHctdHJhY2tpbmc6aW5pdGlhbDstLXR3LW9yZGluYWw6aW5pdGlhbDstLXR3LXNsYXNoZWQtemVybzppbml0aWFsOy0tdHctbnVtZXJpYy1maWd1cmU6aW5pdGlhbDstLXR3LW51bWVyaWMtc3BhY2luZzppbml0aWFsOy0tdHctbnVtZXJpYy1mcmFjdGlvbjppbml0aWFsOy0tdHctc2hhZG93OjAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctc2hhZG93LWFscGhhOjEwMCU7LS10dy1pbnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXJpbmctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXJpbmctc2hhZG93OjAgMCAjMDAwMDstLXR3LXJpbmctaW5zZXQ6aW5pdGlhbDstLXR3LXJpbmctb2Zmc2V0LXdpZHRoOjBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiNmZmY7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6MCAwICMwMDAwOy0tdHctb3V0bGluZS1zdHlsZTpzb2xpZDstLXR3LWJsdXI6aW5pdGlhbDstLXR3LWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWNvbnRyYXN0OmluaXRpYWw7LS10dy1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWludmVydDppbml0aWFsOy0tdHctb3BhY2l0eTppbml0aWFsOy0tdHctc2F0dXJhdGU6aW5pdGlhbDstLXR3LXNlcGlhOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdzppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWFscGhhOjEwMCU7LS10dy1kcm9wLXNoYWRvdy1zaXplOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsOy0tdHctY29udGVudDoiIjstLXR3LWFuaW1hdGlvbi1kZWxheTowczstLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb246bm9ybWFsOy0tdHctYW5pbWF0aW9uLWR1cmF0aW9uOmluaXRpYWw7LS10dy1hbmltYXRpb24tZmlsbC1tb2RlOm5vbmU7LS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OjE7LS10dy1lbnRlci1ibHVyOjA7LS10dy1lbnRlci1vcGFjaXR5OjE7LS10dy1lbnRlci1yb3RhdGU6MDstLXR3LWVudGVyLXNjYWxlOjE7LS10dy1lbnRlci10cmFuc2xhdGUteDowOy0tdHctZW50ZXItdHJhbnNsYXRlLXk6MDstLXR3LWV4aXQtYmx1cjowOy0tdHctZXhpdC1vcGFjaXR5OjE7LS10dy1leGl0LXJvdGF0ZTowOy0tdHctZXhpdC1zY2FsZToxOy0tdHctZXhpdC10cmFuc2xhdGUteDowOy0tdHctZXhpdC10cmFuc2xhdGUteTowOy0tc2Nyb2xsLWZhZGUtdDowOy0tc2Nyb2xsLWZhZGUtYjowOy0tc2Nyb2xsLWZhZGUtczowOy0tc2Nyb2xsLWZhZGUtZTowOy0tc2Nyb2xsLWZhZGUtbWFzazppbml0aWFsOy0tc2hpbW1lci1pbWFnZTppbml0aWFsOy0tc2hpbW1lci10ZXh0LWZpbGw6aW5pdGlhbH19fUBsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1zcGFjaW5nOi4yNXJlbTstLWNvbnRhaW5lci14czoyMHJlbTstLWNvbnRhaW5lci1zbToyNHJlbTstLWNvbnRhaW5lci1tZDoyOHJlbTstLXRleHQteHM6Ljc1cmVtOy0tdGV4dC14cy0tbGluZS1oZWlnaHQ6Y2FsYygxIC8gLjc1KTstLXRleHQtc206Ljg3NXJlbTstLXRleHQtc20tLWxpbmUtaGVpZ2h0OmNhbGMoMS4yNSAvIC44NzUpOy0tdGV4dC1iYXNlOjFyZW07LS10ZXh0LWJhc2UtLWxpbmUtaGVpZ2h0OmNhbGMoMS41IC8gMSk7LS10ZXh0LWxnOjEuMTI1cmVtOy0tdGV4dC1sZy0tbGluZS1oZWlnaHQ6Y2FsYygxLjc1IC8gMS4xMjUpOy0tdGV4dC14bDoxLjI1cmVtOy0tdGV4dC14bC0tbGluZS1oZWlnaHQ6Y2FsYygxLjc1IC8gMS4yNSk7LS10ZXh0LTJ4bDoxLjVyZW07LS10ZXh0LTJ4bC0tbGluZS1oZWlnaHQ6Y2FsYygyIC8gMS41KTstLWZvbnQtd2VpZ2h0LW5vcm1hbDo0MDA7LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctdGlnaHQ6LS4wMjVlbTstLWxlYWRpbmctc251ZzoxLjM3NTstLXJhZGl1cy1tZDpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpOy0tcmFkaXVzLTR4bDoycmVtOy0tZWFzZS1pbjpjdWJpYy1iZXppZXIoLjQsIDAsIDEsIDEpOy0tZWFzZS1vdXQ6Y3ViaWMtYmV6aWVyKDAsIDAsIC4yLCAxKTstLWFuaW1hdGUtc3BpbjpzcGluIDFzIGxpbmVhciBpbmZpbml0ZTstLWFuaW1hdGUtcHVsc2U6cHVsc2UgMnMgY3ViaWMtYmV6aWVyKC40LCAwLCAuNiwgMSkgaW5maW5pdGU7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LCAwLCAuMiwgMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZjstLWRlZmF1bHQtbW9uby1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgIkNhc2NhZGlhIENvZGUiLCAiUm9ib3RvIE1vbm8iLCBDb25zb2xhcywgbW9ub3NwYWNlfX1AbGF5ZXIgYmFzZXsqLDphZnRlciw6YmVmb3JlLDo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9aHRtbCw6aG9zdHstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0YWItc2l6ZTo0O2xpbmUtaGVpZ2h0OjEuNTtmb250LWZhbWlseTp2YXIoLS1kZWZhdWx0LWZvbnQtZmFtaWx5LC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCAiTm90byBTYW5zIiwgQXJpYWwsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZzp3aGVyZSg6bm90KGlmcmFtZSkpe291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6YmxvY2t9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnttYXJnaW4taW5saW5lLWVuZDo0cHh9OjpwbGFjZWhvbGRlcntvcGFjaXR5OjF9QHN1cHBvcnRzIChub3QgKCgtd2Via2l0LWFwcGVhcmFuY2U6LWFwcGxlLXBheS1idXR0b24pKSkgb3IgKGNvbnRhaW4taW50cmluc2ljLXNpemU6MXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIGN1cnJlbnRjb2xvciA1MCUsIHRyYW5zcGFyZW50KX19fXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWRhdGUtYW5kLXRpbWUtdmFsdWV7bWluLWhlaWdodDoxbGg7dGV4dC1hbGlnbjppbmhlcml0fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2Rpc3BsYXk6aW5saW5lLWZsZXh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZmllbGRzLXdyYXBwZXJ7cGFkZGluZzowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0e3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXNlY29uZC1maWVsZHtwYWRkaW5nLWJsb2NrOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jazowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2s6MH06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntsaW5lLWhlaWdodDoxfTotbW96LXVpLWludmFsaWR7Ym94LXNoYWRvdzpub25lfWJ1dHRvbixpbnB1dDp3aGVyZShbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdKXthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Kntib3JkZXItY29sb3I6dmFyKC0tYm9yZGVyKTtvdXRsaW5lLWNvbG9yOnZhcigtLXJpbmcpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsqe291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1yaW5nKSA1MCUsIHRyYW5zcGFyZW50KX19Ym9keXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWZvcmVncm91bmQpO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtcztmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmfX1AbGF5ZXIgY29tcG9uZW50cztAbGF5ZXIgdXRpbGl0aWVzey5cQGNvbnRhaW5lclwvY2FyZC1oZWFkZXJ7Y29udGFpbmVyOmNhcmQtaGVhZGVyL2lubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uc3Itb25seXtjbGlwLXBhdGg6aW5zZXQoNTAlKTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLXdpZHRoOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbn0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uaW5zZXQteC0we2luc2V0LWlubGluZTowfS5pbnNldC15LTB7aW5zZXQtYmxvY2s6MH0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTV7dG9wOmNhbGModmFyKC0tc3BhY2luZykgKiA1KX0udG9wLTEwMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEwMCl9LnJpZ2h0LTF7cmlnaHQ6dmFyKC0tc3BhY2luZyl9LnJpZ2h0LTFcLjV7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnJpZ2h0LTJ7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5ib3R0b20tMHtib3R0b206MH0ubGVmdC0we2xlZnQ6MH0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnotMTB7ei1pbmRleDoxMH0uei01MHt6LWluZGV4OjUwfS5jb2wtc3Bhbi1mdWxse2dyaWQtY29sdW1uOjEvLTF9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAod2lkdGg+PTQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhICh3aWR0aD49NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKHdpZHRoPj02NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAod2lkdGg+PTgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhICh3aWR0aD49OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0uLW14LTFcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEuNSl9Lm14LWF1dG97bWFyZ2luLWlubGluZTphdXRvfS4tbXQtMXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykgKiAtMSl9Lm10LTBcLjV7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5tdC0xe21hcmdpbi10b3A6dmFyKC0tc3BhY2luZyl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Li1tci0xe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogLTEpfS5tYi0xXC41e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9Lm1iLTJ7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lm1iLTN7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9Lm1sLTF7bWFyZ2luLWxlZnQ6dmFyKC0tc3BhY2luZyl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYmxvY2t7ZGlzcGxheTpibG9ja30uY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleHtkaXNwbGF5OmZsZXh9LmdyaWR7ZGlzcGxheTpncmlkfS5oaWRkZW57ZGlzcGxheTpub25lfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0udGFibGV7ZGlzcGxheTp0YWJsZX0udGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGx9LnRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0uc2l6ZS0ze3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LnNpemUtNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA1KX0uc2l6ZS02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA2KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5zaXplLTd7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDcpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNyl9LnNpemUtOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0uc2l6ZS05e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA5KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDkpfS5zaXplLTEye3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAxMik7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxMil9LmgtMVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmgtM3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5oLTR7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uaC01e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNSl9LmgtNntoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5oLTd7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LmgtOXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDkpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5oLTY0e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNjQpfS5oLTcye2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNzIpfS5oLVxbY2FsY1woMTAwXCUtMXB4XClcXXtoZWlnaHQ6Y2FsYygxMDAlIC0gMXB4KX0uaC1mdWxse2hlaWdodDoxMDAlfS5tYXgtaC1cKC0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0XCl7bWF4LWhlaWdodDp2YXIoLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpfS5taW4taC1cWzcwdmhcXXttaW4taGVpZ2h0Ojcwdmh9LnctNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LnctMTJ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEyKX0udy0xNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTQpfS53LTE2e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAxNil9LnctMjB7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIwKX0udy0yNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMjQpfS53LTI4e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAyOCl9LnctMzZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDM2KX0udy00MHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNDApfS53LTQ0e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0NCl9LnctNDh7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQ4KX0udy01Nnt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogNTYpfS53LWZpdHt3aWR0aDpmaXQtY29udGVudH0udy1mdWxse3dpZHRoOjEwMCV9Lm1heC13LTMye21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpICogMzIpfS5tYXgtdy00MHttYXgtd2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQwKX0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWF4LXctbWR7bWF4LXdpZHRoOnZhcigtLWNvbnRhaW5lci1tZCl9Lm1heC13LXNte21heC13aWR0aDp2YXIoLS1jb250YWluZXItc20pfS5tYXgtdy14c3ttYXgtd2lkdGg6dmFyKC0tY29udGFpbmVyLXhzKX0ubWluLXctMHttaW4td2lkdGg6MH0ubWluLXctMzZ7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzNil9LmZsZXgtMXtmbGV4OjF9LnNocmluay0we2ZsZXgtc2hyaW5rOjB9LmNhcHRpb24tYm90dG9te2NhcHRpb24tc2lkZTpib3R0b219Lm9yaWdpbi1cKC0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luXCl7dHJhbnNmb3JtLW9yaWdpbjp2YXIoLS1yZWthLXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxIC8gMiAqIDEwMCUpICogLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteS0yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnZhcigtLXR3LXJvdGF0ZS14LCkgdmFyKC0tdHctcm90YXRlLXksKSB2YXIoLS10dy1yb3RhdGUteiwpIHZhcigtLXR3LXNrZXcteCwpIHZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLXB1bHNle2FuaW1hdGlvbjp2YXIoLS1hbmltYXRlLXB1bHNlKX0uYW5pbWF0ZS1zcGlue2FuaW1hdGlvbjp2YXIoLS1hbmltYXRlLXNwaW4pfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9Lmxpc3QtZGlzY3tsaXN0LXN0eWxlLXR5cGU6ZGlzY30uYXV0by1yb3dzLW1pbntncmlkLWF1dG8tcm93czptaW4tY29udGVudH0uZ3JpZC1jb2xzLTF7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgxLG1pbm1heCgwLDFmcikpfS5ncmlkLWNvbHMtMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSl9LmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleC1jb2wtcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0uZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5nYXAtMFwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KX0uZ2FwLTF7Z2FwOnZhcigtLXNwYWNpbmcpfS5nYXAtMVwuNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmdhcC0ye2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMyl9LmdhcC00e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LmdhcC02e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9OndoZXJlKC5zcGFjZS15LTBcLjU+Om5vdCg6bGFzdC1jaGlsZCkpey0tdHctc3BhY2UteS1yZXZlcnNlOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OmNhbGMoY2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpO21hcmdpbi1ibG9jay1lbmQ6Y2FsYyhjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpfS5nYXAteC0ze2NvbHVtbi1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5nYXAteC00e2NvbHVtbi1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5nYXAteC02e2NvbHVtbi1nYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDYpfS5nYXAteS0xe3Jvdy1nYXA6dmFyKC0tc3BhY2luZyl9LmdhcC15LTFcLjV7cm93LWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0udHJ1bmNhdGV7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5vdmVyZmxvdy14LWF1dG97b3ZlcmZsb3cteDphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1hdXRve292ZXJmbG93LXk6YXV0b30ub3ZlcmZsb3cteS1oaWRkZW57b3ZlcmZsb3cteTpoaWRkZW59LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtNHhse2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLTR4bCl9LnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTBweFwpXF17Ym9yZGVyLXJhZGl1czptaW4odmFyKC0tcmFkaXVzLW1kKSwgMTBweCl9LnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTJweFwpXF17Ym9yZGVyLXJhZGl1czptaW4odmFyKC0tcmFkaXVzLW1kKSwgMTJweCl9LnJvdW5kZWQtZnVsbHtib3JkZXItcmFkaXVzOjIxNDc0ODM2NDdweH0ucm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9LnJvdW5kZWQtbWR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5yb3VuZGVkLXNte2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gNHB4KX0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9LnJvdW5kZWQtdC14bHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KX0uYm9yZGVye2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uYm9yZGVyLWJvcmRlcntib3JkZXItY29sb3I6dmFyKC0tYm9yZGVyKX0uYm9yZGVyLWlucHV0e2JvcmRlci1jb2xvcjp2YXIoLS1pbnB1dCl9LmJvcmRlci1zdGF0dXMtd2FyblwvNDB7Ym9yZGVyLWNvbG9yOnZhcigtLXN0YXR1cy13YXJuKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1zdGF0dXMtd2FyblwvNDB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tc3RhdHVzLXdhcm4pIDQwJSwgdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXRyYW5zcGFyZW50e2JvcmRlci1jb2xvcjojMDAwMH0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYWNjZW50KX0uYmctYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpfS5iZy1iYXItYW1iZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1iYXItYW1iZXIpfS5iZy1jYXJke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2FyZCl9LmJnLWRlc3RydWN0aXZlLC5iZy1kZXN0cnVjdGl2ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1kZXN0cnVjdGl2ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAxMCUsIHRyYW5zcGFyZW50KX19LmJnLW11dGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfS5iZy1wb3BvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcG9wb3Zlcil9LmJnLXByaW1hcnksLmJnLXByaW1hcnlcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tcHJpbWFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1wcmltYXJ5XC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tcHJpbWFyeSkgMTAlLCB0cmFuc3BhcmVudCl9fS5iZy1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwfS5iZy1jbGlwLXBhZGRpbmd7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wLTBcLjc1e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC43NSl9LnAtMntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykgKiAyKX0ucC0ze3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5wLTR7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LnB4LTFcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAyLjUpfS5weC0ze3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpICogLjUpfS5weS0xe3BhZGRpbmctYmxvY2s6dmFyKC0tc3BhY2luZyl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnB5LTJcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0ucHktM3twYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0ucHktNHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0ucHktOHtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiA4KX0ucHktMTB7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpICogMTApfS5wdC0we3BhZGRpbmctdG9wOjB9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnByLTh7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LnByLTEwe3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEwKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0ucGItMntwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LnBiLTJcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIuNSl9LnBiLVxbY2FsY1woZW52XChzYWZlLWFyZWEtaW5zZXQtYm90dG9tXClcKzFyZW1cKVxde3BhZGRpbmctYm90dG9tOmNhbGMoZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pICsgMXJlbSl9LnBsLTFcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMi41KX0ucGwtNHtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5wbC04e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvbnQtaGVhZGluZ3tmb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpfS5mb250LW1vbm97Zm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLFNGIE1vbm8sQ2FzY2FkaWEgQ29kZSxSb2JvdG8gTW9ubyxDb25zb2xhcyxtb25vc3BhY2V9LnRleHQtMnhse2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LTJ4bCk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LTJ4bC0tbGluZS1oZWlnaHQpKX0udGV4dC1iYXNle2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWJhc2UpO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1iYXNlLS1saW5lLWhlaWdodCkpfS50ZXh0LWxne2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LWxnKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtbGctLWxpbmUtaGVpZ2h0KSl9LnRleHQtc217Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0udGV4dC14bHtmb250LXNpemU6dmFyKC0tdGV4dC14bCk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXhsLS1saW5lLWhlaWdodCkpfS50ZXh0LXhze2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXhzKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQteHMtLWxpbmUtaGVpZ2h0KSl9LnRleHQtXFswXC44cmVtXF17Zm9udC1zaXplOi44cmVtfS5sZWFkaW5nLXNudWd7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctc251Zyk7bGluZS1oZWlnaHQ6dmFyKC0tbGVhZGluZy1zbnVnKX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtbm9ybWFsey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpfS5mb250LXNlbWlib2xkey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKX0udHJhY2tpbmctdGlnaHR7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy10aWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctdGlnaHQpfS50ZXh0LWJhbGFuY2V7dGV4dC13cmFwOmJhbGFuY2V9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0uYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LndoaXRlc3BhY2UtcHJle3doaXRlLXNwYWNlOnByZX0udGV4dC1hY2NlbnQtZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCl9LnRleHQtY2FyZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLWNhcmQtZm9yZWdyb3VuZCl9LnRleHQtY2hhcnQtcmVxdWVzdHN7Y29sb3I6dmFyKC0tY2hhcnQtcmVxdWVzdHMpfS50ZXh0LWRlc3RydWN0aXZle2NvbG9yOnZhcigtLWRlc3RydWN0aXZlKX0udGV4dC1mb3JlZ3JvdW5kLC50ZXh0LWZvcmVncm91bmRcLzYwe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1mb3JlZ3JvdW5kXC82MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWZvcmVncm91bmQpIDYwJSwgdHJhbnNwYXJlbnQpfX0udGV4dC1pbmhlcml0e2NvbG9yOmluaGVyaXR9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZCwudGV4dC1tdXRlZC1mb3JlZ3JvdW5kXC80MHtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNDB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSA0MCUsIHRyYW5zcGFyZW50KX19LnRleHQtbXV0ZWQtZm9yZWdyb3VuZFwvNjB7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LW11dGVkLWZvcmVncm91bmRcLzYwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkgNjAlLCB0cmFuc3BhcmVudCl9fS50ZXh0LXBvcG92ZXItZm9yZWdyb3VuZHtjb2xvcjp2YXIoLS1wb3BvdmVyLWZvcmVncm91bmQpfS50ZXh0LXByaW1hcnl7Y29sb3I6dmFyKC0tcHJpbWFyeSl9LnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLXByaW1hcnktZm9yZWdyb3VuZCl9LnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmR7Y29sb3I6dmFyKC0tc2Vjb25kYXJ5LWZvcmVncm91bmQpfS50ZXh0LXN0YXR1cy13YXJue2NvbG9yOnZhcigtLXN0YXR1cy13YXJuKX0udGFidWxhci1udW1zey0tdHctbnVtZXJpYy1zcGFjaW5nOnRhYnVsYXItbnVtcztmb250LXZhcmlhbnQtbnVtZXJpYzp2YXIoLS10dy1vcmRpbmFsLCkgdmFyKC0tdHctc2xhc2hlZC16ZXJvLCkgdmFyKC0tdHctbnVtZXJpYy1maWd1cmUsKSB2YXIoLS10dy1udW1lcmljLXNwYWNpbmcsKSB2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LnVuZGVybGluZS1vZmZzZXQtNHt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6NHB4fS5vcGFjaXR5LTB7b3BhY2l0eTowfS5zaGFkb3ctbGd7LS10dy1zaGFkb3c6MCAxMHB4IDE1cHggLTNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwgMCA0cHggNnB4IC00cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LW1key0tdHctc2hhZG93OjAgNHB4IDZweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDJweCA0cHggLTJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5yaW5nLC5yaW5nLTF7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5yaW5nLWZvcmVncm91bmRcLzEwey0tdHctcmluZy1jb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnJpbmctZm9yZWdyb3VuZFwvMTB7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZm9yZWdyb3VuZCkgMTAlLCB0cmFuc3BhcmVudCl9fS5vdXRsaW5lLWhpZGRlbnstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9QG1lZGlhIChmb3JjZWQtY29sb3JzOmFjdGl2ZSl7Lm91dGxpbmUtaGlkZGVue291dGxpbmUtb2Zmc2V0OjJweDtvdXRsaW5lOjJweCBzb2xpZCAjMDAwMH19Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZmlsdGVye2ZpbHRlcjp2YXIoLS10dy1ibHVyLCkgdmFyKC0tdHctYnJpZ2h0bmVzcywpIHZhcigtLXR3LWNvbnRyYXN0LCkgdmFyKC0tdHctZ3JheXNjYWxlLCkgdmFyKC0tdHctaHVlLXJvdGF0ZSwpIHZhcigtLXR3LWludmVydCwpIHZhcigtLXR3LXNhdHVyYXRlLCkgdmFyKC0tdHctc2VwaWEsKSB2YXIoLS10dy1kcm9wLXNoYWRvdywpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLWNvbG9yc3t0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yLG91dGxpbmUtY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlLC0tdHctZ3JhZGllbnQtZnJvbSwtLXR3LWdyYWRpZW50LXZpYSwtLXR3LWdyYWRpZW50LXRvO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTEwMHstLXR3LWR1cmF0aW9uOi4xczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xc30uZHVyYXRpb24tMTUwey0tdHctZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LmVhc2UtaW57LS10dy1lYXNlOnZhcigtLWVhc2UtaW4pO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2UtaW4pfS5lYXNlLW91dHstLXR3LWVhc2U6dmFyKC0tZWFzZS1vdXQpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLWVhc2Utb3V0KX0ub3V0bGluZS1ub25ley0tdHctb3V0bGluZS1zdHlsZTpub25lO291dGxpbmUtc3R5bGU6bm9uZX0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNlbGVjdC10ZXh0ey13ZWJraXQtdXNlci1zZWxlY3Q6dGV4dDt1c2VyLXNlbGVjdDp0ZXh0fS5ydW5uaW5ne2FuaW1hdGlvbi1wbGF5LXN0YXRlOnJ1bm5pbmd9Lm5vdC1sYXN0XDpib3JkZXItYjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjFweH0uZ3JvdXAtaGFzLVxbXD5zdmdcXVwvYWxlcnRcOmNvbC1zdGFydC0yOmlzKDp3aGVyZSguZ3JvdXBcL2FsZXJ0KTpoYXMoPnN2ZykgKil7Z3JpZC1jb2x1bW4tc3RhcnQ6Mn0uZ3JvdXAtYXJpYS1leHBhbmRlZFwvYWNjb3JkaW9uLXRyaWdnZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwXC9hY2NvcmRpb24tdHJpZ2dlcilbYXJpYS1leHBhbmRlZD10cnVlXSAqKXtkaXNwbGF5Om5vbmV9Lmdyb3VwLWFyaWEtZXhwYW5kZWRcL2FjY29yZGlvbi10cmlnZ2VyXDppbmxpbmU6aXMoOndoZXJlKC5ncm91cFwvYWNjb3JkaW9uLXRyaWdnZXIpW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gKil7ZGlzcGxheTppbmxpbmV9Lmdyb3VwLWRhdGEtXFtzaXplXD1zbVxdXC9jYXJkXDpweC0zOmlzKDp3aGVyZSguZ3JvdXBcL2NhcmQpW2RhdGEtc2l6ZT1zbV0gKil7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5ncm91cC1kYXRhLVxbc2l6ZVw9c21cXVwvY2FyZFw6dGV4dC1zbTppcyg6d2hlcmUoLmdyb3VwXC9jYXJkKVtkYXRhLXNpemU9c21dICope2ZvbnQtc2l6ZTp2YXIoLS10ZXh0LXNtKTtsaW5lLWhlaWdodDp2YXIoLS10dy1sZWFkaW5nLHZhcigtLXRleHQtc20tLWxpbmUtaGVpZ2h0KSl9Lmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKil7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uZ3JvdXAtZGF0YS1ob3Jpem9udGFsXC90YWJzXDpoLTg6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICope2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6bWF4LXctZnVsbDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKil7bWF4LXdpZHRoOjEwMCV9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6ZmxleC1ub25lOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKXtmbGV4Om5vbmV9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6anVzdGlmeS1zdGFydDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKil7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6b3ZlcmZsb3cteC1hdXRvOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKXtvdmVyZmxvdy14OmF1dG99Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6b3ZlcmZsb3cteS1oaWRkZW46aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICope292ZXJmbG93LXk6aGlkZGVufS5ncm91cC1kYXRhLXZlcnRpY2FsXC90YWJzXDpoLWZpdDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICope2hlaWdodDpmaXQtY29udGVudH0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6dy1mdWxsOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPXZlcnRpY2FsXSkgKil7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6ZmxleC1jb2w6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmp1c3RpZnktc3RhcnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uZmlsZVw6aW5saW5lLWZsZXg6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXh9LmZpbGVcOmgtNjo6ZmlsZS1zZWxlY3Rvci1idXR0b257aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA2KX0uZmlsZVw6Ym9yZGVyLTA6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JvcmRlci1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDowfS5maWxlXDpiZy10cmFuc3BhcmVudDo6ZmlsZS1zZWxlY3Rvci1idXR0b257YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uZmlsZVw6dGV4dC1zbTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC1zaXplOnZhcigtLXRleHQtc20pO2xpbmUtaGVpZ2h0OnZhcigtLXR3LWxlYWRpbmcsdmFyKC0tdGV4dC1zbS0tbGluZS1oZWlnaHQpKX0uZmlsZVw6Zm9udC1tZWRpdW06OmZpbGUtc2VsZWN0b3ItYnV0dG9uey0tdHctZm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pfS5maWxlXDp0ZXh0LWZvcmVncm91bmQ6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX0uYWZ0ZXJcOmFic29sdXRlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7cG9zaXRpb246YWJzb2x1dGV9LmFmdGVyXDpib3R0b20tXFstNXB4XF06YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtib3R0b206LTVweH0uYWZ0ZXJcOmJnLWZvcmVncm91bmQ6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWZvcmVncm91bmQpfS5hZnRlclw6b3BhY2l0eS0wOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7b3BhY2l0eTowfS5hZnRlclw6dHJhbnNpdGlvbi1vcGFjaXR5OmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9Lmdyb3VwLWRhdGEtaG9yaXpvbnRhbFwvdGFic1w6YWZ0ZXJcOmluc2V0LXgtMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj1ob3Jpem9udGFsXSkgKik6YWZ0ZXJ7Y29udGVudDp2YXIoLS10dy1jb250ZW50KTtpbnNldC1pbmxpbmU6MH0uZ3JvdXAtZGF0YS1ob3Jpem9udGFsXC90YWJzXDphZnRlclw6Ym90dG9tLVxbLTVweFxdOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMpOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2JvdHRvbTotNXB4fS5ncm91cC1kYXRhLWhvcml6b250YWxcL3RhYnNcOmFmdGVyXDpoLTBcLjU6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249aG9yaXpvbnRhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAuNSl9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmFmdGVyXDppbnNldC15LTA6aXMoOndoZXJlKC5ncm91cFwvdGFicyk6d2hlcmUoW2RhdGEtb3JpZW50YXRpb249dmVydGljYWxdKSAqKTphZnRlcntjb250ZW50OnZhcigtLXR3LWNvbnRlbnQpO2luc2V0LWJsb2NrOjB9Lmdyb3VwLWRhdGEtdmVydGljYWxcL3RhYnNcOmFmdGVyXDotcmlnaHQtMTppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKX0uZ3JvdXAtZGF0YS12ZXJ0aWNhbFwvdGFic1w6YWZ0ZXJcOnctMFwuNTppcyg6d2hlcmUoLmdyb3VwXC90YWJzKTp3aGVyZShbZGF0YS1vcmllbnRhdGlvbj12ZXJ0aWNhbF0pICopOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC41KX0ubGFzdFw6Ym9yZGVyLTA6bGFzdC1jaGlsZHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0ubGFzdFw6cGItMDpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjB9QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1hY2NlbnQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1hY2NlbnQpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLW11dGVkOmhvdmVyLC5ob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLW11dGVkXC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1zZWNvbmRhcnkpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjp2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6dmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCl9LmhvdmVyXDp0ZXh0LXByaW1hcnk6aG92ZXJ7Y29sb3I6dmFyKC0tcHJpbWFyeSl9LmhvdmVyXDp1bmRlcmxpbmU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uLWxpbmU6dW5kZXJsaW5lfS5ob3Zlclw6b3BhY2l0eS05MDpob3ZlcntvcGFjaXR5Oi45fX0uZm9jdXNcOmJnLWFjY2VudDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWFjY2VudCl9LmZvY3VzXDp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kOmZvY3VzLDppcygubm90LWRhdGEtXFt2YXJpYW50XD1kZXN0cnVjdGl2ZVxdXDpmb2N1c1w6XCpcKlw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpub3QoW2RhdGEtdmFyaWFudD1kZXN0cnVjdGl2ZV0pOmZvY3VzICope2NvbG9yOnZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLWRlc3RydWN0aXZlXC80MDpmb2N1cy12aXNpYmxle2JvcmRlci1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzQwOmZvY3VzLXZpc2libGV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6Ym9yZGVyLXJpbmc6Zm9jdXMtdmlzaWJsZXtib3JkZXItY29sb3I6dmFyKC0tcmluZyl9LmZvY3VzLXZpc2libGVcOnJpbmctMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yLGN1cnJlbnRjb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLCB2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksIHZhcigtLXR3LXJpbmctc2hhZG93KSwgdmFyKC0tdHctc2hhZG93KX0uZm9jdXMtdmlzaWJsZVw6cmluZy0zOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygzcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5mb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC8yMDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpyaW5nLWRlc3RydWN0aXZlXC8yMDpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmZvY3VzLXZpc2libGVcOnJpbmctcmluZ1wvNTA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tcmluZyl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpyaW5nLXJpbmdcLzUwOmZvY3VzLXZpc2libGV7LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tcmluZykgNTAlLCB0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLTE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLXN0eWxlOnZhcigtLXR3LW91dGxpbmUtc3R5bGUpO291dGxpbmUtd2lkdGg6MXB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLXJpbmc6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOnZhcigtLXJpbmcpfS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLW5vbmU6Zm9jdXMtdmlzaWJsZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmFmdGVyXDpib3JkZXItcmluZzpmb2N1cy12aXNpYmxlOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7Ym9yZGVyLWNvbG9yOnZhcigtLXJpbmcpfS5hY3RpdmVcOm5vdC1hcmlhLVxbaGFzcG9wdXBcXVw6dHJhbnNsYXRlLXktcHg6YWN0aXZlOm5vdChbYXJpYS1oYXNwb3B1cF0pey0tdHctdHJhbnNsYXRlLXk6MXB4O3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCkgdmFyKC0tdHctdHJhbnNsYXRlLXkpfS5kaXNhYmxlZFw6cG9pbnRlci1ldmVudHMtbm9uZTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOmJnLWlucHV0XC81MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRpc2FibGVkXDpiZy1pbnB1dFwvNTA6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9OndoZXJlKFtkYXRhLXNsb3Q9YnV0dG9uLWdyb3VwXSkgLmluLWRhdGEtXFtzbG90XD1idXR0b24tZ3JvdXBcXVw6cm91bmRlZC1sZ3tib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyl9Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW11dGVkKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7Lmhhcy1hcmlhLWV4cGFuZGVkXDpiZy1tdXRlZFwvNTA6aGFzKFthcmlhLWV4cGFuZGVkPXRydWVdKXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tbXV0ZWQpIDUwJSwgdHJhbnNwYXJlbnQpfX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtZW5kXF1cOnByLTE6aGFzKFtkYXRhLWljb249aW5saW5lLWVuZF0pe3BhZGRpbmctcmlnaHQ6dmFyKC0tc3BhY2luZyl9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLWVuZFxdXDpwci0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1lbmRdKXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAxLjUpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1lbmRcXVw6cHItMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtZW5kXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9Lmhhcy1kYXRhLVxbaWNvblw9aW5saW5lLXN0YXJ0XF1cOnBsLTE6aGFzKFtkYXRhLWljb249aW5saW5lLXN0YXJ0XSl7cGFkZGluZy1sZWZ0OnZhcigtLXNwYWNpbmcpfS5oYXMtZGF0YS1cW2ljb25cPWlubGluZS1zdGFydFxdXDpwbC0xXC41OmhhcyhbZGF0YS1pY29uPWlubGluZS1zdGFydF0pe3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpICogMS41KX0uaGFzLWRhdGEtXFtpY29uXD1pbmxpbmUtc3RhcnRcXVw6cGwtMjpoYXMoW2RhdGEtaWNvbj1pbmxpbmUtc3RhcnRdKXtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfS5oYXMtZGF0YS1cW3Nsb3RcPWFsZXJ0LWFjdGlvblxdXDpyZWxhdGl2ZTpoYXMoW2RhdGEtc2xvdD1hbGVydC1hY3Rpb25dKXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFzLWRhdGEtXFtzbG90XD1hbGVydC1hY3Rpb25cXVw6cHItMTg6aGFzKFtkYXRhLXNsb3Q9YWxlcnQtYWN0aW9uXSl7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogMTgpfS5oYXMtZGF0YS1cW3Nsb3RcPWNhcmQtYWN0aW9uXF1cOmdyaWQtY29scy1cWzFmcl9hdXRvXF06aGFzKFtkYXRhLXNsb3Q9Y2FyZC1hY3Rpb25dKXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG99Lmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1kZXNjcmlwdGlvblxdXDpncmlkLXJvd3MtXFthdXRvX2F1dG9cXTpoYXMoW2RhdGEtc2xvdD1jYXJkLWRlc2NyaXB0aW9uXSl7Z3JpZC10ZW1wbGF0ZS1yb3dzOmF1dG8gYXV0b30uaGFzLWRhdGEtXFtzbG90XD1jYXJkLWZvb3RlclxdXDpwYi0wOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH0uaGFzLVxbXD5pbWdcOmZpcnN0LWNoaWxkXF1cOnB0LTA6aGFzKD5pbWc6Zmlyc3QtY2hpbGQpe3BhZGRpbmctdG9wOjB9Lmhhcy1cW1w+c3ZnXF1cOmdyaWQtY29scy1cW2F1dG9fMWZyXF06aGFzKD5zdmcpe2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmcn0uaGFzLVxbXD5zdmdcXVw6Z2FwLXgtMjpoYXMoPnN2Zyl7Y29sdW1uLWdhcDpjYWxjKHZhcigtLXNwYWNpbmcpICogMil9LmFyaWEtZXhwYW5kZWRcOmJnLW11dGVkW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmFyaWEtZXhwYW5kZWRcOmJnLXNlY29uZGFyeVthcmlhLWV4cGFuZGVkPXRydWVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2Vjb25kYXJ5KX0uYXJpYS1leHBhbmRlZFw6dGV4dC1mb3JlZ3JvdW5kW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Y29sb3I6dmFyKC0tZm9yZWdyb3VuZCl9LmFyaWEtZXhwYW5kZWRcOnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmRbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjp2YXIoLS1zZWNvbmRhcnktZm9yZWdyb3VuZCl9LmFyaWEtaW52YWxpZFw6Ym9yZGVyLWRlc3RydWN0aXZlW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfS5hcmlhLWludmFsaWRcOnJpbmctM1thcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLXNoYWRvdzp2YXIoLS10dy1yaW5nLWluc2V0LCkgMCAwIDAgY2FsYygzcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IsY3VycmVudGNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5hcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzIwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC8yMFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDIwJSwgdHJhbnNwYXJlbnQpfX0uZGF0YS1wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kW2RhdGEtcGxhY2Vob2xkZXJde2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfS5kYXRhLVxbYWxpZ24tdHJpZ2dlclw9dHJ1ZVxdXDphbmltYXRlLW5vbmVbZGF0YS1hbGlnbi10cmlnZ2VyPXRydWVde2FuaW1hdGlvbjpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6cG9pbnRlci1ldmVudHMtbm9uZVtkYXRhLWRpc2FibGVkXXtwb2ludGVyLWV2ZW50czpub25lfS5kYXRhLVxbZGlzYWJsZWRcXVw6b3BhY2l0eS01MFtkYXRhLWRpc2FibGVkXXtvcGFjaXR5Oi41fS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDpoLVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpW2RhdGEtcG9zaXRpb249cG9wcGVyXXtoZWlnaHQ6dmFyKC0tcmVrYS1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpfS5kYXRhLVxbcG9zaXRpb25cPXBvcHBlclxdXDp3LWZ1bGxbZGF0YS1wb3NpdGlvbj1wb3BwZXJde3dpZHRoOjEwMCV9LmRhdGEtXFtwb3NpdGlvblw9cG9wcGVyXF1cOm1pbi13LVwoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoXClbZGF0YS1wb3NpdGlvbj1wb3BwZXJde21pbi13aWR0aDp2YXIoLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoKX0uZGF0YS1cW3NpZGVcPWJvdHRvbVxdXDp0cmFuc2xhdGUteS0xW2RhdGEtc2lkZT1ib3R0b21dey0tdHctdHJhbnNsYXRlLXk6dmFyKC0tc3BhY2luZyk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtZW5kXF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1pbmxpbmUtZW5kXXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSotMSl9LmRhdGEtXFtzaWRlXD1pbmxpbmUtc3RhcnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1pbmxpbmUtc3RhcnRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6LXRyYW5zbGF0ZS14LTFbZGF0YS1zaWRlPWxlZnRdey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPWxlZnRcXVw6c2xpZGUtaW4tZnJvbS1yaWdodC0yW2RhdGEtc2lkZT1sZWZ0XXstLXR3LWVudGVyLXRyYW5zbGF0ZS14OmNhbGMoMip2YXIoLS1zcGFjaW5nKSl9LmRhdGEtXFtzaWRlXD1yaWdodFxdXDp0cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1yaWdodF17LS10dy10cmFuc2xhdGUteDp2YXIoLS1zcGFjaW5nKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXJpZ2h0XF1cOnNsaWRlLWluLWZyb20tbGVmdC0yW2RhdGEtc2lkZT1yaWdodF17LS10dy1lbnRlci10cmFuc2xhdGUteDpjYWxjKDIqdmFyKC0tc3BhY2luZykqLTEpfS5kYXRhLVxbc2lkZVw9dG9wXF1cOi10cmFuc2xhdGUteS0xW2RhdGEtc2lkZT10b3Bdey0tdHctdHJhbnNsYXRlLXk6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIC0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpIHZhcigtLXR3LXRyYW5zbGF0ZS15KX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6Y2FsYygyKnZhcigtLXNwYWNpbmcpKX0uZGF0YS1cW3NpemVcPWRlZmF1bHRcXVw6aC04W2RhdGEtc2l6ZT1kZWZhdWx0XXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDgpfS5kYXRhLVxbc2l6ZVw9c21cXVw6aC03W2RhdGEtc2l6ZT1zbV17aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiA3KX0uZGF0YS1cW3NpemVcPXNtXF1cOmdhcC0zW2RhdGEtc2l6ZT1zbV17Z2FwOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOnJvdW5kZWQtXFttaW5cKHZhclwoLS1yYWRpdXMtbWRcKVwsMTBweFwpXF1bZGF0YS1zaXplPXNtXXtib3JkZXItcmFkaXVzOm1pbih2YXIoLS1yYWRpdXMtbWQpLCAxMHB4KX0uZGF0YS1cW3NpemVcPXNtXF1cOnB5LTNbZGF0YS1zaXplPXNtXXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykgKiAzKX0uZGF0YS1cW3NpemVcPXNtXF1cOmhhcy1kYXRhLVxbc2xvdFw9Y2FyZC1mb290ZXJcXVw6cGItMFtkYXRhLXNpemU9c21dOmhhcyhbZGF0YS1zbG90PWNhcmQtZm9vdGVyXSl7cGFkZGluZy1ib3R0b206MH06aXMoLlwqXCpcOmRhdGEtXFtzbG90XD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXF1cOm1sLWF1dG8gKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de21hcmdpbi1sZWZ0OmF1dG99OmlzKC5cKlwqXDpkYXRhLVxbc2xvdFw9YWNjb3JkaW9uLXRyaWdnZXItaWNvblxdXDpzaXplLTQgKilbZGF0YS1zbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25de3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiA0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfTppcyguXCpcKlw6ZGF0YS1cW3Nsb3RcPWFjY29yZGlvbi10cmlnZ2VyLWljb25cXVw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kICopW2RhdGEtc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXXtjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9YWxlcnQtZGVzY3JpcHRpb25cXVw6dGV4dC1kZXN0cnVjdGl2ZVwvOTA+KilbZGF0YS1zbG90PWFsZXJ0LWRlc2NyaXB0aW9uXXtjb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LWRlc3RydWN0aXZlXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDkwJSwgdHJhbnNwYXJlbnQpfX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9YWxlcnQtZGVzY3JpcHRpb25cXVw6dGV4dC1zdGF0dXMtd2FyblwvOTA+KilbZGF0YS1zbG90PWFsZXJ0LWRlc2NyaXB0aW9uXXtjb2xvcjp2YXIoLS1zdGF0dXMtd2Fybil9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezppcyguXCpcOmRhdGEtXFtzbG90XD1hbGVydC1kZXNjcmlwdGlvblxdXDp0ZXh0LXN0YXR1cy13YXJuXC85MD4qKVtkYXRhLXNsb3Q9YWxlcnQtZGVzY3JpcHRpb25de2NvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tc3RhdHVzLXdhcm4pIDkwJSwgdHJhbnNwYXJlbnQpfX06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOmxpbmUtY2xhbXAtMT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXstd2Via2l0LWxpbmUtY2xhbXA6MTstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7ZGlzcGxheTotd2Via2l0LWJveDtvdmVyZmxvdzpoaWRkZW59OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpmbGV4PiopW2RhdGEtc2xvdD1zZWxlY3QtdmFsdWVde2Rpc3BsYXk6ZmxleH06aXMoLlwqXDpkYXRhLVxbc2xvdFw9c2VsZWN0LXZhbHVlXF1cOml0ZW1zLWNlbnRlcj4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXthbGlnbi1pdGVtczpjZW50ZXJ9OmlzKC5cKlw6ZGF0YS1cW3Nsb3RcPXNlbGVjdC12YWx1ZVxdXDpnYXAtMVwuNT4qKVtkYXRhLXNsb3Q9c2VsZWN0LXZhbHVlXXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDEuNSl9LmRhdGEtXFtzdGF0ZVw9c2VsZWN0ZWRcXVw6YmctbXV0ZWRbZGF0YS1zdGF0ZT1zZWxlY3RlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9LmRhdGEtXFt2YXJpYW50XD1saW5lXF1cOnJvdW5kZWQtbm9uZVtkYXRhLXZhcmlhbnQ9bGluZV17Ym9yZGVyLXJhZGl1czowfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5tb3Rpb24tcmVkdWNlXDphbmltYXRlLW5vbmV7YW5pbWF0aW9uOm5vbmV9Lm1vdGlvbi1yZWR1Y2VcOnRyYW5zaXRpb24tbm9uZXt0cmFuc2l0aW9uLXByb3BlcnR5Om5vbmV9fUBtZWRpYSAod2lkdGg+PTQwcmVtKXsuc21cOmluc2V0LXgtYXV0b3tpbnNldC1pbmxpbmU6YXV0b30uc21cOnJpZ2h0LTR7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5zbVw6Ym90dG9tLTR7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uc21cOnctOTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDk2KX0uc21cOmdyaWQtY29scy0ye2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy0ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMyxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy00e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCxtaW5tYXgoMCwxZnIpKX0uc21cOmdyaWQtY29scy01e2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNSxtaW5tYXgoMCwxZnIpKX0uc21cOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uc21cOml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LnNtXDppdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmR9LnNtXDppdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5zbVw6anVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5zbVw6cHgtNntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogNil9fUBtZWRpYSAod2lkdGg+PTQ4cmVtKXsubWRcOnctNTJ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDUyKX0ubWRcOnctZnVsbHt3aWR0aDoxMDAlfS5tZFw6c2hyaW5rLTB7ZmxleC1zaHJpbms6MH0ubWRcOmZsZXgtY29se2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ubWRcOmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30ubWRcOmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9Lm1kXDpib3JkZXItYi0we2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOjB9Lm1kXDpwci0ze3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5tZFw6cGItMHtwYWRkaW5nLWJvdHRvbTowfS5tZFw6dGV4dC1zbXtmb250LXNpemU6dmFyKC0tdGV4dC1zbSk7bGluZS1oZWlnaHQ6dmFyKC0tdHctbGVhZGluZyx2YXIoLS10ZXh0LXNtLS1saW5lLWhlaWdodCkpfS5tZFw6dGV4dC1wcmV0dHl7dGV4dC13cmFwOnByZXR0eX19QG1lZGlhICh3aWR0aD49NjRyZW0pey5sZ1w6Z3JpZC1jb2xzLTJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLG1pbm1heCgwLDFmcikpfS5sZ1w6Z3JpZC1jb2xzLTR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LG1pbm1heCgwLDFmcikpfS5sZ1w6cHgtOHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpICogOCl9fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmJvcmRlci1pbnB1dHtib3JkZXItY29sb3I6dmFyKC0taW5wdXQpfS5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1kZXN0cnVjdGl2ZSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpiZy1kZXN0cnVjdGl2ZVwvMjB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWRlc3RydWN0aXZlKSAyMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmJnLWlucHV0XC8zMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6dGV4dC1tdXRlZC1mb3JlZ3JvdW5ke2NvbG9yOnZhcigtLW11dGVkLWZvcmVncm91bmQpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5kYXJrXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzMwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8zMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDMwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6aG92ZXJcOmJnLWlucHV0XC81MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWlucHV0KX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmRhcmtcOmhvdmVyXDpiZy1pbnB1dFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSA1MCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmhvdmVyXDpiZy1tdXRlZFwvNTA6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tdXRlZCl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5kYXJrXDpob3Zlclw6YmctbXV0ZWRcLzUwOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1tdXRlZCkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpob3Zlclw6dGV4dC1mb3JlZ3JvdW5kOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6Zm9jdXMtdmlzaWJsZVw6cmluZy1kZXN0cnVjdGl2ZVwvNDA6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNDAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDpkaXNhYmxlZFw6YmctaW5wdXRcLzgwOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGlzYWJsZWRcOmJnLWlucHV0XC84MDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0taW5wdXQpIDgwJSwgdHJhbnNwYXJlbnQpfX0uZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpib3JkZXItZGVzdHJ1Y3RpdmVcLzUwW2FyaWEtaW52YWxpZD10cnVlXXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgNTAlLCB0cmFuc3BhcmVudCl9fS5kYXJrXDphcmlhLWludmFsaWRcOnJpbmctZGVzdHJ1Y3RpdmVcLzQwW2FyaWEtaW52YWxpZD10cnVlXXstLXR3LXJpbmctY29sb3I6dmFyKC0tZGVzdHJ1Y3RpdmUpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6YXJpYS1pbnZhbGlkXDpyaW5nLWRlc3RydWN0aXZlXC80MFthcmlhLWludmFsaWQ9dHJ1ZV17LS10dy1yaW5nLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYiwgdmFyKC0tZGVzdHJ1Y3RpdmUpIDQwJSwgdHJhbnNwYXJlbnQpfX19LmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1hY2NvcmRpb24tZG93bjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6YW5pbWF0ZS1pbjp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXthbmltYXRpb246ZW50ZXIgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4xNXMpKXZhcigtLXR3LWVhc2UsZWFzZSl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtb3Blblw6ZmFkZS1pbi0wOndoZXJlKFtkYXRhLXN0YXRlPW9wZW5dKSwuZGF0YS1vcGVuXDpmYWRlLWluLTA6d2hlcmUoW2RhdGEtb3Blbl06bm90KFtkYXRhLW9wZW49ZmFsc2VdKSl7LS10dy1lbnRlci1vcGFjaXR5OjB9LmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1zdGF0ZT1vcGVuXSksLmRhdGEtb3Blblw6em9vbS1pbi05NTp3aGVyZShbZGF0YS1vcGVuXTpub3QoW2RhdGEtb3Blbj1mYWxzZV0pKXstLXR3LWVudGVyLXNjYWxlOi45NX0uZGF0YS1jbG9zZWRcOmFuaW1hdGUtYWNjb3JkaW9uLXVwOndoZXJlKFtkYXRhLXN0YXRlPWNsb3NlZF0pLC5kYXRhLWNsb3NlZFw6YW5pbWF0ZS1hY2NvcmRpb24tdXA6d2hlcmUoW2RhdGEtY2xvc2VkXTpub3QoW2RhdGEtY2xvc2VkPWZhbHNlXSkpe2FuaW1hdGlvbjphY2NvcmRpb24tdXAgdmFyKC0tdHctYW5pbWF0aW9uLWR1cmF0aW9uLHZhcigtLXR3LWR1cmF0aW9uLC4ycykpdmFyKC0tdHctZWFzZSxlYXNlLW91dCl2YXIoLS10dy1hbmltYXRpb24tZGVsYXksMHMpdmFyKC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwxKXZhcigtLXR3LWFuaW1hdGlvbi1kaXJlY3Rpb24sbm9ybWFsKXZhcigtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGUsbm9uZSl9LmRhdGEtY2xvc2VkXDphbmltYXRlLW91dDp3aGVyZShbZGF0YS1zdGF0ZT1jbG9zZWRdKSwuZGF0YS1jbG9zZWRcOmFuaW1hdGUtb3V0OndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXthbmltYXRpb246ZXhpdCB2YXIoLS10dy1hbmltYXRpb24tZHVyYXRpb24sdmFyKC0tdHctZHVyYXRpb24sLjE1cykpdmFyKC0tdHctZWFzZSxlYXNlKXZhcigtLXR3LWFuaW1hdGlvbi1kZWxheSwwcyl2YXIoLS10dy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LDEpdmFyKC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbixub3JtYWwpdmFyKC0tdHctYW5pbWF0aW9uLWZpbGwtbW9kZSxub25lKX0uZGF0YS1jbG9zZWRcOmZhZGUtb3V0LTA6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDpmYWRlLW91dC0wOndoZXJlKFtkYXRhLWNsb3NlZF06bm90KFtkYXRhLWNsb3NlZD1mYWxzZV0pKXstLXR3LWV4aXQtb3BhY2l0eTowfS5kYXRhLWNsb3NlZFw6em9vbS1vdXQtOTU6d2hlcmUoW2RhdGEtc3RhdGU9Y2xvc2VkXSksLmRhdGEtY2xvc2VkXDp6b29tLW91dC05NTp3aGVyZShbZGF0YS1jbG9zZWRdOm5vdChbZGF0YS1jbG9zZWQ9ZmFsc2VdKSl7LS10dy1leGl0LXNjYWxlOi45NX0uZGF0YS1hY3RpdmVcOmJnLWJhY2tncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhdGEtYWN0aXZlXDpiZy1iYWNrZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJhY2tncm91bmQpfS5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5kYXRhLWFjdGl2ZVw6dGV4dC1mb3JlZ3JvdW5kOndoZXJlKFtkYXRhLWFjdGl2ZV06bm90KFtkYXRhLWFjdGl2ZT1mYWxzZV0pKXtjb2xvcjp2YXIoLS1mb3JlZ3JvdW5kKX0uZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWRlZmF1bHRcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6c2hhZG93LXNtOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWRlZmF1bHRdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9ZGVmYXVsdFxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctc206aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9ZGVmYXVsdF0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpey0tdHctc2hhZG93OjAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMWEpLCAwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksIHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSwgdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSwgdmFyKC0tdHctcmluZy1zaGFkb3cpLCB2YXIoLS10dy1zaGFkb3cpfS5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZ3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9Lmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOnNoYWRvdy1ub25lOmlzKDp3aGVyZSguZ3JvdXBcL3RhYnMtbGlzdClbZGF0YS12YXJpYW50PWxpbmVdICopOndoZXJlKFtkYXRhLXN0YXRlPWFjdGl2ZV0pLC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpzaGFkb3ctbm9uZTppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7LS10dy1zaGFkb3c6MCAwICMwMDAwO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSwgdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLCB2YXIoLS10dy1yaW5nLXNoYWRvdyksIHZhcigtLXR3LXNoYWRvdyl9OmlzKC5ncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDphZnRlclw6b3BhY2l0eS0xMDA6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmFmdGVyXDpvcGFjaXR5LTEwMDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSkpOmFmdGVye2NvbnRlbnQ6dmFyKC0tdHctY29udGVudCk7b3BhY2l0eToxfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7LmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpib3JkZXItaW5wdXQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JvcmRlci1jb2xvcjp2YXIoLS1pbnB1dCl9LmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDpiZy1pbnB1dFwvMzA6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6dmFyKC0taW5wdXQpfUBzdXBwb3J0cyAoY29sb3I6Y29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6ZGF0YS1hY3RpdmVcOmJnLWlucHV0XC8zMDp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLWlucHV0KSAzMCUsIHRyYW5zcGFyZW50KX19LmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmRhdGEtYWN0aXZlXDp0ZXh0LWZvcmVncm91bmQ6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2NvbG9yOnZhcigtLWZvcmVncm91bmQpfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpib3JkZXItdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtc3RhdGU9YWN0aXZlXSksLmRhcmtcOmdyb3VwLWRhdGEtXFt2YXJpYW50XD1saW5lXF1cL3RhYnMtbGlzdFw6ZGF0YS1hY3RpdmVcOmJvcmRlci10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1hY3RpdmVdOm5vdChbZGF0YS1hY3RpdmU9ZmFsc2VdKSl7Ym9yZGVyLWNvbG9yOiMwMDAwfS5kYXJrXDpncm91cC1kYXRhLVxbdmFyaWFudFw9bGluZVxdXC90YWJzLWxpc3RcOmRhdGEtYWN0aXZlXDpiZy10cmFuc3BhcmVudDppcyg6d2hlcmUoLmdyb3VwXC90YWJzLWxpc3QpW2RhdGEtdmFyaWFudD1saW5lXSAqKTp3aGVyZShbZGF0YS1zdGF0ZT1hY3RpdmVdKSwuZGFya1w6Z3JvdXAtZGF0YS1cW3ZhcmlhbnRcPWxpbmVcXVwvdGFicy1saXN0XDpkYXRhLWFjdGl2ZVw6YmctdHJhbnNwYXJlbnQ6aXMoOndoZXJlKC5ncm91cFwvdGFicy1saXN0KVtkYXRhLXZhcmlhbnQ9bGluZV0gKik6d2hlcmUoW2RhdGEtYWN0aXZlXTpub3QoW2RhdGEtYWN0aXZlPWZhbHNlXSkpe2JhY2tncm91bmQtY29sb3I6IzAwMDB9fS5kYXRhLWhvcml6b250YWxcOmZsZXgtY29sOndoZXJlKFtkYXRhLW9yaWVudGF0aW9uPWhvcml6b250YWxdKXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LlxbXCZfYVxdXDp1bmRlcmxpbmUgYXt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LlxbXCZfYVxdXDp1bmRlcmxpbmUtb2Zmc2V0LTMgYXt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6M3B4fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW1wmX2FcXVw6aG92ZXJcOnRleHQtZm9yZWdyb3VuZCBhOmhvdmVye2NvbG9yOnZhcigtLWZvcmVncm91bmQpfX0uXFtcJl9wXDpub3RcKFw6bGFzdC1jaGlsZFwpXF1cOm1iLTQgcDpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpfS5cW1wmX3N2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lIHN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmX3N2Z1xdXDpzaHJpbmstMCBzdmd7ZmxleC1zaHJpbms6MH0uXFtcJl9zdmdcOm5vdFwoXFtjbGFzc1wqXD1zaXplLVxdXClcXVw6c2l6ZS0zIHN2Zzpub3QoW2NsYXNzKj1zaXplLV0pe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTNcLjUgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzLjUpfS5cW1wmX3N2Z1w6bm90XChcW2NsYXNzXCpcPXNpemUtXF1cKVxdXDpzaXplLTQgc3ZnOm5vdChbY2xhc3MqPXNpemUtXSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZfdHJcXVw6Ym9yZGVyLWIgdHJ7Ym9yZGVyLWJvdHRvbS1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5cW1wmX3RyXDpsYXN0LWNoaWxkXF1cOmJvcmRlci0wIHRyOmxhc3QtY2hpbGR7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjB9LlxbXCZcOmhhc1woXFtyb2xlXD1jaGVja2JveFxdXClcXVw6cHItMDpoYXMoW3JvbGU9Y2hlY2tib3hdKXtwYWRkaW5nLXJpZ2h0OjB9LlxbXC5ib3JkZXItYlxdXDpwYi00LmJvcmRlci1ie3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykgKiA0KX0uZ3JvdXAtZGF0YS1cW3NpemVcPXNtXF1cL2NhcmRcOlxbXC5ib3JkZXItYlxdXDpwYi0zOmlzKDp3aGVyZSguZ3JvdXBcL2NhcmQpW2RhdGEtc2l6ZT1zbV0gKikuYm9yZGVyLWJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDMpfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5cW2FcXVw6aG92ZXJcOmJnLWRlc3RydWN0aXZlXC8yMDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWRlc3RydWN0aXZlKX1Ac3VwcG9ydHMgKGNvbG9yOmNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYVxdXDpob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzIwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1kZXN0cnVjdGl2ZSkgMjAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOmJnLW11dGVkOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbXV0ZWQpfS5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tcHJpbWFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXByaW1hcnlcLzgwOmlzKGEpOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLCB2YXIoLS1wcmltYXJ5KSA4MCUsIHRyYW5zcGFyZW50KX19LlxbYVxdXDpob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDppcyhhKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNlY29uZGFyeSl9QHN1cHBvcnRzIChjb2xvcjpjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2FcXVw6aG92ZXJcOmJnLXNlY29uZGFyeVwvODA6aXMoYSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsIHZhcigtLXNlY29uZGFyeSkgODAlLCB0cmFuc3BhcmVudCl9fS5cW2FcXVw6aG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDppcyhhKTpob3Zlcntjb2xvcjp2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKX19OmlzKC5cKlw6XFtpbWdcOmZpcnN0LWNoaWxkXF1cOnJvdW5kZWQtdC14bD4qKTppcyhpbWc6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgKyA0cHgpfTppcyguXCpcOlxbaW1nXDpsYXN0LWNoaWxkXF1cOnJvdW5kZWQtYi14bD4qKTppcyhpbWc6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpICsgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSArIDRweCl9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOmZsZXg+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtkaXNwbGF5OmZsZXh9OmlzKC5cKlw6XFtzcGFuXF1cOmxhc3RcOml0ZW1zLWNlbnRlcj4qKTppcyhzcGFuKTpsYXN0LWNoaWxke2FsaWduLWl0ZW1zOmNlbnRlcn06aXMoLlwqXDpcW3NwYW5cXVw6bGFzdFw6Z2FwLTI+Kik6aXMoc3Bhbik6bGFzdC1jaGlsZHtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDIpfTppcyguXCpcOlxbc3ZnXF1cOnJvdy1zcGFuLTI+Kik6aXMoc3ZnKXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyfTppcyguXCpcOlxbc3ZnXF1cOnRyYW5zbGF0ZS15LTBcLjU+Kik6aXMoc3ZnKXstLXR3LXRyYW5zbGF0ZS15OmNhbGModmFyKC0tc3BhY2luZykgKiAuNSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KSB2YXIoLS10dy10cmFuc2xhdGUteSl9OmlzKC5cKlw6XFtzdmdcXVw6dGV4dC1jdXJyZW50PiopOmlzKHN2Zyl7Y29sb3I6Y3VycmVudENvbG9yfTppcyguXCpcOlxbc3ZnXDpub3RcKFxbY2xhc3NcKlw9c2l6ZS1cXVwpXF1cOnNpemUtND4qKTppcyhzdmc6bm90KFtjbGFzcyo9c2l6ZS1dKSl7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSAqIDQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpICogNCl9LlxbXCZcPnN2Z1xdXDpwb2ludGVyLWV2ZW50cy1ub25lPnN2Z3twb2ludGVyLWV2ZW50czpub25lfS5cW1wmXD5zdmdcXVw6c2l6ZS0zXCE+c3Zne3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnQ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykgKiAzKSFpbXBvcnRhbnR9fUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1kZWxheXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MHN9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWRpcmVjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6bm9ybWFsfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWFuaW1hdGlvbi1maWxsLW1vZGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOm5vbmV9QHByb3BlcnR5IC0tdHctYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1lbnRlci1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZW50ZXItcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWVudGVyLXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1leGl0LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjF9QHByb3BlcnR5IC0tdHctZXhpdC1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctZXhpdC1zY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MX1AcHJvcGVydHkgLS10dy1leGl0LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LWV4aXQtdHJhbnNsYXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtdHtzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1ie3N5bnRheDoiPGxlbmd0aC1wZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXNjcm9sbC1mYWRlLXN7c3ludGF4OiI8bGVuZ3RoLXBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tc2Nyb2xsLWZhZGUtZXtzeW50YXg6IjxsZW5ndGgtcGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS1zY3JvbGwtZmFkZS1tYXNre3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tc2hpbW1lci1hbmdsZXtzeW50YXg6IjxhbmdsZT4iO2luaGVyaXRzOnRydWU7aW5pdGlhbC12YWx1ZToyMGRlZ31AcHJvcGVydHkgLS1zaGltbWVyLWltYWdle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tc2hpbW1lci10ZXh0LWZpbGx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuc2hpbW1lcnstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpjdXJyZW50Q29sb3I7YmFja2dyb3VuZC1pbWFnZTpub25lO2FuaW1hdGlvbjpub25lfX06cm9vdHstLWJhY2tncm91bmQ6b2tsY2goOTklIC4wMDQgNzUpOy0tZm9yZWdyb3VuZDpva2xjaCgxOSUgLjAxMiA3NSk7LS1jYXJkOm9rbGNoKDk5LjUlIC4wMDMgNzUpOy0tY2FyZC1mb3JlZ3JvdW5kOm9rbGNoKDE5JSAuMDEyIDc1KTstLXBvcG92ZXI6b2tsY2goOTkuNSUgLjAwMyA3NSk7LS1wb3BvdmVyLWZvcmVncm91bmQ6b2tsY2goMTklIC4wMTIgNzUpOy0tcHJpbWFyeTpva2xjaCg0NiUgLjA5IDIwMCk7LS1wcmltYXJ5LWZvcmVncm91bmQ6b2tsY2goOTglIC4wMDYgMjAwKTstLXNlY29uZGFyeTpva2xjaCg5NSUgLjAwNiA3NSk7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDpva2xjaCgyMiUgLjAxIDc1KTstLW11dGVkOm9rbGNoKDk1JSAuMDA2IDc1KTstLW11dGVkLWZvcmVncm91bmQ6b2tsY2goNDglIC4wMTIgNzUpOy0tYWNjZW50Om9rbGNoKDkzJSAuMDIgMjAwKTstLWFjY2VudC1mb3JlZ3JvdW5kOm9rbGNoKDI4JSAuMDUgMjAwKTstLWRlc3RydWN0aXZlOm9rbGNoKDU1JSAuMiAyNSk7LS1ib3JkZXI6b2tsY2goOTAlIC4wMDcgNzUpOy0taW5wdXQ6b2tsY2goOTAlIC4wMDcgNzUpOy0tcmluZzpva2xjaCg1NSUgLjA5IDIwMCk7LS1yYWRpdXM6LjM3NXJlbTstLWNoYXJ0LXJlcXVlc3RzOiMwMDllNzM7LS1jaGFydC10b2tlbnMtaW46IzAwNzJiMjstLWNoYXJ0LXRva2Vucy1vdXQ6I2U2OWYwMDstLWNoYXJ0LWNvc3Q6I2Q1NWUwMDstLWNoYXJ0LXNlcmllcy1hOiM1NmI0ZTk7LS1jaGFydC1zZXJpZXMtYjojOGE2ZDAwOy0tY2hhcnQtc2VyaWVzLWM6I2NjNzlhNzstLWNoYXJ0LXNlcmllcy1kOiM0ZDRkNGQ7LS1zdGF0dXMtd2FybjojYTM1YzAwOy0tYmFyLWFtYmVyOiNhMzVjMDB9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6cm9vdHstLWJhY2tncm91bmQ6b2tsY2goMTclIC4wMDcgNzUpOy0tZm9yZWdyb3VuZDpva2xjaCg5NSUgLjAwNSA3NSk7LS1jYXJkOm9rbGNoKDIxJSAuMDA5IDc1KTstLWNhcmQtZm9yZWdyb3VuZDpva2xjaCg5NSUgLjAwNSA3NSk7LS1wb3BvdmVyOm9rbGNoKDIxJSAuMDA5IDc1KTstLXBvcG92ZXItZm9yZWdyb3VuZDpva2xjaCg5NSUgLjAwNSA3NSk7LS1wcmltYXJ5Om9rbGNoKDc0JSAuMTEgMjAwKTstLXByaW1hcnktZm9yZWdyb3VuZDpva2xjaCgxNiUgLjAxMiAyMDApOy0tc2Vjb25kYXJ5Om9rbGNoKDI3JSAuMDExIDc1KTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOm9rbGNoKDkzJSAuMDA1IDc1KTstLW11dGVkOm9rbGNoKDI3JSAuMDExIDc1KTstLW11dGVkLWZvcmVncm91bmQ6b2tsY2goNjglIC4wMTIgNzUpOy0tYWNjZW50Om9rbGNoKDMyJSAuMDM1IDIwMCk7LS1hY2NlbnQtZm9yZWdyb3VuZDpva2xjaCg5MSUgLjAzIDIwMCk7LS1kZXN0cnVjdGl2ZTpva2xjaCg2OCUgLjE5IDI1KTstLWJvcmRlcjpva2xjaCgxMDAlIDAgMC8uMTIpOy0taW5wdXQ6b2tsY2goMTAwJSAwIDAvLjE2KTstLXJpbmc6b2tsY2goNjIlIC4xIDIwMCk7LS1jaGFydC1yZXF1ZXN0czojMTZiODkxOy0tY2hhcnQtdG9rZW5zLWluOiM0MDk4ZDc7LS1jaGFydC10b2tlbnMtb3V0OiNmMGFjMWY7LS1jaGFydC1jb3N0OiNlODc2M2E7LS1jaGFydC1zZXJpZXMtYTojNTZiNGU5Oy0tY2hhcnQtc2VyaWVzLWI6I2YwZTQ0MjstLWNoYXJ0LXNlcmllcy1jOiNjYzc5YTc7LS1jaGFydC1zZXJpZXMtZDojYjhiOGI4Oy0tc3RhdHVzLXdhcm46I2YwYWMxZjstLWJhci1hbWJlcjojZjBhYzFmfX1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zcGFjZS15LXJldmVyc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctYm9yZGVyLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1sZWFkaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZm9udC13ZWlnaHR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy10cmFja2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9yZGluYWx7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zbGFzaGVkLXplcm97c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZpZ3VyZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtc3BhY2luZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZnJhY3Rpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1yaW5nLWluc2V0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtd2lkdGh7c3ludGF4OiI8bGVuZ3RoPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTojZmZmfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LW91dGxpbmUtc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctYWxwaGF7c3ludGF4OiI8cGVyY2VudGFnZT4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MTAwJX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1zaXple3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctY29udGVudHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6IiJ9QGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBwdWxzZXs1MCV7b3BhY2l0eTouNX19QGtleWZyYW1lcyBlbnRlcnswJXtvcGFjaXR5OnZhcigtLXR3LWVudGVyLW9wYWNpdHksMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS15LDApLDApc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSx2YXIoLS10dy1lbnRlci1zY2FsZSwxKSlyb3RhdGUodmFyKC0tdHctZW50ZXItcm90YXRlLDApKTtmaWx0ZXI6Ymx1cih2YXIoLS10dy1lbnRlci1ibHVyLDApKX19QGtleWZyYW1lcyBleGl0e3Rve29wYWNpdHk6dmFyKC0tdHctZXhpdC1vcGFjaXR5LDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LDApLHZhcigtLXR3LWV4aXQtdHJhbnNsYXRlLXksMCksMClzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsMSksdmFyKC0tdHctZXhpdC1zY2FsZSwxKSx2YXIoLS10dy1leGl0LXNjYWxlLDEpKXJvdGF0ZSh2YXIoLS10dy1leGl0LXJvdGF0ZSwwKSk7ZmlsdGVyOmJsdXIodmFyKC0tdHctZXhpdC1ibHVyLDApKX19QGtleWZyYW1lcyBhY2NvcmRpb24tZG93bnswJXtoZWlnaHQ6MH10b3toZWlnaHQ6dmFyKC0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQsdmFyKC0tYWNjb3JkaW9uLXBhbmVsLWhlaWdodCxhdXRvKSl9fUBrZXlmcmFtZXMgYWNjb3JkaW9uLXVwezAle2hlaWdodDp2YXIoLS1yZWthLWFjY29yZGlvbi1jb250ZW50LWhlaWdodCx2YXIoLS1hY2NvcmRpb24tcGFuZWwtaGVpZ2h0LGF1dG8pKX10b3toZWlnaHQ6MH19Cg==", ), }, - "index-dywS8OpT.js": { + "kpi-P08UvrKi.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "Y29uc3QgX192aXRlX19tYXBEZXBzPShpLG09X192aXRlX19tYXBEZXBzLGQ9KG0uZnx8KG0uZj1bImFzc2V0cy9Ib21lUGFnZS14eGFvLUR6US5qcyIsImFzc2V0cy9Ta2VsZXRvbi1CMHppQjZPZC5qcyIsImFzc2V0cy90YWJzLVlsaG5IcEstLmpzIiwiYXNzZXRzL3VzZUlkLUI5ZEp1bW9JLmpzIiwiYXNzZXRzL0Vycm9yU3RhdGUteW02ZVNsajIuanMiLCJhc3NldHMvYmFkZ2UtRFVpQlREeUEuanMiLCJhc3NldHMvVHJ5TG9uZ2VyUmFuZ2VCdXR0b24tQ2prVW5hT3ouanMiLCJhc3NldHMvU2tlbGV0b25MaXN0LUNtcXozaGZhLmpzIiwiYXNzZXRzL0VudGl0eUxpbmstRGc5M0tHVlQuanMiLCJhc3NldHMvZXZlbnRzLVBVeGhFZWdhLmpzIiwiYXNzZXRzL2V2ZW50cy1maWx0ZXItWEZuaklhUjcuanMiLCJhc3NldHMva3BpLWNobTNCaXVGLmpzIiwiYXNzZXRzL3Byb3ZpZGVyLXJhdGUtRFU3T2dTZUIuanMiLCJhc3NldHMvU3BlbmRQYWdlLTZaWDJxM1p2LmpzIiwiYXNzZXRzL0RhdGFUYWJsZS1DUXhSVkRTWS5qcyIsImFzc2V0cy9Db21wYWN0TnVtYmVyLXByOGNKNGN2LmpzIiwiYXNzZXRzL2J1cm5kb3duLUJ6NDR4Ny1kLmpzIiwiYXNzZXRzL2NsaXBib2FyZC1CNzNmWjBjMS5qcyIsImFzc2V0cy9DbGFtcGVkUmFuZ2VOb3RpY2UtRDJ3YWxuWGYuanMiLCJhc3NldHMvVGltZVNlcmllc0NoYXJ0LUJGY1Q2d29BLmpzIiwiYXNzZXRzL2NhdGFsb2ctbFU0MWlySXEuanMiLCJhc3NldHMvc2VyaWVzLU5JUlZCWE1QLmpzIiwiYXNzZXRzL0NvbnN1bWVyc1BhZ2UtaThzWlY5TVguanMiLCJhc3NldHMvc2VhcmNoLWV4cGFuZC1DSGQ0RldaWi5qcyIsImFzc2V0cy9jb25zdW1lcnMtQ1F0RUo5SzcuanMiLCJhc3NldHMvdXNlU2VhcmNoUXVlcnktYlFaUDRUc1ouanMiLCJhc3NldHMvTW9kZWxzUGFnZS1DY0ExUkhLNi5qcyIsImFzc2V0cy9yZWxpYWJpbGl0eS1DRklrUnhWVi5qcyIsImFzc2V0cy9SZWxpYWJpbGl0eVBhZ2UtNi1iejV4NnouanMiLCJhc3NldHMvQ29uZmlnUGFnZS03SVljYWZQdy5qcyIsImFzc2V0cy9UYXJnZXRzUGFnZS1EWVVWaGhzai5qcyJdKSkpPT5pLm1hcChpPT5kW2ldKTsKaW1wb3J0e2EgYXMgZSxpIGFzIHQsbixvIGFzIHIsciBhcyBpLHMgYXMgYSx0IGFzIG99ZnJvbSIuL3VzZUlkLUI5ZEp1bW9JLmpzIjtpbXBvcnR7JCBhcyBzLEEgYXMgYyxBciBhcyBsLEIgYXMgdSxCbiBhcyBkLEMgYXMgZixEIGFzIHAsRG4gYXMgbSxFIGFzIGgsRiBhcyBnLEZyIGFzIF8sRyBhcyB2LEggYXMgeSxIbiBhcyBiLEh0IGFzIHgsSSBhcyBTLEluIGFzIEMsSnQgYXMgdyxLbiBhcyBULEwgYXMgRSxMciBhcyBlZSxNIGFzIEQsTXIgYXMgdGUsTiBhcyBuZSxPIGFzIHJlLE9uIGFzIE8sUCBhcyBpZSxRciBhcyBhZSxRdCBhcyBvZSxSIGFzIHNlLFJyIGFzIGNlLFMgYXMgbGUsU2kgYXMgayxTdCBhcyB1ZSxUIGFzIGRlLFRuIGFzIGZlLFUgYXMgcGUsVW4gYXMgQSxWIGFzIG1lLFZ0IGFzIGhlLFcgYXMgZ2UsWCBhcyBfZSxYbiBhcyB2ZSxaIGFzIHllLF8gYXMgYmUsX24gYXMgaixfdCBhcyB4ZSxhIGFzIFNlLGFuIGFzIE0sYXQgYXMgQ2UsYmkgYXMgd2UsYnQgYXMgVGUsY2kgYXMgRWUsY24gYXMgTixjciBhcyBEZSxlaSBhcyBPZSxlciBhcyBrZSxmciBhcyBBZSxnIGFzIGplLGdpIGFzIFAsZ24gYXMgTWUsZ3QgYXMgTmUsaCBhcyBQZSxobiBhcyBGLGh0IGFzIEZlLGkgYXMgSWUsaWkgYXMgTGUsaW4gYXMgSSxpciBhcyBSZSxqIGFzIHplLGpyIGFzIEwsayBhcyBCZSxsIGFzIFZlLGxpIGFzIEhlLGxyIGFzIFIsbHQgYXMgVWUsbSBhcyBXZSxtaSBhcyBHZSxtbiBhcyBLZSxtdCBhcyBxZSxuIGFzIEplLG5yIGFzIHosbnQgYXMgWWUsbyBhcyBYZSxvaSBhcyBCLG9uIGFzIFYsb3QgYXMgWmUscCBhcyBRZSxwaSBhcyAkZSxxIGFzIGV0LHFyIGFzIHR0LHIgYXMgbnQsc24gYXMgSCx0IGFzIHJ0LHRpIGFzIGl0LHR0IGFzIGF0LHUgYXMgb3QsdXIgYXMgc3QsdyBhcyBjdCx4IGFzIGx0LHhpIGFzIHV0LHlpIGFzIGR0LHogYXMgZnQsenQgYXMgcHR9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjtmdW5jdGlvbiBtdChlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaHQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBndChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBtdChlKX1mdW5jdGlvbiBfdChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uYCl9ZnVuY3Rpb24gdnQoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxgdmFsdWVgaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGt0KHIua2V5KSxyKX19ZnVuY3Rpb24geXQoZSx0LG4pe3JldHVybiB0JiZ2dChlLnByb3RvdHlwZSx0KSxuJiZ2dChlLG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGV9ZnVuY3Rpb24gYnQoZSx0KXt2YXIgbj10eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW2BAQGl0ZXJhdG9yYF07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fChuPWp0KGUpKXx8dCYmZSYmdHlwZW9mIGUubGVuZ3RoPT1gbnVtYmVyYCl7biYmKGU9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49ZS5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOmVbcisrXX19LGU6ZnVuY3Rpb24oZSl7dGhyb3cgZX0sZjppfX10aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhLG89ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9bi5uZXh0KCk7cmV0dXJuIG89ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxhPWV9LGY6ZnVuY3Rpb24oKXt0cnl7b3x8bi5yZXR1cm49PW51bGx8fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gVShlLHQsbil7cmV0dXJuKHQ9a3QodCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24geHQoZSl7aWYodHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtgQEBpdGVyYXRvcmBdIT1udWxsKXJldHVybiBBcnJheS5mcm9tKGUpfWZ1bmN0aW9uIFN0KGUsdCl7dmFyIG49ZT09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8YHVgJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbYEBAaXRlcmF0b3JgXTtpZihuIT1udWxsKXt2YXIgcixpLGEsbyxzPVtdLGM9ITAsbD0hMTt0cnl7aWYoYT0obj1uLmNhbGwoZSkpLm5leHQsdD09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2M9ITF9ZWxzZSBmb3IoOyEoYz0ocj1hLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09dCk7Yz0hMCk7fWNhdGNoKGUpe2w9ITAsaT1lfWZpbmFsbHl7dHJ5e2lmKCFjJiZuLnJldHVybiE9bnVsbCYmKG89bi5yZXR1cm4oKSxPYmplY3QobykhPT1vKSlyZXR1cm59ZmluYWxseXtpZihsKXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBDdCgpe3Rocm93IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIHd0KCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIFR0KGUsdCl7dmFyIG49T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocj1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gVyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF09PW51bGw/e306YXJndW1lbnRzW3RdO3QlMj9UdChPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24odCl7VShlLHQsblt0XSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpUdChPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gRXQoZSx0KXtyZXR1cm4gaHQoZSl8fFN0KGUsdCl8fGp0KGUsdCl8fEN0KCl9ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIGd0KGUpfHx4dChlKXx8anQoZSl8fHd0KCl9ZnVuY3Rpb24gT3QoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBrdChlKXt2YXIgdD1PdChlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBBdChlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBBdD10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sQXQoZSl9ZnVuY3Rpb24ganQoZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIG10KGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9tdChlLHQpOnZvaWQgMH19dmFyIE10PWZ1bmN0aW9uKCl7fSxOdD17fSxQdD17fSxGdD1udWxsLEl0PXttYXJrOk10LG1lYXN1cmU6TXR9O3RyeXt0eXBlb2Ygd2luZG93PGB1YCYmKE50PXdpbmRvdyksdHlwZW9mIGRvY3VtZW50PGB1YCYmKFB0PWRvY3VtZW50KSx0eXBlb2YgTXV0YXRpb25PYnNlcnZlcjxgdWAmJihGdD1NdXRhdGlvbk9ic2VydmVyKSx0eXBlb2YgcGVyZm9ybWFuY2U8YHVgJiYoSXQ9cGVyZm9ybWFuY2UpfWNhdGNoe312YXIgTHQ9KE50Lm5hdmlnYXRvcnx8e30pLnVzZXJBZ2VudCxSdD1MdD09PXZvaWQgMD9gYDpMdCx6dD1OdCxHPVB0LEJ0PUZ0LFZ0PUl0O3p0LmRvY3VtZW50O3ZhciBIdD0hIUcuZG9jdW1lbnRFbGVtZW50JiYhIUcuaGVhZCYmdHlwZW9mIEcuYWRkRXZlbnRMaXN0ZW5lcj09YGZ1bmN0aW9uYCYmdHlwZW9mIEcuY3JlYXRlRWxlbWVudD09YGZ1bmN0aW9uYCxVdD1+UnQuaW5kZXhPZihgTVNJRWApfHx+UnQuaW5kZXhPZihgVHJpZGVudC9gKSxXdCxHdD0vZmEoa3xrZHxzfHJ8bHx0fGR8ZHJ8ZGx8ZHR8YnxzbHJ8c2xwcnx3c2J8dGx8bnN8bmRzfGVzfGd0fGpyfGpmcnxqZHJ8dXNifHVmc2J8dWRzYnxjcnxzc3xzcnxzbHxzdHxzZHN8c2RyfHNkbHxzZHR8c2xkcnxzbHBkcnxwcnxtc3x2cyk/W1wtXCBdLyxLdD0vRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxHcmFwaGl0ZXxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxTbGFiIER1b3xTbGFiIFByZXNzIER1b3xQaXhlbHxNb3NhaWN8VmVsbHVtfFdoaXRlYm9hcmQpPy4qL2kscXQ9e2NsYXNzaWM6e2ZhOmBzb2xpZGAsZmFzOmBzb2xpZGAsImZhLXNvbGlkIjpgc29saWRgLGZhcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWw6YGxpZ2h0YCwiZmEtbGlnaHQiOmBsaWdodGAsZmF0OmB0aGluYCwiZmEtdGhpbiI6YHRoaW5gLGZhYjpgYnJhbmRzYCwiZmEtYnJhbmRzIjpgYnJhbmRzYH0sZHVvdG9uZTp7ZmE6YHNvbGlkYCxmYWQ6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsImZhLWR1b3RvbmUiOmBzb2xpZGAsZmFkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWRsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhZHQ6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LHNoYXJwOntmYTpgc29saWRgLGZhc3M6YHNvbGlkYCwiZmEtc29saWQiOmBzb2xpZGAsZmFzcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNsOmBsaWdodGAsImZhLWxpZ2h0IjpgbGlnaHRgLGZhc3Q6YHRoaW5gLCJmYS10aGluIjpgdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmE6YHNvbGlkYCxmYXNkczpgc29saWRgLCJmYS1zb2xpZCI6YHNvbGlkYCxmYXNkcjpgcmVndWxhcmAsImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNkbDpgbGlnaHRgLCJmYS1saWdodCI6YGxpZ2h0YCxmYXNkdDpgdGhpbmAsImZhLXRoaW4iOmB0aGluYH0sc2xhYjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscjpgcmVndWxhcmB9LCJzbGFiLXByZXNzIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYXNscHI6YHJlZ3VsYXJgfSwic2xhYi1kdW8iOnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhc2xkcjpgcmVndWxhcmB9LCJzbGFiLXByZXNzLWR1byI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFzbHBkcjpgcmVndWxhcmB9LHRodW1icHJpbnQ6eyJmYS1saWdodCI6YGxpZ2h0YCxmYXRsOmBsaWdodGB9LHZlbGx1bTp7ImZhLXNvbGlkIjpgc29saWRgLGZhdnM6YHNvbGlkYH0scGl4ZWw6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFwcjpgcmVndWxhcmB9LG1vc2FpYzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbXM6YHNvbGlkYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhd3NiOmBzZW1pYm9sZGB9LG5vdGRvZzp7ImZhLXNvbGlkIjpgc29saWRgLGZhbnM6YHNvbGlkYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBzb2xpZGAsZmFuZHM6YHNvbGlkYH0sZXRjaDp7ImZhLXNvbGlkIjpgc29saWRgLGZhZXM6YHNvbGlkYH0sZ3JhcGhpdGU6eyJmYS10aGluIjpgdGhpbmAsZmFndDpgdGhpbmB9LGplbGx5OnsiZmEtcmVndWxhciI6YHJlZ3VsYXJgLGZhanI6YHJlZ3VsYXJgfSwiamVsbHktZmlsbCI6eyJmYS1yZWd1bGFyIjpgcmVndWxhcmAsZmFqZnI6YHJlZ3VsYXJgfSwiamVsbHktZHVvIjp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWpkcjpgcmVndWxhcmB9LGNoaXNlbDp7ImZhLXJlZ3VsYXIiOmByZWd1bGFyYCxmYWNyOmByZWd1bGFyYH0sdXRpbGl0eTp7ImZhLXNlbWlib2xkIjpgc2VtaWJvbGRgLGZhdXNiOmBzZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVkc2I6YHNlbWlib2xkYH0sInV0aWxpdHktZmlsbCI6eyJmYS1zZW1pYm9sZCI6YHNlbWlib2xkYCxmYXVmc2I6YHNlbWlib2xkYH19LEp0PXtHUk9VUDpgZHVvdG9uZS1ncm91cGAsU1dBUF9PUEFDSVRZOmBzd2FwLW9wYWNpdHlgLFBSSU1BUlk6YHByaW1hcnlgLFNFQ09OREFSWTpgc2Vjb25kYXJ5YH0sWXQ9W2BmYS1jbGFzc2ljYCxgZmEtZHVvdG9uZWAsYGZhLXNoYXJwYCxgZmEtc2hhcnAtZHVvdG9uZWAsYGZhLXRodW1icHJpbnRgLGBmYS13aGl0ZWJvYXJkYCxgZmEtbm90ZG9nYCxgZmEtbm90ZG9nLWR1b2AsYGZhLWNoaXNlbGAsYGZhLWV0Y2hgLGBmYS1ncmFwaGl0ZWAsYGZhLWplbGx5YCxgZmEtamVsbHktZmlsbGAsYGZhLWplbGx5LWR1b2AsYGZhLXNsYWJgLGBmYS1zbGFiLXByZXNzYCxgZmEtc2xhYi1wcmVzcy1kdW9gLGBmYS1zbGFiLWR1b2AsYGZhLW1vc2FpY2AsYGZhLXBpeGVsYCxgZmEtdmVsbHVtYCxgZmEtdXRpbGl0eWAsYGZhLXV0aWxpdHktZHVvYCxgZmEtdXRpbGl0eS1maWxsYF0sSz1gY2xhc3NpY2AsWHQ9YGR1b3RvbmVgLFp0PWBzaGFycGAsUXQ9YHNoYXJwLWR1b3RvbmVgLCR0PWBjaGlzZWxgLGVuPWBldGNoYCx0bj1gZ3JhcGhpdGVgLG5uPWBqZWxseWAscm49YGplbGx5LWR1b2AsYW49YGplbGx5LWZpbGxgLG9uPWBtb3NhaWNgLHNuPWBub3Rkb2dgLGNuPWBub3Rkb2ctZHVvYCxsbj1gcGl4ZWxgLHVuPWBzbGFiYCxkbj1gc2xhYi1kdW9gLGZuPWBzbGFiLXByZXNzYCxwbj1gc2xhYi1wcmVzcy1kdW9gLG1uPWB0aHVtYnByaW50YCxobj1gdXRpbGl0eWAsZ249YHV0aWxpdHktZHVvYCxfbj1gdXRpbGl0eS1maWxsYCx2bj1gdmVsbHVtYCx5bj1gd2hpdGVib2FyZGAsYm49YENsYXNzaWNgLHhuPWBEdW90b25lYCxTbj1gU2hhcnBgLENuPWBTaGFycCBEdW90b25lYCx3bj1gQ2hpc2VsYCxUbj1gRXRjaGAsRW49YEdyYXBoaXRlYCxEbj1gSmVsbHlgLE9uPWBKZWxseSBEdW9gLGtuPWBKZWxseSBGaWxsYCxBbj1gTW9zYWljYCxqbj1gTm90ZG9nYCxNbj1gTm90ZG9nIER1b2AsTm49YFBpeGVsYCxQbj1gU2xhYmAsRm49YFNsYWIgRHVvYCxJbj1gU2xhYiBQcmVzc2AsTG49YFNsYWIgUHJlc3MgRHVvYCxSbj1gVGh1bWJwcmludGAsem49YFV0aWxpdHlgLEJuPWBVdGlsaXR5IER1b2AsVm49YFV0aWxpdHkgRmlsbGAsSG49YFZlbGx1bWAsVW49YFdoaXRlYm9hcmRgLFduPVtLLFh0LFp0LFF0LCR0LGVuLHRuLG5uLHJuLGFuLG9uLHNuLGNuLGxuLHVuLGRuLGZuLHBuLG1uLGhuLGduLF9uLHZuLHluXTtXdD17fSxVKFUoVShVKFUoVShVKFUoVShVKFd0LEssYm4pLFh0LHhuKSxadCxTbiksUXQsQ24pLCR0LHduKSxlbixUbiksdG4sRW4pLG5uLERuKSxybixPbiksYW4sa24pLFUoVShVKFUoVShVKFUoVShVKFUoV3Qsb24sQW4pLHNuLGpuKSxjbixNbiksbG4sTm4pLHVuLFBuKSxkbixGbiksZm4sSW4pLHBuLExuKSxtbixSbiksaG4sem4pLFUoVShVKFUoV3QsZ24sQm4pLF9uLFZuKSx2bixIbikseW4sVW4pO3ZhciBHbj17Y2xhc3NpYzp7OTAwOmBmYXNgLDQwMDpgZmFyYCxub3JtYWw6YGZhcmAsMzAwOmBmYWxgLDEwMDpgZmF0YH0sZHVvdG9uZTp7OTAwOmBmYWRgLDQwMDpgZmFkcmAsMzAwOmBmYWRsYCwxMDA6YGZhZHRgfSxzaGFycDp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLDMwMDpgZmFzbGAsMTAwOmBmYXN0YH0sInNoYXJwLWR1b3RvbmUiOns5MDA6YGZhc2RzYCw0MDA6YGZhc2RyYCwzMDA6YGZhc2RsYCwxMDA6YGZhc2R0YH0sc2xhYjp7NDAwOmBmYXNscmB9LCJzbGFiLXByZXNzIjp7NDAwOmBmYXNscHJgfSwic2xhYi1kdW8iOns0MDA6YGZhc2xkcmB9LCJzbGFiLXByZXNzLWR1byI6ezQwMDpgZmFzbHBkcmB9LHZlbGx1bTp7OTAwOmBmYXZzYH0sbW9zYWljOns5MDA6YGZhbXNgfSxwaXhlbDp7NDAwOmBmYXByYH0sd2hpdGVib2FyZDp7NjAwOmBmYXdzYmB9LHRodW1icHJpbnQ6ezMwMDpgZmF0bGB9LG5vdGRvZzp7OTAwOmBmYW5zYH0sIm5vdGRvZy1kdW8iOns5MDA6YGZhbmRzYH0sZXRjaDp7OTAwOmBmYWVzYH0sZ3JhcGhpdGU6ezEwMDpgZmFndGB9LGNoaXNlbDp7NDAwOmBmYWNyYH0samVsbHk6ezQwMDpgZmFqcmB9LCJqZWxseS1maWxsIjp7NDAwOmBmYWpmcmB9LCJqZWxseS1kdW8iOns0MDA6YGZhamRyYH0sdXRpbGl0eTp7NjAwOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6ezYwMDpgZmF1ZHNiYH0sInV0aWxpdHktZmlsbCI6ezYwMDpgZmF1ZnNiYH19LEtuPXsiRm9udCBBd2Vzb21lIDcgRnJlZSI6ezkwMDpgZmFzYCw0MDA6YGZhcmB9LCJGb250IEF3ZXNvbWUgNyBQcm8iOns5MDA6YGZhc2AsNDAwOmBmYXJgLG5vcm1hbDpgZmFyYCwzMDA6YGZhbGAsMTAwOmBmYXRgfSwiRm9udCBBd2Vzb21lIDcgQnJhbmRzIjp7NDAwOmBmYWJgLG5vcm1hbDpgZmFiYH0sIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOns5MDA6YGZhZGAsNDAwOmBmYWRyYCxub3JtYWw6YGZhZHJgLDMwMDpgZmFkbGAsMTAwOmBmYWR0YH0sIkZvbnQgQXdlc29tZSA3IFNoYXJwIjp7OTAwOmBmYXNzYCw0MDA6YGZhc3JgLG5vcm1hbDpgZmFzcmAsMzAwOmBmYXNsYCwxMDA6YGZhc3RgfSwiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI6ezkwMDpgZmFzZHNgLDQwMDpgZmFzZHJgLG5vcm1hbDpgZmFzZHJgLDMwMDpgZmFzZGxgLDEwMDpgZmFzZHRgfSwiRm9udCBBd2Vzb21lIDcgSmVsbHkiOns0MDA6YGZhanJgLG5vcm1hbDpgZmFqcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsIjp7NDAwOmBmYWpmcmAsbm9ybWFsOmBmYWpmcmB9LCJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOns0MDA6YGZhamRyYCxub3JtYWw6YGZhamRyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIiOns0MDA6YGZhc2xyYCxub3JtYWw6YGZhc2xyYH0sIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOns0MDA6YGZhc2xwcmAsbm9ybWFsOmBmYXNscHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBEdW8iOns0MDA6YGZhc2xkcmAsbm9ybWFsOmBmYXNsZHJgfSwiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8iOns0MDA6YGZhc2xwZHJgLG5vcm1hbDpgZmFzbHBkcmB9LCJGb250IEF3ZXNvbWUgNyBQaXhlbCI6ezQwMDpgZmFwcmAsbm9ybWFsOmBmYXByYH0sIkZvbnQgQXdlc29tZSA3IE1vc2FpYyI6ezkwMDpgZmFtc2Asbm9ybWFsOmBmYW1zYH0sIkZvbnQgQXdlc29tZSA3IFZlbGx1bSI6ezkwMDpgZmF2c2Asbm9ybWFsOmBmYXZzYH0sIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOnszMDA6YGZhdGxgLG5vcm1hbDpgZmF0bGB9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2ciOns5MDA6YGZhbnNgLG5vcm1hbDpgZmFuc2B9LCJGb250IEF3ZXNvbWUgNyBOb3Rkb2cgRHVvIjp7OTAwOmBmYW5kc2Asbm9ybWFsOmBmYW5kc2B9LCJGb250IEF3ZXNvbWUgNyBFdGNoIjp7OTAwOmBmYWVzYCxub3JtYWw6YGZhZXNgfSwiRm9udCBBd2Vzb21lIDcgR3JhcGhpdGUiOnsxMDA6YGZhZ3RgLG5vcm1hbDpgZmFndGB9LCJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOns0MDA6YGZhY3JgLG5vcm1hbDpgZmFjcmB9LCJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjp7NjAwOmBmYXdzYmAsbm9ybWFsOmBmYXdzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5Ijp7NjAwOmBmYXVzYmAsbm9ybWFsOmBmYXVzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6ezYwMDpgZmF1ZHNiYCxub3JtYWw6YGZhdWRzYmB9LCJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwiOns2MDA6YGZhdWZzYmAsbm9ybWFsOmBmYXVmc2JgfX0scW49bmV3IE1hcChbW2BjbGFzc2ljYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYCxgcmVndWxhcmAsYGxpZ2h0YCxgdGhpbmAsYGJyYW5kc2BdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZHVvdG9uZWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWRgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc3NgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHNoYXJwLWR1b3RvbmVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzZHNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYGNoaXNlbGAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYWNyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BldGNoYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhZXNgLGRlZmF1bHRTdHlsZUlkOmBzb2xpZGAsc3R5bGVJZHM6W2Bzb2xpZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjkwMH1dLFtgZ3JhcGhpdGVgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFndGAsZGVmYXVsdFN0eWxlSWQ6YHRoaW5gLHN0eWxlSWRzOltgdGhpbmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjEwMH1dLFtgamVsbHlgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFqcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgamVsbHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamRyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2BqZWxseS1maWxsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhamZyYCxkZWZhdWx0U3R5bGVJZDpgcmVndWxhcmAsc3R5bGVJZHM6W2ByZWd1bGFyYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NDAwfV0sW2Btb3NhaWNgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFtc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2dgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFuc2AsZGVmYXVsdFN0eWxlSWQ6YHNvbGlkYCxzdHlsZUlkczpbYHNvbGlkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6OTAwfV0sW2Bub3Rkb2ctZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhbmRzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHBpeGVsYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhcHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWJgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmFzbHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xkcmAsZGVmYXVsdFN0eWxlSWQ6YHJlZ3VsYXJgLHN0eWxlSWRzOltgcmVndWxhcmBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjQwMH1dLFtgc2xhYi1wcmVzc2Ase2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXNscHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHNsYWItcHJlc3MtZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhc2xwZHJgLGRlZmF1bHRTdHlsZUlkOmByZWd1bGFyYCxzdHlsZUlkczpbYHJlZ3VsYXJgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo0MDB9XSxbYHRodW1icHJpbnRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF0bGAsZGVmYXVsdFN0eWxlSWQ6YGxpZ2h0YCxzdHlsZUlkczpbYGxpZ2h0YF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6MzAwfV0sW2B1dGlsaXR5YCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdXNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHV0aWxpdHktZHVvYCx7ZGVmYXVsdFNob3J0UHJlZml4SWQ6YGZhdWRzYmAsZGVmYXVsdFN0eWxlSWQ6YHNlbWlib2xkYCxzdHlsZUlkczpbYHNlbWlib2xkYF0sZnV0dXJlU3R5bGVJZHM6W10sZGVmYXVsdEZvbnRXZWlnaHQ6NjAwfV0sW2B1dGlsaXR5LWZpbGxgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF1ZnNiYCxkZWZhdWx0U3R5bGVJZDpgc2VtaWJvbGRgLHN0eWxlSWRzOltgc2VtaWJvbGRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo2MDB9XSxbYHZlbGx1bWAse2RlZmF1bHRTaG9ydFByZWZpeElkOmBmYXZzYCxkZWZhdWx0U3R5bGVJZDpgc29saWRgLHN0eWxlSWRzOltgc29saWRgXSxmdXR1cmVTdHlsZUlkczpbXSxkZWZhdWx0Rm9udFdlaWdodDo5MDB9XSxbYHdoaXRlYm9hcmRgLHtkZWZhdWx0U2hvcnRQcmVmaXhJZDpgZmF3c2JgLGRlZmF1bHRTdHlsZUlkOmBzZW1pYm9sZGAsc3R5bGVJZHM6W2BzZW1pYm9sZGBdLGZ1dHVyZVN0eWxlSWRzOltdLGRlZmF1bHRGb250V2VpZ2h0OjYwMH1dXSksSm49e2NoaXNlbDp7cmVndWxhcjpgZmFjcmB9LGNsYXNzaWM6e2JyYW5kczpgZmFiYCxsaWdodDpgZmFsYCxyZWd1bGFyOmBmYXJgLHNvbGlkOmBmYXNgLHRoaW46YGZhdGB9LGR1b3RvbmU6e2xpZ2h0OmBmYWRsYCxyZWd1bGFyOmBmYWRyYCxzb2xpZDpgZmFkYCx0aGluOmBmYWR0YH0sZXRjaDp7c29saWQ6YGZhZXNgfSxncmFwaGl0ZTp7dGhpbjpgZmFndGB9LGplbGx5OntyZWd1bGFyOmBmYWpyYH0sImplbGx5LWR1byI6e3JlZ3VsYXI6YGZhamRyYH0sImplbGx5LWZpbGwiOntyZWd1bGFyOmBmYWpmcmB9LG1vc2FpYzp7c29saWQ6YGZhbXNgfSxub3Rkb2c6e3NvbGlkOmBmYW5zYH0sIm5vdGRvZy1kdW8iOntzb2xpZDpgZmFuZHNgfSxwaXhlbDp7cmVndWxhcjpgZmFwcmB9LHNoYXJwOntsaWdodDpgZmFzbGAscmVndWxhcjpgZmFzcmAsc29saWQ6YGZhc3NgLHRoaW46YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6e2xpZ2h0OmBmYXNkbGAscmVndWxhcjpgZmFzZHJgLHNvbGlkOmBmYXNkc2AsdGhpbjpgZmFzZHRgfSxzbGFiOntyZWd1bGFyOmBmYXNscmB9LCJzbGFiLWR1byI6e3JlZ3VsYXI6YGZhc2xkcmB9LCJzbGFiLXByZXNzIjp7cmVndWxhcjpgZmFzbHByYH0sInNsYWItcHJlc3MtZHVvIjp7cmVndWxhcjpgZmFzbHBkcmB9LHRodW1icHJpbnQ6e2xpZ2h0OmBmYXRsYH0sdXRpbGl0eTp7c2VtaWJvbGQ6YGZhdXNiYH0sInV0aWxpdHktZHVvIjp7c2VtaWJvbGQ6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOntzZW1pYm9sZDpgZmF1ZnNiYH0sdmVsbHVtOntzb2xpZDpgZmF2c2B9LHdoaXRlYm9hcmQ6e3NlbWlib2xkOmBmYXdzYmB9fSxZbj1bYGZha2AsYGZhLWtpdGAsYGZha2RgLGBmYS1raXQtZHVvdG9uZWBdLFhuPXtraXQ6e2Zhazpga2l0YCwiZmEta2l0Ijpga2l0YH0sImtpdC1kdW90b25lIjp7ZmFrZDpga2l0LWR1b3RvbmVgLCJmYS1raXQtZHVvdG9uZSI6YGtpdC1kdW90b25lYH19LFpuPVtga2l0YF07VShVKHt9LGBraXRgLGBLaXRgKSxga2l0LWR1b3RvbmVgLGBLaXQgRHVvdG9uZWApO3ZhciBRbj17a2l0OnsiZmEta2l0IjpgZmFrYH0sImtpdC1kdW90b25lIjp7ImZhLWtpdC1kdW90b25lIjpgZmFrZGB9fSwkbj17IkZvbnQgQXdlc29tZSBLaXQiOns0MDA6YGZha2Asbm9ybWFsOmBmYWtgfSwiRm9udCBBd2Vzb21lIEtpdCBEdW90b25lIjp7NDAwOmBmYWtkYCxub3JtYWw6YGZha2RgfX0sZXI9e2tpdDp7ZmFrOmBmYS1raXRgfSwia2l0LWR1b3RvbmUiOntmYWtkOmBmYS1raXQtZHVvdG9uZWB9fSx0cj17a2l0OntraXQ6YGZha2B9LCJraXQtZHVvdG9uZSI6eyJraXQtZHVvdG9uZSI6YGZha2RgfX0sbnIscnI9e0dST1VQOmBkdW90b25lLWdyb3VwYCxTV0FQX09QQUNJVFk6YHN3YXAtb3BhY2l0eWAsUFJJTUFSWTpgcHJpbWFyeWAsU0VDT05EQVJZOmBzZWNvbmRhcnlgfSxpcj1bYGZhLWNsYXNzaWNgLGBmYS1kdW90b25lYCxgZmEtc2hhcnBgLGBmYS1zaGFycC1kdW90b25lYCxgZmEtdGh1bWJwcmludGAsYGZhLXdoaXRlYm9hcmRgLGBmYS1ub3Rkb2dgLGBmYS1ub3Rkb2ctZHVvYCxgZmEtY2hpc2VsYCxgZmEtZXRjaGAsYGZhLWdyYXBoaXRlYCxgZmEtamVsbHlgLGBmYS1qZWxseS1maWxsYCxgZmEtamVsbHktZHVvYCxgZmEtc2xhYmAsYGZhLXNsYWItcHJlc3NgLGBmYS1zbGFiLXByZXNzLWR1b2AsYGZhLXNsYWItZHVvYCxgZmEtbW9zYWljYCxgZmEtcGl4ZWxgLGBmYS12ZWxsdW1gLGBmYS11dGlsaXR5YCxgZmEtdXRpbGl0eS1kdW9gLGBmYS11dGlsaXR5LWZpbGxgXTtucj17fSxVKFUoVShVKFUoVShVKFUoVShVKG5yLGBjbGFzc2ljYCxgQ2xhc3NpY2ApLGBkdW90b25lYCxgRHVvdG9uZWApLGBzaGFycGAsYFNoYXJwYCksYHNoYXJwLWR1b3RvbmVgLGBTaGFycCBEdW90b25lYCksYGNoaXNlbGAsYENoaXNlbGApLGBldGNoYCxgRXRjaGApLGBncmFwaGl0ZWAsYEdyYXBoaXRlYCksYGplbGx5YCxgSmVsbHlgKSxgamVsbHktZHVvYCxgSmVsbHkgRHVvYCksYGplbGx5LWZpbGxgLGBKZWxseSBGaWxsYCksVShVKFUoVShVKFUoVShVKFUoVShucixgbW9zYWljYCxgTW9zYWljYCksYG5vdGRvZ2AsYE5vdGRvZ2ApLGBub3Rkb2ctZHVvYCxgTm90ZG9nIER1b2ApLGBwaXhlbGAsYFBpeGVsYCksYHNsYWJgLGBTbGFiYCksYHNsYWItZHVvYCxgU2xhYiBEdW9gKSxgc2xhYi1wcmVzc2AsYFNsYWIgUHJlc3NgKSxgc2xhYi1wcmVzcy1kdW9gLGBTbGFiIFByZXNzIER1b2ApLGB0aHVtYnByaW50YCxgVGh1bWJwcmludGApLGB1dGlsaXR5YCxgVXRpbGl0eWApLFUoVShVKFUobnIsYHV0aWxpdHktZHVvYCxgVXRpbGl0eSBEdW9gKSxgdXRpbGl0eS1maWxsYCxgVXRpbGl0eSBGaWxsYCksYHZlbGx1bWAsYFZlbGx1bWApLGB3aGl0ZWJvYXJkYCxgV2hpdGVib2FyZGApLFUoVSh7fSxga2l0YCxgS2l0YCksYGtpdC1kdW90b25lYCxgS2l0IER1b3RvbmVgKTt2YXIgYXI9e2NsYXNzaWM6eyJmYS1icmFuZHMiOmBmYWJgLCJmYS1kdW90b25lIjpgZmFkYCwiZmEtbGlnaHQiOmBmYWxgLCJmYS1yZWd1bGFyIjpgZmFyYCwiZmEtc29saWQiOmBmYXNgLCJmYS10aGluIjpgZmF0YH0sZHVvdG9uZTp7ImZhLXJlZ3VsYXIiOmBmYWRyYCwiZmEtbGlnaHQiOmBmYWRsYCwiZmEtdGhpbiI6YGZhZHRgfSxzaGFycDp7ImZhLXNvbGlkIjpgZmFzc2AsImZhLXJlZ3VsYXIiOmBmYXNyYCwiZmEtbGlnaHQiOmBmYXNsYCwiZmEtdGhpbiI6YGZhc3RgfSwic2hhcnAtZHVvdG9uZSI6eyJmYS1zb2xpZCI6YGZhc2RzYCwiZmEtcmVndWxhciI6YGZhc2RyYCwiZmEtbGlnaHQiOmBmYXNkbGAsImZhLXRoaW4iOmBmYXNkdGB9LHNsYWI6eyJmYS1yZWd1bGFyIjpgZmFzbHJgfSwic2xhYi1wcmVzcyI6eyJmYS1yZWd1bGFyIjpgZmFzbHByYH0sInNsYWItZHVvIjp7ImZhLXJlZ3VsYXIiOmBmYXNsZHJgfSwic2xhYi1wcmVzcy1kdW8iOnsiZmEtcmVndWxhciI6YGZhc2xwZHJgfSxwaXhlbDp7ImZhLXJlZ3VsYXIiOmBmYXByYH0sbW9zYWljOnsiZmEtc29saWQiOmBmYW1zYH0sdmVsbHVtOnsiZmEtc29saWQiOmBmYXZzYH0sd2hpdGVib2FyZDp7ImZhLXNlbWlib2xkIjpgZmF3c2JgfSx0aHVtYnByaW50OnsiZmEtbGlnaHQiOmBmYXRsYH0sbm90ZG9nOnsiZmEtc29saWQiOmBmYW5zYH0sIm5vdGRvZy1kdW8iOnsiZmEtc29saWQiOmBmYW5kc2B9LGV0Y2g6eyJmYS1zb2xpZCI6YGZhZXNgfSxncmFwaGl0ZTp7ImZhLXRoaW4iOmBmYWd0YH0samVsbHk6eyJmYS1yZWd1bGFyIjpgZmFqcmB9LCJqZWxseS1maWxsIjp7ImZhLXJlZ3VsYXIiOmBmYWpmcmB9LCJqZWxseS1kdW8iOnsiZmEtcmVndWxhciI6YGZhamRyYH0sY2hpc2VsOnsiZmEtcmVndWxhciI6YGZhY3JgfSx1dGlsaXR5OnsiZmEtc2VtaWJvbGQiOmBmYXVzYmB9LCJ1dGlsaXR5LWR1byI6eyJmYS1zZW1pYm9sZCI6YGZhdWRzYmB9LCJ1dGlsaXR5LWZpbGwiOnsiZmEtc2VtaWJvbGQiOmBmYXVmc2JgfX0sb3I9e2NsYXNzaWM6W2BmYXNgLGBmYXJgLGBmYWxgLGBmYXRgLGBmYWRgXSxkdW90b25lOltgZmFkcmAsYGZhZGxgLGBmYWR0YF0sc2hhcnA6W2BmYXNzYCxgZmFzcmAsYGZhc2xgLGBmYXN0YF0sInNoYXJwLWR1b3RvbmUiOltgZmFzZHNgLGBmYXNkcmAsYGZhc2RsYCxgZmFzZHRgXSxzbGFiOltgZmFzbHJgXSwic2xhYi1wcmVzcyI6W2BmYXNscHJgXSwic2xhYi1kdW8iOltgZmFzbGRyYF0sInNsYWItcHJlc3MtZHVvIjpbYGZhc2xwZHJgXSxwaXhlbDpbYGZhcHJgXSxtb3NhaWM6W2BmYW1zYF0sdmVsbHVtOltgZmF2c2BdLHdoaXRlYm9hcmQ6W2BmYXdzYmBdLHRodW1icHJpbnQ6W2BmYXRsYF0sbm90ZG9nOltgZmFuc2BdLCJub3Rkb2ctZHVvIjpbYGZhbmRzYF0sZXRjaDpbYGZhZXNgXSxncmFwaGl0ZTpbYGZhZ3RgXSxqZWxseTpbYGZhanJgXSwiamVsbHktZmlsbCI6W2BmYWpmcmBdLCJqZWxseS1kdW8iOltgZmFqZHJgXSxjaGlzZWw6W2BmYWNyYF0sdXRpbGl0eTpbYGZhdXNiYF0sInV0aWxpdHktZHVvIjpbYGZhdWRzYmBdLCJ1dGlsaXR5LWZpbGwiOltgZmF1ZnNiYF19LHNyPXtjbGFzc2ljOntmYWI6YGZhLWJyYW5kc2AsZmFkOmBmYS1kdW90b25lYCxmYWw6YGZhLWxpZ2h0YCxmYXI6YGZhLXJlZ3VsYXJgLGZhczpgZmEtc29saWRgLGZhdDpgZmEtdGhpbmB9LGR1b3RvbmU6e2ZhZHI6YGZhLXJlZ3VsYXJgLGZhZGw6YGZhLWxpZ2h0YCxmYWR0OmBmYS10aGluYH0sc2hhcnA6e2Zhc3M6YGZhLXNvbGlkYCxmYXNyOmBmYS1yZWd1bGFyYCxmYXNsOmBmYS1saWdodGAsZmFzdDpgZmEtdGhpbmB9LCJzaGFycC1kdW90b25lIjp7ZmFzZHM6YGZhLXNvbGlkYCxmYXNkcjpgZmEtcmVndWxhcmAsZmFzZGw6YGZhLWxpZ2h0YCxmYXNkdDpgZmEtdGhpbmB9LHNsYWI6e2Zhc2xyOmBmYS1yZWd1bGFyYH0sInNsYWItcHJlc3MiOntmYXNscHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1kdW8iOntmYXNsZHI6YGZhLXJlZ3VsYXJgfSwic2xhYi1wcmVzcy1kdW8iOntmYXNscGRyOmBmYS1yZWd1bGFyYH0scGl4ZWw6e2ZhcHI6YGZhLXJlZ3VsYXJgfSxtb3NhaWM6e2ZhbXM6YGZhLXNvbGlkYH0sdmVsbHVtOntmYXZzOmBmYS1zb2xpZGB9LHdoaXRlYm9hcmQ6e2Zhd3NiOmBmYS1zZW1pYm9sZGB9LHRodW1icHJpbnQ6e2ZhdGw6YGZhLWxpZ2h0YH0sbm90ZG9nOntmYW5zOmBmYS1zb2xpZGB9LCJub3Rkb2ctZHVvIjp7ZmFuZHM6YGZhLXNvbGlkYH0sZXRjaDp7ZmFlczpgZmEtc29saWRgfSxncmFwaGl0ZTp7ZmFndDpgZmEtdGhpbmB9LGplbGx5OntmYWpyOmBmYS1yZWd1bGFyYH0sImplbGx5LWZpbGwiOntmYWpmcjpgZmEtcmVndWxhcmB9LCJqZWxseS1kdW8iOntmYWpkcjpgZmEtcmVndWxhcmB9LGNoaXNlbDp7ZmFjcjpgZmEtcmVndWxhcmB9LHV0aWxpdHk6e2ZhdXNiOmBmYS1zZW1pYm9sZGB9LCJ1dGlsaXR5LWR1byI6e2ZhdWRzYjpgZmEtc2VtaWJvbGRgfSwidXRpbGl0eS1maWxsIjp7ZmF1ZnNiOmBmYS1zZW1pYm9sZGB9fSxjcj1gZmEuZmFzLmZhci5mYWwuZmF0LmZhZC5mYWRyLmZhZGwuZmFkdC5mYWIuZmFzcy5mYXNyLmZhc2wuZmFzdC5mYXNkcy5mYXNkci5mYXNkbC5mYXNkdC5mYXNsci5mYXNscHIuZmFzbGRyLmZhc2xwZHIuZmFwci5mYW1zLmZhdnMuZmF3c2IuZmF0bC5mYW5zLmZhbmRzLmZhZXMuZmFndC5mYWpyLmZhamZyLmZhamRyLmZhY3IuZmF1c2IuZmF1ZHNiLmZhdWZzYmAuc3BsaXQoYC5gKS5jb25jYXQoaXIsW2BmYS1zb2xpZGAsYGZhLXJlZ3VsYXJgLGBmYS1saWdodGAsYGZhLXRoaW5gLGBmYS1kdW90b25lYCxgZmEtYnJhbmRzYCxgZmEtc2VtaWJvbGRgXSksbHI9W2Bzb2xpZGAsYHJlZ3VsYXJgLGBsaWdodGAsYHRoaW5gLGBkdW90b25lYCxgYnJhbmRzYCxgc2VtaWJvbGRgXSx1cj1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLGRyPXVyLmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSxmcj1bXS5jb25jYXQoRHQoT2JqZWN0LmtleXMob3IpKSxscixbYGF3YCxgZndgLGBwdWxsLWxlZnRgLGBwdWxsLXJpZ2h0YF0sW2AyeHNgLGB4c2AsYHNtYCxgbGdgLGB4bGAsYDJ4bGAsYGJlYXRgLGBiZWF0LWZhZGVgLGBib3JkZXJgLGBib3VuY2VgLGBidXp6YCxgY2FudmFzLXNxdWFyZWAsYGNhbnZhcy1yb29teWAsYGZhZGVgLGBmbGlwLTM2MGAsYGZsaXAtYm90aGAsYGZsaXAtaG9yaXpvbnRhbGAsYGZsaXAtdmVydGljYWxgLGBmbGlwYCxgZmxvYXRgLGBpbnZlcnNlYCxgamVsbG9gLGBsYXllcnNgLGBsYXllcnMtYm90dG9tLWxlZnRgLGBsYXllcnMtYm90dG9tLXJpZ2h0YCxgbGF5ZXJzLWNvdW50ZXJgLGBsYXllcnMtdGV4dGAsYGxheWVycy10b3AtbGVmdGAsYGxheWVycy10b3AtcmlnaHRgLGBsaWAsYHB1bGwtZW5kYCxgcHVsbC1zdGFydGAsYHB1bHNlYCxgcm90YXRlLTE4MGAsYHJvdGF0ZS0yNzBgLGByb3RhdGUtOTBgLGByb3RhdGUtYnlgLGBzaGFrZWAsYHNwaW4tcHVsc2VgLGBzcGluLXJldmVyc2VgLGBzcGluYCxgc3Bpbi1zbmFwYCxgc3Bpbi1zbmFwLTRgLGBzcGluLXNuYXAtOGAsYHN0YWNrLTF4YCxgc3RhY2stMnhgLGBzdGFja2AsYHN3aW5nYCxgdWxgLGB3YWdgLGB3aWR0aC1hdXRvYCxgd2lkdGgtZml4ZWRgLHJyLkdST1VQLHJyLlNXQVBfT1BBQ0lUWSxyci5QUklNQVJZLHJyLlNFQ09OREFSWV0sdXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAke2V9eGB9KSxkci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYHctJHtlfWB9KSkscHI9eyJGb250IEF3ZXNvbWUgNSBGcmVlIjp7OTAwOmBmYXNgLDQwMDpgZmFyYH0sIkZvbnQgQXdlc29tZSA1IFBybyI6ezkwMDpgZmFzYCw0MDA6YGZhcmAsbm9ybWFsOmBmYXJgLDMwMDpgZmFsYH0sIkZvbnQgQXdlc29tZSA1IEJyYW5kcyI6ezQwMDpgZmFiYCxub3JtYWw6YGZhYmB9LCJGb250IEF3ZXNvbWUgNSBEdW90b25lIjp7OTAwOmBmYWRgfX0sbXI9YF9fX0ZPTlRfQVdFU09NRV9fX2AsaHI9MTYsZ3I9YGZhYCxfcj1gc3ZnLWlubGluZS0tZmFgLHZyPWBkYXRhLWZhLWkyc3ZnYCx5cj1gZGF0YS1mYS1wc2V1ZG8tZWxlbWVudGAsYnI9YGRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ2AseHI9YGRhdGEtcHJlZml4YCxTcj1gZGF0YS1pY29uYCxDcj1gZm9udGF3ZXNvbWUtaTJzdmdgLHdyPWBhc3luY2AsVHI9W2BIVE1MYCxgSEVBRGAsYFNUWUxFYCxgU0NSSVBUYF0sRXI9W2A6OmJlZm9yZWAsYDo6YWZ0ZXJgLGA6YmVmb3JlYCxgOmFmdGVyYF0sRHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIE9yKGUpe3JldHVybiBuZXcgUHJveHkoZSx7Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW4gZT9lW3RdOmVbS119fSl9dmFyIGtyPVcoe30scXQpO2tyW0tdPVcoVyhXKFcoe30seyJmYS1kdW90b25lIjpgZHVvdG9uZWB9KSxxdFtLXSksWG4ua2l0KSxYbltga2l0LWR1b3RvbmVgXSk7dmFyIEFyPU9yKGtyKSxqcj1XKHt9LEpuKTtqcltLXT1XKFcoVyhXKHt9LHtkdW90b25lOmBmYWRgfSksanJbS10pLHRyLmtpdCksdHJbYGtpdC1kdW90b25lYF0pO3ZhciBNcj1PcihqciksTnI9Vyh7fSxzcik7TnJbS109VyhXKHt9LE5yW0tdKSxlci5raXQpO3ZhciBQcj1PcihOciksRnI9Vyh7fSxhcik7RnJbS109VyhXKHt9LEZyW0tdKSxRbi5raXQpLE9yKEZyKTt2YXIgSXI9R3QsTHI9YGZhLWxheWVycy10ZXh0YCxScj1LdDtPcihXKHt9LEduKSk7dmFyIHpyPVtgY2xhc3NgLGBkYXRhLXByZWZpeGAsYGRhdGEtaWNvbmAsYGRhdGEtZmEtdHJhbnNmb3JtYCxgZGF0YS1mYS1tYXNrYF0sQnI9SnQsVnI9W10uY29uY2F0KER0KFpuKSxEdChmcikpLEhyPXp0LkZvbnRBd2Vzb21lQ29uZmlnfHx7fTtmdW5jdGlvbiBVcihlKXt2YXIgdD1HLnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtgK2UrYF1gKTtpZih0KXJldHVybiB0LmdldEF0dHJpYnV0ZShlKX1mdW5jdGlvbiBXcihlKXtyZXR1cm4gZT09PWBgPyEwOmU9PT1gZmFsc2VgPyExOmU9PT1gdHJ1ZWB8fGV9RyYmdHlwZW9mIEcucXVlcnlTZWxlY3Rvcj09YGZ1bmN0aW9uYCYmW1tgZGF0YS1mYW1pbHktcHJlZml4YCxgZmFtaWx5UHJlZml4YF0sW2BkYXRhLWNzcy1wcmVmaXhgLGBjc3NQcmVmaXhgXSxbYGRhdGEtZmFtaWx5LWRlZmF1bHRgLGBmYW1pbHlEZWZhdWx0YF0sW2BkYXRhLXN0eWxlLWRlZmF1bHRgLGBzdHlsZURlZmF1bHRgXSxbYGRhdGEtcmVwbGFjZW1lbnQtY2xhc3NgLGByZXBsYWNlbWVudENsYXNzYF0sW2BkYXRhLWF1dG8tcmVwbGFjZS1zdmdgLGBhdXRvUmVwbGFjZVN2Z2BdLFtgZGF0YS1hdXRvLWFkZC1jc3NgLGBhdXRvQWRkQ3NzYF0sW2BkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHNgLGBzZWFyY2hQc2V1ZG9FbGVtZW50c2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzYCxgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nc2BdLFtgZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLWZ1bGwtc2NhbmAsYHNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW5gXSxbYGRhdGEtb2JzZXJ2ZS1tdXRhdGlvbnNgLGBvYnNlcnZlTXV0YXRpb25zYF0sW2BkYXRhLW11dGF0ZS1hcHByb2FjaGAsYG11dGF0ZUFwcHJvYWNoYF0sW2BkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlYCxga2VlcE9yaWdpbmFsU291cmNlYF0sW2BkYXRhLW1lYXN1cmUtcGVyZm9ybWFuY2VgLGBtZWFzdXJlUGVyZm9ybWFuY2VgXSxbYGRhdGEtc2hvdy1taXNzaW5nLWljb25zYCxgc2hvd01pc3NpbmdJY29uc2BdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PUV0KGUsMiksbj10WzBdLHI9dFsxXSxpPVdyKFVyKG4pKTtpIT1udWxsJiYoSHJbcl09aSl9KTt2YXIgR3I9e3N0eWxlRGVmYXVsdDpgc29saWRgLGZhbWlseURlZmF1bHQ6Syxjc3NQcmVmaXg6Z3IscmVwbGFjZW1lbnRDbGFzczpfcixhdXRvUmVwbGFjZVN2ZzohMCxhdXRvQWRkQ3NzOiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzOiExLHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3M6ITAsc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbjohMSxvYnNlcnZlTXV0YXRpb25zOiEwLG11dGF0ZUFwcHJvYWNoOmBhc3luY2Asa2VlcE9yaWdpbmFsU291cmNlOiEwLG1lYXN1cmVQZXJmb3JtYW5jZTohMSxzaG93TWlzc2luZ0ljb25zOiEwfTtIci5mYW1pbHlQcmVmaXgmJihIci5jc3NQcmVmaXg9SHIuZmFtaWx5UHJlZml4KTt2YXIgS3I9VyhXKHt9LEdyKSxIcik7S3IuYXV0b1JlcGxhY2VTdmd8fChLci5vYnNlcnZlTXV0YXRpb25zPSExKTt2YXIgcT17fTtPYmplY3Qua2V5cyhHcikuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocSxlLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbih0KXtLcltlXT10LHFyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtyW2VdfX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImZhbWlseVByZWZpeCIse2VudW1lcmFibGU6ITAsc2V0OmZ1bmN0aW9uKGUpe0tyLmNzc1ByZWZpeD1lLHFyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUocSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtyLmNzc1ByZWZpeH19KSx6dC5Gb250QXdlc29tZUNvbmZpZz1xO3ZhciBxcj1bXTtmdW5jdGlvbiBKcihlKXtyZXR1cm4gcXIucHVzaChlKSxmdW5jdGlvbigpe3FyLnNwbGljZShxci5pbmRleE9mKGUpLDEpfX12YXIgWXI9aHIsWHI9e3NpemU6MTYseDowLHk6MCxyb3RhdGU6MCxmbGlwWDohMSxmbGlwWTohMX07ZnVuY3Rpb24gWnIoZSl7aWYoISghZXx8IUh0KSl7dmFyIHQ9Ry5jcmVhdGVFbGVtZW50KGBzdHlsZWApO3Quc2V0QXR0cmlidXRlKGB0eXBlYCxgdGV4dC9jc3NgKSx0LmlubmVySFRNTD1lO2Zvcih2YXIgbj1HLmhlYWQuY2hpbGROb2RlcyxyPW51bGwsaT1uLmxlbmd0aC0xO2k+LTE7aS0tKXt2YXIgYT1uW2ldLG89KGEudGFnTmFtZXx8YGApLnRvVXBwZXJDYXNlKCk7W2BTVFlMRWAsYExJTktgXS5pbmRleE9mKG8pPi0xJiYocj1hKX1yZXR1cm4gRy5oZWFkLmluc2VydEJlZm9yZSh0LHIpLGV9fXZhciBRcj1gMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpgO2Z1bmN0aW9uICRyKCl7Zm9yKHZhciBlPTEyLHQ9YGA7ZS0tPjA7KXQrPVFyW01hdGgucmFuZG9tKCkqNjJ8MF07cmV0dXJuIHR9ZnVuY3Rpb24gZWkoZSl7Zm9yKHZhciB0PVtdLG49KGV8fFtdKS5sZW5ndGg+Pj4wO24tLTspdFtuXT1lW25dO3JldHVybiB0fWZ1bmN0aW9uIHRpKGUpe3JldHVybiBlLmNsYXNzTGlzdD9laShlLmNsYXNzTGlzdCk6KGUuZ2V0QXR0cmlidXRlKGBjbGFzc2ApfHxgYCkuc3BsaXQoYCBgKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX1mdW5jdGlvbiBuaShlKXtyZXR1cm5gJHtlfWAucmVwbGFjZSgvJi9nLGAmYW1wO2ApLnJlcGxhY2UoLyIvZyxgJnF1b3Q7YCkucmVwbGFjZSgvJy9nLGAmIzM5O2ApLnJlcGxhY2UoLzwvZyxgJmx0O2ApLnJlcGxhY2UoLz4vZyxgJmd0O2ApfWZ1bmN0aW9uIHJpKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrYCR7bn09IiR7bmkoZVtuXSl9IiBgfSxgYCkudHJpbSgpfWZ1bmN0aW9uIGlpKGUpe3JldHVybiBPYmplY3Qua2V5cyhlfHx7fSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQrYCR7bn06ICR7ZVtuXS50cmltKCl9O2B9LGBgKX1mdW5jdGlvbiBhaShlKXtyZXR1cm4gZS5zaXplIT09WHIuc2l6ZXx8ZS54IT09WHIueHx8ZS55IT09WHIueXx8ZS5yb3RhdGUhPT1Yci5yb3RhdGV8fGUuZmxpcFh8fGUuZmxpcFl9ZnVuY3Rpb24gb2koZSl7dmFyIHQ9ZS50cmFuc2Zvcm0sbj1lLmNvbnRhaW5lcldpZHRoLHI9ZS5pY29uV2lkdGg7cmV0dXJue291dGVyOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke24vMn0gMjU2KWB9LGlubmVyOnt0cmFuc2Zvcm06YCR7YHRyYW5zbGF0ZSgke3QueCozMn0sICR7dC55KjMyfSkgYH0gJHtgc2NhbGUoJHt0LnNpemUvMTYqKHQuZmxpcFg/LTE6MSl9LCAke3Quc2l6ZS8xNioodC5mbGlwWT8tMToxKX0pIGB9ICR7YHJvdGF0ZSgke3Qucm90YXRlfSAwIDApYH1gfSxwYXRoOnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSgke3IvMiotMX0gLTI1NilgfX19ZnVuY3Rpb24gc2koZSl7dmFyIHQ9ZS50cmFuc2Zvcm0sbj1lLndpZHRoLHI9bj09PXZvaWQgMD9ocjpuLGk9ZS5oZWlnaHQsYT1pPT09dm9pZCAwP2hyOmksbz1lLnN0YXJ0Q2VudGVyZWQscz1vIT09dm9pZCAwJiZvLGM9YGA7cmV0dXJuIGMrPXMmJlV0P2B0cmFuc2xhdGUoJHt0LngvWXItci8yfWVtLCAke3QueS9Zci1hLzJ9ZW0pIGA6cz9gdHJhbnNsYXRlKGNhbGMoLTUwJSArICR7dC54L1lyfWVtKSwgY2FsYygtNTAlICsgJHt0LnkvWXJ9ZW0pKSBgOmB0cmFuc2xhdGUoJHt0LngvWXJ9ZW0sICR7dC55L1lyfWVtKSBgLGMrPWBzY2FsZSgke3Quc2l6ZS9ZcioodC5mbGlwWD8tMToxKX0sICR7dC5zaXplL1lyKih0LmZsaXBZPy0xOjEpfSkgYCxjKz1gcm90YXRlKCR7dC5yb3RhdGV9ZGVnKSBgLGN9dmFyIGNpPWA6cm9vdCwgOmhvc3QgewogIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRnJlZSc7CiAgLS1mYS1mb250LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEZyZWUnOwogIC0tZmEtZm9udC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUHJvJzsKICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgUHJvJzsKICAtLWZhLWZvbnQtZHVvdG9uZTogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRHVvdG9uZSc7CiAgLS1mYS1mb250LWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgRHVvdG9uZSc7CiAgLS1mYS1mb250LWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IER1b3RvbmUnOwogIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEJyYW5kcyc7CiAgLS1mYS1mb250LXNoYXJwLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCc7CiAgLS1mYS1mb250LXNoYXJwLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNoYXJwJzsKICAtLWZhLWZvbnQtc2hhcnAtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAnOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBTaGFycCBEdW90b25lJzsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSc7CiAgLS1mYS1mb250LXNsYWItcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYic7CiAgLS1mYS1mb250LXNsYWItcHJlc3MtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyc7CiAgLS1mYS1mb250LXNsYWItZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFNsYWIgRHVvJzsKICAtLWZhLWZvbnQtc2xhYi1wcmVzcy1kdW8tcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyBEdW8nOwogIC0tZmEtZm9udC1waXhlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBQaXhlbCc7CiAgLS1mYS1mb250LW1vc2FpYy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTW9zYWljJzsKICAtLWZhLWZvbnQtdmVsbHVtLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBWZWxsdW0nOwogIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkJzsKICAtLWZhLWZvbnQtdGh1bWJwcmludC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCc7CiAgLS1mYS1mb250LW5vdGRvZy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nJzsKICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAnRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byc7CiAgLS1mYS1mb250LWV0Y2gtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEV0Y2gnOwogIC0tZmEtZm9udC1ncmFwaGl0ZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBHcmFwaGl0ZSc7CiAgLS1mYS1mb250LWplbGx5LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5JzsKICAtLWZhLWZvbnQtamVsbHktZmlsbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBKZWxseSBGaWxsJzsKICAtLWZhLWZvbnQtamVsbHktZHVvLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IEplbGx5IER1byc7CiAgLS1mYS1mb250LWNoaXNlbC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBDaGlzZWwnOwogIC0tZmEtZm9udC11dGlsaXR5LXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5JzsKICAtLWZhLWZvbnQtdXRpbGl0eS1kdW8tc2VtaWJvbGQ6IG5vcm1hbCA2MDAgMWVtLzEgJ0ZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRHVvJzsKICAtLWZhLWZvbnQtdXRpbGl0eS1maWxsLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICdGb250IEF3ZXNvbWUgNyBVdGlsaXR5IEZpbGwnOwp9Cgouc3ZnLWlubGluZS0tZmEgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGRpc3BsYXk6IHZhcigtLWZhLWRpc3BsYXksIGlubGluZS1ibG9jayk7CiAgaGVpZ2h0OiAxZW07CiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zbSB7CiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MTRlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGcgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLWxlZnQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodCwKLnN2Zy1pbmxpbmUtLWZhIC5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGkgewogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgaW5zZXQtYmxvY2stc3RhcnQ6IDAuMjVlbTsgLyogc3luY2luZyB2ZXJ0aWNhbCBhbGlnbm1lbnQgd2l0aCBXZWIgRm9udCByZW5kZXJpbmcgKi8KfQoKLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouZmEtbGF5ZXJzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IHZhcigtLWZhLXdpZHRoLCAxLjI1ZW0pOwp9Ci5mYS1sYXllcnMgLnN2Zy1pbmxpbmUtLWZhIHsKICBpbnNldDogMDsKICBtYXJnaW46IGF1dG87CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtdGV4dCB7CiAgbGVmdDogNTAlOwogIHRvcDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtY291bnRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmEtY291bnRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmYyNTNhKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7CiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpOwogIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7CiAgbWluLXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1pbi13aWR0aCwgMS41ZW0pOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtY291bnRlci1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tbGVmdCB7CiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApOwogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogYXV0bzsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0Owp9CgouZmEtbGF5ZXJzLXRvcC1yaWdodCB7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtdG9wLWxlZnQgewogIGxlZnQ6IHZhcigtLWZhLWxlZnQsIDApOwogIHJpZ2h0OiBhdXRvOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgouZmEtMXggewogIGZvbnQtc2l6ZTogMWVtOwp9CgouZmEtMnggewogIGZvbnQtc2l6ZTogMmVtOwp9CgouZmEtM3ggewogIGZvbnQtc2l6ZTogM2VtOwp9CgouZmEtNHggewogIGZvbnQtc2l6ZTogNGVtOwp9CgouZmEtNXggewogIGZvbnQtc2l6ZTogNWVtOwp9CgouZmEtNnggewogIGZvbnQtc2l6ZTogNmVtOwp9CgouZmEtN3ggewogIGZvbnQtc2l6ZTogN2VtOwp9CgouZmEtOHggewogIGZvbnQtc2l6ZTogOGVtOwp9CgouZmEtOXggewogIGZvbnQtc2l6ZTogOWVtOwp9CgouZmEtMTB4IHsKICBmb250LXNpemU6IDEwZW07Cn0KCi5mYS0yeHMgewogIGZvbnQtc2l6ZTogY2FsYygxMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14cyB7CiAgZm9udC1zaXplOiBjYWxjKDEyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDEycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDEyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXNtIHsKICBmb250LXNpemU6IGNhbGMoMTQgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTRweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxNCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTQgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEtbGcgewogIGZvbnQtc2l6ZTogY2FsYygyMCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyMHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDIwICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyMCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS14bCB7CiAgZm9udC1zaXplOiBjYWxjKDI0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDI0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMjQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDI0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLTJ4bCB7CiAgZm9udC1zaXplOiBjYWxjKDMyIC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDMycHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMzIgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDMyIC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLXdpZHRoLWF1dG8gewogIC0tZmEtd2lkdGg6IGF1dG87Cn0KCi5mYS1mdywKLmZhLXdpZHRoLWZpeGVkIHsKICAtLWZhLXdpZHRoOiAxLjI1ZW07Cn0KCi5mYS1jYW52YXMtc3F1YXJlIHsKICBwYWRkaW5nLWJsb2NrOiAwLjEyNWVtOwogIG1hcmdpbi1ibG9jay1lbmQ6IC0wLjEyNWVtOwp9CgouZmEtY2FudmFzLXJvb215IHsKICBwYWRkaW5nLWJsb2NrOiAwLjI1ZW07CiAgcGFkZGluZy1pbmxpbmU6IDAuMTI1ZW07CiAgbWFyZ2luLWJsb2NrLWVuZDogLTAuMjVlbTsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKfQoKLmZhLXVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7Cn0KLmZhLXVsID4gbGkgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZhLWxpIHsKICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoLTEgKiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKSk7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi8qIEhlYWRzIFVwOiBCb3JkZXJlZCBJY29ucyB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSEKICAtIFRoaXMgZmVhdHVyZSB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBGb250IEF3ZXNvbWUgKHY4KSEKICAtIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IGluIHRoaXMgdmVyc2lvbiAqdjcpLCBidXQgaXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIEZvbnQgQXdlc29tZSB2OC4KKi8KLyogTm90ZXM6CiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci13aWR0aCA9IDEvMTYgYnkgZGVmYXVsdCAodG8gcmVuZGVyIGFzIH4xcHggYmFzZWQgb24gYSAxNnB4IGRlZmF1bHQgZm9udC1zaXplKQoqIC0tQHt2LiRjc3MtcHJlZml4fS1ib3JkZXItcGFkZGluZyA9CiAgKiogMy8xNiBmb3IgdmVydGljYWwgcGFkZGluZyAodG8gZ2l2ZSB+MnB4IG9mIHZlcnRpY2FsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24gY29uc2lkZXJpbmcgaXQncyB2ZXJ0aWNhbCBhbGlnbm1lbnQpCiAgKiogNC8xNiBmb3IgaG9yaXpvbnRhbCBwYWRkaW5nICh0byBnaXZlIH40cHggb2YgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlIGFyb3VuZCBhbiBpY29uKQoqLwouZmEtYm9yZGVyIHsKICBib3JkZXItY29sb3I6IHZhcigtLWZhLWJvcmRlci1jb2xvciwgI2VlZSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtYm9yZGVyLXJhZGl1cywgMC4xZW0pOwogIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7CiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1mYS1ib3JkZXItd2lkdGgsIDAuMDYyNWVtKTsKICBib3gtc2l6aW5nOiB2YXIoLS1mYS1ib3JkZXItYm94LXNpemluZywgY29udGVudC1ib3gpOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjE4NzVlbSAwLjI1ZW0pOwp9CgouZmEtcHVsbC1sZWZ0LAouZmEtcHVsbC1zdGFydCB7CiAgZmxvYXQ6IGlubGluZS1zdGFydDsKICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLXB1bGwtcmlnaHQsCi5mYS1wdWxsLWVuZCB7CiAgZmxvYXQ6IGlubGluZS1lbmQ7CiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKfQoKLmZhLWJlYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1ib3VuY2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYmVhdC1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1mbGlwIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDEuNXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1mbGlwLTM2MCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXAtMzYwOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1zaGFrZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNoYWtlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC43NXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7Cn0KCi5mYS1zcGluIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tcmV2ZXJzZSB7CiAgLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uOiByZXZlcnNlOwp9CgouZmEtcHVsc2UsCi5mYS1zcGluLXB1bHNlIHsKICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKLmZhLXNwaW4tc25hcCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXNwaW4tc25hcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDNzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tc25hcC00IHsKICBhbmltYXRpb24tbmFtZTogZmEtc3Bpbi1zbmFwLTQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAyLjRzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4tc25hcC04IHsKICBhbmltYXRpb24tbmFtZTogZmEtc3Bpbi1zbmFwLTg7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCA0cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1idXp6IHsKICBhbmltYXRpb24tbmFtZTogZmEtYnV6ejsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuNnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtd2FnIHsKICBhbmltYXRpb24tbmFtZTogZmEtd2FnOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMC45cyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2Utb3V0KTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gY2VudGVyOwp9CgouZmEtZmxvYXQgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mbG9hdDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDNzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwogIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cn0KCi5mYS1zd2luZyB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLXN3aW5nOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMS4ycyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2Utb3V0KTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyOwp9CgouZmEtamVsbG8gewogIGFuaW1hdGlvbi1uYW1lOiBmYS1qZWxsbzsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDAuOXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLW91dCk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLmZhLWJlYXQsCiAgLmZhLWJvdW5jZSwKICAuZmEtZmFkZSwKICAuZmEtYmVhdC1mYWRlLAogIC5mYS1mbGlwLAogIC5mYS1mbGlwLTM2MCwKICAuZmEtcHVsc2UsCiAgLmZhLXNoYWtlLAogIC5mYS1zcGluLAogIC5mYS1zcGluLXB1bHNlLAogIC5mYS1idXp6LAogIC5mYS1mbG9hdCwKICAuZmEtamVsbG8sCiAgLmZhLXNwaW4tc25hcCwKICAuZmEtc3Bpbi1zbmFwLTQsCiAgLmZhLXNwaW4tc25hcC04LAogIC5mYS1zd2luZywKICAuZmEtd2FnIHsKICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDI1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yNSAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKSk7CiAgfQogIDQ1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yMiAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjIpKSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKGNhbGMoMS4yNSAqIHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKSk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJvdW5jZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZyk7CiAgfQogIDE0JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjA2KSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOTQpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1hbnRpY2lwYXRpb24sIDNweCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAzMiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjk0KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xMikpIHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIDAuNWVtKSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAuNjYsIDAuNjYsIDEpOwogIH0KICA1MiUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAwLjVlbSkgKiAxLjEpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjUsIDAsIDEsIDAuNSk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDYpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjkyKSkgdHJhbnNsYXRlWSgwKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjMzLCAwLjY2LCAxKTsKICB9CiAgODUlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCwgMS4wNCkgdHJhbnNsYXRlWShjYWxjKC0ycHggKiB2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgMSkpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICA0MCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjQsIDEpOwogIH0KICAyNSUgewogICAgb3BhY2l0eTogY2FsYyh2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KSArIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4yOCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTsKICB9CiAgNDUlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4yNSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNjUlIHsKICAgIG9wYWNpdHk6IGNhbGModmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCkgKyAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMjgpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtYmVhdC1mYWRlLW9wYWNpdHksIDAuNCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNCwgMSk7CiAgfQogIDglIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSh2YXIoLS1mYS1mbGlwLWFudGljaXBhdGlvbi1zY2FsZSwgMC45NSkpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKICB9CiAgNjUlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogMC41KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDkyJSB7CiAgICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDJlbSkgc2NhbGUoMSkgcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgY2FsYyh2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSAqIHZhcigtLWZhLWZsaXAtb3ZlcnNob290LCAxLjA0KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMzYwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmxpcC0zNjAgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCAwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuNCwgMSk7CiAgfQogIDglIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSh2YXIoLS1mYS1mbGlwLWFudGljaXBhdGlvbi1zY2FsZSwgMC45NSkpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIGNhbGModmFyKC0tZmEtZmxpcC1hbmdsZSwgLTM2MGRlZykgKiAwLjYpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgODAlIHsKICAgIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMmVtKSBzY2FsZSgxKSByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCBjYWxjKHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpICogdmFyKC0tZmEtZmxpcC1vdmVyc2hvb3QsIDEuMDQpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgyZW0pIHNjYWxlKDEpIHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0zNjBkZWcpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zaGFrZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNWRlZykgdHJhbnNsYXRlWCgxcHgpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMjAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZykgdHJhbnNsYXRlWCgtMXB4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDM1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZykgdHJhbnNsYXRlWCgxcHgpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC05ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDY1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDc4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtM2RlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA5MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4gewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3Bpbi1zbmFwIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDE2LjY3JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgMjguNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMzMuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDUuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNjIlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI0MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNjYuNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI0MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNzguNjclIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMwMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgODMuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMwMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTUuMzMlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcC00IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDI1JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNzUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4tc25hcC04IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA5JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgMTIuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDIxLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDM0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDM3LjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgNDYuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA1OSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjI1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjgsIDAsIDEsIDEpOwogIH0KICA2Mi41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMjVkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7CiAgfQogIDcxLjUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgNzUlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTsKICB9CiAgODQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDMxNWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC44LCAwLCAxLCAxKTsKICB9CiAgODcuNSUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzE1ZGVnKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpOwogIH0KICA5Ni41JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuOCwgMCwgMSwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1idXp6IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMSwgMCwgMC45LCAxKTsKICB9CiAgNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkpIHJvdGF0ZSgwLjVkZWcpOwogIH0KICAxMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSkgcm90YXRlKC0wLjVkZWcpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLWZhLWJ1enotZGlzdGFuY2UsIDRweCkpIHJvdGF0ZSgwLjNkZWcpOwogIH0KICAyMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpKSkgcm90YXRlKC0wLjNkZWcpOwogIH0KICAyNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNykpIHJvdGF0ZSgwLjJkZWcpOwogIH0KICAzMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1idXp6LWRpc3RhbmNlLCA0cHgpICogMC43KSkgcm90YXRlKC0wLjJkZWcpOwogIH0KICAzNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0tZmEtYnV6ei1kaXN0YW5jZSwgNHB4KSAqIDAuNCkpIHJvdGF0ZSgwLjFkZWcpOwogIH0KICA0MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXdhZyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjYsIDEpOwogIH0KICAxMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgMjQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMiwgMCwgMC42LCAxKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKGNhbGModmFyKC0tZmEtd2FnLWFuZ2xlLCAxMmRlZykgKiAwLjg1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjYsIDEpOwogIH0KICA1OCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYyh2YXIoLS1mYS13YWctYW5nbGUsIDEyZGVnKSAqIDAuNikpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICB9CiAgNjglIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsb2F0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgdHJhbnNsYXRlWCgwKSByb3RhdGUoMGRlZykgc2NhbGUodmFyKC0tZmEtZmxvYXQtc3F1YXNoLXgsIDEuMDIpLCB2YXIoLS1mYS1mbG9hdC1zcXVhc2gteSwgMC45OCkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMzMsIDAsIDAuNjYsIDAuMzMpOwogIH0KICAxNSUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTAuNCAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgodmFyKC0tZmEtZmxvYXQtZHJpZnQsIDFweCkpIHJvdGF0ZSh2YXIoLS1mYS1mbG9hdC10aWx0LCAxZGVnKSkgc2NhbGUoMSwgMSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMC42NiwgMC42NiwgMSk7CiAgfQogIDM1JSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWZhLWZsb2F0LWhlaWdodCwgNnB4KSkpIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXN0cmV0Y2gteCwgMC45OCksIHZhcigtLWZhLWZsb2F0LXN0cmV0Y2gteSwgMS4wMykpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNSwgMCwgMC41LCAwKTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjkyICogdmFyKC0tZmEtZmxvYXQtaGVpZ2h0LCA2cHgpKSkgdHJhbnNsYXRlWChjYWxjKC0wLjUgKiB2YXIoLS1mYS1mbG9hdC1kcmlmdCwgMXB4KSkpIHJvdGF0ZShjYWxjKC0wLjUgKiB2YXIoLS1mYS1mbG9hdC10aWx0LCAxZGVnKSkpIHNjYWxlKDAuOTk1LCAxLjAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLCAwLjY2LCAwLjMzKTsKICB9CiAgNzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKC0wLjMgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKGNhbGMoLTEgKiB2YXIoLS1mYS1mbG9hdC1kcmlmdCwgMXB4KSkpIHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtZmxvYXQtdGlsdCwgMWRlZykpKSBzY2FsZSgxLCAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMzLCAwLjY2LCAwLjY2LCAxKTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWShjYWxjKDAuMDUgKiB2YXIoLS1mYS1mbG9hdC1oZWlnaHQsIDZweCkpKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgwZGVnKSBzY2FsZSh2YXIoLS1mYS1mbG9hdC1zcXVhc2gteCwgMS4wMiksIHZhcigtLWZhLWZsb2F0LXNxdWFzaC15LCAwLjk4KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zMywgMCwgMC42NiwgMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgcm90YXRlKDBkZWcpIHNjYWxlKHZhcigtLWZhLWZsb2F0LXNxdWFzaC14LCAxLjAyKSwgdmFyKC0tZmEtZmxvYXQtc3F1YXNoLXksIDAuOTgpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zd2luZyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4yLCAwLCAwLjgsIDEpOwogIH0KICA4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1zd2luZy1hbmdsZSwgMjJkZWcpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDE4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSAqIDAuODUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjMsIDAsIDAuNywgMSk7CiAgfQogIDI4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjY1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC42NSwgMSk7CiAgfQogIDM4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKC0xICogdmFyKC0tZmEtc3dpbmctYW5nbGUsIDIyZGVnKSAqIDAuNDUpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDQ4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZShjYWxjKHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjI1KSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA1NiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoY2FsYygtMSAqIHZhcigtLWZhLXN3aW5nLWFuZ2xlLCAyMmRlZykgKiAwLjEpKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSk7CiAgfQogIDY0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1qZWxsbyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjIsIDAsIDAuOCwgMSk7CiAgfQogIDEyJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpLCBjYWxjKDIgLSB2YXIoLS1mYS1qZWxsby1zY2FsZS14LCAxLjE1KSkpOwogICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMywgMCwgMC43LCAxKTsKICB9CiAgMjQlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoY2FsYygyIC0gdmFyKC0tZmEtamVsbG8tc2NhbGUteSwgMS4xMikpLCB2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4zLCAwLCAwLjcsIDEpOwogIH0KICAzNiUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDEgKyAodmFyKC0tZmEtamVsbG8tc2NhbGUteCwgMS4xNSkgLSAxKSAqIDAuNSksIGNhbGMoMiAtICgxICsgKHZhcigtLWZhLWplbGxvLXNjYWxlLXgsIDEuMTUpIC0gMSkgKiAwLjUpKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA0OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZShjYWxjKDIgLSAoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSAtIDEpICogMC4zKSksIGNhbGMoMSArICh2YXIoLS1mYS1qZWxsby1zY2FsZS15LCAxLjEyKSAtIDEpICogMC4zKSk7CiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOwogIH0KICA1OCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyLCAwLjk4KTsKICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgfQogIDY4JSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgfQp9Ci5mYS1yb3RhdGUtOTAgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmZhLXJvdGF0ZS0xODAgewogIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMjcwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwp9CgouZmEtZmxpcC1ob3Jpem9udGFsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTsKfQoKLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOwp9CgouZmEtZmxpcC1ib3RoLAouZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoLTEsIC0xKTsKfQoKLmZhLXJvdGF0ZS1ieSB7CiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7CiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtc2Vjb25kYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSwKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogYmxhY2s7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1pbnZlcnNlIHsKICBmaWxsOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLmZhLXN0YWNrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAyZW07CiAgbGluZS1oZWlnaHQ6IDJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMi41ZW07Cn0KCi5mYS1pbnZlcnNlIHsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwogIGhlaWdodDogMWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4IHsKICAtLWZhLXdpZHRoOiAyLjVlbTsKICBoZWlnaHQ6IDJlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9CgouZmEtc3RhY2stMXgsCi5mYS1zdGFjay0yeCB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiB2YXIoLS1mYS1zdGFjay16LWluZGV4LCBhdXRvKTsKfWA7ZnVuY3Rpb24gbGkoKXt2YXIgZT1ncix0PV9yLG49cS5jc3NQcmVmaXgscj1xLnJlcGxhY2VtZW50Q2xhc3MsaT1jaTtpZihuIT09ZXx8ciE9PXQpe3ZhciBhPVJlZ0V4cChgXFwuJHtlfVxcLWAsYGdgKSxvPVJlZ0V4cChgXFwtLSR7ZX1cXC1gLGBnYCkscz1SZWdFeHAoYFxcLiR7dH1gLGBnYCk7aT1pLnJlcGxhY2UoYSxgLiR7bn0tYCkucmVwbGFjZShvLGAtLSR7bn0tYCkucmVwbGFjZShzLGAuJHtyfWApfXJldHVybiBpfXZhciB1aT0hMTtmdW5jdGlvbiBkaSgpe3EuYXV0b0FkZENzcyYmIXVpJiYoWnIobGkoKSksdWk9ITApfXZhciBmaT17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbTp7Y3NzOmxpLGluc2VydENzczpkaX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntiZWZvcmVET01FbGVtZW50Q3JlYXRpb246ZnVuY3Rpb24oKXtkaSgpfSxiZWZvcmVJMnN2ZzpmdW5jdGlvbigpe2RpKCl9fX19LHBpPXp0fHx7fTtwaVttcl18fChwaVttcl09e30pLHBpW21yXS5zdHlsZXN8fChwaVttcl0uc3R5bGVzPXt9KSxwaVttcl0uaG9va3N8fChwaVttcl0uaG9va3M9e30pLHBpW21yXS5zaGltc3x8KHBpW21yXS5zaGltcz1bXSk7dmFyIG1pPXBpW21yXSxoaT1bXSxnaT1mdW5jdGlvbigpe0cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsZ2kpLF9pPTEsaGkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX0sX2k9ITE7SHQmJihfaT0oRy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/L15sb2FkZWR8XmMvOi9ebG9hZGVkfF5pfF5jLykudGVzdChHLnJlYWR5U3RhdGUpLF9pfHxHLmFkZEV2ZW50TGlzdGVuZXIoYERPTUNvbnRlbnRMb2FkZWRgLGdpKSk7ZnVuY3Rpb24gdmkoZSl7SHQmJihfaT9zZXRUaW1lb3V0KGUsMCk6aGkucHVzaChlKSl9ZnVuY3Rpb24geWkoZSl7dmFyIHQ9ZS50YWcsbj1lLmF0dHJpYnV0ZXMscj1uPT09dm9pZCAwP3t9Om4saT1lLmNoaWxkcmVuLGE9aT09PXZvaWQgMD9bXTppO3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2A/bmkoZSk6YDwke3R9ICR7cmkocil9PiR7YS5tYXAoeWkpLmpvaW4oYGApfTwvJHt0fT5gfWZ1bmN0aW9uIGJpKGUsdCxuKXtpZihlJiZlW3RdJiZlW3RdW25dKXJldHVybntwcmVmaXg6dCxpY29uTmFtZTpuLGljb246ZVt0XVtuXX19dmFyIHhpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpLGEpe3JldHVybiBlLmNhbGwodCxuLHIsaSxhKX19LFNpPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5rZXlzKGUpLGE9aS5sZW5ndGgsbz1yPT09dm9pZCAwP3Q6eGkodCxyKSxzLGMsbDtmb3Iobj09PXZvaWQgMD8ocz0xLGw9ZVtpWzBdXSk6KHM9MCxsPW4pO3M8YTtzKyspYz1pW3NdLGw9byhsLGVbY10sYyxlKTtyZXR1cm4gbH07ZnVuY3Rpb24gQ2koZSl7cmV0dXJuIER0KGUpLmxlbmd0aD09PTE/ZS5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNik6bnVsbH1mdW5jdGlvbiB3aShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7dmFyIHI9ZVtuXTtyZXR1cm4gci5pY29uP3Rbci5pY29uTmFtZV09ci5pY29uOnRbbl09cix0fSx7fSl9ZnVuY3Rpb24gVGkoZSx0KXt2YXIgbj0oYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9KS5za2lwSG9va3Mscj1uIT09dm9pZCAwJiZuLGk9d2kodCk7dHlwZW9mIG1pLmhvb2tzLmFkZFBhY2s9PWBmdW5jdGlvbmAmJiFyP21pLmhvb2tzLmFkZFBhY2soZSx3aSh0KSk6bWkuc3R5bGVzW2VdPVcoVyh7fSxtaS5zdHlsZXNbZV18fHt9KSxpKSxlPT09YGZhc2AmJlRpKGBmYWAsdCl9dmFyIEVpPW1pLnN0eWxlcyxEaT1taS5zaGltcyxPaT1PYmplY3Qua2V5cyhQciksa2k9T2kucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09T2JqZWN0LmtleXMoUHJbdF0pLGV9LHt9KSxBaT1udWxsLGppPXt9LE1pPXt9LE5pPXt9LFBpPXt9LEZpPXt9O2Z1bmN0aW9uIElpKGUpe3JldHVybn5Wci5pbmRleE9mKGUpfWZ1bmN0aW9uIExpKGUsdCl7dmFyIG49dC5zcGxpdChgLWApLHI9blswXSxpPW4uc2xpY2UoMSkuam9pbihgLWApO3JldHVybiByPT09ZSYmaSE9PWBgJiYhSWkoaSk/aTpudWxsfXZhciBSaT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiBTaShFaSxmdW5jdGlvbih0LG4scil7cmV0dXJuIHRbcl09U2kobixlLHt9KSx0fSx7fSl9O2ppPWUoZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0WzNdJiYoZVt0WzNdXT1uKSx0WzJdJiZ0WzJdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PWBudW1iZXJgfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QudG9TdHJpbmcoMTYpXT1ufSksZX0pLE1pPWUoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW25dPW4sdFsyXSYmdFsyXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gc3RyaW5nYH0pLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1ufSksZX0pLEZpPWUoZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMl07cmV0dXJuIGVbbl09bixyLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1ufSksZX0pO3ZhciB0PWBmYXJgaW4gRWl8fHEuYXV0b0ZldGNoU3ZnLG49U2koRGksZnVuY3Rpb24oZSxuKXt2YXIgcj1uWzBdLGk9blsxXSxhPW5bMl07cmV0dXJuIGk9PT1gZmFyYCYmIXQmJihpPWBmYXNgKSx0eXBlb2Ygcj09YHN0cmluZ2AmJihlLm5hbWVzW3JdPXtwcmVmaXg6aSxpY29uTmFtZTphfSksdHlwZW9mIHI9PWBudW1iZXJgJiYoZS51bmljb2Rlc1tyLnRvU3RyaW5nKDE2KV09e3ByZWZpeDppLGljb25OYW1lOmF9KSxlfSx7bmFtZXM6e30sdW5pY29kZXM6e319KTtOaT1uLm5hbWVzLFBpPW4udW5pY29kZXMsQWk9cWkocS5zdHlsZURlZmF1bHQse2ZhbWlseTpxLmZhbWlseURlZmF1bHR9KX07SnIoZnVuY3Rpb24oZSl7QWk9cWkoZS5zdHlsZURlZmF1bHQse2ZhbWlseTpxLmZhbWlseURlZmF1bHR9KX0pLFJpKCk7ZnVuY3Rpb24gemkoZSx0KXtyZXR1cm4oamlbZV18fHt9KVt0XX1mdW5jdGlvbiBCaShlLHQpe3JldHVybihNaVtlXXx8e30pW3RdfWZ1bmN0aW9uIFZpKGUsdCl7cmV0dXJuKEZpW2VdfHx7fSlbdF19ZnVuY3Rpb24gSGkoZSl7cmV0dXJuIE5pW2VdfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24gVWkoZSl7dmFyIHQ9UGlbZV0sbj16aShgZmFzYCxlKTtyZXR1cm4gdHx8KG4/e3ByZWZpeDpgZmFzYCxpY29uTmFtZTpufTpudWxsKXx8e3ByZWZpeDpudWxsLGljb25OYW1lOm51bGx9fWZ1bmN0aW9uIFdpKCl7cmV0dXJuIEFpfXZhciBHaT1mdW5jdGlvbigpe3JldHVybntwcmVmaXg6bnVsbCxpY29uTmFtZTpudWxsLHJlc3Q6W119fTtmdW5jdGlvbiBLaShlKXt2YXIgdD1LLG49T2kucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YCR7cS5jc3NQcmVmaXh9LSR7dH1gLGV9LHt9KTtyZXR1cm4gV24uZm9yRWFjaChmdW5jdGlvbihyKXsoZS5pbmNsdWRlcyhuW3JdKXx8ZS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBraVtyXS5pbmNsdWRlcyhlKX0pKSYmKHQ9cil9KSx0fWZ1bmN0aW9uIHFpKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLmZhbWlseSxuPXQ9PT12b2lkIDA/Szp0LHI9QXJbbl1bZV07aWYobj09PVh0JiYhZSlyZXR1cm5gZmFkYDt2YXIgaT1NcltuXVtlXXx8TXJbbl1bcl0sYT1lIGluIG1pLnN0eWxlcz9lOm51bGw7cmV0dXJuIGl8fGF8fG51bGx9ZnVuY3Rpb24gSmkoZSl7dmFyIHQ9W10sbj1udWxsO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9TGkocS5jc3NQcmVmaXgsZSk7cj9uPXI6ZSYmdC5wdXNoKGUpfSkse2ljb25OYW1lOm4scmVzdDp0fX1mdW5jdGlvbiBZaShlKXtyZXR1cm4gZS5zb3J0KCkuZmlsdGVyKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbi5pbmRleE9mKGUpPT09dH0pfXZhciBYaT1jci5jb25jYXQoWW4pO2Z1bmN0aW9uIFppKGUpe3ZhciB0PShhcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30pLnNraXBMb29rdXBzLG49dCE9PXZvaWQgMCYmdCxyPW51bGwsaT1ZaShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gWGkuaW5jbHVkZXMoZSl9KSksYT1ZaShlLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hWGkuaW5jbHVkZXMoZSl9KSksbz1FdChpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gcj1lLCFZdC5pbmNsdWRlcyhlKX0pLDEpWzBdLHM9bz09PXZvaWQgMD9udWxsOm8sYz1LaShpKSxsPVcoVyh7fSxKaShhKSkse30se3ByZWZpeDpxaShzLHtmYW1pbHk6Y30pfSk7cmV0dXJuIFcoVyhXKHt9LGwpLHRhKHt2YWx1ZXM6ZSxmYW1pbHk6YyxzdHlsZXM6RWksY29uZmlnOnEsY2Fub25pY2FsOmwsZ2l2ZW5QcmVmaXg6cn0pKSxRaShuLHIsbCkpfWZ1bmN0aW9uIFFpKGUsdCxuKXt2YXIgcj1uLnByZWZpeCxpPW4uaWNvbk5hbWU7aWYoZXx8IXJ8fCFpKXJldHVybntwcmVmaXg6cixpY29uTmFtZTppfTt2YXIgYT10PT09YGZhYD9IaShpKTp7fSxvPVZpKHIsaSk7cmV0dXJuIGk9YS5pY29uTmFtZXx8b3x8aSxyPWEucHJlZml4fHxyLHI9PT1gZmFyYCYmIUVpLmZhciYmRWkuZmFzJiYhcS5hdXRvRmV0Y2hTdmcmJihyPWBmYXNgKSx7cHJlZml4OnIsaWNvbk5hbWU6aX19dmFyICRpPVduLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PUt8fGUhPT1YdH0pLGVhPU9iamVjdC5rZXlzKHNyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1LfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhzcltlXSl9KS5mbGF0KCk7ZnVuY3Rpb24gdGEoZSl7dmFyIHQ9ZS52YWx1ZXMsbj1lLmZhbWlseSxyPWUuY2Fub25pY2FsLGk9ZS5naXZlblByZWZpeCxhPWk9PT12b2lkIDA/YGA6aSxvPWUuc3R5bGVzLHM9bz09PXZvaWQgMD97fTpvLGM9ZS5jb25maWcsbD1jPT09dm9pZCAwP3t9OmMsdT1uPT09WHQsZD10LmluY2x1ZGVzKGBmYS1kdW90b25lYCl8fHQuaW5jbHVkZXMoYGZhZGApLGY9bC5mYW1pbHlEZWZhdWx0PT09YGR1b3RvbmVgLHA9ci5wcmVmaXg9PT1gZmFkYHx8ci5wcmVmaXg9PT1gZmEtZHVvdG9uZWA7cmV0dXJuIXUmJihkfHxmfHxwKSYmKHIucHJlZml4PWBmYWRgKSwodC5pbmNsdWRlcyhgZmEtYnJhbmRzYCl8fHQuaW5jbHVkZXMoYGZhYmApKSYmKHIucHJlZml4PWBmYWJgKSwhci5wcmVmaXgmJiRpLmluY2x1ZGVzKG4pJiYoT2JqZWN0LmtleXMocykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZWEuaW5jbHVkZXMoZSl9KXx8bC5hdXRvRmV0Y2hTdmcpJiYoci5wcmVmaXg9cW4uZ2V0KG4pLmRlZmF1bHRTaG9ydFByZWZpeElkLHIuaWNvbk5hbWU9Vmkoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWUpLChyLnByZWZpeD09PWBmYWB8fGE9PT1gZmFgKSYmKHIucHJlZml4PVdpKCl8fGBmYXNgKSxyfXZhciBuYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfdCh0aGlzLGUpLHRoaXMuZGVmaW5pdGlvbnM9e319cmV0dXJuIHl0KGUsW3trZXk6YGFkZGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9Wy4uLmFyZ3VtZW50c10ucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmRlZmluaXRpb25zW25dPVcoVyh7fSxlLmRlZmluaXRpb25zW25dfHx7fSksdFtuXSksVGkobix0W25dKTt2YXIgcj1QcltLXVtuXTtyJiZUaShyLHRbbl0pLFJpKCl9KX19LHtrZXk6YHJlc2V0YCx2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZGVmaW5pdGlvbnM9e319fSx7a2V5OmBfcHVsbERlZmluaXRpb25zYCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQucHJlZml4JiZ0Lmljb25OYW1lJiZ0Lmljb24/ezA6dH06dDtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKHQpe3ZhciByPW5bdF0saT1yLnByZWZpeCxhPXIuaWNvbk5hbWUsbz1yLmljb24scz1vWzJdO2VbaV18fChlW2ldPXt9KSxzLmxlbmd0aD4wJiZzLmZvckVhY2goZnVuY3Rpb24odCl7dHlwZW9mIHQ9PWBzdHJpbmdgJiYoZVtpXVt0XT1vKX0pLGVbaV1bYV09b30pLGV9fV0pfSgpLHJhPVtdLGlhPXt9LGFhPXt9LG9hPU9iamVjdC5rZXlzKGFhKTtmdW5jdGlvbiBzYShlLHQpe3ZhciBuPXQubWl4b3V0c1RvO3JldHVybiByYT1lLGlhPXt9LE9iamVjdC5rZXlzKGFhKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe29hLmluZGV4T2YoZSk9PT0tMSYmZGVsZXRlIGFhW2VdfSkscmEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLm1peG91dD9lLm1peG91dCgpOnt9O2lmKE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dHlwZW9mIHRbZV09PWBmdW5jdGlvbmAmJihuW2VdPXRbZV0pLEF0KHRbZV0pPT09YG9iamVjdGAmJk9iamVjdC5rZXlzKHRbZV0pLmZvckVhY2goZnVuY3Rpb24ocil7bltlXXx8KG5bZV09e30pLG5bZV1bcl09dFtlXVtyXX0pfSksZS5ob29rcyl7dmFyIHI9ZS5ob29rcygpO09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7aWFbZV18fChpYVtlXT1bXSksaWFbZV0ucHVzaChyW2VdKX0pfWUucHJvdmlkZXMmJmUucHJvdmlkZXMoYWEpfSksbn1mdW5jdGlvbiBjYShlLHQpe3ZhciBuPVsuLi5hcmd1bWVudHNdLnNsaWNlKDIpO3JldHVybihpYVtlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oZSl7dD1lLmFwcGx5KG51bGwsW3RdLmNvbmNhdChuKSl9KSx0fWZ1bmN0aW9uIGxhKGUpe3ZhciB0PVsuLi5hcmd1bWVudHNdLnNsaWNlKDEpOyhpYVtlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hcHBseShudWxsLHQpfSl9ZnVuY3Rpb24gdWEoKXt2YXIgZT1hcmd1bWVudHNbMF0sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIGFhW2VdP2FhW2VdLmFwcGx5KG51bGwsdCk6dm9pZCAwfWZ1bmN0aW9uIGRhKGUpe2UucHJlZml4PT09YGZhYCYmKGUucHJlZml4PWBmYXNgKTt2YXIgdD1lLmljb25OYW1lLG49ZS5wcmVmaXh8fFdpKCk7aWYodClyZXR1cm4gdD1WaShuLHQpfHx0LGJpKGZhLmRlZmluaXRpb25zLG4sdCl8fGJpKG1pLnN0eWxlcyxuLHQpfXZhciBmYT1uZXcgbmEsSj17bm9BdXRvOmZ1bmN0aW9uKCl7cS5hdXRvUmVwbGFjZVN2Zz0hMSxxLm9ic2VydmVNdXRhdGlvbnM9ITEsbGEoYG5vQXV0b2ApfSxjb25maWc6cSxkb206e2kyc3ZnOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O3JldHVybiBIdD8obGEoYGJlZm9yZUkyc3ZnYCxlKSx1YShgcHNldWRvRWxlbWVudHMyc3ZnYCxlKSx1YShgaTJzdmdgLGUpKTpQcm9taXNlLnJlamVjdChFcnJvcihgT3BlcmF0aW9uIHJlcXVpcmVzIGEgRE9NIG9mIHNvbWUga2luZC5gKSl9LHdhdGNoOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LHQ9ZS5hdXRvUmVwbGFjZVN2Z1Jvb3Q7cS5hdXRvUmVwbGFjZVN2Zz09PSExJiYocS5hdXRvUmVwbGFjZVN2Zz0hMCkscS5vYnNlcnZlTXV0YXRpb25zPSEwLHZpKGZ1bmN0aW9uKCl7cGEoe2F1dG9SZXBsYWNlU3ZnUm9vdDp0fSksbGEoYHdhdGNoYCxlKX0pfX0scGFyc2U6e2ljb246ZnVuY3Rpb24oZSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoQXQoZSk9PT1gb2JqZWN0YCYmZS5wcmVmaXgmJmUuaWNvbk5hbWUpcmV0dXJue3ByZWZpeDplLnByZWZpeCxpY29uTmFtZTpWaShlLnByZWZpeCxlLmljb25OYW1lKXx8ZS5pY29uTmFtZX07aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg9PT0yKXt2YXIgdD1lWzFdLmluZGV4T2YoYGZhLWApPT09MD9lWzFdLnNsaWNlKDMpOmVbMV0sbj1xaShlWzBdKTtyZXR1cm57cHJlZml4Om4saWNvbk5hbWU6Vmkobix0KXx8dH19aWYodHlwZW9mIGU9PWBzdHJpbmdgJiYoZS5pbmRleE9mKGAke3EuY3NzUHJlZml4fS1gKT4tMXx8ZS5tYXRjaChJcikpKXt2YXIgcj1aaShlLnNwbGl0KGAgYCkse3NraXBMb29rdXBzOiEwfSk7cmV0dXJue3ByZWZpeDpyLnByZWZpeHx8V2koKSxpY29uTmFtZTpWaShyLnByZWZpeCxyLmljb25OYW1lKXx8ci5pY29uTmFtZX19aWYodHlwZW9mIGU9PWBzdHJpbmdgKXt2YXIgaT1XaSgpO3JldHVybntwcmVmaXg6aSxpY29uTmFtZTpWaShpLGUpfHxlfX19fSxsaWJyYXJ5OmZhLGZpbmRJY29uRGVmaW5pdGlvbjpkYSx0b0h0bWw6eWl9LHBhPWZ1bmN0aW9uKCl7dmFyIGU9KGFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSkuYXV0b1JlcGxhY2VTdmdSb290LHQ9ZT09PXZvaWQgMD9HOmU7KE9iamVjdC5rZXlzKG1pLnN0eWxlcykubGVuZ3RoPjB8fHEuYXV0b0ZldGNoU3ZnKSYmSHQmJnEuYXV0b1JlcGxhY2VTdmcmJkouZG9tLmkyc3ZnKHtub2RlOnR9KX07ZnVuY3Rpb24gbWEoZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFic3RyYWN0Iix7Z2V0OnR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaHRtbCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLmFic3RyYWN0Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4geWkoZSl9KX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibm9kZSIse2dldDpmdW5jdGlvbigpe2lmKEh0KXt2YXIgdD1HLmNyZWF0ZUVsZW1lbnQoYGRpdmApO3JldHVybiB0LmlubmVySFRNTD1lLmh0bWwsdC5jaGlsZHJlbn19fSksZX1mdW5jdGlvbiBoYShlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5tYWluLHI9ZS5tYXNrLGk9ZS5hdHRyaWJ1dGVzLGE9ZS5zdHlsZXMsbz1lLnRyYW5zZm9ybTtpZihhaShvKSYmbi5mb3VuZCYmIXIuZm91bmQpe3ZhciBzPXt4Om4ud2lkdGgvbi5oZWlnaHQvMix5Oi41fTtpLnN0eWxlPWlpKFcoVyh7fSxhKSx7fSx7InRyYW5zZm9ybS1vcmlnaW4iOmAke3MueCtvLngvMTZ9ZW0gJHtzLnkrby55LzE2fWVtYH0pKX1yZXR1cm5be3RhZzpgc3ZnYCxhdHRyaWJ1dGVzOmksY2hpbGRyZW46dH1dfWZ1bmN0aW9uIGdhKGUpe3ZhciB0PWUucHJlZml4LG49ZS5pY29uTmFtZSxyPWUuY2hpbGRyZW4saT1lLmF0dHJpYnV0ZXMsYT1lLnN5bWJvbCxvPWE9PT0hMD9gJHt0fS0ke3EuY3NzUHJlZml4fS0ke259YDphO3JldHVyblt7dGFnOmBzdmdgLGF0dHJpYnV0ZXM6e3N0eWxlOmBkaXNwbGF5OiBub25lO2B9LGNoaWxkcmVuOlt7dGFnOmBzeW1ib2xgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHtpZDpvfSksY2hpbGRyZW46cn1dfV19ZnVuY3Rpb24gX2EoZSl7cmV0dXJuW2BhcmlhLWxhYmVsYCxgYXJpYS1sYWJlbGxlZGJ5YCxgdGl0bGVgLGByb2xlYF0uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCBpbiBlfSl9ZnVuY3Rpb24gdmEoZSl7dmFyIHQ9ZS5pY29ucyxuPXQubWFpbixyPXQubWFzayxpPWUucHJlZml4LGE9ZS5pY29uTmFtZSxvPWUudHJhbnNmb3JtLHM9ZS5zeW1ib2wsYz1lLm1hc2tJZCxsPWUuZXh0cmEsdT1lLndhdGNoYWJsZSxkPXUhPT12b2lkIDAmJnUsZj1yLmZvdW5kP3I6bixwPWYud2lkdGgsbT1mLmhlaWdodCxoPVtxLnJlcGxhY2VtZW50Q2xhc3MsYT9gJHtxLmNzc1ByZWZpeH0tJHthfWA6YGBdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gbC5jbGFzc2VzLmluZGV4T2YoZSk9PT0tMX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9PWBgfHwhIWV9KS5jb25jYXQobC5jbGFzc2VzKS5qb2luKGAgYCksZz17Y2hpbGRyZW46W10sYXR0cmlidXRlczpXKFcoe30sbC5hdHRyaWJ1dGVzKSx7fSx7ImRhdGEtcHJlZml4IjppLCJkYXRhLWljb24iOmEsY2xhc3M6aCxyb2xlOmwuYXR0cmlidXRlcy5yb2xlfHxgaW1nYCx2aWV3Qm94OmAwIDAgJHtwfSAke219YH0pfTshX2EobC5hdHRyaWJ1dGVzKSYmIWwuYXR0cmlidXRlc1tgYXJpYS1oaWRkZW5gXSYmKGcuYXR0cmlidXRlc1tgYXJpYS1oaWRkZW5gXT1gdHJ1ZWApLGQmJihnLmF0dHJpYnV0ZXNbdnJdPWBgKTt2YXIgXz1XKFcoe30sZykse30se3ByZWZpeDppLGljb25OYW1lOmEsbWFpbjpuLG1hc2s6cixtYXNrSWQ6Yyx0cmFuc2Zvcm06byxzeW1ib2w6cyxzdHlsZXM6Vyh7fSxsLnN0eWxlcyl9KSx2PXIuZm91bmQmJm4uZm91bmQ/dWEoYGdlbmVyYXRlQWJzdHJhY3RNYXNrYCxfKXx8e2NoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319OnVhKGBnZW5lcmF0ZUFic3RyYWN0SWNvbmAsXyl8fHtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSx5PXYuY2hpbGRyZW4sYj12LmF0dHJpYnV0ZXM7cmV0dXJuIF8uY2hpbGRyZW49eSxfLmF0dHJpYnV0ZXM9YixzP2dhKF8pOmhhKF8pfWZ1bmN0aW9uIHlhKGUpe3ZhciB0PWUuY29udGVudCxuPWUud2lkdGgscj1lLmhlaWdodCxpPWUudHJhbnNmb3JtLGE9ZS5leHRyYSxvPWUud2F0Y2hhYmxlLHM9byE9PXZvaWQgMCYmbyxjPVcoVyh7fSxhLmF0dHJpYnV0ZXMpLHt9LHtjbGFzczphLmNsYXNzZXMuam9pbihgIGApfSk7cyYmKGNbdnJdPWBgKTt2YXIgbD1XKHt9LGEuc3R5bGVzKTthaShpKSYmKGwudHJhbnNmb3JtPXNpKHt0cmFuc2Zvcm06aSxzdGFydENlbnRlcmVkOiEwLHdpZHRoOm4saGVpZ2h0OnJ9KSxsW2Atd2Via2l0LXRyYW5zZm9ybWBdPWwudHJhbnNmb3JtKTt2YXIgdT1paShsKTt1Lmxlbmd0aD4wJiYoYy5zdHlsZT11KTt2YXIgZD1bXTtyZXR1cm4gZC5wdXNoKHt0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6YyxjaGlsZHJlbjpbdF19KSxkfWZ1bmN0aW9uIGJhKGUpe3ZhciB0PWUuY29udGVudCxuPWUuZXh0cmEscj1XKFcoe30sbi5hdHRyaWJ1dGVzKSx7fSx7Y2xhc3M6bi5jbGFzc2VzLmpvaW4oYCBgKX0pLGk9aWkobi5zdHlsZXMpO2kubGVuZ3RoPjAmJihyLnN0eWxlPWkpO3ZhciBhPVtdO3JldHVybiBhLnB1c2goe3RhZzpgc3BhbmAsYXR0cmlidXRlczpyLGNoaWxkcmVuOlt0XX0pLGF9dmFyIHhhPW1pLnN0eWxlcztmdW5jdGlvbiBTYShlKXt2YXIgdD1lWzBdLG49ZVsxXSxyPUV0KGUuc2xpY2UoNCksMSlbMF0saT1udWxsO3JldHVybiBpPUFycmF5LmlzQXJyYXkocik/e3RhZzpgZ2AsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7QnIuR1JPVVB9YH0sY2hpbGRyZW46W3t0YWc6YHBhdGhgLGF0dHJpYnV0ZXM6e2NsYXNzOmAke3EuY3NzUHJlZml4fS0ke0JyLlNFQ09OREFSWX1gLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyWzBdfX0se3RhZzpgcGF0aGAsYXR0cmlidXRlczp7Y2xhc3M6YCR7cS5jc3NQcmVmaXh9LSR7QnIuUFJJTUFSWX1gLGZpbGw6YGN1cnJlbnRDb2xvcmAsZDpyWzFdfX1dfTp7dGFnOmBwYXRoYCxhdHRyaWJ1dGVzOntmaWxsOmBjdXJyZW50Q29sb3JgLGQ6cn19LHtmb3VuZDohMCx3aWR0aDp0LGhlaWdodDpuLGljb246aX19dmFyIENhPXtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMn07ZnVuY3Rpb24gd2EoZSx0KXshRHImJiFxLnNob3dNaXNzaW5nSWNvbnMmJmUmJmNvbnNvbGUuZXJyb3IoYEljb24gd2l0aCBuYW1lICIke2V9IiBhbmQgcHJlZml4ICIke3R9IiBpcyBtaXNzaW5nLmApfWZ1bmN0aW9uIFRhKGUsdCl7dmFyIG49dDtyZXR1cm4gdD09PWBmYWAmJnEuc3R5bGVEZWZhdWx0IT09bnVsbCYmKHQ9V2koKSksbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihuPT09YGZhYCl7dmFyIGE9SGkoZSl8fHt9O2U9YS5pY29uTmFtZXx8ZSx0PWEucHJlZml4fHx0fWlmKGUmJnQmJnhhW3RdJiZ4YVt0XVtlXSl7dmFyIG89eGFbdF1bZV07cmV0dXJuIHIoU2EobykpfXdhKGUsdCkscihXKFcoe30sQ2EpLHt9LHtpY29uOnEuc2hvd01pc3NpbmdJY29ucyYmZSYmdWEoYG1pc3NpbmdJY29uQWJzdHJhY3RgKXx8e319KSl9KX12YXIgRWE9ZnVuY3Rpb24oKXt9LERhPXEubWVhc3VyZVBlcmZvcm1hbmNlJiZWdCYmVnQubWFyayYmVnQubWVhc3VyZT9WdDp7bWFyazpFYSxtZWFzdXJlOkVhfSxPYT1gRkEgIjcuMy4xImAsa2E9ZnVuY3Rpb24oZSl7cmV0dXJuIERhLm1hcmsoYCR7T2F9ICR7ZX0gYmVnaW5zYCksZnVuY3Rpb24oKXtyZXR1cm4gQWEoZSl9fSxBYT1mdW5jdGlvbihlKXtEYS5tYXJrKGAke09hfSAke2V9IGVuZHNgKSxEYS5tZWFzdXJlKGAke09hfSAke2V9YCxgJHtPYX0gJHtlfSBiZWdpbnNgLGAke09hfSAke2V9IGVuZHNgKX0samE9e2JlZ2luOmthLGVuZDpBYX0sTWE9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIE5hKGUpe3JldHVybiB0eXBlb2YoZS5nZXRBdHRyaWJ1dGU/ZS5nZXRBdHRyaWJ1dGUodnIpOm51bGwpPT1gc3RyaW5nYH1mdW5jdGlvbiBQYShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZT9lLmdldEF0dHJpYnV0ZSh4cik6bnVsbCxuPWUuZ2V0QXR0cmlidXRlP2UuZ2V0QXR0cmlidXRlKFNyKTpudWxsO3JldHVybiB0JiZufWZ1bmN0aW9uIEZhKGUpe3JldHVybiBlJiZlLmNsYXNzTGlzdCYmZS5jbGFzc0xpc3QuY29udGFpbnMmJmUuY2xhc3NMaXN0LmNvbnRhaW5zKHEucmVwbGFjZW1lbnRDbGFzcyl9ZnVuY3Rpb24gSWEoKXtyZXR1cm4gcS5hdXRvUmVwbGFjZVN2Zz09PSEwP1ZhLnJlcGxhY2U6VmFbcS5hdXRvUmVwbGFjZVN2Z118fFZhLnJlcGxhY2V9ZnVuY3Rpb24gTGEoZSl7cmV0dXJuIEcuY3JlYXRlRWxlbWVudE5TKGBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z2AsZSl9ZnVuY3Rpb24gUmEoZSl7cmV0dXJuIEcuY3JlYXRlRWxlbWVudChlKX1mdW5jdGlvbiB6YShlKXt2YXIgdD0oYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9KS5jZUZuLG49dD09PXZvaWQgMD9lLnRhZz09PWBzdmdgP0xhOlJhOnQ7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBHLmNyZWF0ZVRleHROb2RlKGUpO3ZhciByPW4oZS50YWcpO3JldHVybiBPYmplY3Qua2V5cyhlLmF0dHJpYnV0ZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Iuc2V0QXR0cmlidXRlKHQsZS5hdHRyaWJ1dGVzW3RdKX0pLChlLmNoaWxkcmVufHxbXSkuZm9yRWFjaChmdW5jdGlvbihlKXtyLmFwcGVuZENoaWxkKHphKGUse2NlRm46bn0pKX0pLHJ9ZnVuY3Rpb24gQmEoZSl7dmFyIHQ9YCAke2Uub3V0ZXJIVE1MfSBgO3JldHVybiB0PWAke3R9Rm9udCBBd2Vzb21lIGZvbnRhd2Vzb21lLmNvbSBgLHR9dmFyIFZhPXtyZXBsYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07aWYodC5wYXJlbnROb2RlKXtpZihlWzFdLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh6YShlKSx0KX0pLHQuZ2V0QXR0cmlidXRlKHZyKT09PW51bGwmJnEua2VlcE9yaWdpbmFsU291cmNlKXt2YXIgbj1HLmNyZWF0ZUNvbW1lbnQoQmEodCkpO3QucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobix0KX1lbHNlIHQucmVtb3ZlKCl9fSxuZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0sbj1lWzFdO2lmKH50aSh0KS5pbmRleE9mKHEucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIFZhLnJlcGxhY2UoZSk7dmFyIHI9UmVnRXhwKGAke3EuY3NzUHJlZml4fS0uKmApO2lmKGRlbGV0ZSBuWzBdLmF0dHJpYnV0ZXMuaWQsblswXS5hdHRyaWJ1dGVzLmNsYXNzKXt2YXIgaT1uWzBdLmF0dHJpYnV0ZXMuY2xhc3Muc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXEucmVwbGFjZW1lbnRDbGFzc3x8dC5tYXRjaChyKT9lLnRvU3ZnLnB1c2godCk6ZS50b05vZGUucHVzaCh0KSxlfSx7dG9Ob2RlOltdLHRvU3ZnOltdfSk7blswXS5hdHRyaWJ1dGVzLmNsYXNzPWkudG9Tdmcuam9pbihgIGApLGkudG9Ob2RlLmxlbmd0aD09PTA/dC5yZW1vdmVBdHRyaWJ1dGUoYGNsYXNzYCk6dC5zZXRBdHRyaWJ1dGUoYGNsYXNzYCxpLnRvTm9kZS5qb2luKGAgYCkpfXZhciBhPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB5aShlKX0pLmpvaW4oYApgKTt0LnNldEF0dHJpYnV0ZSh2cixgYCksdC5pbm5lckhUTUw9YX19O2Z1bmN0aW9uIEhhKGUpe2UoKX1mdW5jdGlvbiBVYShlLHQpe3ZhciBuPXR5cGVvZiB0PT1gZnVuY3Rpb25gP3Q6TWE7aWYoZS5sZW5ndGg9PT0wKW4oKTtlbHNle3ZhciByPUhhO3EubXV0YXRlQXBwcm9hY2g9PT13ciYmKHI9enQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxIYSkscihmdW5jdGlvbigpe3ZhciB0PUlhKCkscj1qYS5iZWdpbihgbXV0YXRlYCk7ZS5tYXAodCkscigpLG4oKX0pfX12YXIgV2E9ITE7ZnVuY3Rpb24gR2EoKXtXYT0hMH1mdW5jdGlvbiBLYSgpe1dhPSExfXZhciBxYT1udWxsO2Z1bmN0aW9uIEphKGUpe2lmKEJ0JiZxLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PWUudHJlZUNhbGxiYWNrLG49dD09PXZvaWQgMD9NYTp0LHI9ZS5ub2RlQ2FsbGJhY2ssaT1yPT09dm9pZCAwP01hOnIsYT1lLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssbz1hPT09dm9pZCAwP01hOmEscz1lLm9ic2VydmVNdXRhdGlvbnNSb290LGM9cz09PXZvaWQgMD9HOnM7cWE9bmV3IEJ0KGZ1bmN0aW9uKGUpe2lmKCFXYSl7dmFyIHQ9V2koKTtlaShlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUudHlwZT09PWBjaGlsZExpc3RgJiZlLmFkZGVkTm9kZXMubGVuZ3RoPjAmJiFOYShlLmFkZGVkTm9kZXNbMF0pJiYocS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmbyhlLnRhcmdldCksbihlLnRhcmdldCkpLGUudHlwZT09PWBhdHRyaWJ1dGVzYCYmZS50YXJnZXQucGFyZW50Tm9kZSYmcS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmbyhbZS50YXJnZXRdLCEwKSxlLnR5cGU9PT1gYXR0cmlidXRlc2AmJk5hKGUudGFyZ2V0KSYmfnpyLmluZGV4T2YoZS5hdHRyaWJ1dGVOYW1lKSl7aWYoZS5hdHRyaWJ1dGVOYW1lPT09YGNsYXNzYCYmUGEoZS50YXJnZXQpKXt2YXIgcj1aaSh0aShlLnRhcmdldCkpLGE9ci5wcmVmaXgscz1yLmljb25OYW1lO2UudGFyZ2V0LnNldEF0dHJpYnV0ZSh4cixhfHx0KSxzJiZlLnRhcmdldC5zZXRBdHRyaWJ1dGUoU3Iscyl9ZWxzZSBGYShlLnRhcmdldCkmJmkoZS50YXJnZXQpfX0pfX0pLEh0JiZxYS5vYnNlcnZlKGMse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsc3VidHJlZTohMH0pfX1mdW5jdGlvbiBZYSgpe3FhJiZxYS5kaXNjb25uZWN0KCl9ZnVuY3Rpb24gWGEoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoYHN0eWxlYCksbj1bXTtyZXR1cm4gdCYmKG49dC5zcGxpdChgO2ApLnJlZHVjZShmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BsaXQoYDpgKSxyPW5bMF0saT1uLnNsaWNlKDEpO3JldHVybiByJiZpLmxlbmd0aD4wJiYoZVtyXT1pLmpvaW4oYDpgKS50cmltKCkpLGV9LHt9KSksbn1mdW5jdGlvbiBaYShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZShgZGF0YS1wcmVmaXhgKSxuPWUuZ2V0QXR0cmlidXRlKGBkYXRhLWljb25gKSxyPWUuaW5uZXJUZXh0PT09dm9pZCAwP2BgOmUuaW5uZXJUZXh0LnRyaW0oKSxpPVppKHRpKGUpKTtyZXR1cm4gaS5wcmVmaXh8fD1XaSgpLHQmJm4mJihpLnByZWZpeD10LGkuaWNvbk5hbWU9biksaS5pY29uTmFtZSYmaS5wcmVmaXg/aTooaS5wcmVmaXgmJnIubGVuZ3RoPjAmJihpLmljb25OYW1lPUJpKGkucHJlZml4LGUuaW5uZXJUZXh0KXx8emkoaS5wcmVmaXgsQ2koZS5pbm5lclRleHQpKSksIWkuaWNvbk5hbWUmJnEuYXV0b0ZldGNoU3ZnJiZlLmZpcnN0Q2hpbGQmJmUuZmlyc3RDaGlsZC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFJiYoaS5pY29uTmFtZT1lLmZpcnN0Q2hpbGQuZGF0YSksaSl9ZnVuY3Rpb24gUWEoZSl7cmV0dXJuIGVpKGUuYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubmFtZSE9PWBjbGFzc2AmJmUubmFtZSE9PWBzdHlsZWAmJihlW3QubmFtZV09dC52YWx1ZSksZX0se30pfWZ1bmN0aW9uICRhKCl7cmV0dXJue2ljb25OYW1lOm51bGwscHJlZml4Om51bGwsdHJhbnNmb3JtOlhyLHN5bWJvbDohMSxtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLGV4dHJhOntjbGFzc2VzOltdLHN0eWxlczp7fSxhdHRyaWJ1dGVzOnt9fX19ZnVuY3Rpb24gZW8oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOntzdHlsZVBhcnNlcjohMH0sbj1aYShlKSxyPW4uaWNvbk5hbWUsaT1uLnByZWZpeCxhPW4ucmVzdCxvPVFhKGUpLHM9Y2EoYHBhcnNlTm9kZUF0dHJpYnV0ZXNgLHt9LGUpO3JldHVybiBXKHtpY29uTmFtZTpyLHByZWZpeDppLHRyYW5zZm9ybTpYcixtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLHN5bWJvbDohMSxleHRyYTp7Y2xhc3NlczphLHN0eWxlczp0LnN0eWxlUGFyc2VyP1hhKGUpOltdLGF0dHJpYnV0ZXM6b319LHMpfXZhciB0bz1taS5zdHlsZXM7ZnVuY3Rpb24gbm8oZSl7dmFyIHQ9cS5hdXRvUmVwbGFjZVN2Zz09PWBuZXN0YD9lbyhlLHtzdHlsZVBhcnNlcjohMX0pOmVvKGUpO3JldHVybn50LmV4dHJhLmNsYXNzZXMuaW5kZXhPZihMcik/dWEoYGdlbmVyYXRlTGF5ZXJzVGV4dGAsZSx0KTp1YShgZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uYCxlLHQpfWZ1bmN0aW9uIHJvKCl7cmV0dXJuW10uY29uY2F0KER0KFluKSxEdChjcikpfWZ1bmN0aW9uIGlvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFIdClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIG49Ry5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uYWRkKGAke0NyfS0ke2V9YCl9LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVtb3ZlKGAke0NyfS0ke2V9YCl9LGE9cS5hdXRvRmV0Y2hTdmc/cm8oKTpZdC5jb25jYXQoT2JqZWN0LmtleXModG8pKTthLmluY2x1ZGVzKGBmYWApfHxhLnB1c2goYGZhYCk7dmFyIG89W2AuJHtMcn06bm90KFske3ZyfV0pYF0uY29uY2F0KGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAuJHtlfTpub3QoWyR7dnJ9XSlgfSkpLmpvaW4oYCwgYCk7aWYoby5sZW5ndGg9PT0wKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgcz1bXTt0cnl7cz1laShlLnF1ZXJ5U2VsZWN0b3JBbGwobykpfWNhdGNoe31pZihzLmxlbmd0aD4wKXIoYHBlbmRpbmdgKSxpKGBjb21wbGV0ZWApO2Vsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBjPWphLmJlZ2luKGBvblRyZWVgKSxsPXMucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciBuPW5vKHQpO24mJmUucHVzaChuKX1jYXRjaChlKXtEcnx8ZS5uYW1lPT09YE1pc3NpbmdJY29uYCYmY29uc29sZS5lcnJvcihlKX1yZXR1cm4gZX0sW10pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLG4pe1Byb21pc2UuYWxsKGwpLnRoZW4oZnVuY3Rpb24obil7VWEobixmdW5jdGlvbigpe3IoYGFjdGl2ZWApLHIoYGNvbXBsZXRlYCksaShgcGVuZGluZ2ApLHR5cGVvZiB0PT1gZnVuY3Rpb25gJiZ0KCksYygpLGUoKX0pfSkuY2F0Y2goZnVuY3Rpb24oZSl7YygpLG4oZSl9KX0pfWZ1bmN0aW9uIGFvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO25vKGUpLnRoZW4oZnVuY3Rpb24oZSl7ZSYmVWEoW2VdLHQpfSl9ZnVuY3Rpb24gb28oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxyPSh0fHx7fSkuaWNvbj90OmRhKHR8fHt9KSxpPW4ubWFzaztyZXR1cm4gaSYmPShpfHx7fSkuaWNvbj9pOmRhKGl8fHt9KSxlKHIsVyhXKHt9LG4pLHt9LHttYXNrOml9KSl9fXZhciBzbz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sbj10LnRyYW5zZm9ybSxyPW49PT12b2lkIDA/WHI6bixpPXQuc3ltYm9sLGE9aSE9PXZvaWQgMCYmaSxvPXQubWFzayxzPW89PT12b2lkIDA/bnVsbDpvLGM9dC5tYXNrSWQsbD1jPT09dm9pZCAwP251bGw6Yyx1PXQuY2xhc3NlcyxkPXU9PT12b2lkIDA/W106dSxmPXQuYXR0cmlidXRlcyxwPWY9PT12b2lkIDA/e306ZixtPXQuc3R5bGVzLGg9bT09PXZvaWQgMD97fTptO2lmKGUpe3ZhciBnPWUucHJlZml4LF89ZS5pY29uTmFtZSx2PWUuaWNvbjtyZXR1cm4gbWEoVyh7dHlwZTpgaWNvbmB9LGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGxhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtpY29uRGVmaW5pdGlvbjplLHBhcmFtczp0fSksdmEoe2ljb25zOnttYWluOlNhKHYpLG1hc2s6cz9TYShzLmljb24pOntmb3VuZDohMSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGljb246e319fSxwcmVmaXg6ZyxpY29uTmFtZTpfLHRyYW5zZm9ybTpXKFcoe30sWHIpLHIpLHN5bWJvbDphLG1hc2tJZDpsLGV4dHJhOnthdHRyaWJ1dGVzOnAsc3R5bGVzOmgsY2xhc3NlczpkfX0pfSl9fSxjbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2ljb246b28oc28pfX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57bXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmVlQ2FsbGJhY2s9aW8sZS5ub2RlQ2FsbGJhY2s9YW8sZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmkyc3ZnPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxuPXQ9PT12b2lkIDA/Rzp0LHI9ZS5jYWxsYmFjaztyZXR1cm4gaW8obixyPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpyKX0sZS5nZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmljb25OYW1lLHI9dC5wcmVmaXgsaT10LnRyYW5zZm9ybSxhPXQuc3ltYm9sLG89dC5tYXNrLHM9dC5tYXNrSWQsYz10LmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGwpe1Byb21pc2UuYWxsKFtUYShuLHIpLG8uaWNvbk5hbWU/VGEoby5pY29uTmFtZSxvLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBsPUV0KG8sMiksdT1sWzBdLGQ9bFsxXTt0KFtlLHZhKHtpY29uczp7bWFpbjp1LG1hc2s6ZH0scHJlZml4OnIsaWNvbk5hbWU6bix0cmFuc2Zvcm06aSxzeW1ib2w6YSxtYXNrSWQ6cyxleHRyYTpjLHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaChsKX0pfSxlLmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hpbGRyZW4sbj1lLmF0dHJpYnV0ZXMscj1lLm1haW4saT1lLnRyYW5zZm9ybSxhPWUuc3R5bGVzLG89aWkoYSk7by5sZW5ndGg+MCYmKG4uc3R5bGU9byk7dmFyIHM7cmV0dXJuIGFpKGkpJiYocz11YShgZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nYCx7bWFpbjpyLHRyYW5zZm9ybTppLGNvbnRhaW5lcldpZHRoOnIud2lkdGgsaWNvbldpZHRoOnIud2lkdGh9KSksdC5wdXNoKHN8fHIuaWNvbikse2NoaWxkcmVuOnQsYXR0cmlidXRlczpufX19fSxsbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2xheWVyOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQuY2xhc3NlcyxyPW49PT12b2lkIDA/W106bjtyZXR1cm4gbWEoe3R5cGU6YGxheWVyYH0sZnVuY3Rpb24oKXtsYShgYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uYCx7YXNzZW1ibGVyOmUscGFyYW1zOnR9KTt2YXIgbj1bXTtyZXR1cm4gZShmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpP2UubWFwKGZ1bmN0aW9uKGUpe249bi5jb25jYXQoZS5hYnN0cmFjdCl9KTpuPW4uY29uY2F0KGUuYWJzdHJhY3QpfSksW3t0YWc6YHNwYW5gLGF0dHJpYnV0ZXM6e2NsYXNzOltgJHtxLmNzc1ByZWZpeH0tbGF5ZXJzYF0uY29uY2F0KER0KHIpKS5qb2luKGAgYCl9LGNoaWxkcmVuOm59XX0pfX19fSx1bz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LG49dC50aXRsZSxyPW49PT12b2lkIDA/bnVsbDpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIG1hKHt0eXBlOmBjb3VudGVyYCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGxhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSxiYSh7Y29udGVudDplLnRvU3RyaW5nKCksdGl0bGU6cixleHRyYTp7YXR0cmlidXRlczpzLHN0eWxlczpsLGNsYXNzZXM6W2Ake3EuY3NzUHJlZml4fS1sYXllcnMtY291bnRlcmBdLmNvbmNhdChEdChhKSl9fSl9KX19fX0sZm89e21peG91dDpmdW5jdGlvbigpe3JldHVybnt0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPXQudHJhbnNmb3JtLHI9bj09PXZvaWQgMD9YcjpuLGk9dC5jbGFzc2VzLGE9aT09PXZvaWQgMD9bXTppLG89dC5hdHRyaWJ1dGVzLHM9bz09PXZvaWQgMD97fTpvLGM9dC5zdHlsZXMsbD1jPT09dm9pZCAwP3t9OmM7cmV0dXJuIG1hKHt0eXBlOmB0ZXh0YCxjb250ZW50OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIGxhKGBiZWZvcmVET01FbGVtZW50Q3JlYXRpb25gLHtjb250ZW50OmUscGFyYW1zOnR9KSx5YSh7Y29udGVudDplLHRyYW5zZm9ybTpXKFcoe30sWHIpLHIpLGV4dHJhOnthdHRyaWJ1dGVzOnMsc3R5bGVzOmwsY2xhc3NlczpbYCR7cS5jc3NQcmVmaXh9LWxheWVycy10ZXh0YF0uY29uY2F0KER0KGEpKX19KX0pfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UuZ2VuZXJhdGVMYXllcnNUZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dC50cmFuc2Zvcm0scj10LmV4dHJhLGk9bnVsbCxhPW51bGw7aWYoVXQpe3ZhciBvPXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZm9udFNpemUsMTApLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpPXMud2lkdGgvbyxhPXMuaGVpZ2h0L299cmV0dXJuIFByb21pc2UucmVzb2x2ZShbZSx5YSh7Y29udGVudDplLmlubmVySFRNTCx3aWR0aDppLGhlaWdodDphLHRyYW5zZm9ybTpuLGV4dHJhOnIsd2F0Y2hhYmxlOiEwfSldKX19fSxwbz1SZWdFeHAoYCJgLGB1Z2ApLG1vPVsxMTA1OTIwLDExMTIzMTldLGhvPVcoVyhXKFcoe30se0ZvbnRBd2Vzb21lOntub3JtYWw6YGZhc2AsNDAwOmBmYXNgfX0pLEtuKSxwciksJG4pLGdvPU9iamVjdC5rZXlzKGhvKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldPWhvW3RdLGV9LHt9KSxfbz1PYmplY3Qua2V5cyhnbykucmVkdWNlKGZ1bmN0aW9uKGUsdCl7dmFyIG49Z29bdF07cmV0dXJuIGVbdF09bls5MDBdfHxEdChPYmplY3QuZW50cmllcyhuKSlbMF1bMV0sZX0se30pO2Z1bmN0aW9uIHZvKGUpe3JldHVybiBDaShEdChlLnJlcGxhY2UocG8sYGApKVswXXx8YGApfWZ1bmN0aW9uIHlvKGUpe3ZhciB0PWUuZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mZWF0dXJlLXNldHRpbmdzYCkuaW5jbHVkZXMoYHNzMDFgKSxuPWUuZ2V0UHJvcGVydHlWYWx1ZShgY29udGVudGApLnJlcGxhY2UocG8sYGApLHI9bi5jb2RlUG9pbnRBdCgwKSxpPXI+PW1vWzBdJiZyPD1tb1sxXSxhPW4ubGVuZ3RoPT09MiYmblswXT09PW5bMV07cmV0dXJuIGl8fGF8fHR9ZnVuY3Rpb24gYm8oZSx0KXt2YXIgbj1lLnJlcGxhY2UoL15bJyJdfFsnIl0kL2csYGApLnRvTG93ZXJDYXNlKCkscj1wYXJzZUludCh0KSxpPWlzTmFOKHIpP2Bub3JtYWxgOnI7cmV0dXJuKGdvW25dfHx7fSlbaV18fF9vW25dfWZ1bmN0aW9uIHhvKGUsdCl7dmFyIG49YCR7YnJ9JHt0LnJlcGxhY2UoYDpgLGAtYCl9YDtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtpZihlLmdldEF0dHJpYnV0ZShuKSE9PW51bGwpcmV0dXJuIHIoKTt2YXIgYT1laShlLmNoaWxkcmVuKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKHlyKT09PXR9KVswXSxvPXp0LmdldENvbXB1dGVkU3R5bGUoZSx0KSxzPW8uZ2V0UHJvcGVydHlWYWx1ZShgZm9udC1mYW1pbHlgKSxjPXMubWF0Y2goUnIpLGw9by5nZXRQcm9wZXJ0eVZhbHVlKGBmb250LXdlaWdodGApLHU9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCk7aWYoYSYmIWMpcmV0dXJuIGUucmVtb3ZlQ2hpbGQoYSkscigpO2lmKGMmJnUhPT1gbm9uZWAmJnUhPT1gYCl7dmFyIGQ9by5nZXRQcm9wZXJ0eVZhbHVlKGBjb250ZW50YCksZj1ibyhzLGwpLHA9dm8oZCksbT1jWzBdLnN0YXJ0c1dpdGgoYEZvbnRBd2Vzb21lYCksaD15byhvKSxnPXppKGYscCksXz1nO2lmKG0pe3ZhciB2PVVpKHApO3YuaWNvbk5hbWUmJnYucHJlZml4JiYoZz12Lmljb25OYW1lLGY9di5wcmVmaXgpfWlmKGcmJiFoJiYoIWF8fGEuZ2V0QXR0cmlidXRlKHhyKSE9PWZ8fGEuZ2V0QXR0cmlidXRlKFNyKSE9PV8pKXtlLnNldEF0dHJpYnV0ZShuLF8pLGEmJmUucmVtb3ZlQ2hpbGQoYSk7dmFyIHk9JGEoKSxiPXkuZXh0cmE7Yi5hdHRyaWJ1dGVzW3lyXT10LFRhKGcsZikudGhlbihmdW5jdGlvbihpKXt2YXIgYT12YShXKFcoe30seSkse30se2ljb25zOnttYWluOmksbWFzazpHaSgpfSxwcmVmaXg6ZixpY29uTmFtZTpfLGV4dHJhOmIsd2F0Y2hhYmxlOiEwfSkpLG89Ry5jcmVhdGVFbGVtZW50TlMoYGh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnYCxgc3ZnYCk7dD09PWA6OmJlZm9yZWA/ZS5pbnNlcnRCZWZvcmUobyxlLmZpcnN0Q2hpbGQpOmUuYXBwZW5kQ2hpbGQobyksby5vdXRlckhUTUw9YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHlpKGUpfSkuam9pbihgCmApLGUucmVtb3ZlQXR0cmlidXRlKG4pLHIoKX0pLmNhdGNoKGkpfWVsc2UgcigpfWVsc2UgcigpfSl9ZnVuY3Rpb24gU28oZSl7cmV0dXJuIFByb21pc2UuYWxsKFt4byhlLGA6OmJlZm9yZWApLHhvKGUsYDo6YWZ0ZXJgKV0pfWZ1bmN0aW9uIENvKGUpe3JldHVybiBlLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkJiYhflRyLmluZGV4T2YoZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpJiYhZS5nZXRBdHRyaWJ1dGUoeXIpJiYoIWUucGFyZW50Tm9kZXx8ZS5wYXJlbnROb2RlLnRhZ05hbWUhPT1gc3ZnYCl9dmFyIHdvPWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmRXIuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0KX0pfSxUbz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgdD1uZXcgU2V0LG49ZS5zcGxpdCgvLCg/IVteKCldKlwpKS8pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KTtuPW4uZmxhdE1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcyhgKGApP2U6ZS5zcGxpdChgLGApLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KX0pO3ZhciByPWJ0KG4pLGk7dHJ5e2ZvcihyLnMoKTshKGk9ci5uKCkpLmRvbmU7KXt2YXIgYT1pLnZhbHVlO2lmKHdvKGEpKXt2YXIgbz1Fci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKHQsYGApfSxhKTtvIT09YGAmJm8hPT1gKmAmJnQuYWRkKG8pfX19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHR9O2Z1bmN0aW9uIEVvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwJiZhcmd1bWVudHNbMV07aWYoSHQpe3ZhciBuO2lmKHQpbj1lO2Vsc2UgaWYocS5zZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuKW49ZS5xdWVyeVNlbGVjdG9yQWxsKGAqYCk7ZWxzZXt2YXIgcj1uZXcgU2V0LGk9YnQoZG9jdW1lbnQuc3R5bGVTaGVldHMpLGE7dHJ5e2ZvcihpLnMoKTshKGE9aS5uKCkpLmRvbmU7KXt2YXIgbz1hLnZhbHVlO3RyeXt2YXIgcz1idChvLmNzc1J1bGVzKSxjO3RyeXtmb3Iocy5zKCk7IShjPXMubigpKS5kb25lOyl7dmFyIGw9Yy52YWx1ZSx1PWJ0KFRvKGwuc2VsZWN0b3JUZXh0KSksZDt0cnl7Zm9yKHUucygpOyEoZD11Lm4oKSkuZG9uZTspe3ZhciBmPWQudmFsdWU7ci5hZGQoZil9fWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9fWNhdGNoKGUpe3Euc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5ncyYmY29uc29sZS53YXJuKGBGb250IEF3ZXNvbWU6IGNhbm5vdCBwYXJzZSBzdHlsZXNoZWV0OiAke28uaHJlZn0gKCR7ZS5tZXNzYWdlfSkKSWYgaXQgZGVjbGFyZXMgYW55IEZvbnQgQXdlc29tZSBDU1MgcHNldWRvLWVsZW1lbnRzLCB0aGV5IHdpbGwgbm90IGJlIHJlbmRlcmVkIGFzIFNWRyBpY29ucy4gQWRkIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHRvIHRoZSA8bGluaz4sIGVuYWJsZSBzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIGZvciBzbG93ZXIgYnV0IG1vcmUgdGhvcm91Z2ggRE9NIHBhcnNpbmcsIG9yIHN1cHByZXNzIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MgdG8gZmFsc2UuYCl9fX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1pZighci5zaXplKXJldHVybjt2YXIgcD1BcnJheS5mcm9tKHIpLmpvaW4oYCwgYCk7dHJ5e249ZS5xdWVyeVNlbGVjdG9yQWxsKHApfWNhdGNoe319cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZWkobikuZmlsdGVyKENvKS5tYXAoU28pLGk9amEuYmVnaW4oYHNlYXJjaFBzZXVkb0VsZW1lbnRzYCk7R2EoKSxQcm9taXNlLmFsbChyKS50aGVuKGZ1bmN0aW9uKCl7aSgpLEthKCksZSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtpKCksS2EoKSx0KCl9KX0pfX12YXIgRG89e2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHNldWRvRWxlbWVudHNDYWxsYmFjaz1FbyxlfX19LHByb3ZpZGVzOmZ1bmN0aW9uKGUpe2UucHNldWRvRWxlbWVudHMyc3ZnPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxuPXQ9PT12b2lkIDA/Rzp0O3Euc2VhcmNoUHNldWRvRWxlbWVudHMmJkVvKG4pfX19LE9vPSExLGtvPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9tOnt1bndhdGNoOmZ1bmN0aW9uKCl7R2EoKSxPbz0hMH19fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57Ym9vdHN0cmFwOmZ1bmN0aW9uKCl7SmEoY2EoYG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3NgLHt9KSl9LG5vQXV0bzpmdW5jdGlvbigpe1lhKCl9LHdhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2JzZXJ2ZU11dGF0aW9uc1Jvb3Q7T28/S2EoKTpKYShjYShgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc2Ase29ic2VydmVNdXRhdGlvbnNSb290OnR9KSl9fX19LEFvPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkuc3BsaXQoYCBgKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoYC1gKSxyPW5bMF0saT1uLnNsaWNlKDEpLmpvaW4oYC1gKTtpZihyJiZpPT09YGhgKXJldHVybiBlLmZsaXBYPSEwLGU7aWYociYmaT09PWB2YClyZXR1cm4gZS5mbGlwWT0hMCxlO2lmKGk9cGFyc2VGbG9hdChpKSxpc05hTihpKSlyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZWBncm93YDplLnNpemUrPWk7YnJlYWs7Y2FzZWBzaHJpbmtgOmUuc2l6ZS09aTticmVhaztjYXNlYGxlZnRgOmUueC09aTticmVhaztjYXNlYHJpZ2h0YDplLngrPWk7YnJlYWs7Y2FzZWB1cGA6ZS55LT1pO2JyZWFrO2Nhc2VgZG93bmA6ZS55Kz1pO2JyZWFrO2Nhc2Vgcm90YXRlYDplLnJvdGF0ZSs9aX1yZXR1cm4gZX0se3NpemU6MTYseDowLHk6MCxmbGlwWDohMSxmbGlwWTohMSxyb3RhdGU6MH0pfSxqbz17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlOnt0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7cmV0dXJuIEFvKGUpfX19fSxob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtdHJhbnNmb3JtYCk7cmV0dXJuIG4mJihlLnRyYW5zZm9ybT1BbyhuKSksZX19fSxwcm92aWRlczpmdW5jdGlvbihlKXtlLmdlbmVyYXRlQWJzdHJhY3RUcmFuc2Zvcm1Hcm91cGluZz1mdW5jdGlvbihlKXt2YXIgdD1lLm1haW4sbj1lLnRyYW5zZm9ybSxyPWUuY29udGFpbmVyV2lkdGgsaT1lLmljb25XaWR0aCxhPXtvdXRlcjp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtyLzJ9IDI1NilgfSxpbm5lcjp7dHJhbnNmb3JtOmAke2B0cmFuc2xhdGUoJHtuLngqMzJ9LCAke24ueSozMn0pIGB9ICR7YHNjYWxlKCR7bi5zaXplLzE2KihuLmZsaXBYPy0xOjEpfSwgJHtuLnNpemUvMTYqKG4uZmxpcFk/LTE6MSl9KSBgfSAke2Byb3RhdGUoJHtuLnJvdGF0ZX0gMCAwKWB9YH0scGF0aDp7dHJhbnNmb3JtOmB0cmFuc2xhdGUoJHtpLzIqLTF9IC0yNTYpYH19O3JldHVybnt0YWc6YGdgLGF0dHJpYnV0ZXM6Vyh7fSxhLm91dGVyKSxjaGlsZHJlbjpbe3RhZzpgZ2AsYXR0cmlidXRlczpXKHt9LGEuaW5uZXIpLGNoaWxkcmVuOlt7dGFnOnQuaWNvbi50YWcsY2hpbGRyZW46dC5pY29uLmNoaWxkcmVuLGF0dHJpYnV0ZXM6VyhXKHt9LHQuaWNvbi5hdHRyaWJ1dGVzKSxhLnBhdGgpfV19XX19fX0sTW89e3g6MCx5OjAsd2lkdGg6YDEwMCVgLGhlaWdodDpgMTAwJWB9O2Z1bmN0aW9uIE5vKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZS5hdHRyaWJ1dGVzJiYoZS5hdHRyaWJ1dGVzLmZpbGx8fHQpJiYoZS5hdHRyaWJ1dGVzLmZpbGw9YGJsYWNrYCksZX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gZS50YWc9PT1gZ2A/ZS5jaGlsZHJlbjpbZV19c2EoW2ZpLGNvLGxvLHVvLGZvLERvLGtvLGpvLHtob29rczpmdW5jdGlvbigpe3JldHVybntwYXJzZU5vZGVBdHRyaWJ1dGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtbWFza2ApLHI9bj9aaShuLnNwbGl0KGAgYCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pKTpHaSgpO3JldHVybiByLnByZWZpeHx8PVdpKCksZS5tYXNrPXIsZS5tYXNrSWQ9dC5nZXRBdHRyaWJ1dGUoYGRhdGEtZmEtbWFzay1pZGApLGV9fX0scHJvdmlkZXM6ZnVuY3Rpb24oZSl7ZS5nZW5lcmF0ZUFic3RyYWN0TWFzaz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLG49ZS5hdHRyaWJ1dGVzLHI9ZS5tYWluLGk9ZS5tYXNrLGE9ZS5tYXNrSWQsbz1lLnRyYW5zZm9ybSxzPXIud2lkdGgsYz1yLmljb24sbD1pLndpZHRoLHU9aS5pY29uLGQ9b2koe3RyYW5zZm9ybTpvLGNvbnRhaW5lcldpZHRoOmwsaWNvbldpZHRoOnN9KSxmPXt0YWc6YHJlY3RgLGF0dHJpYnV0ZXM6VyhXKHt9LE1vKSx7fSx7ZmlsbDpgd2hpdGVgfSl9LHA9Yy5jaGlsZHJlbj97Y2hpbGRyZW46Yy5jaGlsZHJlbi5tYXAoTm8pfTp7fSxtPXt0YWc6YGdgLGF0dHJpYnV0ZXM6Vyh7fSxkLmlubmVyKSxjaGlsZHJlbjpbTm8oVyh7dGFnOmMudGFnLGF0dHJpYnV0ZXM6VyhXKHt9LGMuYXR0cmlidXRlcyksZC5wYXRoKX0scCkpXX0saD17dGFnOmBnYCxhdHRyaWJ1dGVzOlcoe30sZC5vdXRlciksY2hpbGRyZW46W21dfSxnPWBtYXNrLSR7YXx8JHIoKX1gLF89YGNsaXAtJHthfHwkcigpfWAsdj17dGFnOmBtYXNrYCxhdHRyaWJ1dGVzOlcoVyh7fSxNbykse30se2lkOmcsbWFza1VuaXRzOmB1c2VyU3BhY2VPblVzZWAsbWFza0NvbnRlbnRVbml0czpgdXNlclNwYWNlT25Vc2VgfSksY2hpbGRyZW46W2YsaF19LHk9e3RhZzpgZGVmc2AsY2hpbGRyZW46W3t0YWc6YGNsaXBQYXRoYCxhdHRyaWJ1dGVzOntpZDpffSxjaGlsZHJlbjpQbyh1KX0sdl19O3JldHVybiB0LnB1c2goeSx7dGFnOmByZWN0YCxhdHRyaWJ1dGVzOlcoe2ZpbGw6YGN1cnJlbnRDb2xvcmAsImNsaXAtcGF0aCI6YHVybCgjJHtffSlgLG1hc2s6YHVybCgjJHtnfSlgfSxNbyl9KSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOm59fX19LHtwcm92aWRlczpmdW5jdGlvbihlKXt2YXIgdD0hMTt6dC5tYXRjaE1lZGlhJiYodD16dC5tYXRjaE1lZGlhKGAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKWApLm1hdGNoZXMpLGUubWlzc2luZ0ljb25BYnN0cmFjdD1mdW5jdGlvbigpe3ZhciBlPVtdLG49e2ZpbGw6YGN1cnJlbnRDb2xvcmB9LHI9e2F0dHJpYnV0ZVR5cGU6YFhNTGAscmVwZWF0Q291bnQ6YGluZGVmaW5pdGVgLGR1cjpgMnNgfTtlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se2Q6YE0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHpgfSl9KTt2YXIgaT1XKFcoe30scikse30se2F0dHJpYnV0ZU5hbWU6YG9wYWNpdHlgfSksYT17dGFnOmBjaXJjbGVgLGF0dHJpYnV0ZXM6VyhXKHt9LG4pLHt9LHtjeDpgMjU2YCxjeTpgMzY0YCxyOmAyOGB9KSxjaGlsZHJlbjpbXX07cmV0dXJuIHR8fGEuY2hpbGRyZW4ucHVzaCh7dGFnOmBhbmltYXRlYCxhdHRyaWJ1dGVzOlcoVyh7fSxyKSx7fSx7YXR0cmlidXRlTmFtZTpgcmAsdmFsdWVzOmAyODsxNDsyODsyODsxNDsyODtgfSl9LHt0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHt2YWx1ZXM6YDE7MDsxOzE7MDsxO2B9KX0pLGUucHVzaChhKSxlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se29wYWNpdHk6YDFgLGQ6YE0yNjMuNywzMTJoLTE2Yy02LjYsMC0xMi01LjQtMTItMTJjMC03MSw3Ny40LTYzLjksNzcuNC0xMDcuOGMwLTIwLTE3LjgtNDAuMi01Ny40LTQwLjJjLTI5LjEsMC00NC4zLDkuNi01OS4yLDI4LjcgYy0zLjksNS0xMS4xLDYtMTYuMiwyLjRsLTEzLjEtOS4yYy01LjYtMy45LTYuOS0xMS44LTIuNi0xNy4yYzIxLjItMjcuMiw0Ni40LTQ0LjcsOTEuMi00NC43YzUyLjMsMCw5Ny40LDI5LjgsOTcuNCw4MC4yIGMwLDY3LjYtNzcuNCw2My41LTc3LjQsMTA3LjhDMjc1LjcsMzA2LjYsMjcwLjMsMzEyLDI2My43LDMxMnpgfSksY2hpbGRyZW46dD9bXTpbe3RhZzpgYW5pbWF0ZWAsYXR0cmlidXRlczpXKFcoe30saSkse30se3ZhbHVlczpgMTswOzA7MDswOzE7YH0pfV19KSx0fHxlLnB1c2goe3RhZzpgcGF0aGAsYXR0cmlidXRlczpXKFcoe30sbikse30se29wYWNpdHk6YDBgLGQ6YE0yMzIuNSwxMzQuNWw3LDE2OGMwLjMsNi40LDUuNiwxMS41LDEyLDExLjVoOWM2LjQsMCwxMS43LTUuMSwxMi0xMS41bDctMTY4YzAuMy02LjgtNS4yLTEyLjUtMTItMTIuNWgtMjMgQzIzNy43LDEyMiwyMzIuMiwxMjcuNywyMzIuNSwxMzQuNXpgfSksY2hpbGRyZW46W3t0YWc6YGFuaW1hdGVgLGF0dHJpYnV0ZXM6VyhXKHt9LGkpLHt9LHt2YWx1ZXM6YDA7MDsxOzE7MDswO2B9KX1dfSkse3RhZzpgZ2AsYXR0cmlidXRlczp7Y2xhc3M6YG1pc3NpbmdgfSxjaGlsZHJlbjplfX19fSx7aG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VOb2RlQXR0cmlidXRlczpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKGBkYXRhLWZhLXN5bWJvbGApO3JldHVybiBlLnN5bWJvbD1uPT09bnVsbD8hMTpuPT09YGB8fG4sZX19fX1dLHttaXhvdXRzVG86Sn0pLEoubm9BdXRvO3ZhciBGbz1KLmNvbmZpZztKLmxpYnJhcnksSi5kb207dmFyIElvPUoucGFyc2U7Si5maW5kSWNvbkRlZmluaXRpb24sSi50b0h0bWw7dmFyIExvPUouaWNvbjtKLmxheWVyO3ZhciBSbz1KLnRleHQ7Si5jb3VudGVyO2Z1bmN0aW9uIHpvKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciBuPTAscj1BcnJheSh0KTtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn1mdW5jdGlvbiBCbyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB6byhlKX1mdW5jdGlvbiBZKGUsdCxuKXtyZXR1cm4odD1Kbyh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiBWbyhlKXtpZih0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlW2BAQGl0ZXJhdG9yYF0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gSG8oKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gVW8oZSx0KXt2YXIgbj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBYKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XT09bnVsbD97fTphcmd1bWVudHNbdF07dCUyP1VvKE9iamVjdChuKSwhMCkuZm9yRWFjaChmdW5jdGlvbih0KXtZKGUsdCxuW3RdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlVvKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBXbyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG4scixpPUdvKGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKW49YVtyXSx0LmluZGV4T2Yobik9PT0tMSYme30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLG4pJiYoaVtuXT1lW25dKX1yZXR1cm4gaX1mdW5jdGlvbiBHbyhlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIG49e307Zm9yKHZhciByIGluIGUpaWYoe30uaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKXtpZih0LmluZGV4T2YocikhPT0tMSljb250aW51ZTtuW3JdPWVbcl19cmV0dXJuIG59ZnVuY3Rpb24gS28oZSl7cmV0dXJuIEJvKGUpfHxWbyhlKXx8WG8oZSl8fEhvKCl9ZnVuY3Rpb24gcW8oZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0fHxgZGVmYXVsdGApO2lmKHR5cGVvZiByIT1gb2JqZWN0YClyZXR1cm4gcjt0aHJvdyBUeXBlRXJyb3IoYEBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuYCl9cmV0dXJuKHQ9PT1gc3RyaW5nYD9TdHJpbmc6TnVtYmVyKShlKX1mdW5jdGlvbiBKbyhlKXt2YXIgdD1xbyhlLGBzdHJpbmdgKTtyZXR1cm4gdHlwZW9mIHQ9PWBzeW1ib2xgP3Q6dCtgYH1mdW5jdGlvbiBZbyhlKXsiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiO3JldHVybiBZbz10eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT1gc3ltYm9sYD9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0eXBlb2YgU3ltYm9sPT1gZnVuY3Rpb25gJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9gc3ltYm9sYDp0eXBlb2YgZX0sWW8oZSl9ZnVuY3Rpb24gWG8oZSx0KXtpZihlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIHpvKGUsdCk7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4gbj09PWBPYmplY3RgJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLG49PT1gTWFwYHx8bj09PWBTZXRgP0FycmF5LmZyb20oZSk6bj09PWBBcmd1bWVudHNgfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT96byhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gWm8oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/WSh7fSxlLHQpOnt9fWZ1bmN0aW9uIFFvKGUpe3ZhciB0LG49KHQ9eyJmYS1zcGluIjplLnNwaW4sImZhLXB1bHNlIjplLnB1bHNlLCJmYS1mdyI6ZS5maXhlZFdpZHRoLCJmYS1ib3JkZXIiOmUuYm9yZGVyLCJmYS1saSI6ZS5saXN0SXRlbSwiZmEtaW52ZXJzZSI6ZS5pbnZlcnNlLCJmYS1mbGlwIjplLmZsaXA9PT0hMCwiZmEtZmxpcC1ob3Jpem9udGFsIjplLmZsaXA9PT1gaG9yaXpvbnRhbGB8fGUuZmxpcD09PWBib3RoYCwiZmEtZmxpcC12ZXJ0aWNhbCI6ZS5mbGlwPT09YHZlcnRpY2FsYHx8ZS5mbGlwPT09YGJvdGhgfSxZKFkoWShZKFkoWShZKFkoWShZKHQsYGZhLSR7ZS5zaXplfWAsZS5zaXplIT09bnVsbCksYGZhLXJvdGF0ZS0ke2Uucm90YXRpb259YCxlLnJvdGF0aW9uIT09bnVsbCksYGZhLXJvdGF0ZS1ieWAsZS5yb3RhdGVCeSksYGZhLXB1bGwtJHtlLnB1bGx9YCxlLnB1bGwhPT1udWxsKSxgZmEtc3dhcC1vcGFjaXR5YCxlLnN3YXBPcGFjaXR5KSxgZmEtYm91bmNlYCxlLmJvdW5jZSksYGZhLXNoYWtlYCxlLnNoYWtlKSxgZmEtYmVhdGAsZS5iZWF0KSxgZmEtZmFkZWAsZS5mYWRlKSxgZmEtYmVhdC1mYWRlYCxlLmJlYXRGYWRlKSxZKFkoWShZKFkoWShZKFkoWShZKHQsYGZhLWZsYXNoYCxlLmZsYXNoKSxgZmEtc3Bpbi1wdWxzZWAsZS5zcGluUHVsc2UpLGBmYS1zcGluLXJldmVyc2VgLGUuc3BpblJldmVyc2UpLGBmYS13aWR0aC1hdXRvYCxlLndpZHRoQXV0byksYGZhLWNhbnZhcy1zcXVhcmVgLGUuY2FudmFzU3F1YXJlKSxgZmEtY2FudmFzLXJvb215YCxlLmNhbnZhc1Jvb215KSxgZmEtZmxpcC0zNjBgLGUuZmxpcDM2MCksYGZhLWJ1enpgLGUuYnV6eiksYGZhLWZsb2F0YCxlLmZsb2F0KSxgZmEtamVsbG9gLGUuamVsbG8pLFkoWShZKFkoWSh0LGBmYS1zcGluLXNuYXBgLGUuc3BpblNuYXApLGBmYS1zcGluLXNuYXAtNGAsZS5zcGluU25hcDQpLGBmYS1zcGluLXNuYXAtOGAsZS5zcGluU25hcDgpLGBmYS1zd2luZ2AsZS5zd2luZyksYGZhLXdhZ2AsZS53YWcpKTtyZXR1cm4gT2JqZWN0LmtleXMobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdP2U6bnVsbH0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfXZhciAkbz10eXBlb2YgZ2xvYmFsVGhpczxgdWA/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PGB1YD93aW5kb3c6dHlwZW9mIGdsb2JhbDxgdWA/Z2xvYmFsOnR5cGVvZiBzZWxmPGB1YD9zZWxmOnt9LGVzPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyKXtpZighbCh0KXx8ZCh0KXx8Zih0KXx8cCh0KXx8Yyh0KSlyZXR1cm4gdDt2YXIgaSxhPTAsbz0wO2lmKHUodCkpZm9yKGk9W10sbz10Lmxlbmd0aDthPG87YSsrKWkucHVzaChuKGUsdFthXSxyKSk7ZWxzZSBmb3IodmFyIHMgaW4gaT17fSx0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHMpJiYoaVtlKHMscildPW4oZSx0W3NdLHIpKTtyZXR1cm4gaX0scj1mdW5jdGlvbihlLHQpe3R8fD17fTt2YXIgbj10LnNlcGFyYXRvcnx8YF9gLHI9dC5zcGxpdHx8Lyg/PVtBLVpdKS87cmV0dXJuIGUuc3BsaXQocikuam9pbihuKX0saT1mdW5jdGlvbihlKXtyZXR1cm4gbShlKT9lOihlPWUucmVwbGFjZSgvW1wtX1xzXSsoLik/L2csZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD90LnRvVXBwZXJDYXNlKCk6YGB9KSxlLnN1YnN0cigwLDEpLnRvTG93ZXJDYXNlKCkrZS5zdWJzdHIoMSkpfSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSk7cmV0dXJuIHQuc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKX0sbz1mdW5jdGlvbihlLHQpe3JldHVybiByKGUsdCkudG9Mb3dlckNhc2UoKX0scz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGM9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09T2JqZWN0KGUpfSx1PWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IEFycmF5XWB9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY2FsbChlKT09YFtvYmplY3QgRGF0ZV1gfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IFJlZ0V4cF1gfSxwPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSk9PWBbb2JqZWN0IEJvb2xlYW5dYH0sbT1mdW5jdGlvbihlKXtyZXR1cm4gZS09MCxlPT09ZX0saD1mdW5jdGlvbihlLHQpe3ZhciBuPXQmJmBwcm9jZXNzYGluIHQ/dC5wcm9jZXNzOnQ7cmV0dXJuIHR5cGVvZiBuPT1gZnVuY3Rpb25gP2Z1bmN0aW9uKHQscil7cmV0dXJuIG4odCxlLHIpfTplfSxnPXtjYW1lbGl6ZTppLGRlY2FtZWxpemU6byxwYXNjYWxpemU6YSxkZXBhc2NhbGl6ZTpvLGNhbWVsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgoaSx0KSxlKX0sZGVjYW1lbGl6ZUtleXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihoKG8sdCksZSx0KX0scGFzY2FsaXplS2V5czpmdW5jdGlvbihlLHQpe3JldHVybiBuKGgoYSx0KSxlKX0sZGVwYXNjYWxpemVLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjYW1lbGl6ZUtleXMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07ZS5leHBvcnRzP2UuZXhwb3J0cz1nOnQuaHVtcHM9Z30pKCRvKX0pKGVzKTt2YXIgdHM9ZXMuZXhwb3J0cyxucz1bYGdyYWRpZW50RmlsbGBdLHJzPVtgY2xhc3NgLGBzdHlsZWBdLGlzPVtgdHlwZWAsYHN0b3BzYCxgaWRgXTtmdW5jdGlvbiBhcyhlKXtyZXR1cm4gZS5zcGxpdChgO2ApLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltKCl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj10LmluZGV4T2YoYDpgKSxyPXRzLmNhbWVsaXplKHQuc2xpY2UoMCxuKSk7cmV0dXJuIGVbcl09dC5zbGljZShuKzEpLnRyaW0oKSxlfSx7fSl9ZnVuY3Rpb24gb3MoZSl7cmV0dXJuIGUuc3BsaXQoL1xzKy8pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPSEwLGV9LHt9KX1mdW5jdGlvbiBzcyhlLHQpe3JldHVybiBPKGBzdG9wYCxYKHtrZXk6YCR7dH0tJHtlLm9mZnNldH1gLG9mZnNldDplLm9mZnNldCwic3RvcC1jb2xvciI6ZS5jb2xvcn0sZS5vcGFjaXR5IT09dm9pZCAwJiZ7InN0b3Atb3BhY2l0eSI6ZS5vcGFjaXR5fSkpfWZ1bmN0aW9uIGNzKGUpe2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTt2YXIgdD0oZS5jaGlsZHJlbnx8W10pLm1hcChjcyk7cmV0dXJuIGUudGFnPT09YHBhdGhgJiZlLmF0dHJpYnV0ZXMmJmBmaWxsYGluIGUuYXR0cmlidXRlcz9YKFgoe30sZSkse30se2F0dHJpYnV0ZXM6WChYKHt9LGUuYXR0cmlidXRlcykse30se2ZpbGw6dm9pZCAwfSksY2hpbGRyZW46dH0pOlgoWCh7fSxlKSx7fSx7Y2hpbGRyZW46dH0pfWZ1bmN0aW9uIGxzKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fTtpZih0eXBlb2YgZT09YHN0cmluZ2ApcmV0dXJuIGU7dmFyIHI9dC5ncmFkaWVudEZpbGwsaT1yPT09dm9pZCAwP251bGw6cixhPVdvKHQsbnMpLG89aXx8YGZpbGxgaW4gbj9jcyhlKTplLHM9KG8uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGxzKGUse30se30pfSksYz1PYmplY3Qua2V5cyhvLmF0dHJpYnV0ZXN8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmF0dHJpYnV0ZXNbdF07c3dpdGNoKHQpe2Nhc2VgY2xhc3NgOmUuY2xhc3M9b3Mobik7YnJlYWs7Y2FzZWBzdHlsZWA6ZS5zdHlsZT1hcyhuKTticmVhaztkZWZhdWx0OmUuYXR0cnNbdF09bn1yZXR1cm4gZX0se2F0dHJzOnt9LGNsYXNzOnt9LHN0eWxlOnt9fSk7bi5jbGFzczt2YXIgbD1uLnN0eWxlLHU9bD09PXZvaWQgMD97fTpsLGQ9V28obixycyk7aWYoaSYmaS5pZCYmKGkudHlwZT09PWBsaW5lYXJgfHxpLnR5cGU9PT1gcmFkaWFsYCkpe3ZhciBmPWkudHlwZSxwPWkuc3RvcHMsbT1wPT09dm9pZCAwP1tdOnAsaD1pLmlkLGc9V28oaSxpcyksXz1PKGY9PT1gbGluZWFyYD9gbGluZWFyR3JhZGllbnRgOmByYWRpYWxHcmFkaWVudGAsWChYKHt9LGcpLHt9LHtpZDpofSksbS5tYXAoc3MpKTtyZXR1cm4gTyhvLnRhZyxYKFgoWChYKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOlgoWCh7fSxjLnN0eWxlKSx1KX0sYy5hdHRycyksZCkse30se2ZpbGw6YHVybCgjJHtofSlgfSksW19dLmNvbmNhdChLbyhzKSkpfXJldHVybiBPKGUudGFnLFgoWChYKHt9LGEpLHt9LHtjbGFzczpjLmNsYXNzLHN0eWxlOlgoWCh7fSxjLnN0eWxlKSx1KX0sYy5hdHRycyksZCkscyl9dmFyIHVzPSExO3RyeXt1cz0hMH1jYXRjaHt9ZnVuY3Rpb24gZHMoKXtpZighdXMmJmNvbnNvbGUmJnR5cGVvZiBjb25zb2xlLmVycm9yPT1gZnVuY3Rpb25gKXt2YXIgZTsoZT1jb25zb2xlKS5lcnJvci5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGZzKGUpe2lmKGUmJllvKGUpPT09YG9iamVjdGAmJmUucHJlZml4JiZlLmljb25OYW1lJiZlLmljb24pcmV0dXJuIGU7aWYoSW8uaWNvbilyZXR1cm4gSW8uaWNvbihlKTtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtpZihZbyhlKT09PWBvYmplY3RgJiZlLnByZWZpeCYmZS5pY29uTmFtZSlyZXR1cm4gZTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTIpcmV0dXJue3ByZWZpeDplWzBdLGljb25OYW1lOmVbMV19O2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm57cHJlZml4OmBmYXNgLGljb25OYW1lOmV9fXZhciBwcz1qKHtuYW1lOmBGb250QXdlc29tZUljb25gLHByb3BzOntib3JkZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmaXhlZFdpZHRoOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxpcDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITEsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVyblshMCwhMSxgaG9yaXpvbnRhbGAsYHZlcnRpY2FsYCxgYm90aGBdLmluZGV4T2YoZSk+LTF9fSxpY29uOnt0eXBlOltPYmplY3QsQXJyYXksU3RyaW5nXSxyZXF1aXJlZDohMH0sbWFzazp7dHlwZTpbT2JqZWN0LEFycmF5LFN0cmluZ10sZGVmYXVsdDpudWxsfSxtYXNrSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6bnVsbH0sbGlzdEl0ZW06e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwdWxsOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybltgcmlnaHRgLGBsZWZ0YF0uaW5kZXhPZihlKT4tMX19LHB1bHNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scm90YXRpb246e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuWzkwLDE4MCwyNzBdLmluZGV4T2YoTnVtYmVyLnBhcnNlSW50KGUsMTApKT4tMX19LHJvdGF0ZUJ5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3dhcE9wYWNpdHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGwsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybltgMnhzYCxgeHNgLGBzbWAsYGxnYCxgeGxgLGAyeGxgLGAxeGAsYDJ4YCxgM3hgLGA0eGAsYDV4YCxgNnhgLGA3eGAsYDh4YCxgOXhgLGAxMHhgXS5pbmRleE9mKGUpPi0xfX0sc3Bpbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRyYW5zZm9ybTp7dHlwZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdDpudWxsfSxzeW1ib2w6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsfSx0aXRsZUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0Om51bGx9LGludmVyc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxib3VuY2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaGFrZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGJlYXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmYWRlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYmVhdEZhZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxmbGFzaDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5QdWxzZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5SZXZlcnNlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sd2lkdGhBdXRvOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2FudmFzU3F1YXJlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sY2FudmFzUm9vbXk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxncmFkaWVudEZpbGw6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlLmlkIT1gc3RyaW5nYHx8IWUuaWQ/KGNvbnNvbGUud2FybihgRm9udEF3ZXNvbWVJY29uOiBncmFkaWVudEZpbGwuaWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKSwhMSk6ZS50eXBlIT09YGxpbmVhcmAmJmUudHlwZSE9PWByYWRpYWxgPyhjb25zb2xlLndhcm4oYEZvbnRBd2Vzb21lSWNvbjogZ3JhZGllbnRGaWxsLnR5cGUgbXVzdCBiZSAibGluZWFyIiBvciAicmFkaWFsImApLCExKTohMH19LGZsaXAzNjA6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxidXp6Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZmxvYXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxqZWxsbzp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNwaW5TbmFwOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3BpblNuYXA4Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc3dpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSx3YWc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sc2V0dXA6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmF0dHJzLHI9SShmdW5jdGlvbigpe3JldHVybiBmcyhlLmljb24pfSksaT1JKGZ1bmN0aW9uKCl7cmV0dXJuIFpvKGBjbGFzc2VzYCxRbyhlKSl9KSxhPUkoZnVuY3Rpb24oKXtyZXR1cm4gWm8oYHRyYW5zZm9ybWAsdHlwZW9mIGUudHJhbnNmb3JtPT1gc3RyaW5nYD9Jby50cmFuc2Zvcm0oZS50cmFuc2Zvcm0pOmUudHJhbnNmb3JtKX0pLG89SShmdW5jdGlvbigpe3JldHVybiBabyhgbWFza2AsZnMoZS5tYXNrKSl9KSxzPUkoZnVuY3Rpb24oKXt2YXIgdD1YKFgoWChYKHt9LGkudmFsdWUpLGEudmFsdWUpLG8udmFsdWUpLHt9LHtzeW1ib2w6ZS5zeW1ib2wsbWFza0lkOmUubWFza0lkfSk7cmV0dXJuIHQudGl0bGU9ZS50aXRsZSx0LnRpdGxlSWQ9ZS50aXRsZUlkLExvKHIudmFsdWUsdCl9KTtsKHMsZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIGRzKGBDb3VsZCBub3QgZmluZCBvbmUgb3IgbW9yZSBpY29uKHMpYCxyLnZhbHVlLG8udmFsdWUpfSx7aW1tZWRpYXRlOiEwfSksZS5ncmFkaWVudEZpbGwmJmUuc3ltYm9sJiZkcyhgZ3JhZGllbnRGaWxsIGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiBzeW1ib2wgaXMgdHJ1ZSBhbmQgd2lsbCBiZSBpZ25vcmVkYCk7dmFyIGM9SShmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlP2xzKHMudmFsdWUuYWJzdHJhY3RbMF0se2dyYWRpZW50RmlsbDplLnN5bWJvbD9udWxsOmUuZ3JhZGllbnRGaWxsfSxuKTpudWxsfSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMudmFsdWV9fX0pO2ooe25hbWU6YEZvbnRBd2Vzb21lTGF5ZXJzYCxwcm9wczp7Zml4ZWRXaWR0aDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxzZXR1cDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc2xvdHMscj1Gby5mYW1pbHlQcmVmaXgsaT1JKGZ1bmN0aW9uKCl7cmV0dXJuW2Ake3J9LWxheWVyc2BdLmNvbmNhdChLbyhlLmZpeGVkV2lkdGg/W2Ake3J9LWZ3YF06W10pKX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBPKGBkaXZgLHtjbGFzczppLnZhbHVlfSxuLmRlZmF1bHQ/bi5kZWZhdWx0KCk6W10pfX19KSxqKHtuYW1lOmBGb250QXdlc29tZUxheWVyc1RleHRgLHByb3BzOnt2YWx1ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpgYH0sdHJhbnNmb3JtOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGNvdW50ZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpudWxsLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bYGJvdHRvbS1sZWZ0YCxgYm90dG9tLXJpZ2h0YCxgdG9wLWxlZnRgLGB0b3AtcmlnaHRgXS5pbmRleE9mKGUpPi0xfX19LHNldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5hdHRycyxyPUZvLmZhbWlseVByZWZpeCxpPUkoZnVuY3Rpb24oKXtyZXR1cm4gWm8oYGNsYXNzZXNgLFtdLmNvbmNhdChLbyhlLmNvdW50ZXI/W2Ake3J9LWxheWVycy1jb3VudGVyYF06W10pLEtvKGUucG9zaXRpb24/W2Ake3J9LWxheWVycy0ke2UucG9zaXRpb259YF06W10pKSl9KSxhPUkoZnVuY3Rpb24oKXtyZXR1cm4gWm8oYHRyYW5zZm9ybWAsdHlwZW9mIGUudHJhbnNmb3JtPT1gc3RyaW5nYD9Jby50cmFuc2Zvcm0oZS50cmFuc2Zvcm0pOmUudHJhbnNmb3JtKX0pLG89SShmdW5jdGlvbigpe3ZhciB0PVJvKGUudmFsdWUudG9TdHJpbmcoKSxYKFgoe30sYS52YWx1ZSksaS52YWx1ZSkpLmFic3RyYWN0O3JldHVybiBlLmNvdW50ZXImJih0WzBdLmF0dHJpYnV0ZXMuY2xhc3M9dFswXS5hdHRyaWJ1dGVzLmNsYXNzLnJlcGxhY2UoYGZhLWxheWVycy10ZXh0YCxgYCkpLHRbMF19KSxzPUkoZnVuY3Rpb24oKXtyZXR1cm4gbHMoby52YWx1ZSx7fSxuKX0pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzLnZhbHVlfX19KTt2YXIgbXM9e3ByZWZpeDpgZmFiYCxpY29uTmFtZTpgZ2l0aHViYCxpY29uOls1MTIsNTEyLFtdLGBmMDliYCxgTTIxNi41IDM2Mi41Yy02Ni04LTExMi41LTU1LjUtMTEyLjUtMTE3IDAtMjUgOS01MiAyNC03MC02LjUtMTYuNS01LjUtNTEuNSAyLTY2IDIwLTIuNSA0NyA4IDYzIDIyLjUgMTktNiAzOS05IDYzLjUtOXM0NC41IDMgNjIuNSA4LjVjMTUuNS0xNCA0My0yNC41IDYzLTIyIDcgMTMuNSA4IDQ4LjUgMS41IDY1LjUgMTYgMTkgMjQuNSA0NC41IDI0LjUgNzAuNSAwIDYxLjUtNDYuNSAxMDgtMTEzLjUgMTE2LjUgMTcgMTEgMjguNSAzNSAyOC41IDYyLjVsMCA1MkMzMjMgNDkxLjUgMzM1LjUgNTAwIDM1MC41IDQ5NCA0NDEgNDU5LjUgNTEyIDM2OSA1MTIgMjU3IDUxMiAxMTUuNSAzOTcgMCAyNTUuNSAwUzAgMTE1LjUgMCAyNTdjMCAxMTEgNzAuNSAyMDMgMTY1LjUgMjM3LjUgMTMuNSA1IDI2LjUtNCAyNi41LTE3LjVsMC00MGMtNyAzLTE2IDUtMjQgNS0zMyAwLTUyLjUtMTgtNjYuNS01MS41LTUuNS0xMy41LTExLjUtMjEuNS0yMy0yMy02LS41LTgtMy04LTYgMC02IDEwLTEwLjUgMjAtMTAuNSAxNC41IDAgMjcgOSA0MCAyNy41IDEwIDE0LjUgMjAuNSAyMSAzMyAyMXMyMC41LTQuNSAzMi0xNmM4LjUtOC41IDE1LTE2IDIxLTIxemBdfSxocz1qKHtfX25hbWU6YEFsZXJ0YCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0sdmFyaWFudDp7fX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4obixyKT0+KHooKSxOKGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnRgLGNsYXNzOmR0KFAoZ2UpKFAodnMpKHt2YXJpYW50OmUudmFyaWFudH0pLHQuY2xhc3MpKSxyb2xlOmBhbGVydGB9LFtSKG4uJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxncz1qKHtfX25hbWU6YEFsZXJ0RGVzY3JpcHRpb25gLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHooKSxOKGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtZGVzY3JpcHRpb25gLGNsYXNzOmR0KFAoZ2UpKGB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbSB0ZXh0LWJhbGFuY2UgbWQ6dGV4dC1wcmV0dHkgWyZfcDpub3QoOmxhc3QtY2hpbGQpXTptYi00IFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCx0LmNsYXNzKSl9LFtSKGUuJHNsb3RzLGBkZWZhdWx0YCldLDIpKX19KSxfcz1qKHtfX25hbWU6YEFsZXJ0VGl0bGVgLHByb3BzOntjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHooKSxOKGBkaXZgLHsiZGF0YS1zbG90IjpgYWxlcnQtdGl0bGVgLGNsYXNzOmR0KFAoZ2UpKGBmb250LW1lZGl1bSBncm91cC1oYXMtWz5zdmddL2FsZXJ0OmNvbC1zdGFydC0yIGZvbnQtaGVhZGluZyBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZGAsdC5jbGFzcykpfSxbUihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksdnM9dihgZ3JpZCBnYXAtMC41IHJvdW5kZWQtbGcgYm9yZGVyIHB4LTIuNSBweS0yIHRleHQtbGVmdCB0ZXh0LXNtIGhhcy1kYXRhLVtzbG90PWFsZXJ0LWFjdGlvbl06cmVsYXRpdmUgaGFzLWRhdGEtW3Nsb3Q9YWxlcnQtYWN0aW9uXTpwci0xOCBoYXMtWz5zdmddOmdyaWQtY29scy1bYXV0b18xZnJdIGhhcy1bPnN2Z106Z2FwLXgtMiAqOltzdmddOnJvdy1zcGFuLTIgKjpbc3ZnXTp0cmFuc2xhdGUteS0wLjUgKjpbc3ZnXTp0ZXh0LWN1cnJlbnQgKjpbc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBncm91cC9hbGVydCByZWxhdGl2ZSB3LWZ1bGxgLHt2YXJpYW50czp7dmFyaWFudDp7ZGVmYXVsdDpgYmctY2FyZCB0ZXh0LWNhcmQtZm9yZWdyb3VuZGAsZGVzdHJ1Y3RpdmU6YHRleHQtZGVzdHJ1Y3RpdmUgYmctY2FyZCAqOmRhdGEtW3Nsb3Q9YWxlcnQtZGVzY3JpcHRpb25dOnRleHQtZGVzdHJ1Y3RpdmUvOTAgKjpbc3ZnXTp0ZXh0LWN1cnJlbnRgLHdhcm46YHRleHQtc3RhdHVzLXdhcm4gYmctY2FyZCAqOmRhdGEtW3Nsb3Q9YWxlcnQtZGVzY3JpcHRpb25dOnRleHQtc3RhdHVzLXdhcm4vOTAgKjpbc3ZnXTp0ZXh0LWN1cnJlbnRgfX0sZGVmYXVsdFZhcmlhbnRzOnt2YXJpYW50OmBkZWZhdWx0YH19KTtmdW5jdGlvbiB5cyhlKXtyZXR1cm4gdHlwZW9mIGU9PWBzdHJpbmdgP2AnJHtlfSdgOm5ldyBDcygpLnNlcmlhbGl6ZShlKX12YXIgYnM9YCBfLSw7OiE/LiciKClbXXt9QCovXFwmIyVcYF4rPD0+fH4kMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YCx4cz0oZnVuY3Rpb24oKXtsZXQgZT1uZXcgVWludDhBcnJheSgxMjgpO2ZvcihsZXQgdD0wO3Q8Njk7dCsrKWVbYnMuY2hhckNvZGVBdCh0KV09dCsxO2ZvcihsZXQgdD02NTt0PD05MDt0KyspZVt0XT1lW3QrMzJdO3JldHVybiBlfSkoKTtmdW5jdGlvbiBTcyhlLHQpe2lmKGU9PT10KXJldHVybiAwO2xldCBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKSxyPTA7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG49ZS5jaGFyQ29kZUF0KGkpLGE9dC5jaGFyQ29kZUF0KGkpO2lmKG49PT1hKWNvbnRpbnVlO2xldCBvPW48MTI4JiZ4c1tuXT94c1tuXTpuKzEyOCxzPWE8MTI4JiZ4c1thXT94c1thXTphKzEyODtpZihvIT09cylyZXR1cm4gbzxzPy0xOjE7cj09PTAmJihyPW4+YT8tMToxKX1yZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aD9yOmUubGVuZ3RoPHQubGVuZ3RoPy0xOjF9dmFyIENzPShmdW5jdGlvbigpe2NsYXNzIGV7I2U9bmV3IE1hcDtjb21wYXJlKGUsdCl7bGV0IG49dHlwZW9mIGUscj10eXBlb2YgdDtyZXR1cm4gbj09PWBzdHJpbmdgJiZyPT09YHN0cmluZ2A/U3MoZSx0KTpuPT09YG51bWJlcmAmJnI9PT1gbnVtYmVyYD9lLXQ6U3ModGhpcy5zZXJpYWxpemUoZSwhMCksdGhpcy5zZXJpYWxpemUodCwhMCkpfXNlcmlhbGl6ZShlLHQpe2lmKGU9PT1udWxsKXJldHVybmBudWxsYDtzd2l0Y2godHlwZW9mIGUpe2Nhc2Vgc3RyaW5nYDpyZXR1cm4gdD9lOmAnJHtlfSdgO2Nhc2VgYmlnaW50YDpyZXR1cm5gJHtlfW5gO2Nhc2Vgb2JqZWN0YDpyZXR1cm4gdGhpcy4kb2JqZWN0KGUpO2Nhc2VgZnVuY3Rpb25gOnJldHVybiB0aGlzLiRmdW5jdGlvbihlKX1yZXR1cm4gU3RyaW5nKGUpfXNlcmlhbGl6ZU9iamVjdChlKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7aWYodCE9PWBbb2JqZWN0IE9iamVjdF1gKXJldHVybiB0aGlzLnNlcmlhbGl6ZUJ1aWx0SW5UeXBlKHQubGVuZ3RoPDEwP2B1bmtub3duOiR7dH1gOnQuc2xpY2UoOCwtMSksZSk7bGV0IG49ZS5jb25zdHJ1Y3RvcixyPW49PT1PYmplY3R8fG49PT12b2lkIDA/YGA6bi5uYW1lO2lmKHIhPT1gYCYmZ2xvYmFsVGhpc1tyXT09PW4pcmV0dXJuIHRoaXMuc2VyaWFsaXplQnVpbHRJblR5cGUocixlKTtpZihgdG9KU09OYGluIGUmJnR5cGVvZiBlLnRvSlNPTj09YGZ1bmN0aW9uYCl7bGV0IHQ9ZS50b0pTT04oKTtyZXR1cm4gcisodHlwZW9mIHQ9PWBvYmplY3RgJiZ0P3RoaXMuJG9iamVjdCh0KTpgKCR7dGhpcy5zZXJpYWxpemUodCl9KWApfWxldCBpPU9iamVjdC5rZXlzKGUpLnNvcnQoU3MpLGE9YCR7cn17YDtmb3IobGV0IHQ9MDt0PGkubGVuZ3RoO3QrKyl7bGV0IG49aVt0XTthKz1gJHtufToke3RoaXMuc2VyaWFsaXplKGVbbl0pfWAsdDxpLmxlbmd0aC0xJiYoYSs9YCxgKX1yZXR1cm4gYStgfWB9c2VyaWFsaXplQnVpbHRJblR5cGUoZSx0KXtsZXQgbj10aGlzW2AkYCtlXTtpZihuKXJldHVybiBuLmNhbGwodGhpcyx0KTtpZih0eXBlb2YgdC5lbnRyaWVzPT1gZnVuY3Rpb25gKXJldHVybiB0aGlzLnNlcmlhbGl6ZU9iamVjdEVudHJpZXMoZSx0LmVudHJpZXMoKSk7dGhyb3cgRXJyb3IoYENhbm5vdCBzZXJpYWxpemUgJHtlfWApfXNlcmlhbGl6ZU9iamVjdEVudHJpZXMoZSx0KXtsZXQgbj1BcnJheS5mcm9tKHQpLnNvcnQoKGUsdCk9PnRoaXMuY29tcGFyZShlWzBdLHRbMF0pKSxyPWAke2V9e2A7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldFt0LGldPW5bZV07cis9YCR7dGhpcy5zZXJpYWxpemUodCwhMCl9OiR7dGhpcy5zZXJpYWxpemUoaSl9YCxlPG4ubGVuZ3RoLTEmJihyKz1gLGApfXJldHVybiByK2B9YH0kb2JqZWN0KGUpe2xldCB0PXRoaXMuI2UuZ2V0KGUpO3JldHVybiB0PT09dm9pZCAwJiYodGhpcy4jZS5zZXQoZSxgIyR7dGhpcy4jZS5zaXplfWApLHQ9dGhpcy5zZXJpYWxpemVPYmplY3QoZSksdGhpcy4jZS5zZXQoZSx0KSksdH0kZnVuY3Rpb24oZSl7bGV0IHQ9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk7cmV0dXJuIHQuc2xpY2UoLTE1KT09PWBbbmF0aXZlIGNvZGVdIH1gP2Ake2UubmFtZXx8YGB9KClbbmF0aXZlXWA6YCR7ZS5uYW1lfSgke2UubGVuZ3RofSkke3QucmVwbGFjZSgvXHMqXG5ccyovZyxgYCl9YH0kQXJyYXkoZSl7bGV0IHQ9YFtgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPXRoaXMuc2VyaWFsaXplKGVbbl0pLG48ZS5sZW5ndGgtMSYmKHQrPWAsYCk7cmV0dXJuIHQrYF1gfSREYXRlKGUpe3RyeXtyZXR1cm5gRGF0ZSgke2UudG9JU09TdHJpbmcoKX0pYH1jYXRjaHtyZXR1cm5gRGF0ZShudWxsKWB9fSRBcnJheUJ1ZmZlcihlKXtyZXR1cm5gQXJyYXlCdWZmZXJbJHtuZXcgVWludDhBcnJheShlKS5qb2luKGAsYCl9XWB9JFNldChlKXtyZXR1cm5gU2V0JHt0aGlzLiRBcnJheShBcnJheS5mcm9tKGUpLnNvcnQoKGUsdCk9PnRoaXMuY29tcGFyZShlLHQpKSl9YH0kTWFwKGUpe3JldHVybiB0aGlzLnNlcmlhbGl6ZU9iamVjdEVudHJpZXMoYE1hcGAsZS5lbnRyaWVzKCkpfX1mb3IobGV0IHQgb2ZbYEVycm9yYCxgUmVnRXhwYCxgVVJMYF0pZS5wcm90b3R5cGVbYCRgK3RdPWZ1bmN0aW9uKGUpe3JldHVybmAke3R9KCR7ZX0pYH07Zm9yKGxldCB0IG9mW2BJbnQ4QXJyYXlgLGBVaW50OEFycmF5YCxgVWludDhDbGFtcGVkQXJyYXlgLGBJbnQxNkFycmF5YCxgVWludDE2QXJyYXlgLGBJbnQzMkFycmF5YCxgVWludDMyQXJyYXlgLGBGbG9hdDMyQXJyYXlgLGBGbG9hdDY0QXJyYXlgXSllLnByb3RvdHlwZVtgJGArdF09ZnVuY3Rpb24oZSl7cmV0dXJuYCR7dH1bJHtlLmpvaW4oYCxgKX1dYH07Zm9yKGxldCB0IG9mW2BCaWdJbnQ2NEFycmF5YCxgQmlnVWludDY0QXJyYXlgXSllLnByb3RvdHlwZVtgJGArdF09ZnVuY3Rpb24oZSl7cmV0dXJuYCR7dH1bJHtlLmpvaW4oYG4sYCl9JHtlLmxlbmd0aD4wP2BuYDpgYH1dYH07cmV0dXJuIGV9KSgpO2Z1bmN0aW9uIHdzKGUsdCl7cmV0dXJuIGU9PT10fHx5cyhlKT09PXlzKHQpfWZ1bmN0aW9uIFRzKGUsdD0tMS8wLG49MS8wKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heCh0LGUpKX1mdW5jdGlvbiBaKCl7bGV0IGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihlPT1udWxsKXJldHVybiBudWxsO2Zvcig7ZSE9bnVsbCYmZS5zaGFkb3dSb290IT1udWxsJiZlLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCE9bnVsbDspZT1lLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtyZXR1cm4gZX1mdW5jdGlvbiBFcyhlLHQsbil7bGV0IHI9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxpPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTt0JiZyLmFkZEV2ZW50TGlzdGVuZXIoZSx0LHtvbmNlOiEwfSksci5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIERzKGUpe3JldHVybiBlPT1udWxsfXZhciBRPUxlKHtsYXllcnNSb290Om5ldyBTZXQsbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6bmV3IFNldCxvcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzOnZvaWQgMCxicmFuY2hlczpuZXcgU2V0fSk7ZnVuY3Rpb24gT3MoZSl7aWYodHlwZW9mIGUhPWBvYmplY3RgfHwhZSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHQhPT1udWxsJiZ0IT09T2JqZWN0LnByb3RvdHlwZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09bnVsbHx8U3ltYm9sLml0ZXJhdG9yIGluIGU/ITE6U3ltYm9sLnRvU3RyaW5nVGFnIGluIGU/T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09YFtvYmplY3QgTW9kdWxlXWA6ITB9ZnVuY3Rpb24ga3MoZSx0LG49YC5gLHIpe2lmKCFPcyh0KSlyZXR1cm4ga3MoZSx7fSxuLHIpO2xldCBpPXsuLi50fTtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXMoZSkpe2lmKHQ9PT1gX19wcm90b19fYHx8dD09PWBjb25zdHJ1Y3RvcmApY29udGludWU7bGV0IGE9ZVt0XTthIT1udWxsJiYociYmcihpLHQsYSxuKXx8KGlbdF09QXJyYXkuaXNBcnJheShhKSYmQXJyYXkuaXNBcnJheShpW3RdKT9bLi4uYSwuLi5pW3RdXTpPcyhhKSYmT3MoaVt0XSk/a3MoYSxpW3RdLChuP2Ake259LmA6YGApK3QudG9TdHJpbmcoKSxyKTphKSl9cmV0dXJuIGl9ZnVuY3Rpb24gQXMoZSl7cmV0dXJuKC4uLnQpPT50LnJlZHVjZSgodCxuKT0+a3ModCxuLGBgLGUpLHt9KX12YXIganM9QXMoKSxNcz1zZSgoKT0+e2xldCBlPUIobmV3IE1hcCksdD1CKCksbj1JKCgpPT57Zm9yKGxldCB0IG9mIGUudmFsdWUudmFsdWVzKCkpaWYodClyZXR1cm4hMDtyZXR1cm4hMX0pLGk9cih7c2Nyb2xsQm9keTpCKCEwKX0pLGE9bnVsbCxvPSgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9YGAsZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5SaWdodD1gYCxRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPWBgKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz10LnZhbHVlPz9gYCx1JiZhPy4oKSx0LnZhbHVlPXZvaWQgMH07cmV0dXJuIGwobiwoZSxyKT0+e2lmKCFmdClyZXR1cm47aWYoIWUpe3ImJm8oKTtyZXR1cm59dC52YWx1ZT09PXZvaWQgMCYmKHQudmFsdWU9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyk7bGV0IHM9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGM9e3BhZGRpbmc6cyxtYXJnaW46MH0sbD1pLnNjcm9sbEJvZHk/LnZhbHVlP3R5cGVvZiBpLnNjcm9sbEJvZHkudmFsdWU9PWBvYmplY3RgP2pzKHtwYWRkaW5nOmkuc2Nyb2xsQm9keS52YWx1ZS5wYWRkaW5nPT09ITA/czppLnNjcm9sbEJvZHkudmFsdWUucGFkZGluZyxtYXJnaW46aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbj09PSEwP3M6aS5zY3JvbGxCb2R5LnZhbHVlLm1hcmdpbn0sYyk6Yzp7cGFkZGluZzowLG1hcmdpbjowfTtzPjAmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10eXBlb2YgbC5wYWRkaW5nPT1gbnVtYmVyYD9gJHtsLnBhZGRpbmd9cHhgOlN0cmluZyhsLnBhZGRpbmcpLGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luUmlnaHQ9dHlwZW9mIGwubWFyZ2luPT1gbnVtYmVyYD9gJHtsLm1hcmdpbn1weGA6U3RyaW5nKGwubWFyZ2luKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0tc2Nyb2xsYmFyLXdpZHRoYCxgJHtzfXB4YCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1gaGlkZGVuYCksdSYmKGE9bmUoZG9jdW1lbnQsYHRvdWNobW92ZWAsZT0+RnMoZSkse3Bhc3NpdmU6ITF9KSksQSgoKT0+e24udmFsdWUmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9YGhpZGRlbmApfSl9LHtpbW1lZGlhdGU6ITAsZmx1c2g6YHN5bmNgfSksZX0pO2Z1bmN0aW9uIE5zKGUpe2xldCB0PU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDcpLG49TXMoKTtuLnZhbHVlLnNldCh0LGU/PyExKTtsZXQgcj1JKHtnZXQ6KCk9Pm4udmFsdWUuZ2V0KHQpPz8hMSxzZXQ6ZT0+bi52YWx1ZS5zZXQodCxlKX0pO3JldHVybiBwZSgoKT0+e24udmFsdWUuZGVsZXRlKHQpfSkscn1mdW5jdGlvbiBQcyhlKXtsZXQgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKTtpZih0Lm92ZXJmbG93WD09PWBzY3JvbGxgfHx0Lm92ZXJmbG93WT09PWBzY3JvbGxgfHx0Lm92ZXJmbG93WD09PWBhdXRvYCYmZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofHx0Lm92ZXJmbG93WT09PWBhdXRvYCYmZS5jbGllbnRIZWlnaHQ8ZS5zY3JvbGxIZWlnaHQpcmV0dXJuITA7e2xldCB0PWUucGFyZW50Tm9kZTtyZXR1cm4hKHQgaW5zdGFuY2VvZiBFbGVtZW50KXx8dC50YWdOYW1lPT09YEJPRFlgPyExOlBzKHQpfX1mdW5jdGlvbiBGcyhlKXtsZXQgdD1lfHx3aW5kb3cuZXZlbnQsbj10LnRhcmdldDtyZXR1cm4gbiBpbnN0YW5jZW9mIEVsZW1lbnQmJlBzKG4pPyExOnQudG91Y2hlcy5sZW5ndGg+MXx8KHQucHJldmVudERlZmF1bHQmJnQuY2FuY2VsYWJsZSYmdC5wcmV2ZW50RGVmYXVsdCgpLCExKX12YXIgSXM9MDtmdW5jdGlvbiBMcygpe0woZT0+e2lmKCFmdClyZXR1cm47bGV0IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcmVrYS1mb2N1cy1ndWFyZF1gKTtkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChgYWZ0ZXJiZWdpbmAsdFswXT8/UnMoKSksZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoYGJlZm9yZWVuZGAsdFsxXT8/UnMoKSksSXMrKyxlKCgpPT57SXM9PT0xJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1yZWthLWZvY3VzLWd1YXJkXWApLmZvckVhY2goZT0+ZS5yZW1vdmUoKSksSXMtLX0pfSl9ZnVuY3Rpb24gUnMoKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBzcGFuYCk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKGBkYXRhLXJla2EtZm9jdXMtZ3VhcmRgLGBgKSxlLnRhYkluZGV4PTAsZS5zdHlsZS5vdXRsaW5lPWBub25lYCxlLnN0eWxlLm9wYWNpdHk9YDBgLGUuc3R5bGUucG9zaXRpb249YGZpeGVkYCxlLnN0eWxlLnBvaW50ZXJFdmVudHM9YG5vbmVgLGV9ZnVuY3Rpb24genMoZSl7cmV0dXJuIEkoKCk9PiFHZShlKXx8ISFEKGUpPy5jbG9zZXN0KGBmb3JtYCkpfXZhciBCcz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PmB1YD9udWxsOihBcnJheS5pc0FycmF5KGUpP2VbMF06ZSkub3duZXJEb2N1bWVudC5ib2R5fSxWcz1uZXcgV2Vha01hcCxIcz1uZXcgV2Vha01hcCxVcz17fSxXcz0wLEdzPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYoZS5ob3N0fHxHcyhlLnBhcmVudE5vZGUpKX0sS3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7aWYoZS5jb250YWlucyh0KSlyZXR1cm4gdDt2YXIgbj1Hcyh0KTtyZXR1cm4gbiYmZS5jb250YWlucyhuKT9uOihjb25zb2xlLmVycm9yKGBhcmlhLWhpZGRlbmAsdCxgaW4gbm90IGNvbnRhaW5lZCBpbnNpZGVgLGUsYC4gRG9pbmcgbm90aGluZ2ApLG51bGwpfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pfSxxcz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1Lcyh0LEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pO1VzW25dfHwoVXNbbl09bmV3IFdlYWtNYXApO3ZhciBhPVVzW25dLG89W10scz1uZXcgU2V0LGM9bmV3IFNldChpKSxsPWZ1bmN0aW9uKGUpeyFlfHxzLmhhcyhlKXx8KHMuYWRkKGUpLGwoZS5wYXJlbnROb2RlKSl9O2kuZm9yRWFjaChsKTt2YXIgdT1mdW5jdGlvbihlKXshZXx8Yy5oYXMoZSl8fEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZS5jaGlsZHJlbixmdW5jdGlvbihlKXtpZihzLmhhcyhlKSl1KGUpO2Vsc2UgdHJ5e3ZhciB0PWUuZ2V0QXR0cmlidXRlKHIpLGk9dCE9PW51bGwmJnQhPT1gZmFsc2VgLGM9KFZzLmdldChlKXx8MCkrMSxsPShhLmdldChlKXx8MCkrMTtWcy5zZXQoZSxjKSxhLnNldChlLGwpLG8ucHVzaChlKSxjPT09MSYmaSYmSHMuc2V0KGUsITApLGw9PT0xJiZlLnNldEF0dHJpYnV0ZShuLGB0cnVlYCksaXx8ZS5zZXRBdHRyaWJ1dGUocixgdHJ1ZWApfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoYGFyaWEtaGlkZGVuOiBjYW5ub3Qgb3BlcmF0ZSBvbiBgLGUsdCl9fSl9O3JldHVybiB1KHQpLHMuY2xlYXIoKSxXcysrLGZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVZzLmdldChlKS0xLGk9YS5nZXQoZSktMTtWcy5zZXQoZSx0KSxhLnNldChlLGkpLHR8fChIcy5oYXMoZSl8fGUucmVtb3ZlQXR0cmlidXRlKHIpLEhzLmRlbGV0ZShlKSksaXx8ZS5yZW1vdmVBdHRyaWJ1dGUobil9KSxXcy0tLFdzfHwoVnM9bmV3IFdlYWtNYXAsVnM9bmV3IFdlYWtNYXAsSHM9bmV3IFdlYWtNYXAsVXM9e30pfX0sSnM9ZnVuY3Rpb24oZSx0LG4pe249PT12b2lkIDAmJihuPWBkYXRhLWFyaWEtaGlkZGVuYCk7dmFyIHI9QXJyYXkuZnJvbShBcnJheS5pc0FycmF5KGUpP2U6W2VdKSxpPXR8fEJzKGUpO3JldHVybiBpPyhyLnB1c2guYXBwbHkocixBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbChgW2FyaWEtbGl2ZV0sIHNjcmlwdGApKSkscXMocixpLG4sYGFyaWEtaGlkZGVuYCkpOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fTtmdW5jdGlvbiBZcyhlKXtsZXQgdDtsKCgpPT5EKGUpLGU9PntsZXQgbj0hMTt0cnl7bj0hIWU/LmNsb3Nlc3QoYFtwb3BvdmVyXTpub3QoOnBvcG92ZXItb3BlbilgKX1jYXRjaHt9ZSYmIW4/dD1KcyhlKTp0JiZ0KCl9KSxrZSgoKT0+e3QmJnQoKX0pfWZ1bmN0aW9uIFhzKGUpe2xldCB0PUIoKSxuPUkoKCk9PnQudmFsdWU/LndpZHRoPz8wKSxyPUkoKCk9PnQudmFsdWU/LmhlaWdodD8/MCksaTtyZXR1cm4gdmUoKCk9PntsZXQgbj1EKGUpO24/KHQudmFsdWU9e3dpZHRoOm4ub2Zmc2V0V2lkdGgsaGVpZ2h0Om4ub2Zmc2V0SGVpZ2h0fSxpPW5ldyBSZXNpemVPYnNlcnZlcihlPT57aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm47bGV0IHI9ZVswXSxpLGE7aWYoYGJvcmRlckJveFNpemVgaW4gcil7bGV0IGU9ci5ib3JkZXJCb3hTaXplLHQ9QXJyYXkuaXNBcnJheShlKT9lWzBdOmU7aT10LmlubGluZVNpemUsYT10LmJsb2NrU2l6ZX1lbHNlIGk9bi5vZmZzZXRXaWR0aCxhPW4ub2Zmc2V0SGVpZ2h0O3QudmFsdWU9e3dpZHRoOmksaGVpZ2h0OmF9fSksaS5vYnNlcnZlKG4se2JveDpgYm9yZGVyLWJveGB9KSk6dC52YWx1ZT12b2lkIDB9KSxrZSgoKT0+e2k/LmRpc2Nvbm5lY3QoKSxpPXZvaWQgMH0pLHt3aWR0aDpuLGhlaWdodDpyfX1mdW5jdGlvbiBacyhlLHQpe2xldCBuPUIoZSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdFtuLnZhbHVlXVtlXT8/bi52YWx1ZX1yZXR1cm57c3RhdGU6bixkaXNwYXRjaDplPT57bi52YWx1ZT1yKGUpfX19ZnVuY3Rpb24gUXMoZSl7bGV0IHQ9eShgYCwxZTMpO3JldHVybntzZWFyY2g6dCxoYW5kbGVUeXBlYWhlYWRTZWFyY2g6KG4scik9PntpZih0LnZhbHVlKz1uLGUpZShuKTtlbHNle2xldCBlPVooKSxuPXIubWFwKGU9Pih7Li4uZSx0ZXh0VmFsdWU6ZS52YWx1ZT8udGV4dFZhbHVlPz9lLnJlZi50ZXh0Q29udGVudD8udHJpbSgpPz9gYH0pKSxpPW4uZmluZCh0PT50LnJlZj09PWUpLGE9ZWMobi5tYXAoZT0+ZS50ZXh0VmFsdWUpLHQudmFsdWUsaT8udGV4dFZhbHVlKSxvPW4uZmluZChlPT5lLnRleHRWYWx1ZT09PWEpO3JldHVybiBvJiZvLnJlZi5mb2N1cygpLG8/LnJlZn19LHJlc2V0VHlwZWFoZWFkOigpPT57dC52YWx1ZT1gYH19fWZ1bmN0aW9uICRzKGUsdCl7cmV0dXJuIGUubWFwKChuLHIpPT5lWyh0K3IpJWUubGVuZ3RoXSl9ZnVuY3Rpb24gZWMoZSx0LG4pe2xldCByPXQubGVuZ3RoPjEmJkFycmF5LmZyb20odCkuZXZlcnkoZT0+ZT09PXRbMF0pP3RbMF06dCxpPW4/ZS5pbmRleE9mKG4pOi0xLGE9JHMoZSxNYXRoLm1heChpLDApKTtyLmxlbmd0aD09PTEmJihhPWEuZmlsdGVyKGU9PmUhPT1uKSk7bGV0IG89YS5maW5kKGU9PmUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHIudG9Mb3dlckNhc2UoKSkpO3JldHVybiBvPT09bj92b2lkIDA6b31mdW5jdGlvbiB0YyhlLHQpe2xldCBuPUIoe30pLHI9Qihgbm9uZWApLGk9QihlKSxhPWUudmFsdWU/YG1vdW50ZWRgOmB1bm1vdW50ZWRgLG8scz10LnZhbHVlPy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Pz9jLHtzdGF0ZTp1LGRpc3BhdGNoOmR9PVpzKGEse21vdW50ZWQ6e1VOTU9VTlQ6YHVubW91bnRlZGAsQU5JTUFUSU9OX09VVDpgdW5tb3VudFN1c3BlbmRlZGB9LHVubW91bnRTdXNwZW5kZWQ6e01PVU5UOmBtb3VudGVkYCxBTklNQVRJT05fRU5EOmB1bm1vdW50ZWRgfSx1bm1vdW50ZWQ6e01PVU5UOmBtb3VudGVkYH19KSxmPWU9PntpZihmdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KGUse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pO3QudmFsdWU/LmRpc3BhdGNoRXZlbnQobil9fTtsKGUsYXN5bmMoZSxpKT0+e2xldCBhPWkhPT1lO2lmKGF3YWl0IEEoKSxhKXtsZXQgYT1yLnZhbHVlLG89bmModC52YWx1ZSk7ZT8oZChgTU9VTlRgKSxmKGBlbnRlcmApLG89PT1gbm9uZWAmJmYoYGFmdGVyLWVudGVyYCkpOm89PT1gbm9uZWB8fG89PT1gdW5kZWZpbmVkYHx8bi52YWx1ZT8uZGlzcGxheT09PWBub25lYD8oZChgVU5NT1VOVGApLGYoYGxlYXZlYCksZihgYWZ0ZXItbGVhdmVgKSk6aSYmYSE9PW8/KGQoYEFOSU1BVElPTl9PVVRgKSxmKGBsZWF2ZWApKTooZChgVU5NT1VOVGApLGYoYGFmdGVyLWxlYXZlYCkpfX0se2ltbWVkaWF0ZTohMH0pO2xldCBwPWU9PntpZihlLnRhcmdldCE9PXQudmFsdWUpcmV0dXJuO2xldCBuPW5jKHQudmFsdWUpLHI9bi5pbmNsdWRlcyhDU1MuZXNjYXBlKGUuYW5pbWF0aW9uTmFtZSkpLGE9dS52YWx1ZT09PWBtb3VudGVkYD9gZW50ZXJgOmBsZWF2ZWA7aWYociYmKGYoYGFmdGVyLSR7YX1gKSxkKGBBTklNQVRJT05fRU5EYCksIWkudmFsdWUpKXtsZXQgZT10LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlO3QudmFsdWUuc3R5bGUuYW5pbWF0aW9uRmlsbE1vZGU9YGZvcndhcmRzYCxvPXM/LnNldFRpbWVvdXQoKCk9Pnt0LnZhbHVlPy5zdHlsZS5hbmltYXRpb25GaWxsTW9kZT09PWBmb3J3YXJkc2AmJih0LnZhbHVlLnN0eWxlLmFuaW1hdGlvbkZpbGxNb2RlPWUpfSl9bj09PWBub25lYCYmZChgQU5JTUFUSU9OX0VORGApfSxtPWU9PntlLnRhcmdldD09PXQudmFsdWUmJihyLnZhbHVlPW5jKHQudmFsdWUpKX0saD1sKHQsKGUsdCk9PntlPyhuLnZhbHVlPWdldENvbXB1dGVkU3R5bGUoZSksZS5hZGRFdmVudExpc3RlbmVyKGBhbmltYXRpb25zdGFydGAsbSksZS5hZGRFdmVudExpc3RlbmVyKGBhbmltYXRpb25jYW5jZWxgLHApLGUuYWRkRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxwKSk6KGQoYEFOSU1BVElPTl9FTkRgKSxvIT09dm9pZCAwJiZzPy5jbGVhclRpbWVvdXQobyksdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLG0pLHQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmNhbmNlbGAscCksdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uZW5kYCxwKSl9LHtpbW1lZGlhdGU6ITB9KSxnPWwodSwoKT0+e2xldCBlPW5jKHQudmFsdWUpO3IudmFsdWU9dS52YWx1ZT09PWBtb3VudGVkYD9lOmBub25lYH0pO3JldHVybiBrZSgoKT0+e2goKSxnKCksdC52YWx1ZSYmKHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uc3RhcnRgLG0pLHQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgYW5pbWF0aW9uY2FuY2VsYCxwKSx0LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYGFuaW1hdGlvbmVuZGAscCkpLG8hPT12b2lkIDAmJnM/LmNsZWFyVGltZW91dChvKX0pLHtpc1ByZXNlbnQ6SSgoKT0+W2Btb3VudGVkYCxgdW5tb3VudFN1c3BlbmRlZGBdLmluY2x1ZGVzKHUudmFsdWUpKX19ZnVuY3Rpb24gbmMoZSl7cmV0dXJuIGUmJmdldENvbXB1dGVkU3R5bGUoZSkuYW5pbWF0aW9uTmFtZXx8YG5vbmVgfXZhciByYz1qKHtuYW1lOmBQcmVzZW5jZWAscHJvcHM6e3ByZXNlbnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMH0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFufX0sc2xvdHM6e30sc2V0dXAoZSx7c2xvdHM6dCxleHBvc2U6bn0pe2xldHtwcmVzZW50OnIsZm9yY2VNb3VudDppfT0kZShlKSxhPUIoKSx7aXNQcmVzZW50Om99PXRjKHIsYSk7bih7cHJlc2VudDpvfSk7bGV0IHM9dC5kZWZhdWx0KHtwcmVzZW50Om8udmFsdWV9KTtzPUJlKHN8fFtdKTtsZXQgYz1mZSgpO2lmKHMmJnM/Lmxlbmd0aD4xKXtsZXQgZT1jPy5wYXJlbnQ/LnR5cGUubmFtZT9gPCR7Yy5wYXJlbnQudHlwZS5uYW1lfSAvPmA6YGNvbXBvbmVudGA7dGhyb3cgRXJyb3IoW2BEZXRlY3RlZCBhbiBpbnZhbGlkIGNoaWxkcmVuIGZvciBcYCR7ZX1cYCBmb3IgIFxgUHJlc2VuY2VcYCBjb21wb25lbnQuYCxgYCwiTm90ZTogUHJlc2VuY2Ugd29ya3Mgc2ltaWxhcmx5IHRvIGB2LWlmYCBkaXJlY3RseSwgYnV0IGl0IHdhaXRzIGZvciBhbmltYXRpb24vdHJhbnNpdGlvbiB0byBmaW5pc2hlZCBiZWZvcmUgdW5tb3VudGluZy4gU28gaXQgZXhwZWN0IG9ubHkgb25lIGRpcmVjdCBjaGlsZCBvZiB2YWxpZCBWTm9kZSB0eXBlLiIsYFlvdSBjYW4gYXBwbHkgYSBmZXcgc29sdXRpb25zOmAsWyJQcm92aWRlIGEgc2luZ2xlIGNoaWxkIGVsZW1lbnQgc28gdGhhdCBgcHJlc2VuY2VgIGRpcmVjdGl2ZSBhdHRhY2ggY29ycmVjdGx5LiIsYEVuc3VyZSB0aGUgZmlyc3QgY2hpbGQgaXMgYW4gYWN0dWFsIGVsZW1lbnQgaW5zdGVhZCBvZiBhIHJhdyB0ZXh0IG5vZGUgb3IgY29tbWVudCBub2RlLmBdLm1hcChlPT5gICAtICR7ZX1gKS5qb2luKGAKYCldLmpvaW4oYApgKSl9cmV0dXJuKCk9PmkudmFsdWV8fHIudmFsdWV8fG8udmFsdWU/Tyh0LmRlZmF1bHQoe3ByZXNlbnQ6by52YWx1ZX0pWzBdLHtyZWY6ZT0+e2xldCB0PUQoZSk7cmV0dXJuIHQ/Lmhhc0F0dHJpYnV0ZT09PXZvaWQgMHx8KHQ/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9hLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6YS52YWx1ZT10KSx0fX0pOm51bGx9fSk7ZnVuY3Rpb24gaWMoKXtsZXQgZT1CKCk7cmV0dXJue3ByaW1pdGl2ZUVsZW1lbnQ6ZSxjdXJyZW50RWxlbWVudDpJKCgpPT5bYCN0ZXh0YCxgI2NvbW1lbnRgXS5pbmNsdWRlcyhlLnZhbHVlPy4kZWwubm9kZU5hbWUpP2UudmFsdWU/LiRlbC5uZXh0RWxlbWVudFNpYmxpbmc6RChlKSl9fXZhciBhYz1gZGlzbWlzc2FibGVMYXllci5wb2ludGVyRG93bk91dHNpZGVgLG9jPWBkaXNtaXNzYWJsZUxheWVyLmZvY3VzT3V0c2lkZWA7ZnVuY3Rpb24gc2MoZSx0KXtpZighKHQgaW5zdGFuY2VvZiBFbGVtZW50KSlyZXR1cm4hMTtsZXQgbj10LmNsb3Nlc3QoYFtkYXRhLWRpc21pc3NhYmxlLWxheWVyXWApLHI9ZS5kYXRhc2V0LmRpc21pc3NhYmxlTGF5ZXI9PT1gYD9lOmUucXVlcnlTZWxlY3RvcihgW2RhdGEtZGlzbWlzc2FibGUtbGF5ZXJdYCksaT1BcnJheS5mcm9tKGUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1kaXNtaXNzYWJsZS1sYXllcl1gKSk7cmV0dXJuISEobiYmKHI9PT1ufHxpLmluZGV4T2Yocik8aS5pbmRleE9mKG4pKSl9ZnVuY3Rpb24gY2MoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUIoITEpLGE9QigoKT0+e30pO3JldHVybiBMKG89PntpZighZnR8fCFHZShuKSlyZXR1cm47bGV0IHM9YXN5bmMgbj0+e2xldCBvPW4udGFyZ2V0O2lmKCEoIXQ/LnZhbHVlfHwhbykpe2lmKHNjKHQudmFsdWUsbykpe2kudmFsdWU9ITE7cmV0dXJufWlmKG4udGFyZ2V0JiYhaS52YWx1ZSl7bGV0IHQ9e29yaWdpbmFsRXZlbnQ6bn07ZnVuY3Rpb24gaSgpe0VzKGFjLGUsdCl9bi5wb2ludGVyVHlwZT09PWB0b3VjaGA/KHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2xpY2tgLGEudmFsdWUpLGEudmFsdWU9aSxyLmFkZEV2ZW50TGlzdGVuZXIoYGNsaWNrYCxhLnZhbHVlLHtvbmNlOiEwfSkpOmkoKX1lbHNlIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2xpY2tgLGEudmFsdWUpO2kudmFsdWU9ITF9fSxjPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57ci5hZGRFdmVudExpc3RlbmVyKGBwb2ludGVyZG93bmAscyl9LDApO28oKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcmRvd25gLHMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihgY2xpY2tgLGEudmFsdWUpfSl9KSx7b25Qb2ludGVyRG93bkNhcHR1cmU6KCk9PntHZShuKSYmKGkudmFsdWU9ITApfX19ZnVuY3Rpb24gbGMoZSx0LG49ITApe2xldCByPXQ/LnZhbHVlPy5vd25lckRvY3VtZW50Pz9nbG9iYWxUaGlzPy5kb2N1bWVudCxpPUIoITEpO3JldHVybiBMKGE9PntpZighZnR8fCFHZShuKSlyZXR1cm47bGV0IG89YXN5bmMgbj0+e2lmKCF0Py52YWx1ZSlyZXR1cm47YXdhaXQgQSgpLGF3YWl0IEEoKTtsZXQgcj1uLnRhcmdldDshdC52YWx1ZXx8IXJ8fHNjKHQudmFsdWUscil8fG4udGFyZ2V0JiYhaS52YWx1ZSYmRXMob2MsZSx7b3JpZ2luYWxFdmVudDpufSl9O3IuYWRkRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbyksYSgoKT0+ci5yZW1vdmVFdmVudExpc3RlbmVyKGBmb2N1c2luYCxvKSl9KSx7b25Gb2N1c0NhcHR1cmU6KCk9PntHZShuKSYmKGkudmFsdWU9ITApfSxvbkJsdXJDYXB0dXJlOigpPT57R2UobikmJihpLnZhbHVlPSExKX19fXZhciB1Yz1qKHtfX25hbWU6YERpc21pc3NhYmxlTGF5ZXJgLHByb3BzOntkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHByZXNlbnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiEwfX0sZW1pdHM6W2Blc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYCxgZm9jdXNPdXRzaWRlYCxgaW50ZXJhY3RPdXRzaWRlYCxgZGlzbWlzc2BdLHNldHVwKGUse2VtaXQ6bn0pe2xldCByPWUsaT1uLHtmb3J3YXJkUmVmOmEsY3VycmVudEVsZW1lbnQ6b309dCgpLHM9SSgoKT0+by52YWx1ZT8ub3duZXJEb2N1bWVudD8/Z2xvYmFsVGhpcy5kb2N1bWVudCksYz1JKCgpPT5RLmxheWVyc1Jvb3QpLHU9SSgoKT0+by52YWx1ZT9BcnJheS5mcm9tKGMudmFsdWUpLmluZGV4T2Yoby52YWx1ZSk6LTEpLGQ9SSgoKT0+US5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPjApLGY9SSgoKT0+e2xldCBlPUFycmF5LmZyb20oYy52YWx1ZSksW3RdPVsuLi5RLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSksbj1lLmluZGV4T2YodCk7cmV0dXJuIHUudmFsdWU+PW59KSxtPWNjKGFzeW5jIGU9PntsZXQgdD1bLi4uUS5icmFuY2hlc10uc29tZSh0PT50Py5jb250YWlucyhlLnRhcmdldCkpOyFyLnByZXNlbnR8fCFmLnZhbHVlfHx0fHwoaShgcG9pbnRlckRvd25PdXRzaWRlYCxlKSxpKGBpbnRlcmFjdE91dHNpZGVgLGUpLGF3YWl0IEEoKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fGkoYGRpc21pc3NgKSl9LG8pLGg9bGMoZT0+e2xldCB0PVsuLi5RLmJyYW5jaGVzXS5zb21lKHQ9PnQ/LmNvbnRhaW5zKGUudGFyZ2V0KSk7IXIucHJlc2VudHx8dHx8KGkoYGZvY3VzT3V0c2lkZWAsZSksaShgaW50ZXJhY3RPdXRzaWRlYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fGkoYGRpc21pc3NgKSl9LG8pO3JldHVybiB6ZShgRXNjYXBlYCxlPT57ci5wcmVzZW50JiZ1LnZhbHVlPT09Yy52YWx1ZS5zaXplLTEmJihpKGBlc2NhcGVLZXlEb3duYCxlKSxlLmRlZmF1bHRQcmV2ZW50ZWR8fGkoYGRpc21pc3NgKSl9KSxsKFtvLCgpPT5yLmRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50cywoKT0+ci5wcmVzZW50XSwoW2UsdCxuXSxyLGkpPT57IWV8fCFufHx0JiYoUS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKFEub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cz1zLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cyxzLnZhbHVlLmJvZHkuc3R5bGUucG9pbnRlckV2ZW50cz1gbm9uZWApLFEubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuYWRkKGUpLGkoKCk9PntRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShlKSxRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYhRHMoUS5vcmlnaW5hbEJvZHlQb2ludGVyRXZlbnRzKSYmKHMudmFsdWUuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPVEub3JpZ2luYWxCb2R5UG9pbnRlckV2ZW50cyl9KSl9LHtpbW1lZGlhdGU6ITB9KSxsKFtvLCgpPT5yLnByZXNlbnRdLChbZSx0XSxuLHIpPT57IWV8fCF0fHwoYy52YWx1ZS5hZGQoZSkscigoKT0+e2MudmFsdWUuZGVsZXRlKGUpfSkpfSx7aW1tZWRpYXRlOiEwfSksTChlPT57ZSgoKT0+e28udmFsdWUmJihjLnZhbHVlLmRlbGV0ZShvLnZhbHVlKSxRLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShvLnZhbHVlKSl9KX0pLChlLHQpPT4oeigpLFYoUChwKSx7cmVmOlAoYSksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hcywiZGF0YS1kaXNtaXNzYWJsZS1sYXllciI6YGAsc3R5bGU6dXQoe3BvaW50ZXJFdmVudHM6ZC52YWx1ZT9mLnZhbHVlP2BhdXRvYDpgbm9uZWA6dm9pZCAwfSksb25Gb2N1c0NhcHR1cmU6UChoKS5vbkZvY3VzQ2FwdHVyZSxvbkJsdXJDYXB0dXJlOlAoaCkub25CbHVyQ2FwdHVyZSxvblBvaW50ZXJkb3duQ2FwdHVyZTpQKG0pLm9uUG9pbnRlckRvd25DYXB0dXJlfSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2AsYHN0eWxlYCxgb25Gb2N1c0NhcHR1cmVgLGBvbkJsdXJDYXB0dXJlYCxgb25Qb2ludGVyZG93bkNhcHR1cmVgXSkpfX0pLGRjPUUoKCk9PkIoW10pKTtmdW5jdGlvbiBmYygpe2xldCBlPWRjKCk7cmV0dXJue2FkZCh0KXtsZXQgbj1lLnZhbHVlWzBdO3QhPT1uJiZuPy5wYXVzZSgpLGUudmFsdWU9cGMoZS52YWx1ZSx0KSxlLnZhbHVlLnVuc2hpZnQodCl9LHJlbW92ZSh0KXtlLnZhbHVlPXBjKGUudmFsdWUsdCksZS52YWx1ZVswXT8ucmVzdW1lKCl9fX1mdW5jdGlvbiBwYyhlLHQpe2xldCBuPVsuLi5lXSxyPW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiZuLnNwbGljZShyLDEpLG59dmFyIG1jPWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnRgLGhjPWBmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudGAsZ2M9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH07ZnVuY3Rpb24gX2MoZSx7c2VsZWN0OnQ9ITF9PXt9KXtsZXQgbj1aKCk7Zm9yKGxldCByIG9mIGUpaWYoQ2Mocix7c2VsZWN0OnR9KSxaKCkhPT1uKXJldHVybiEwfWZ1bmN0aW9uIHZjKGUpe2xldCB0PXljKGUpO3JldHVybltiYyh0LGUpLGJjKHQucmV2ZXJzZSgpLGUpXX1mdW5jdGlvbiB5YyhlKXtsZXQgdD1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTplPT57bGV0IHQ9ZS50YWdOYW1lPT09YElOUFVUYCYmZS50eXBlPT09YGhpZGRlbmA7cmV0dXJuIGUuZGlzYWJsZWR8fGUuaGlkZGVufHx0P05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ZS50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspdC5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiB0fWZ1bmN0aW9uIGJjKGUsdCl7Zm9yKGxldCBuIG9mIGUpaWYoIXhjKG4se3VwVG86dH0pKXJldHVybiBufWZ1bmN0aW9uIHhjKGUse3VwVG86dH0pe2lmKGdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eT09PWBoaWRkZW5gKXJldHVybiEwO2Zvcig7ZTspe2lmKHQhPT12b2lkIDAmJmU9PT10KXJldHVybiExO2lmKGdldENvbXB1dGVkU3R5bGUoZSkuZGlzcGxheT09PWBub25lYClyZXR1cm4hMDtlPWUucGFyZW50RWxlbWVudH1yZXR1cm4hMX1mdW5jdGlvbiBTYyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmBzZWxlY3RgaW4gZX1mdW5jdGlvbiBDYyhlLHtzZWxlY3Q6dD0hMX09e30pe2lmKGUmJmUuZm9jdXMpe2xldCBuPVooKTtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZSE9PW4mJlNjKGUpJiZ0JiZlLnNlbGVjdCgpfX12YXIgd2M9aih7X19uYW1lOmBGb2N1c1Njb3BlYCxwcm9wczp7bG9vcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LHRyYXBwZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxwcmVzZW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Btb3VudEF1dG9Gb2N1c2AsYHVubW91bnRBdXRvRm9jdXNgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bix7Y3VycmVudFJlZjphLGN1cnJlbnRFbGVtZW50Om99PXQoKSxzPUIobnVsbCksYz1mYygpLHU9TGUoe3BhdXNlZDohMSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX19KTtMKGU9PntpZighZnQpcmV0dXJuO2xldCB0PW8udmFsdWU7aWYoIXIudHJhcHBlZClyZXR1cm47ZnVuY3Rpb24gbihlKXtpZih1LnBhdXNlZHx8IXQpcmV0dXJuO2xldCBuPWUudGFyZ2V0O3QuY29udGFpbnMobik/cy52YWx1ZT1uOkNjKHMudmFsdWUse3NlbGVjdDohMH0pfWZ1bmN0aW9uIGkoZSl7aWYodS5wYXVzZWR8fCF0KXJldHVybjtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQ7biE9PW51bGwmJih0LmNvbnRhaW5zKG4pfHxDYyhzLnZhbHVlLHtzZWxlY3Q6ITB9KSl9ZnVuY3Rpb24gYShlKXtsZXQgbj1zLnZhbHVlO24hPT1udWxsJiZlLnNvbWUoZT0+ZS5yZW1vdmVkTm9kZXMubGVuZ3RoPjApJiYodC5jb250YWlucyhuKXx8Q2ModCkpfWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3VzaW5gLG4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYGZvY3Vzb3V0YCxpKTtsZXQgYz1uZXcgTXV0YXRpb25PYnNlcnZlcihhKTt0JiZjLm9ic2VydmUodCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxlKCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNpbmAsbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgZm9jdXNvdXRgLGkpLGMuZGlzY29ubmVjdCgpfSl9KTtmdW5jdGlvbiBkKGUsdCl7bGV0IG49bmV3IEN1c3RvbUV2ZW50KG1jLGdjKSxyPWU9PmkoYG1vdW50QXV0b0ZvY3VzYCxlKTtlLmFkZEV2ZW50TGlzdGVuZXIobWMsciksZS5kaXNwYXRjaEV2ZW50KG4pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihtYyxyKSxuLmRlZmF1bHRQcmV2ZW50ZWR8fChfYyh5YyhlKSx7c2VsZWN0OiEwfSksWigpPT09dCYmQ2MoZSkpfUwoYXN5bmMgZT0+e2xldCB0PW8udmFsdWU7aWYoYXdhaXQgQSgpLCF0KXJldHVybjtyLnByZXNlbnQhPT0hMSYmYy5hZGQodSk7bGV0IG49WigpOyF0LmNvbnRhaW5zKG4pJiZyLnByZXNlbnQhPT0hMSYmZCh0LG4pLGUoKCk9PntsZXQgZT1uZXcgQ3VzdG9tRXZlbnQoaGMsZ2MpLHI9ZT0+e2koYHVubW91bnRBdXRvRm9jdXNgLGUpfTt0LmFkZEV2ZW50TGlzdGVuZXIoaGMsciksdC5kaXNwYXRjaEV2ZW50KGUpLHQuc2V0QXR0cmlidXRlKGBkYXRhLWZvY3VzLXNjb3BlLXVubW91bnRpbmdgLGBgKSxzZXRUaW1lb3V0KCgpPT57ZS5kZWZhdWx0UHJldmVudGVkfHxDYyhuPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoaGMsciksYy5yZW1vdmUodSksdC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtZm9jdXMtc2NvcGUtdW5tb3VudGluZ2ApfSwwKX0pfSksbCgoKT0+ci5wcmVzZW50LGFzeW5jKGUsdCk9PntpZighZnQpcmV0dXJuO2lmKGU9PT0hMSYmdD09PSEwKXtjLnJlbW92ZSh1KTtyZXR1cm59aWYoZSE9PSEwfHx0IT09ITEpcmV0dXJuO2MuYWRkKHUpLGF3YWl0IEEoKTtsZXQgbj1vLnZhbHVlO2lmKCFuKXJldHVybjtsZXQgcj1aKCk7bi5jb250YWlucyhyKXx8ZChuLHIpfSk7ZnVuY3Rpb24gZihlKXtpZighci5sb29wJiYhci50cmFwcGVkfHx1LnBhdXNlZClyZXR1cm47bGV0IHQ9ZS5rZXk9PT1gVGFiYCYmIWUuYWx0S2V5JiYhZS5jdHJsS2V5JiYhZS5tZXRhS2V5LG49WigpO2lmKHQmJm4pe2xldCB0PWUuY3VycmVudFRhcmdldCxbaSxhXT12Yyh0KTtpJiZhPyFlLnNoaWZ0S2V5JiZuPT09YT8oZS5wcmV2ZW50RGVmYXVsdCgpLHIubG9vcCYmQ2MoaSx7c2VsZWN0OiEwfSkpOmUuc2hpZnRLZXkmJm49PT1pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHIubG9vcCYmQ2MoYSx7c2VsZWN0OiEwfSkpOm49PT10JiZlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybihlLHQpPT4oeigpLFYoUChwKSx7cmVmX2tleTpgY3VycmVudFJlZmAscmVmOmEsdGFiaW5kZXg6YC0xYCwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLG9uS2V5ZG93bjpmfSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXMtY2hpbGRgLGBhc2BdKSl9fSksVGM9W2BFbnRlcmAsYCBgXSxFYz1bYEFycm93RG93bmAsYFBhZ2VVcGAsYEhvbWVgXSxEYz1bYEFycm93VXBgLGBQYWdlRG93bmAsYEVuZGBdO1suLi5FYywuLi5EY10sWy4uLlRjXSxbLi4uVGNdO2Z1bmN0aW9uIE9jKGUpe2xldCB0PVooKTtmb3IobGV0IG4gb2YgZSlpZihuPT09dHx8KG4uZm9jdXMoKSxaKCkhPT10KSlyZXR1cm59dmFyIGtjPWooe19fbmFtZTpgVGVsZXBvcnRgLHByb3BzOnt0bzp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZlcjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgdD1lLG49cih7fSksaT1JKCgpPT50LnRvPz9uLnRlbGVwb3J0VG8/LnZhbHVlPz9gYm9keWApLGE9aWUoKTtyZXR1cm4oZSx0KT0+UChhKXx8ZS5mb3JjZU1vdW50Pyh6KCksVihvZSx7a2V5OjAsdG86aS52YWx1ZSxkaXNhYmxlZDplLmRpc2FibGVkLGRlZmVyOmUuZGVmZXJ9LFtSKGUuJHNsb3RzLGBkZWZhdWx0YCldLDgsW2B0b2AsYGRpc2FibGVkYCxgZGVmZXJgXSkpOkgoYHYtaWZgLCEwKX19KSxBYz1gZGF0YS1yZWthLWNvbGxlY3Rpb24taXRlbWA7ZnVuY3Rpb24gamMoZT17fSl7bGV0e2tleTp0PWBgLGlzUHJvdmlkZXI6bj0hMX09ZSxyPWAke3R9Q29sbGVjdGlvblByb3ZpZGVyYCxpO2lmKG4pe2xldCBlPUIobmV3IE1hcCk7aT17Y29sbGVjdGlvblJlZjpCKCksaXRlbU1hcDplfSxSZShyLGkpfWVsc2UgaT1DKHIpO2xldCBhPShlPSExKT0+e2xldCB0PWkuY29sbGVjdGlvblJlZi52YWx1ZTtpZighdClyZXR1cm5bXTtsZXQgbj1BcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChgWyR7QWN9XWApKSxyPW5ldyBNYXAobi5tYXAoKGUsdCk9PltlLHRdKSksYT1BcnJheS5mcm9tKGkuaXRlbU1hcC52YWx1ZS52YWx1ZXMoKSkuc29ydCgoZSx0KT0+KHIuZ2V0KGUucmVmKT8/LTEpLShyLmdldCh0LnJlZik/Py0xKSk7cmV0dXJuIGU/YTphLmZpbHRlcihlPT5lLnJlZi5kYXRhc2V0LmRpc2FibGVkIT09YGApfSxvPWooe25hbWU6YENvbGxlY3Rpb25TbG90YCxpbmhlcml0QXR0cnM6ITEsc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1pYygpO3JldHVybiBsKGEsKCk9PntpLmNvbGxlY3Rpb25SZWYudmFsdWU9YS52YWx1ZX0pLCgpPT5PKHJlLHtyZWY6ciwuLi5ufSx0KX19KSxzPWooe25hbWU6YENvbGxlY3Rpb25JdGVtYCxpbmhlcml0QXR0cnM6ITEscHJvcHM6e3ZhbHVlOnt2YWxpZGF0b3I6KCk9PiEwfX0sc2V0dXAoZSx7c2xvdHM6dCxhdHRyczpufSl7bGV0e3ByaW1pdGl2ZUVsZW1lbnQ6cixjdXJyZW50RWxlbWVudDphfT1pYygpO3JldHVybiBMKHQ9PntpZihhLnZhbHVlKXtsZXQgbj1PZShhLnZhbHVlKTtpLml0ZW1NYXAudmFsdWUuc2V0KG4se3JlZjphLnZhbHVlLHZhbHVlOmUudmFsdWV9KSx0KCgpPT5pLml0ZW1NYXAudmFsdWUuZGVsZXRlKG4pKX19KSwoKT0+TyhyZSx7Li4ubixbQWNdOmBgLHJlZjpyfSx0KX19KTtyZXR1cm57Z2V0SXRlbXM6YSxyZWFjdGl2ZUl0ZW1zOkkoKCk9PkFycmF5LmZyb20oaS5pdGVtTWFwLnZhbHVlLnZhbHVlcygpKSksaXRlbU1hcFNpemU6SSgoKT0+aS5pdGVtTWFwLnZhbHVlLnNpemUpLENvbGxlY3Rpb25TbG90Om8sQ29sbGVjdGlvbkl0ZW06c319dmFyIE1jPWooe19fbmFtZTpgVmlzdWFsbHlIaWRkZW5gLHByb3BzOntmZWF0dXJlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBmb2N1c2FibGVgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KHooKSxWKFAocCkse2FzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsImFyaWEtaGlkZGVuIjplLmZlYXR1cmU9PT1gZm9jdXNhYmxlYHx8ZS5mZWF0dXJlPT09YGZ1bGx5LWhpZGRlbmA/YHRydWVgOnZvaWQgMCwiZGF0YS1oaWRkZW4iOmUuZmVhdHVyZT09PWBmdWxseS1oaWRkZW5gP2BgOnZvaWQgMCx0YWJpbmRleDplLmZlYXR1cmU9PT1gZnVsbHktaGlkZGVuYD9gLTFgOnZvaWQgMCxzdHlsZTp7cG9zaXRpb246YGFic29sdXRlYCxib3JkZXI6MCx3aWR0aDpgMXB4YCxoZWlnaHQ6YDFweGAscGFkZGluZzowLG1hcmdpbjpgLTFweGAsb3ZlcmZsb3c6YGhpZGRlbmAsY2xpcDpgcmVjdCgwLCAwLCAwLCAwKWAsY2xpcFBhdGg6YGluc2V0KDUwJSlgLHdoaXRlU3BhY2U6YG5vd3JhcGAsd29yZFdyYXA6YG5vcm1hbGAsdG9wOmAtMXB4YCxsZWZ0OmAtMXB4YH19LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgYXJpYS1oaWRkZW5gLGBkYXRhLWhpZGRlbmAsYHRhYmluZGV4YF0pKX19KSxbTmMsUGNdPWEoYFBvcHBlclJvb3RgKSxGYz1qKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBQb3BwZXJSb290YCxzZXR1cChlKXtsZXQgdD1CKCk7cmV0dXJuIFBjKHthbmNob3I6dCxvbkFuY2hvckNoYW5nZTplPT50LnZhbHVlPWV9KSwoZSx0KT0+UihlLiRzbG90cyxgZGVmYXVsdGApfX0pLEljPWooe19fbmFtZTpgUG9wcGVyQW5jaG9yYCxwcm9wczp7cmVmZXJlbmNlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCBuPWUse2ZvcndhcmRSZWY6cixjdXJyZW50RWxlbWVudDppfT10KCksYT1OYygpO3JldHVybiB0ZSgoKT0+e2Eub25BbmNob3JDaGFuZ2Uobi5yZWZlcmVuY2U/P2kudmFsdWUpfSksKGUsdCk9Pih6KCksVihQKHApLHtyZWY6UChyKSxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkfSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGBdKSl9fSk7ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGUhPT1udWxsfWZ1bmN0aW9uIFJjKGUpe3JldHVybntuYW1lOmB0cmFuc2Zvcm1PcmlnaW5gLG9wdGlvbnM6ZSxmbih0KXtsZXR7cGxhY2VtZW50Om4scmVjdHM6cixtaWRkbGV3YXJlRGF0YTppfT10LGE9aS5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MCxvPWE/MDplLmFycm93V2lkdGgscz1hPzA6ZS5hcnJvd0hlaWdodCxbYyxsXT16YyhuKSx1PXtzdGFydDplLmRpcj09PWBydGxgP2AxMDAlYDpgMCVgLGNlbnRlcjpgNTAlYCxlbmQ6ZS5kaXI9PT1gcnRsYD9gMCVgOmAxMDAlYH1bbF0sZD17c3RhcnQ6YDAlYCxjZW50ZXI6YDUwJWAsZW5kOmAxMDAlYH1bbF0sZj0oaS5hcnJvdz8ueD8/MCkrby8yLHA9KGkuYXJyb3c/Lnk/PzApK3MvMixtPWBgLGg9YGA7cmV0dXJuIGM9PT1gYm90dG9tYD8obT1hP3U6YCR7Zn1weGAsaD1gJHstc31weGApOmM9PT1gdG9wYD8obT1hP3U6YCR7Zn1weGAsaD1gJHtyLmZsb2F0aW5nLmhlaWdodCtzfXB4YCk6Yz09PWByaWdodGA/KG09YCR7LXN9cHhgLGg9YT9kOmAke3B9cHhgKTpjPT09YGxlZnRgJiYobT1gJHtyLmZsb2F0aW5nLndpZHRoK3N9cHhgLGg9YT9kOmAke3B9cHhgKSx7ZGF0YTp7eDptLHk6aH19fX19ZnVuY3Rpb24gemMoZSl7bGV0W3Qsbj1gY2VudGVyYF09ZS5zcGxpdChgLWApO3JldHVyblt0LG5dfXZhciBCYz1bYHRvcGAsYHJpZ2h0YCxgYm90dG9tYCxgbGVmdGBdLFZjPU1hdGgubWluLEhjPU1hdGgubWF4LFVjPU1hdGgucm91bmQsV2M9TWF0aC5mbG9vcixHYz1lPT4oe3g6ZSx5OmV9KSxLYz17bGVmdDpgcmlnaHRgLHJpZ2h0OmBsZWZ0YCxib3R0b206YHRvcGAsdG9wOmBib3R0b21gfTtmdW5jdGlvbiBxYyhlLHQsbil7cmV0dXJuIEhjKGUsVmModCxuKSl9ZnVuY3Rpb24gSmMoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZSh0KTplfWZ1bmN0aW9uIFljKGUpe3JldHVybiBlLnNwbGl0KGAtYClbMF19ZnVuY3Rpb24gWGMoZSl7cmV0dXJuIGUuc3BsaXQoYC1gKVsxXX1mdW5jdGlvbiBaYyhlKXtyZXR1cm4gZT09PWB4YD9geWA6YHhgfWZ1bmN0aW9uIFFjKGUpe3JldHVybiBlPT09YHlgP2BoZWlnaHRgOmB3aWR0aGB9ZnVuY3Rpb24gJGMoZSl7bGV0IHQ9ZVswXTtyZXR1cm4gdD09PWB0YHx8dD09PWBiYD9geWA6YHhgfWZ1bmN0aW9uIGVsKGUpe3JldHVybiBaYygkYyhlKSl9ZnVuY3Rpb24gdGwoZSx0LG4pe249PT12b2lkIDAmJihuPSExKTtsZXQgcj1YYyhlKSxpPWVsKGUpLGE9UWMoaSksbz1pPT09YHhgP3I9PT0obj9gZW5kYDpgc3RhcnRgKT9gcmlnaHRgOmBsZWZ0YDpyPT09YHN0YXJ0YD9gYm90dG9tYDpgdG9wYDtyZXR1cm4gdC5yZWZlcmVuY2VbYV0+dC5mbG9hdGluZ1thXSYmKG89dWwobykpLFtvLHVsKG8pXX1mdW5jdGlvbiBubChlKXtsZXQgdD11bChlKTtyZXR1cm5bcmwoZSksdCxybCh0KV19ZnVuY3Rpb24gcmwoZSl7cmV0dXJuIGUuaW5jbHVkZXMoYHN0YXJ0YCk/ZS5yZXBsYWNlKGBzdGFydGAsYGVuZGApOmUucmVwbGFjZShgZW5kYCxgc3RhcnRgKX12YXIgaWw9W2BsZWZ0YCxgcmlnaHRgXSxhbD1bYHJpZ2h0YCxgbGVmdGBdLG9sPVtgdG9wYCxgYm90dG9tYF0sc2w9W2Bib3R0b21gLGB0b3BgXTtmdW5jdGlvbiBjbChlLHQsbil7c3dpdGNoKGUpe2Nhc2VgdG9wYDpjYXNlYGJvdHRvbWA6cmV0dXJuIG4/dD9hbDppbDp0P2lsOmFsO2Nhc2VgbGVmdGA6Y2FzZWByaWdodGA6cmV0dXJuIHQ/b2w6c2w7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gbGwoZSx0LG4scil7bGV0IGk9WGMoZSksYT1jbChZYyhlKSxuPT09YHN0YXJ0YCxyKTtyZXR1cm4gaSYmKGE9YS5tYXAoZT0+ZStgLWAraSksdCYmKGE9YS5jb25jYXQoYS5tYXAocmwpKSkpLGF9ZnVuY3Rpb24gdWwoZSl7bGV0IHQ9WWMoZSk7cmV0dXJuIEtjW3RdK2Uuc2xpY2UodC5sZW5ndGgpfWZ1bmN0aW9uIGRsKGUpe3JldHVybnt0b3A6ZS50b3A/PzAscmlnaHQ6ZS5yaWdodD8/MCxib3R0b206ZS5ib3R0b20/PzAsbGVmdDplLmxlZnQ/PzB9fWZ1bmN0aW9uIGZsKGUpe3JldHVybiB0eXBlb2YgZT09YG51bWJlcmA/e3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfTpkbChlKX1mdW5jdGlvbiBwbChlKXtsZXR7eDp0LHk6bix3aWR0aDpyLGhlaWdodDppfT1lO3JldHVybnt3aWR0aDpyLGhlaWdodDppLHRvcDpuLGxlZnQ6dCxyaWdodDp0K3IsYm90dG9tOm4raSx4OnQseTpufX1mdW5jdGlvbiBtbChlLHQsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOml9PWUsYT0kYyh0KSxvPWVsKHQpLHM9UWMobyksYz1ZYyh0KSxsPWE9PT1geWAsdT1yLngrci53aWR0aC8yLWkud2lkdGgvMixkPXIueStyLmhlaWdodC8yLWkuaGVpZ2h0LzIsZj1yW3NdLzItaVtzXS8yLHA7c3dpdGNoKGMpe2Nhc2VgdG9wYDpwPXt4OnUseTpyLnktaS5oZWlnaHR9O2JyZWFrO2Nhc2VgYm90dG9tYDpwPXt4OnUseTpyLnkrci5oZWlnaHR9O2JyZWFrO2Nhc2VgcmlnaHRgOnA9e3g6ci54K3Iud2lkdGgseTpkfTticmVhaztjYXNlYGxlZnRgOnA9e3g6ci54LWkud2lkdGgseTpkfTticmVhaztkZWZhdWx0OnA9e3g6ci54LHk6ci55fX1sZXQgbT1YYyh0KTtyZXR1cm4gbSYmKHBbb10rPWYqKG09PT1gZW5kYD8xOi0xKSoobiYmbD8tMToxKSkscH1hc3luYyBmdW5jdGlvbiBobChlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTtsZXR7eDpuLHk6cixwbGF0Zm9ybTppLHJlY3RzOmEsZWxlbWVudHM6byxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPWBjbGlwcGluZ0FuY2VzdG9yc2Ascm9vdEJvdW5kYXJ5Omw9YHZpZXdwb3J0YCxlbGVtZW50Q29udGV4dDp1PWBmbG9hdGluZ2AsYWx0Qm91bmRhcnk6ZD0hMSxwYWRkaW5nOmY9MH09SmModCxlKSxwPWZsKGYpLG09b1tkP3U9PT1gZmxvYXRpbmdgP2ByZWZlcmVuY2VgOmBmbG9hdGluZ2A6dV0saD1wbChhd2FpdCBpLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDphd2FpdChpLmlzRWxlbWVudD09bnVsbD92b2lkIDA6aS5pc0VsZW1lbnQobSkpPz8hMD9tOm0uY29udGV4dEVsZW1lbnR8fGF3YWl0KGkuZ2V0RG9jdW1lbnRFbGVtZW50PT1udWxsP3ZvaWQgMDppLmdldERvY3VtZW50RWxlbWVudChvLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6bCxzdHJhdGVneTpzfSkpLGc9dT09PWBmbG9hdGluZ2A/e3g6bix5OnIsd2lkdGg6YS5mbG9hdGluZy53aWR0aCxoZWlnaHQ6YS5mbG9hdGluZy5oZWlnaHR9OmEucmVmZXJlbmNlLF89YXdhaXQoaS5nZXRPZmZzZXRQYXJlbnQ9PW51bGw/dm9pZCAwOmkuZ2V0T2Zmc2V0UGFyZW50KG8uZmxvYXRpbmcpKSx2PWF3YWl0KGkuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDppLmlzRWxlbWVudChfKSkmJmF3YWl0KGkuZ2V0U2NhbGU9PW51bGw/dm9pZCAwOmkuZ2V0U2NhbGUoXykpfHx7eDoxLHk6MX0seT1wbChpLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0P2F3YWl0IGkuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe2VsZW1lbnRzOm8scmVjdDpnLG9mZnNldFBhcmVudDpfLHN0cmF0ZWd5OnN9KTpnKTtyZXR1cm57dG9wOihoLnRvcC15LnRvcCtwLnRvcCkvdi55LGJvdHRvbTooeS5ib3R0b20taC5ib3R0b20rcC5ib3R0b20pL3YueSxsZWZ0OihoLmxlZnQteS5sZWZ0K3AubGVmdCkvdi54LHJpZ2h0Oih5LnJpZ2h0LWgucmlnaHQrcC5yaWdodCkvdi54fX12YXIgZ2w9NTAsX2w9YXN5bmMoZSx0LG4pPT57bGV0e3BsYWNlbWVudDpyPWBib3R0b21gLHN0cmF0ZWd5Omk9YGFic29sdXRlYCxtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06b309bixzPW8uZGV0ZWN0T3ZlcmZsb3c/bzp7Li4ubyxkZXRlY3RPdmVyZmxvdzpobH0sYz1hd2FpdChvLmlzUlRMPT1udWxsP3ZvaWQgMDpvLmlzUlRMKHQpKSxsPWF3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KSx7eDp1LHk6ZH09bWwobCxyLGMpLGY9cixwPTAsbT17fTtmb3IobGV0IG49MDtuPGEubGVuZ3RoO24rKyl7bGV0IGg9YVtuXTtpZighaCljb250aW51ZTtsZXR7bmFtZTpnLGZuOl99PWgse3g6dix5LGRhdGE6YixyZXNldDp4fT1hd2FpdCBfKHt4OnUseTpkLGluaXRpYWxQbGFjZW1lbnQ6cixwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm0scmVjdHM6bCxwbGF0Zm9ybTpzLGVsZW1lbnRzOntyZWZlcmVuY2U6ZSxmbG9hdGluZzp0fX0pO3U9dj8/dSxkPXk/P2QsbVtnXT17Li4ubVtnXSwuLi5ifSx4JiZwPGdsJiYocCsrLHR5cGVvZiB4PT1gb2JqZWN0YCYmKHgucGxhY2VtZW50JiYoZj14LnBsYWNlbWVudCkseC5yZWN0cyYmKGw9eC5yZWN0cz09PSEwP2F3YWl0IG8uZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzp0LHN0cmF0ZWd5Oml9KTp4LnJlY3RzKSx7eDp1LHk6ZH09bWwobCxmLGMpKSxuPS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOm19fSx2bD1lPT4oe25hbWU6YGFycm93YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscmVjdHM6YSxwbGF0Zm9ybTpvLGVsZW1lbnRzOnMsbWlkZGxld2FyZURhdGE6Y309dCx7ZWxlbWVudDpsLHBhZGRpbmc6dT0wfT1KYyhlLHQpfHx7fTtpZihsPT1udWxsKXJldHVybnt9O2xldCBkPWZsKHUpLGY9e3g6bix5OnJ9LHA9ZWwoaSksbT1RYyhwKSxoPWF3YWl0IG8uZ2V0RGltZW5zaW9ucyhsKSxnPXA9PT1geWAsXz1nP2B0b3BgOmBsZWZ0YCx2PWc/YGJvdHRvbWA6YHJpZ2h0YCx5PWc/YGNsaWVudEhlaWdodGA6YGNsaWVudFdpZHRoYCxiPWEucmVmZXJlbmNlW21dK2EucmVmZXJlbmNlW3BdLWZbcF0tYS5mbG9hdGluZ1ttXSx4PWZbcF0tYS5yZWZlcmVuY2VbcF0sUz1hd2FpdChvLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6by5nZXRPZmZzZXRQYXJlbnQobCkpLEM9Uz9TW3ldOjA7KCFDfHwhYXdhaXQoby5pc0VsZW1lbnQ9PW51bGw/dm9pZCAwOm8uaXNFbGVtZW50KFMpKSkmJihDPXMuZmxvYXRpbmdbeV18fGEuZmxvYXRpbmdbbV0pO2xldCB3PWIvMi14LzIsVD1DLzItaFttXS8yLTEsRT1WYyhkW19dLFQpLGVlPVZjKGRbdl0sVCksRD1DLWhbbV0tZWUsdGU9Qy8yLWhbbV0vMit3LG5lPXFjKEUsdGUsRCkscmU9IWMuYXJyb3cmJlhjKGkpIT1udWxsJiZ0ZSE9PW5lJiZhLnJlZmVyZW5jZVttXS8yLSh0ZTxFP0U6ZWUpLWhbbV0vMjwwLE89cmU/dGU8RT90ZS1FOnRlLUQ6MDtyZXR1cm57W3BdOmZbcF0rTyxkYXRhOntbcF06bmUsY2VudGVyT2Zmc2V0OnRlLW5lLU8sLi4ucmUmJnthbGlnbm1lbnRPZmZzZXQ6T319LHJlc2V0OnJlfX19KSx5bD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9e30pLHtuYW1lOmBmbGlwYCxvcHRpb25zOmUsYXN5bmMgZm4odCl7dmFyIG47bGV0e3BsYWNlbWVudDpyLG1pZGRsZXdhcmVEYXRhOmkscmVjdHM6YSxpbml0aWFsUGxhY2VtZW50Om8scGxhdGZvcm06cyxlbGVtZW50czpjfT10LHttYWluQXhpczpsPSEwLGNyb3NzQXhpczp1PSEwLGZhbGxiYWNrUGxhY2VtZW50czpkLGZhbGxiYWNrU3RyYXRlZ3k6Zj1gYmVzdEZpdGAsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpwPWBub25lYCxmbGlwQWxpZ25tZW50Om09ITAsLi4uaH09SmMoZSx0KTtpZigobj1pLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307bGV0IGc9WWMociksXz0kYyhvKSx2PVljKG8pPT09byx5PWF3YWl0KHMuaXNSVEw9PW51bGw/dm9pZCAwOnMuaXNSVEwoYy5mbG9hdGluZykpLGI9ZHx8KHZ8fCFtP1t1bChvKV06bmwobykpLHg9cCE9PWBub25lYDshZCYmeCYmYi5wdXNoKC4uLmxsKG8sbSxwLHkpKTtsZXQgUz1bbywuLi5iXSxDPWF3YWl0IHMuZGV0ZWN0T3ZlcmZsb3codCxoKSx3PVtdLFQ9aS5mbGlwPy5vdmVyZmxvd3N8fFtdO2lmKGwmJncucHVzaChDW2ddKSx1KXtsZXQgZT10bChyLGEseSk7dy5wdXNoKENbZVswXV0sQ1tlWzFdXSl9aWYoVD1bLi4uVCx7cGxhY2VtZW50OnIsb3ZlcmZsb3dzOnd9XSwhdy5ldmVyeShlPT5lPD0wKSl7bGV0IGU9KGkuZmxpcD8uaW5kZXh8fDApKzEsdD1TW2VdO2lmKHQmJih1IT09YGFsaWdubWVudGB8fF89PT0kYyh0KXx8VC5ldmVyeShlPT4kYyhlLnBsYWNlbWVudCkhPT1ffHxlLm92ZXJmbG93c1swXT4wKSkpcmV0dXJue2RhdGE6e2luZGV4OmUsb3ZlcmZsb3dzOlR9LHJlc2V0OntwbGFjZW1lbnQ6dH19O2xldCBuPVQuZmlsdGVyKGU9PmUub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KChlLHQpPT5lLm92ZXJmbG93c1sxXS10Lm92ZXJmbG93c1sxXSlbMF0/LnBsYWNlbWVudDtpZighbilzd2l0Y2goZil7Y2FzZWBiZXN0Rml0YDp7bGV0IGU9VC5maWx0ZXIoZT0+e2lmKHgpe2xldCB0PSRjKGUucGxhY2VtZW50KTtyZXR1cm4gdD09PV98fHQ9PT1geWB9cmV0dXJuITB9KS5tYXAoZT0+W2UucGxhY2VtZW50LGUub3ZlcmZsb3dzLmZpbHRlcihlPT5lPjApLnJlZHVjZSgoZSx0KT0+ZSt0LDApXSkuc29ydCgoZSx0KT0+ZVsxXS10WzFdKVswXT8uWzBdO2UmJihuPWUpO2JyZWFrfWNhc2VgaW5pdGlhbFBsYWNlbWVudGA6bj1vfWlmKHIhPT1uKXJldHVybntyZXNldDp7cGxhY2VtZW50Om59fX1yZXR1cm57fX19fTtmdW5jdGlvbiBibChlLHQpe3JldHVybnt0b3A6ZS50b3AtdC5oZWlnaHQscmlnaHQ6ZS5yaWdodC10LndpZHRoLGJvdHRvbTplLmJvdHRvbS10LmhlaWdodCxsZWZ0OmUubGVmdC10LndpZHRofX1mdW5jdGlvbiB4bChlKXtyZXR1cm4gQmMuc29tZSh0PT5lW3RdPj0wKX12YXIgU2w9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7bmFtZTpgaGlkZWAsb3B0aW9uczplLGFzeW5jIGZuKHQpe2xldHtyZWN0czpuLHBsYXRmb3JtOnJ9PXQse3N0cmF0ZWd5Omk9YHJlZmVyZW5jZUhpZGRlbmAsLi4uYX09SmMoZSx0KTtzd2l0Y2goaSl7Y2FzZWByZWZlcmVuY2VIaWRkZW5gOntsZXQgZT1ibChhd2FpdCByLmRldGVjdE92ZXJmbG93KHQsey4uLmEsZWxlbWVudENvbnRleHQ6YHJlZmVyZW5jZWB9KSxuLnJlZmVyZW5jZSk7cmV0dXJue2RhdGE6e3JlZmVyZW5jZUhpZGRlbk9mZnNldHM6ZSxyZWZlcmVuY2VIaWRkZW46eGwoZSl9fX1jYXNlYGVzY2FwZWRgOntsZXQgZT1ibChhd2FpdCByLmRldGVjdE92ZXJmbG93KHQsey4uLmEsYWx0Qm91bmRhcnk6ITB9KSxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6ZSxlc2NhcGVkOnhsKGUpfX19ZGVmYXVsdDpyZXR1cm57fX19fX0sQ2w9bmV3IFNldChbYGxlZnRgLGB0b3BgXSk7YXN5bmMgZnVuY3Rpb24gd2woZSx0KXtsZXR7cGxhY2VtZW50Om4scGxhdGZvcm06cixlbGVtZW50czppfT1lLGE9YXdhaXQoci5pc1JUTD09bnVsbD92b2lkIDA6ci5pc1JUTChpLmZsb2F0aW5nKSksbz1ZYyhuKSxzPVhjKG4pLGM9JGMobik9PT1geWAsbD1DbC5oYXMobyk/LTE6MSx1PWEmJmM/LTE6MSxkPUpjKHQsZSkse21haW5BeGlzOmYsY3Jvc3NBeGlzOnAsYWxpZ25tZW50QXhpczptfT10eXBlb2YgZD09YG51bWJlcmA/e21haW5BeGlzOmQsY3Jvc3NBeGlzOjAsYWxpZ25tZW50QXhpczpudWxsfTp7bWFpbkF4aXM6ZC5tYWluQXhpc3x8MCxjcm9zc0F4aXM6ZC5jcm9zc0F4aXN8fDAsYWxpZ25tZW50QXhpczpkLmFsaWdubWVudEF4aXN9O3JldHVybiBzJiZ0eXBlb2YgbT09YG51bWJlcmAmJihwPXM9PT1gZW5kYD9tKi0xOm0pLGM/e3g6cCp1LHk6ZipsfTp7eDpmKmwseTpwKnV9fXZhciBUbD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MCkse25hbWU6YG9mZnNldGAsb3B0aW9uczplLGFzeW5jIGZuKHQpe3ZhciBuO2xldHt4OnIseTppLHBsYWNlbWVudDphLG1pZGRsZXdhcmVEYXRhOm99PXQscz1hd2FpdCB3bCh0LGUpO3JldHVybiBhPT09by5vZmZzZXQ/LnBsYWNlbWVudCYmKG49by5hcnJvdykhPW51bGwmJm4uYWxpZ25tZW50T2Zmc2V0P3t9Ont4OnIrcy54LHk6aStzLnksZGF0YTp7Li4ucyxwbGFjZW1lbnQ6YX19fX19LEVsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YHNoaWZ0YCxvcHRpb25zOmUsYXN5bmMgZm4odCl7bGV0e3g6bix5OnIscGxhY2VtZW50OmkscGxhdGZvcm06YX09dCx7bWFpbkF4aXM6bz0hMCxjcm9zc0F4aXM6cz0hMSxsaW1pdGVyOmM9e2ZuOmU9PntsZXR7eDp0LHk6bn09ZTtyZXR1cm57eDp0LHk6bn19fSwuLi5sfT1KYyhlLHQpLHU9e3g6bix5OnJ9LGQ9YXdhaXQgYS5kZXRlY3RPdmVyZmxvdyh0LGwpLGY9JGMoaSkscD1aYyhmKSxtPXVbcF0saD11W2ZdLGc9KGUsdCk9PnFjKHQrZFtlPT09YHlgP2B0b3BgOmBsZWZ0YF0sdCx0LWRbZT09PWB5YD9gYm90dG9tYDpgcmlnaHRgXSk7byYmKG09ZyhwLG0pKSxzJiYoaD1nKGYsaCkpO2xldCBfPWMuZm4oey4uLnQsW3BdOm0sW2ZdOmh9KTtyZXR1cm57Li4uXyxkYXRhOnt4Ol8ueC1uLHk6Xy55LXIsZW5hYmxlZDp7W3BdOm8sW2ZdOnN9fX19fX0sRGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPXt9KSx7b3B0aW9uczplLGZuKHQpe2xldHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOmEsbWlkZGxld2FyZURhdGE6b309dCx7b2Zmc2V0OnM9MCxtYWluQXhpczpjPSEwLGNyb3NzQXhpczpsPSEwfT1KYyhlLHQpLHU9e3g6bix5OnJ9LGQ9JGMoaSksZj1aYyhkKSxwPXVbZl0sbT11W2RdLGg9SmMocyx0KSxnPXR5cGVvZiBoPT1gbnVtYmVyYD97bWFpbkF4aXM6aCxjcm9zc0F4aXM6MH06e21haW5BeGlzOmgubWFpbkF4aXM/PzAsY3Jvc3NBeGlzOmguY3Jvc3NBeGlzPz8wfTtpZihjKXtsZXQgZT1mPT09YHlgP2BoZWlnaHRgOmB3aWR0aGAsdD1hLnJlZmVyZW5jZVtmXS1hLmZsb2F0aW5nW2VdK2cubWFpbkF4aXMsbj1hLnJlZmVyZW5jZVtmXSthLnJlZmVyZW5jZVtlXS1nLm1haW5BeGlzO3A8dD9wPXQ6cD5uJiYocD1uKX1pZihsKXtsZXQgZT1mPT09YHlgP2B3aWR0aGA6YGhlaWdodGAsdD1DbC5oYXMoWWMoaSkpLG49YS5yZWZlcmVuY2VbZF0tYS5mbG9hdGluZ1tlXSsodCYmby5vZmZzZXQ/LltkXXx8MCkrKHQ/MDpnLmNyb3NzQXhpcykscj1hLnJlZmVyZW5jZVtkXSthLnJlZmVyZW5jZVtlXSsodD8wOm8ub2Zmc2V0Py5bZF18fDApLSh0P2cuY3Jvc3NBeGlzOjApO208bj9tPW46bT5yJiYobT1yKX1yZXR1cm57W2ZdOnAsW2RdOm19fX19LE9sPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT17fSkse25hbWU6YHNpemVgLG9wdGlvbnM6ZSxhc3luYyBmbih0KXtsZXR7cGxhY2VtZW50Om4scmVjdHM6cixwbGF0Zm9ybTppLGVsZW1lbnRzOmF9PXQse2FwcGx5Om89KCk9Pnt9LC4uLnN9PUpjKGUsdCksYz1hd2FpdCBpLmRldGVjdE92ZXJmbG93KHQscyksbD1ZYyhuKSx1PVhjKG4pLGQ9JGMobik9PT1geWAse3dpZHRoOmYsaGVpZ2h0OnB9PXIuZmxvYXRpbmcsbSxoO2w9PT1gdG9wYHx8bD09PWBib3R0b21gPyhtPWwsaD11PT09KGF3YWl0KGkuaXNSVEw9PW51bGw/dm9pZCAwOmkuaXNSVEwoYS5mbG9hdGluZykpP2BzdGFydGA6YGVuZGApP2BsZWZ0YDpgcmlnaHRgKTooaD1sLG09dT09PWBlbmRgP2B0b3BgOmBib3R0b21gKTtsZXQgZz1wLWMudG9wLWMuYm90dG9tLF89Zi1jLmxlZnQtYy5yaWdodCx2PVZjKHAtY1ttXSxnKSx5PVZjKGYtY1toXSxfKSxiPXQubWlkZGxld2FyZURhdGEuc2hpZnQseD0hYixTPXYsQz15O2IhPW51bGwmJmIuZW5hYmxlZC54JiYoQz1fKSxiIT1udWxsJiZiLmVuYWJsZWQueSYmKFM9ZykseCYmIXUmJihkP0M9Zi0yKkhjKGMubGVmdCxjLnJpZ2h0KTpTPXAtMipIYyhjLnRvcCxjLmJvdHRvbSkpLGF3YWl0IG8oey4uLnQsYXZhaWxhYmxlV2lkdGg6QyxhdmFpbGFibGVIZWlnaHQ6U30pO2xldCB3PWF3YWl0IGkuZ2V0RGltZW5zaW9ucyhhLmZsb2F0aW5nKTtyZXR1cm4gZiE9PXcud2lkdGh8fHAhPT13LmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24ga2woKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzxgdWB9ZnVuY3Rpb24gQWwoZSl7cmV0dXJuIE1sKGUpPyhlLm5vZGVOYW1lfHxgYCkudG9Mb3dlckNhc2UoKTpgI2RvY3VtZW50YH1mdW5jdGlvbiAkKGUpe3ZhciB0O3JldHVybihlPT1udWxsfHwodD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIGpsKGUpe3JldHVybigoTWwoZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPy5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gTWwoZSl7cmV0dXJuIGtsKCk/ZSBpbnN0YW5jZW9mIE5vZGV8fGUgaW5zdGFuY2VvZiAkKGUpLk5vZGU6ITF9ZnVuY3Rpb24gTmwoZSl7cmV0dXJuIGtsKCk/ZSBpbnN0YW5jZW9mIEVsZW1lbnR8fGUgaW5zdGFuY2VvZiAkKGUpLkVsZW1lbnQ6ITF9ZnVuY3Rpb24gUGwoZSl7cmV0dXJuIGtsKCk/ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxlIGluc3RhbmNlb2YgJChlKS5IVE1MRWxlbWVudDohMX1mdW5jdGlvbiBGbChlKXtyZXR1cm4ha2woKXx8dHlwZW9mIFNoYWRvd1Jvb3Q+YHVgPyExOmUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgJChlKS5TaGFkb3dSb290fWZ1bmN0aW9uIElsKGUpe2xldHtvdmVyZmxvdzp0LG92ZXJmbG93WDpuLG92ZXJmbG93WTpyLGRpc3BsYXk6aX09cWwoZSk7cmV0dXJuL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3QodCtyK24pJiZpIT09YGlubGluZWAmJmkhPT1gY29udGVudHNgfWZ1bmN0aW9uIExsKGUpe3JldHVybi9eKHRhYmxlfHRkfHRoKSQvLnRlc3QoQWwoZSkpfWZ1bmN0aW9uIFJsKGUpe3RyeXtpZihlLm1hdGNoZXMoYDpwb3BvdmVyLW9wZW5gKSlyZXR1cm4hMH1jYXRjaHt9dHJ5e3JldHVybiBlLm1hdGNoZXMoYDptb2RhbGApfWNhdGNoe3JldHVybiExfX12YXIgemw9L3RyYW5zZm9ybXx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHBlcnNwZWN0aXZlfGZpbHRlci8sQmw9L3BhaW50fGxheW91dHxzdHJpY3R8Y29udGVudC8sVmw9ZT0+ISFlJiZlIT09YG5vbmVgLEhsO2Z1bmN0aW9uIFVsKGUpe2xldCB0PU5sKGUpP3FsKGUpOmU7cmV0dXJuIFZsKHQudHJhbnNmb3JtKXx8VmwodC50cmFuc2xhdGUpfHxWbCh0LnNjYWxlKXx8VmwodC5yb3RhdGUpfHxWbCh0LnBlcnNwZWN0aXZlKXx8IUdsKCkmJihWbCh0LmJhY2tkcm9wRmlsdGVyKXx8VmwodC5maWx0ZXIpKXx8emwudGVzdCh0LndpbGxDaGFuZ2V8fGBgKXx8QmwudGVzdCh0LmNvbnRhaW58fGBgKX1mdW5jdGlvbiBXbChlKXtsZXQgdD1ZbChlKTtmb3IoO1BsKHQpJiYhS2wodCk7KXtpZihVbCh0KSlyZXR1cm4gdDtpZihSbCh0KSlyZXR1cm4gbnVsbDt0PVlsKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIEdsKCl7cmV0dXJuIEhsPz89dHlwZW9mIENTUzxgdWAmJkNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKGAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcmAsYG5vbmVgKSxIbH1mdW5jdGlvbiBLbChlKXtyZXR1cm4vXihodG1sfGJvZHl8I2RvY3VtZW50KSQvLnRlc3QoQWwoZSkpfWZ1bmN0aW9uIHFsKGUpe3JldHVybiAkKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gSmwoZSl7cmV0dXJuIE5sKGUpP3tzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmUuc2Nyb2xsWCxzY3JvbGxUb3A6ZS5zY3JvbGxZfX1mdW5jdGlvbiBZbChlKXtpZihBbChlKT09PWBodG1sYClyZXR1cm4gZTtsZXQgdD1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxGbChlKSYmZS5ob3N0fHxqbChlKTtyZXR1cm4gRmwodCk/dC5ob3N0OnR9ZnVuY3Rpb24gWGwoZSl7bGV0IHQ9WWwoZSk7cmV0dXJuIEtsKHQpPyhlLm93bmVyRG9jdW1lbnR8fGUpLmJvZHk6UGwodCkmJklsKHQpP3Q6WGwodCl9ZnVuY3Rpb24gWmwoZSx0LG4pe3Q9PT12b2lkIDAmJih0PVtdKSxuPT09dm9pZCAwJiYobj0hMCk7bGV0IHI9WGwoZSksaT1yPT09ZS5vd25lckRvY3VtZW50Py5ib2R5LGE9JChyKTtpZihpKXtsZXQgZT1RbChhKTtyZXR1cm4gdC5jb25jYXQoYSxhLnZpc3VhbFZpZXdwb3J0fHxbXSxJbChyKT9yOltdLGUmJm4/WmwoZSk6W10pfXJldHVybiB0LmNvbmNhdChyLFpsKHIsW10sbikpfWZ1bmN0aW9uIFFsKGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWZ1bmN0aW9uICRsKGUpe2xldCB0PXFsKGUpLG49cGFyc2VGbG9hdCh0LndpZHRoKXx8MCxyPXBhcnNlRmxvYXQodC5oZWlnaHQpfHwwLGk9UGwoZSksYT1pP2Uub2Zmc2V0V2lkdGg6bixvPWk/ZS5vZmZzZXRIZWlnaHQ6cixzPVVjKG4pIT09YXx8VWMocikhPT1vO3JldHVybiBzJiYobj1hLHI9bykse3dpZHRoOm4saGVpZ2h0OnIsJDpzfX1mdW5jdGlvbiBldShlKXtyZXR1cm4gTmwoZSk/ZTplLmNvbnRleHRFbGVtZW50fWZ1bmN0aW9uIHR1KGUpe2xldCB0PWV1KGUpO2lmKCFQbCh0KSlyZXR1cm4gR2MoMSk7bGV0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6aSwkOmF9PSRsKHQpLG89KGE/VWMobi53aWR0aCk6bi53aWR0aCkvcixzPShhP1VjKG4uaGVpZ2h0KTpuLmhlaWdodCkvaTtyZXR1cm4oIW98fCFOdW1iZXIuaXNGaW5pdGUobykpJiYobz0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpvLHk6c319dmFyIG51PUdjKDApO2Z1bmN0aW9uIHJ1KGUpe2xldCB0PSQoZSk7cmV0dXJuIUdsKCl8fCF0LnZpc3VhbFZpZXdwb3J0P251Ont4OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5OnQudmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfX1mdW5jdGlvbiBpdShlLHQsbil7cmV0dXJuIHQ9PT12b2lkIDAmJih0PSExKSwhIW4mJnQmJm49PT0kKGUpfWZ1bmN0aW9uIGF1KGUsdCxuLHIpe3Q9PT12b2lkIDAmJih0PSExKSxuPT09dm9pZCAwJiYobj0hMSk7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWV1KGUpLG89R2MoMSk7dCYmKHI/TmwocikmJihvPXR1KHIpKTpvPXR1KGUpKTtsZXQgcz1pdShhLG4scik/cnUoYSk6R2MoMCksYz0oaS5sZWZ0K3MueCkvby54LGw9KGkudG9wK3MueSkvby55LHU9aS53aWR0aC9vLngsZD1pLmhlaWdodC9vLnk7aWYoYSYmcil7bGV0IGU9JChhKSx0PU5sKHIpPyQocik6cixuPWUsaT1RbChuKTtmb3IoO2kmJnQhPT1uOyl7bGV0IGU9dHUoaSksdD1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9cWwoaSksYT10LmxlZnQrKGkuY2xpZW50TGVmdCtwYXJzZUZsb2F0KHIucGFkZGluZ0xlZnQpKSplLngsbz10LnRvcCsoaS5jbGllbnRUb3ArcGFyc2VGbG9hdChyLnBhZGRpbmdUb3ApKSplLnk7Yyo9ZS54LGwqPWUueSx1Kj1lLngsZCo9ZS55LGMrPWEsbCs9byxuPSQoaSksaT1RbChuKX19cmV0dXJuIHBsKHt3aWR0aDp1LGhlaWdodDpkLHg6Yyx5Omx9KX1mdW5jdGlvbiBvdShlLHQpe2xldCBuPUpsKGUpLnNjcm9sbExlZnQ7cmV0dXJuIHQ/dC5sZWZ0K246YXUoamwoZSkpLmxlZnQrbn1mdW5jdGlvbiBzdShlLHQpe2xldCBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6bi5sZWZ0K3Quc2Nyb2xsTGVmdC1vdShlLG4pLHk6bi50b3ArdC5zY3JvbGxUb3B9fWZ1bmN0aW9uIGN1KGUpe2xldHtlbGVtZW50czp0LHJlY3Q6bixvZmZzZXRQYXJlbnQ6cixzdHJhdGVneTppfT1lLGE9aT09PWBmaXhlZGAsbz1qbChyKSxzPXQ/UmwodC5mbG9hdGluZyk6ITE7aWYocj09PW98fHMmJmEpcmV0dXJuIG47bGV0IGM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sbD1HYygxKSx1PUdjKDApLGQ9UGwocik7aWYoKGR8fCFhKSYmKChBbChyKSE9PWBib2R5YHx8SWwobykpJiYoYz1KbChyKSksZCkpe2xldCBlPWF1KHIpO2w9dHUociksdS54PWUueCtyLmNsaWVudExlZnQsdS55PWUueStyLmNsaWVudFRvcH1sZXQgZj1vJiYhZCYmIWE/c3UobyxjKTpHYygwKTtyZXR1cm57d2lkdGg6bi53aWR0aCpsLngsaGVpZ2h0Om4uaGVpZ2h0KmwueSx4Om4ueCpsLngtYy5zY3JvbGxMZWZ0KmwueCt1LngrZi54LHk6bi55KmwueS1jLnNjcm9sbFRvcCpsLnkrdS55K2YueX19ZnVuY3Rpb24gbHUoZSl7cmV0dXJuIGUuZ2V0Q2xpZW50UmVjdHM/QXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpOltdfWZ1bmN0aW9uIHV1KGUpe2xldCB0PUpsKGUpLG49ZS5vd25lckRvY3VtZW50LmJvZHkscj1IYyhlLnNjcm9sbFdpZHRoLGUuY2xpZW50V2lkdGgsbi5zY3JvbGxXaWR0aCxuLmNsaWVudFdpZHRoKSxpPUhjKGUuc2Nyb2xsSGVpZ2h0LGUuY2xpZW50SGVpZ2h0LG4uc2Nyb2xsSGVpZ2h0LG4uY2xpZW50SGVpZ2h0KSxhPS10LnNjcm9sbExlZnQrb3UoZSksbz0tdC5zY3JvbGxUb3A7cmV0dXJuIHFsKG4pLmRpcmVjdGlvbj09PWBydGxgJiYoYSs9SGMoZS5jbGllbnRXaWR0aCxuLmNsaWVudFdpZHRoKS1yKSx7d2lkdGg6cixoZWlnaHQ6aSx4OmEseTpvfX12YXIgZHU9MjU7ZnVuY3Rpb24gZnUoZSx0LG4pe249PT12b2lkIDAmJihuPWB2aWV3cG9ydGApO2xldCByPW49PT1gbGF5b3V0Vmlld3BvcnRgLGk9JChlKSxhPWpsKGUpLG89aS52aXN1YWxWaWV3cG9ydCxzPWEuY2xpZW50V2lkdGgsYz1hLmNsaWVudEhlaWdodCxsPTAsdT0wO2lmKG8pe2xldCBlPSFHbCgpfHx0PT09YGZpeGVkYDtyP2V8fChsPS1vLm9mZnNldExlZnQsdT0tby5vZmZzZXRUb3ApOihzPW8ud2lkdGgsYz1vLmhlaWdodCxlJiYobD1vLm9mZnNldExlZnQsdT1vLm9mZnNldFRvcCkpfWlmKG91KGEpPD0wKXtsZXQgZT1hLm93bmVyRG9jdW1lbnQsdD1lLmJvZHksbj1nZXRDb21wdXRlZFN0eWxlKHQpLHI9ZS5jb21wYXRNb2RlPT09YENTUzFDb21wYXRgJiZwYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KXx8MCxpPU1hdGguYWJzKGEuY2xpZW50V2lkdGgtdC5jbGllbnRXaWR0aC1yKSxvPWdldENvbXB1dGVkU3R5bGUoYSkuc2Nyb2xsYmFyR3V0dGVyPT09YHN0YWJsZSBib3RoLWVkZ2VzYD9pLzI6aTtvPD1kdSYmKHMtPW8pfXJldHVybnt3aWR0aDpzLGhlaWdodDpjLHg6bCx5OnV9fWZ1bmN0aW9uIHB1KGUsdCl7bGV0IG49YXUoZSwhMCx0PT09YGZpeGVkYCkscj1uLnRvcCtlLmNsaWVudFRvcCxpPW4ubGVmdCtlLmNsaWVudExlZnQsYT10dShlKTtyZXR1cm57d2lkdGg6ZS5jbGllbnRXaWR0aCphLngsaGVpZ2h0OmUuY2xpZW50SGVpZ2h0KmEueSx4OmkqYS54LHk6ciphLnl9fWZ1bmN0aW9uIG11KGUsdCxuKXtsZXQgcjtpZih0PT09YHZpZXdwb3J0YHx8dD09PWBsYXlvdXRWaWV3cG9ydGApcj1mdShlLG4sdCk7ZWxzZSBpZih0PT09YGRvY3VtZW50YClyPXV1KGpsKGUpKTtlbHNlIGlmKE5sKHQpKXI9cHUodCxuKTtlbHNle2xldCBuPXJ1KGUpO3I9e3g6dC54LW4ueCx5OnQueS1uLnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fXJldHVybiBwbChyKX1mdW5jdGlvbiBodShlLHQpe2xldCBuPXQuZ2V0KGUpO2lmKG4pcmV0dXJuIG47bGV0IHI9WmwoZSxbXSwhMSkuZmlsdGVyKGU9Pk5sKGUpJiZBbChlKSE9PWBib2R5YCksaT1udWxsLGE9cWwoZSkucG9zaXRpb249PT1gZml4ZWRgLG89YT9ZbChlKTplO2Zvcig7TmwobykmJiFLbChvKTspe2xldCBlPXFsKG8pLHQ9VWwobyksbj1pP2kucG9zaXRpb246YT9gZml4ZWRgOmBgOyF0JiYobj09PWBmaXhlZGB8fG49PT1gYWJzb2x1dGVgJiZlLnBvc2l0aW9uPT09YHN0YXRpY2ApP3I9ci5maWx0ZXIoZT0+ZSE9PW8pOmk9ZSxvPVlsKG8pfXJldHVybiB0LnNldChlLHIpLHJ9ZnVuY3Rpb24gZ3UoZSl7bGV0e2VsZW1lbnQ6dCxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Oml9PWUsYT1bLi4ubj09PWBjbGlwcGluZ0FuY2VzdG9yc2A/UmwodCk/W106aHUodCx0aGlzLl9jKTpbXS5jb25jYXQobikscl0sbz1tdSh0LGFbMF0saSkscz1vLnRvcCxjPW8ucmlnaHQsbD1vLmJvdHRvbSx1PW8ubGVmdDtmb3IobGV0IGU9MTtlPGEubGVuZ3RoO2UrKyl7bGV0IG49bXUodCxhW2VdLGkpO3M9SGMobi50b3AscyksYz1WYyhuLnJpZ2h0LGMpLGw9VmMobi5ib3R0b20sbCksdT1IYyhuLmxlZnQsdSl9cmV0dXJue3dpZHRoOmMtdSxoZWlnaHQ6bC1zLHg6dSx5OnN9fWZ1bmN0aW9uIF91KGUpe2xldHt3aWR0aDp0LGhlaWdodDpufT0kbChlKTtyZXR1cm57d2lkdGg6dCxoZWlnaHQ6bn19ZnVuY3Rpb24gdnUoZSx0LG4pe2xldCByPVBsKHQpLGk9amwodCksYT1uPT09YGZpeGVkYCxvPWF1KGUsITAsYSx0KSxzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGM9R2MoMCk7aWYoKHJ8fCFhKSYmKChBbCh0KSE9PWBib2R5YHx8SWwoaSkpJiYocz1KbCh0KSkscikpe2xldCBlPWF1KHQsITAsYSx0KTtjLng9ZS54K3QuY2xpZW50TGVmdCxjLnk9ZS55K3QuY2xpZW50VG9wfSFyJiZpJiYoYy54PW91KGkpKTtsZXQgbD1pJiYhciYmIWE/c3UoaSxzKTpHYygwKTtyZXR1cm57eDpvLmxlZnQrcy5zY3JvbGxMZWZ0LWMueC1sLngseTpvLnRvcCtzLnNjcm9sbFRvcC1jLnktbC55LHdpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0fX1mdW5jdGlvbiB5dShlKXtyZXR1cm4gcWwoZSkucG9zaXRpb249PT1gc3RhdGljYH1mdW5jdGlvbiBidShlLHQpe2lmKCFQbChlKXx8cWwoZSkucG9zaXRpb249PT1gZml4ZWRgKXJldHVybiBudWxsO2lmKHQpcmV0dXJuIHQoZSk7bGV0IG49ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGpsKGUpPT09biYmKG49bi5vd25lckRvY3VtZW50LmJvZHkpLG59ZnVuY3Rpb24geHUoZSx0KXtsZXQgbj0kKGUpO2lmKFJsKGUpKXJldHVybiBuO2lmKCFQbChlKSl7bGV0IHQ9WWwoZSk7Zm9yKDt0JiYhS2wodCk7KXtpZihObCh0KSYmIXl1KHQpKXJldHVybiB0O3Q9WWwodCl9cmV0dXJuIG59bGV0IHI9YnUoZSx0KTtmb3IoO3ImJkxsKHIpJiZ5dShyKTspcj1idShyLHQpO3JldHVybiByJiZLbChyKSYmeXUocikmJiFVbChyKT9uOnJ8fFdsKGUpfHxufXZhciBTdT1hc3luYyBmdW5jdGlvbihlKXtsZXQgdD10aGlzLmdldE9mZnNldFBhcmVudHx8eHUsbj10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCBuKGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6dnUoZS5yZWZlcmVuY2UsYXdhaXQgdChlLmZsb2F0aW5nKSxlLnN0cmF0ZWd5KSxmbG9hdGluZzp7eDowLHk6MCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19fTtmdW5jdGlvbiBDdShlKXtyZXR1cm4gcWwoZSkuZGlyZWN0aW9uPT09YHJ0bGB9dmFyIHd1PXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpjdSxnZXREb2N1bWVudEVsZW1lbnQ6amwsZ2V0Q2xpcHBpbmdSZWN0Omd1LGdldE9mZnNldFBhcmVudDp4dSxnZXRFbGVtZW50UmVjdHM6U3UsZ2V0Q2xpZW50UmVjdHM6bHUsZ2V0RGltZW5zaW9uczpfdSxnZXRTY2FsZTp0dSxpc0VsZW1lbnQ6TmwsaXNSVEw6Q3V9O2Z1bmN0aW9uIFR1KGUsdCl7cmV0dXJuIGUueD09PXQueCYmZS55PT09dC55JiZlLndpZHRoPT09dC53aWR0aCYmZS5oZWlnaHQ9PT10LmhlaWdodH1mdW5jdGlvbiBFdShlLHQsbil7bGV0IHI9bnVsbCxpLGE9amwoZSk7ZnVuY3Rpb24gbygpe3ZhciBlO2NsZWFyVGltZW91dChpKSwoZT1yKT09bnVsbHx8ZS5kaXNjb25uZWN0KCkscj1udWxsfWZ1bmN0aW9uIHMobixjKXtuPT09dm9pZCAwJiYobj0hMSksYz09PXZvaWQgMCYmKGM9MSksbygpO2xldCBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6dSx0b3A6ZCx3aWR0aDpmLGhlaWdodDpwfT1sO2lmKG58fHQoKSwhZnx8IXApcmV0dXJuO2xldCBtPVdjKGQpLGg9V2MoYS5jbGllbnRXaWR0aC0odStmKSksZz1XYyhhLmNsaWVudEhlaWdodC0oZCtwKSksXz1XYyh1KSx2PXtyb290TWFyZ2luOi1tK2BweCBgKy1oK2BweCBgKy1nK2BweCBgKy1fK2BweGAsdGhyZXNob2xkOkhjKDAsVmMoMSxjKSl8fDF9LHk9ITA7ZnVuY3Rpb24gYih0KXtsZXQgbj10WzBdLmludGVyc2VjdGlvblJhdGlvO2lmKCFUdShsLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKXJldHVybiBzKCk7aWYobiE9PWMpe2lmKCF5KXJldHVybiBzKCk7bj9zKCExLG4pOmk9c2V0VGltZW91dCgoKT0+e3MoITEsMWUtNyl9LDFlMyl9eT0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4udixyb290OmEub3duZXJEb2N1bWVudH0pfWNhdGNoe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsdil9ci5vYnNlcnZlKGUpfWxldCBjPSQoZSksbD0oKT0+cyhuKTtyZXR1cm4gYy5hZGRFdmVudExpc3RlbmVyKGByZXNpemVgLGwpLHMoITApLCgpPT57Yy5yZW1vdmVFdmVudExpc3RlbmVyKGByZXNpemVgLGwpLG8oKX19ZnVuY3Rpb24gRHUoZSx0LG4scil7cj09PXZvaWQgMCYmKHI9e30pO2xldHthbmNlc3RvclNjcm9sbDppPSEwLGFuY2VzdG9yUmVzaXplOmE9ITAsZWxlbWVudFJlc2l6ZTpvPXR5cGVvZiBSZXNpemVPYnNlcnZlcj09YGZ1bmN0aW9uYCxsYXlvdXRTaGlmdDpzPXR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcj09YGZ1bmN0aW9uYCxhbmltYXRpb25GcmFtZTpjPSExfT1yLGw9ZXUoZSksdT1pfHxhP1suLi5sP1psKGwpOltdLC4uLnQ/WmwodCk6W11dOltdO3UuZm9yRWFjaChlPT57aSYmZS5hZGRFdmVudExpc3RlbmVyKGBzY3JvbGxgLG4pLGEmJmUuYWRkRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxuKX0pO2xldCBkPWwmJnM/RXUobCxuLGEpOm51bGwsZj0tMSxwPW51bGw7byYmKHA9bmV3IFJlc2l6ZU9ic2VydmVyKGU9PntsZXRbcl09ZTtyJiZyLnRhcmdldD09PWwmJnAmJnQmJihwLnVub2JzZXJ2ZSh0KSxjYW5jZWxBbmltYXRpb25GcmFtZShmKSxmPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ZhciBlOyhlPXApPT1udWxsfHxlLm9ic2VydmUodCl9KSksbigpfSksbCYmIWMmJnAub2JzZXJ2ZShsKSx0JiZwLm9ic2VydmUodCkpO2xldCBtLGg9Yz9hdShlKTpudWxsO2MmJmcoKTtmdW5jdGlvbiBnKCl7bGV0IHQ9YXUoZSk7aCYmIVR1KGgsdCkmJm4oKSxoPXQsbT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZyl9cmV0dXJuIG4oKSwoKT0+e3ZhciBlO3UuZm9yRWFjaChlPT57aSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLG4pLGEmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcmVzaXplYCxuKX0pLGQ/LigpLChlPXApPT1udWxsfHxlLmRpc2Nvbm5lY3QoKSxwPW51bGwsYyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUobSl9fXZhciBPdT1UbCxrdT1FbCxBdT15bCxqdT1PbCxNdT1TbCxOdT12bCxQdT1EbCxGdT0oZSx0LG4pPT57bGV0IHI9bmV3IE1hcCxpPW4/P3t9LGE9ey4uLnd1LC4uLmkucGxhdGZvcm0sX2M6cn07cmV0dXJuIF9sKGUsdCx7Li4uaSxwbGF0Zm9ybTphfSl9O2Z1bmN0aW9uIEl1KGUpe3JldHVybiB0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmYCRlbGBpbiBlfWZ1bmN0aW9uIEx1KGUpe2lmKEl1KGUpKXtsZXQgdD1lLiRlbDtyZXR1cm4gTWwodCkmJkFsKHQpPT09YCNjb21tZW50YD9udWxsOnR9cmV0dXJuIGV9ZnVuY3Rpb24gUnUoZSl7cmV0dXJuIHR5cGVvZiBlPT1gZnVuY3Rpb25gP2UoKTpQKGUpfWZ1bmN0aW9uIHp1KGUpe3JldHVybntuYW1lOmBhcnJvd2Asb3B0aW9uczplLGZuKHQpe2xldCBuPUx1KFJ1KGUuZWxlbWVudCkpO3JldHVybiBuPT1udWxsP3t9Ok51KHtlbGVtZW50Om4scGFkZGluZzplLnBhZGRpbmd9KS5mbih0KX19fWZ1bmN0aW9uIEJ1KGUpe3JldHVybiB0eXBlb2Ygd2luZG93PmB1YD8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBWdShlLHQpe2xldCBuPUJ1KGUpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn1mdW5jdGlvbiBIdShlLHQsbil7bj09PXZvaWQgMCYmKG49e30pO2xldCByPW4ud2hpbGVFbGVtZW50c01vdW50ZWQsaT1JKCgpPT5SdShuLm9wZW4pPz8hMCksYT1JKCgpPT5SdShuLm1pZGRsZXdhcmUpKSxvPUkoKCk9PlJ1KG4ucGxhY2VtZW50KT8/YGJvdHRvbWApLHM9SSgoKT0+UnUobi5zdHJhdGVneSk/P2BhYnNvbHV0ZWApLGM9SSgoKT0+UnUobi50cmFuc2Zvcm0pPz8hMCksdT1JKCgpPT5MdShlLnZhbHVlKSksZD1JKCgpPT5MdSh0LnZhbHVlKSksZj1CKDApLHA9QigwKSxtPUIocy52YWx1ZSksaD1CKG8udmFsdWUpLGc9SGUoe30pLF89QighMSksdj1JKCgpPT57bGV0IGU9e3Bvc2l0aW9uOm0udmFsdWUsbGVmdDpgMGAsdG9wOmAwYH07aWYoIWQudmFsdWUpcmV0dXJuIGU7bGV0IHQ9VnUoZC52YWx1ZSxmLnZhbHVlKSxuPVZ1KGQudmFsdWUscC52YWx1ZSk7cmV0dXJuIGMudmFsdWU/ey4uLmUsdHJhbnNmb3JtOmB0cmFuc2xhdGUoYCt0K2BweCwgYCtuK2BweClgLC4uLkJ1KGQudmFsdWUpPj0xLjUmJnt3aWxsQ2hhbmdlOmB0cmFuc2Zvcm1gfX06e3Bvc2l0aW9uOm0udmFsdWUsbGVmdDp0K2BweGAsdG9wOm4rYHB4YH19KSx5O2Z1bmN0aW9uIGIoKXtpZih1LnZhbHVlPT1udWxsfHxkLnZhbHVlPT1udWxsKXJldHVybjtsZXQgZT1pLnZhbHVlO0Z1KHUudmFsdWUsZC52YWx1ZSx7bWlkZGxld2FyZTphLnZhbHVlLHBsYWNlbWVudDpvLnZhbHVlLHN0cmF0ZWd5OnMudmFsdWV9KS50aGVuKHQ9PntmLnZhbHVlPXQueCxwLnZhbHVlPXQueSxtLnZhbHVlPXQuc3RyYXRlZ3ksaC52YWx1ZT10LnBsYWNlbWVudCxnLnZhbHVlPXQubWlkZGxld2FyZURhdGEsXy52YWx1ZT1lIT09ITF9KX1mdW5jdGlvbiB4KCl7dHlwZW9mIHk9PWBmdW5jdGlvbmAmJih5KCkseT12b2lkIDApfWZ1bmN0aW9uIFMoKXtpZih4KCkscj09PXZvaWQgMCl7YigpO3JldHVybn1pZih1LnZhbHVlIT1udWxsJiZkLnZhbHVlIT1udWxsKXt5PXIodS52YWx1ZSxkLnZhbHVlLGIpO3JldHVybn19ZnVuY3Rpb24gQygpe2kudmFsdWV8fChfLnZhbHVlPSExKX1yZXR1cm4gbChbYSxvLHMsaV0sYix7Zmx1c2g6YHN5bmNgfSksbChbdSxkXSxTLHtmbHVzaDpgc3luY2B9KSxsKGksQyx7Zmx1c2g6YHN5bmNgfSksdHQoKSYmaXQoeCkse3g6RWUoZikseTpFZShwKSxzdHJhdGVneTpFZShtKSxwbGFjZW1lbnQ6RWUoaCksbWlkZGxld2FyZURhdGE6RWUoZyksaXNQb3NpdGlvbmVkOkVlKF8pLGZsb2F0aW5nU3R5bGVzOnYsdXBkYXRlOmJ9fXZhciBVdT1bYGRpcmBdLFd1PXtzaWRlOmBib3R0b21gLHNpZGVPZmZzZXQ6MCxzaWRlRmxpcDohMCxhbGlnbjpgY2VudGVyYCxhbGlnbk9mZnNldDowLGFsaWduRmxpcDohMCxhcnJvd1BhZGRpbmc6MCxoaWRlU2hpZnRlZEFycm93OiEwLGF2b2lkQ29sbGlzaW9uczohMCxjb2xsaXNpb25Cb3VuZGFyeTooKT0+W10sY29sbGlzaW9uUGFkZGluZzowLHN0aWNreTpgcGFydGlhbGAsaGlkZVdoZW5EZXRhY2hlZDohMSxwb3NpdGlvblN0cmF0ZWd5OmBmaXhlZGAsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpgb3B0aW1pemVkYCxwcmlvcml0aXplUG9zaXRpb246ITF9LFtHdSxLdV09YShgUG9wcGVyQ29udGVudGApLHF1PWooe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFBvcHBlckNvbnRlbnRgLHByb3BzOmQoe21lbW9EZXBlbmRlbmNpZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITF9LHNpZGU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sc2lkZU9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LHNpZGVGbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsaWduOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGFsaWduT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxjb2xsaXNpb25Cb3VuZGFyeTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxjb2xsaXNpb25QYWRkaW5nOnt0eXBlOltOdW1iZXIsT2JqZWN0XSxyZXF1aXJlZDohMX0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSx7Li4uV3V9KSxlbWl0czpbYHBsYWNlZGBdLHNldHVwKG4se2VtaXQ6cn0pe2xldCBpPW4sYT1yLG89TmMoKSx7Zm9yd2FyZFJlZjpzLGN1cnJlbnRFbGVtZW50OmN9PXQoKSxsPWUoSSgoKT0+aS5kaXIpKSx1PUIoKSxkPUIoKSx7d2lkdGg6ZixoZWlnaHQ6bX09WHMoZCksaD1JKCgpPT5pLnNpZGUrKGkuYWxpZ249PT1gY2VudGVyYD9gYDpgLSR7aS5hbGlnbn1gKSksZz1JKCgpPT50eXBlb2YgaS5jb2xsaXNpb25QYWRkaW5nPT1gbnVtYmVyYD9pLmNvbGxpc2lvblBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmkuY29sbGlzaW9uUGFkZGluZ30pLHY9SSgoKT0+QXJyYXkuaXNBcnJheShpLmNvbGxpc2lvbkJvdW5kYXJ5KT9pLmNvbGxpc2lvbkJvdW5kYXJ5OltpLmNvbGxpc2lvbkJvdW5kYXJ5XSkseT1JKCgpPT4oe3BhZGRpbmc6Zy52YWx1ZSxib3VuZGFyeTp2LnZhbHVlLmZpbHRlcihMYyksYWx0Qm91bmRhcnk6di52YWx1ZS5sZW5ndGg+MH0pKSx4PUkoKCk9Pih7bWFpbkF4aXM6aS5zaWRlRmxpcCxjcm9zc0F4aXM6aS5hbGlnbkZsaXB9KSksUz1JKCgpPT5bT3Uoe21haW5BeGlzOmkuc2lkZU9mZnNldCttLnZhbHVlLGFsaWdubWVudEF4aXM6aS5hbGlnbk9mZnNldH0pLGkucHJpb3JpdGl6ZVBvc2l0aW9uJiZpLmF2b2lkQ29sbGlzaW9ucyYmQXUoey4uLnkudmFsdWUsLi4ueC52YWx1ZX0pLGkuYXZvaWRDb2xsaXNpb25zJiZrdSh7bWFpbkF4aXM6ITAsY3Jvc3NBeGlzOiEhaS5wcmlvcml0aXplUG9zaXRpb24sbGltaXRlcjppLnN0aWNreT09PWBwYXJ0aWFsYD9QdSgpOnZvaWQgMCwuLi55LnZhbHVlfSksIWkucHJpb3JpdGl6ZVBvc2l0aW9uJiZpLmF2b2lkQ29sbGlzaW9ucyYmQXUoey4uLnkudmFsdWUsLi4ueC52YWx1ZX0pLGp1KHsuLi55LnZhbHVlLGFwcGx5Oih7ZWxlbWVudHM6ZSxyZWN0czp0LGF2YWlsYWJsZVdpZHRoOm4sYXZhaWxhYmxlSGVpZ2h0OnJ9KT0+e2xldHt3aWR0aDppLGhlaWdodDphfT10LnJlZmVyZW5jZSxvPWUuZmxvYXRpbmcuc3R5bGU7by5zZXRQcm9wZXJ0eShgLS1yZWthLXBvcHBlci1hdmFpbGFibGUtd2lkdGhgLGAke259cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHRgLGAke3J9cHhgKSxvLnNldFByb3BlcnR5KGAtLXJla2EtcG9wcGVyLWFuY2hvci13aWR0aGAsYCR7aX1weGApLG8uc2V0UHJvcGVydHkoYC0tcmVrYS1wb3BwZXItYW5jaG9yLWhlaWdodGAsYCR7YX1weGApfX0pLGQudmFsdWUmJnp1KHtlbGVtZW50OmQudmFsdWUscGFkZGluZzppLmFycm93UGFkZGluZ30pLFJjKHthcnJvd1dpZHRoOmYudmFsdWUsYXJyb3dIZWlnaHQ6bS52YWx1ZSxkaXI6bC52YWx1ZX0pLGkuaGlkZVdoZW5EZXRhY2hlZCYmTXUoe3N0cmF0ZWd5OmByZWZlcmVuY2VIaWRkZW5gLC4uLnkudmFsdWV9KV0pLHtmbG9hdGluZ1N0eWxlczpDLHBsYWNlbWVudDp3LGlzUG9zaXRpb25lZDpULG1pZGRsZXdhcmVEYXRhOkUsdXBkYXRlOmVlfT1IdShJKCgpPT5pLnJlZmVyZW5jZT8/by5hbmNob3IudmFsdWUpLHUse3N0cmF0ZWd5OmkucG9zaXRpb25TdHJhdGVneSxwbGFjZW1lbnQ6aCx3aGlsZUVsZW1lbnRzTW91bnRlZDooLi4uZSk9PkR1KC4uLmUse2xheW91dFNoaWZ0OiFpLmRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0LGFuaW1hdGlvbkZyYW1lOmkudXBkYXRlUG9zaXRpb25TdHJhdGVneT09PWBhbHdheXNgfSksbWlkZGxld2FyZTpTfSksRD1JKCgpPT56Yyh3LnZhbHVlKVswXSksbmU9SSgoKT0+emMody52YWx1ZSlbMV0pO3RlKCgpPT57VC52YWx1ZSYmYShgcGxhY2VkYCl9KTtsZXQgcmU9SSgoKT0+e2xldCBlPUUudmFsdWUuYXJyb3c/LmNlbnRlck9mZnNldCE9PTA7cmV0dXJuIGkuaGlkZVNoaWZ0ZWRBcnJvdyYmZX0pLE89QihgYCk7cmV0dXJuIEwoKCk9PntjLnZhbHVlJiYoTy52YWx1ZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjLnZhbHVlKS56SW5kZXgpfSksS3Uoe3BsYWNlZFNpZGU6RCxvbkFycm93Q2hhbmdlOmU9PmQudmFsdWU9ZSxhcnJvd1g6SSgoKT0+RS52YWx1ZS5hcnJvdz8ueD8/MCksYXJyb3dZOkkoKCk9PkUudmFsdWUuYXJyb3c/Lnk/PzApLHNob3VsZEhpZGVBcnJvdzpyZX0pLChlLHQpPT4oeigpLE4oYGRpdmAse3JlZl9rZXk6YGZsb2F0aW5nUmVmYCxyZWY6dSwiZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXIiOmBgLGRpcjpQKGwpLHN0eWxlOnV0KHsuLi5QKEMpLHRyYW5zZm9ybTpQKFQpP1AoQykudHJhbnNmb3JtOmB0cmFuc2xhdGUoMCwgLTIwMCUpYCxtaW5XaWR0aDpgbWF4LWNvbnRlbnRgLHpJbmRleDpPLnZhbHVlLCItLXJla2EtcG9wcGVyLXRyYW5zZm9ybS1vcmlnaW4iOltQKEUpLnRyYW5zZm9ybU9yaWdpbj8ueCxQKEUpLnRyYW5zZm9ybU9yaWdpbj8ueV0uam9pbihgIGApLC4uLlAoRSkuaGlkZT8ucmVmZXJlbmNlSGlkZGVuJiZ7dmlzaWJpbGl0eTpgaGlkZGVuYCxwb2ludGVyRXZlbnRzOmBub25lYH19KX0sW2kubWVtb0RlcGVuZGVuY2llcz9jZShbaS5hc0NoaWxkLGkuYXMsRC52YWx1ZSxuZS52YWx1ZSxQKFQpLC4uLk9iamVjdC52YWx1ZXMoZS4kYXR0cnMpLC4uLmkubWVtb0RlcGVuZGVuY2llc10sKCk9Pih6KCksVihQKHApLGIoe2tleTowLHJlZjpQKHMpfSxlLiRhdHRycyx7ImFzLWNoaWxkIjppLmFzQ2hpbGQsYXM6aS5hcywiZGF0YS1zaWRlIjpELnZhbHVlLCJkYXRhLWFsaWduIjpuZS52YWx1ZSxzdHlsZTp7YW5pbWF0aW9uOlAoVCk/dm9pZCAwOmBub25lYH19KSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGFzLWNoaWxkYCxgYXNgLGBkYXRhLXNpZGVgLGBkYXRhLWFsaWduYCxgc3R5bGVgXSkpLHQsMCk6KHooKSxWKFAocCksYih7a2V5OjEscmVmOlAocyl9LGUuJGF0dHJzLHsiYXMtY2hpbGQiOmkuYXNDaGlsZCxhczppLmFzLCJkYXRhLXNpZGUiOkQudmFsdWUsImRhdGEtYWxpZ24iOm5lLnZhbHVlLGRpcjpQKGwpLHN0eWxlOnthbmltYXRpb246UChUKT92b2lkIDA6YG5vbmVgfX0pLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgYXMtY2hpbGRgLGBhc2AsYGRhdGEtc2lkZWAsYGRhdGEtYWxpZ25gLGBkaXJgLGBzdHlsZWBdKSldLDEyLFV1KSl9fSk7ZnVuY3Rpb24gSnUoZSl7bGV0IHQ9cih7bm9uY2U6QigpfSk7cmV0dXJuIEkoKCk9PmU/LnZhbHVlfHx0Lm5vbmNlPy52YWx1ZSl9dmFyIFl1PVtgIGAsYEVudGVyYCxgQXJyb3dVcGAsYEFycm93RG93bmBdLFh1PVtgIGAsYEVudGVyYF07ZnVuY3Rpb24gWnUoZSx0LG4pe3JldHVybiBlPT09dm9pZCAwPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKGU9PlF1KGUsdCxuKSk6UXUoZSx0LG4pfWZ1bmN0aW9uIFF1KGUsdCxuKXtyZXR1cm4gZT09PXZvaWQgMHx8dD09PXZvaWQgMD8hMTp0eXBlb2YgZT09YHN0cmluZ2A/ZT09PXQ6dHlwZW9mIG49PWBmdW5jdGlvbmA/bihlLHQpOnR5cGVvZiBuPT1gc3RyaW5nYD9lPy5bbl09PT10Py5bbl06d3MoZSx0KX1mdW5jdGlvbiAkdShlKXtyZXR1cm4gZT09bnVsbHx8ZT09PWBgfHxBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD09PTB9dmFyIGVkPVtgdmFsdWVgXSxbdGQsbmRdPWEoYFNlbGVjdFJvb3RgKSxyZD1qKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RSb290YCxwcm9wczp7b3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxudWxsYWJsZVZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxieTp7dHlwZTpbU3RyaW5nLEZ1bmN0aW9uXSxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sbmFtZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LHJlcXVpcmVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYCxgdXBkYXRlOm9wZW5gXSxzZXR1cCh0LHtlbWl0Om59KXtsZXQgcj10LGk9bix7cmVxdWlyZWQ6YSxkaXNhYmxlZDpvLG11bHRpcGxlOnMsZGlyOmN9PSRlKHIpLGw9UyhyLGBtb2RlbFZhbHVlYCxpLHtkZWZhdWx0VmFsdWU6ci5kZWZhdWx0VmFsdWU/PyhzLnZhbHVlP1tdOnZvaWQgMCkscGFzc2l2ZTpyLm1vZGVsVmFsdWU9PT12b2lkIDAsZGVlcDohMH0pLHU9UyhyLGBvcGVuYCxpLHtkZWZhdWx0VmFsdWU6ci5kZWZhdWx0T3BlbixwYXNzaXZlOnIub3Blbj09PXZvaWQgMH0pLGQ9QigpLGY9QigpLHA9Qih7eDowLHk6MH0pLG09SSgoKT0+cy52YWx1ZSYmQXJyYXkuaXNBcnJheShsLnZhbHVlKT9sLnZhbHVlPy5sZW5ndGg9PT0wOkRzKGwudmFsdWUpKTtqYyh7aXNQcm92aWRlcjohMH0pO2xldCBoPWUoYyksZz16cyhkKSx2PUIobmV3IFNldCkseT1JKCgpPT5BcnJheS5mcm9tKHYudmFsdWUpLm1hcChlPT5lLnZhbHVlKS5qb2luKGA7YCkpO2Z1bmN0aW9uIHgoZSl7aWYocy52YWx1ZSl7bGV0IHQ9QXJyYXkuaXNBcnJheShsLnZhbHVlKT9bLi4ubC52YWx1ZV06W10sbj10LmZpbmRJbmRleCh0PT5RdSh0LGUsci5ieSkpO249PT0tMT90LnB1c2goZSk6dC5zcGxpY2UobiwxKSxsLnZhbHVlPVsuLi50XX1lbHNlIGwudmFsdWU9ZX1mdW5jdGlvbiBDKGUpe3JldHVybiBBcnJheS5mcm9tKHYudmFsdWUpLmZpbmQodD0+WnUoZSx0LnZhbHVlLHIuYnkpKX1yZXR1cm4gbmQoe3RyaWdnZXJFbGVtZW50OmQsb25UcmlnZ2VyQ2hhbmdlOmU9PntkLnZhbHVlPWV9LHZhbHVlRWxlbWVudDpmLG9uVmFsdWVFbGVtZW50Q2hhbmdlOmU9PntmLnZhbHVlPWV9LGNvbnRlbnRJZDpgYCxtb2RlbFZhbHVlOmwsb25WYWx1ZUNoYW5nZTp4LGJ5OnIuYnksb3Blbjp1LG11bHRpcGxlOnMscmVxdWlyZWQ6YSxvbk9wZW5DaGFuZ2U6ZT0+e3UudmFsdWU9ZX0sZGlyOmgsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOnAsZGlzYWJsZWQ6byxpc0VtcHR5TW9kZWxWYWx1ZTptLG9wdGlvbnNTZXQ6dixvbk9wdGlvbkFkZDplPT57bGV0IHQ9QyhlLnZhbHVlKTt0JiZ2LnZhbHVlLmRlbGV0ZSh0KSx2LnZhbHVlLmFkZChlKX0sb25PcHRpb25SZW1vdmU6ZT0+e2xldCB0PUMoZS52YWx1ZSk7dCYmdi52YWx1ZS5kZWxldGUodCl9fSksKGUsdCk9Pih6KCksVihQKEZjKSxudWxsLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCx7bW9kZWxWYWx1ZTpQKGwpLG9wZW46UCh1KX0pLFAoZykmJmUubmFtZT8oeigpLFYoaWQse2tleTp5LnZhbHVlLCJhcmlhLWhpZGRlbiI6YHRydWVgLHRhYmluZGV4OmAtMWAsbXVsdGlwbGU6UChzKSxyZXF1aXJlZDpQKGEpLG5hbWU6ZS5uYW1lLGF1dG9jb21wbGV0ZTplLmF1dG9jb21wbGV0ZSxkaXNhYmxlZDpQKG8pLHZhbHVlOlAobCl9LHtkZWZhdWx0Ol8oKCk9PltQKERzKShQKGwpKT8oeigpLE4oYG9wdGlvbmAse2tleTowLHZhbHVlOmUubnVsbGFibGVWYWx1ZX0sbnVsbCw4LGVkKSk6SChgdi1pZmAsITApLCh6KCEwKSxOKHcsbnVsbCxEZShBcnJheS5mcm9tKHYudmFsdWUpLGU9Pih6KCksTihgb3B0aW9uYCxiKHtrZXk6ZS52YWx1ZT8/YGB9LHtyZWZfZm9yOiEwfSxlKSxudWxsLDE2KSkpLDEyOCkpXSksXzoxfSw4LFtgbXVsdGlwbGVgLGByZXF1aXJlZGAsYG5hbWVgLGBhdXRvY29tcGxldGVgLGBkaXNhYmxlZGAsYHZhbHVlYF0pKTpIKGB2LWlmYCwhMCldKSxfOjN9KSl9fSksaWQ9aih7X19uYW1lOmBCdWJibGVTZWxlY3RgLHByb3BzOnthdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhdXRvZm9jdXM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9ybTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LG5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzaXplOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sdmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1CKCkscj10ZCgpO2woKCk9PnQudmFsdWUsKGUsdCk9PntsZXQgcj13aW5kb3cuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGB2YWx1ZWApLnNldDtpZihlIT09dCYmaSYmbi52YWx1ZSl7bGV0IHQ9bmV3IEV2ZW50KGBjaGFuZ2VgLHtidWJibGVzOiEwfSk7aS5jYWxsKG4udmFsdWUsZSksbi52YWx1ZS5kaXNwYXRjaEV2ZW50KHQpfX0pO2Z1bmN0aW9uIGkoZSl7ci5vblZhbHVlQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1yZXR1cm4oZSxyKT0+KHooKSxWKFAoTWMpLHsiYXMtY2hpbGQiOmBgfSx7ZGVmYXVsdDpfKCgpPT5bTShgc2VsZWN0YCxiKHtyZWZfa2V5OmBzZWxlY3RFbGVtZW50YCxyZWY6bn0sdCx7b25JbnB1dDppfSksW1IoZS4kc2xvdHMsYGRlZmF1bHRgKV0sMTYpXSksXzozfSkpfX0pLGFkPWooe19fbmFtZTpgU2VsZWN0UG9wcGVyUG9zaXRpb25gLHByb3BzOnttZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHN0YXJ0YH0sYWxpZ25PZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxhbGlnbkZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXZvaWRDb2xsaXNpb25zOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGNvbGxpc2lvbkJvdW5kYXJ5Ont0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGNvbGxpc2lvblBhZGRpbmc6e3R5cGU6W051bWJlcixPYmplY3RdLHJlcXVpcmVkOiExLGRlZmF1bHQ6MTB9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9aShlKTtyZXR1cm4oZSxuKT0+KHooKSxWKFAocXUpLGIoUCh0KSx7c3R5bGU6e2JveFNpemluZzpgYm9yZGVyLWJveGAsIi0tcmVrYS1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luIjpgdmFyKC0tcmVrYS1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbilgLCItLXJla2Etc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLXdpZHRoKWAsIi0tcmVrYS1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjpgdmFyKC0tcmVrYS1wb3BwZXItYXZhaWxhYmxlLWhlaWdodClgLCItLXJla2Etc2VsZWN0LXRyaWdnZXItd2lkdGgiOmB2YXIoLS1yZWthLXBvcHBlci1hbmNob3Itd2lkdGgpYCwiLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6YHZhcigtLXJla2EtcG9wcGVyLWFuY2hvci1oZWlnaHQpYH19KSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpfX0pLG9kPXtvblZpZXdwb3J0Q2hhbmdlOigpPT57fSxpdGVtVGV4dFJlZkNhbGxiYWNrOigpPT57fSxpdGVtUmVmQ2FsbGJhY2s6KCk9Pnt9fSxbc2QsY2RdPWEoYFNlbGVjdENvbnRlbnRgKSxsZD1qKHtfX25hbWU6YFNlbGVjdENvbnRlbnRJbXBsYCxwcm9wczp7cG9zaXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGl0ZW0tYWxpZ25lZGB9LGJvZHlMb2NrOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sbWVtb0RlcGVuZGVuY2llczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMX0sc2lkZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxzaWRlT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYWxpZ246e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzdGFydGB9LGFsaWduT2Zmc2V0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMX0sYWxpZ25GbGlwOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGF2b2lkQ29sbGlzaW9uczp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxjb2xsaXNpb25Cb3VuZGFyeTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxjb2xsaXNpb25QYWRkaW5nOnt0eXBlOltOdW1iZXIsT2JqZWN0XSxyZXF1aXJlZDohMX0sYXJyb3dQYWRkaW5nOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMX0saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxzdGlja3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxoaWRlV2hlbkRldGFjaGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHBvc2l0aW9uU3RyYXRlZ3k6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9fSxlbWl0czpbYGNsb3NlQXV0b0ZvY3VzYCxgZXNjYXBlS2V5RG93bmAsYHBvaW50ZXJEb3duT3V0c2lkZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCBuPWUscj10LGE9dGQoKTtMcygpLE5zKG4uYm9keUxvY2spO2xldHtDb2xsZWN0aW9uU2xvdDpvLGdldEl0ZW1zOnN9PWpjKCksYz1CKCk7WXMoYyk7bGV0e3NlYXJjaDp1LGhhbmRsZVR5cGVhaGVhZFNlYXJjaDpkfT1RcygpLGY9QigpLHA9QigpLG09QigpLGg9QighMSksZz1CKCExKSx2PUIoITEpO2Z1bmN0aW9uIHkoKXtwLnZhbHVlJiZjLnZhbHVlJiZPYyhbcC52YWx1ZSxjLnZhbHVlXSl9bChoLCgpPT57eSgpfSk7bGV0e29uT3BlbkNoYW5nZTpTLHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjpDfT1hO0woZT0+e2lmKCFjLnZhbHVlKXJldHVybjtsZXQgdD17eDowLHk6MH0sbj1lPT57dD17eDpNYXRoLmFicyhNYXRoLnJvdW5kKGUucGFnZVgpLShDLnZhbHVlPy54Pz8wKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKGUucGFnZVkpLShDLnZhbHVlPy55Pz8wKSl9fSxyPWU9PntlLnBvaW50ZXJUeXBlIT09YHRvdWNoYCYmKHQueDw9MTAmJnQueTw9MTA/ZS5wcmV2ZW50RGVmYXVsdCgpOmMudmFsdWU/LmNvbnRhaW5zKGUudGFyZ2V0KXx8UyghMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcm1vdmVgLG4pLEMudmFsdWU9bnVsbCl9O0MudmFsdWUhPT1udWxsJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihgcG9pbnRlcm1vdmVgLG4pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoYHBvaW50ZXJ1cGAscix7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLGUoKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGBwb2ludGVybW92ZWAsbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcG9pbnRlcnVwYCxyLHtjYXB0dXJlOiEwfSl9KX0pO2Z1bmN0aW9uIHcoZSl7bGV0IHQ9ZS5jdHJsS2V5fHxlLmFsdEtleXx8ZS5tZXRhS2V5O2lmKGUua2V5PT09YFRhYmAmJmUucHJldmVudERlZmF1bHQoKSwhdCYmZS5rZXkubGVuZ3RoPT09MSYmZChlLmtleSxzKCkpLFtgQXJyb3dVcGAsYEFycm93RG93bmAsYEhvbWVgLGBFbmRgXS5pbmNsdWRlcyhlLmtleSkpe2xldCB0PVsuLi5zKCkubWFwKGU9PmUucmVmKV07aWYoW2BBcnJvd1VwYCxgRW5kYF0uaW5jbHVkZXMoZS5rZXkpJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpKSxbYEFycm93VXBgLGBBcnJvd0Rvd25gXS5pbmNsdWRlcyhlLmtleSkpe2xldCBuPWUudGFyZ2V0LHI9dC5pbmRleE9mKG4pO3Q9dC5zbGljZShyKzEpfXNldFRpbWVvdXQoKCk9Pk9jKHQpKSxlLnByZXZlbnREZWZhdWx0KCl9fWxldCBUPUkoKCk9Pm4ucG9zaXRpb249PT1gcG9wcGVyYD9uOnt9KSxFPWkoVC52YWx1ZSk7cmV0dXJuIGNkKHtjb250ZW50OmMsdmlld3BvcnQ6ZixvblZpZXdwb3J0Q2hhbmdlOmU9PntmLnZhbHVlPWV9LGl0ZW1SZWZDYWxsYmFjazooZSx0LG4pPT57bGV0IHI9IWcudmFsdWUmJiFuLGk9WnUoYS5tb2RlbFZhbHVlLnZhbHVlLHQsYS5ieSk7aWYoYS5tdWx0aXBsZS52YWx1ZSl7aWYodi52YWx1ZSlyZXR1cm47KGl8fHIpJiYocC52YWx1ZT1lLGkmJih2LnZhbHVlPSEwKSl9ZWxzZShpfHxyKSYmKHAudmFsdWU9ZSk7ciYmKGcudmFsdWU9ITApfSxzZWxlY3RlZEl0ZW06cCxzZWxlY3RlZEl0ZW1UZXh0Om0sb25JdGVtTGVhdmU6KCk9PntjLnZhbHVlPy5mb2N1cygpfSxpdGVtVGV4dFJlZkNhbGxiYWNrOihlLHQsbik9PntsZXQgcj0hZy52YWx1ZSYmIW47KFp1KGEubW9kZWxWYWx1ZS52YWx1ZSx0LGEuYnkpfHxyKSYmKG0udmFsdWU9ZSl9LGZvY3VzU2VsZWN0ZWRJdGVtOnkscG9zaXRpb246bi5wb3NpdGlvbixpc1Bvc2l0aW9uZWQ6aCxzZWFyY2hSZWY6dX0pLChlLHQpPT4oeigpLFYoUChvKSxudWxsLHtkZWZhdWx0Ol8oKCk9PltGKFAod2MpLHsiYXMtY2hpbGQiOmBgLG9uTW91bnRBdXRvRm9jdXM6dFs2XXx8PXgoKCk9Pnt9LFtgcHJldmVudGBdKSxvblVubW91bnRBdXRvRm9jdXM6dFs3XXx8PWU9PntyKGBjbG9zZUF1dG9Gb2N1c2AsZSksIWUuZGVmYXVsdFByZXZlbnRlZCYmKFAoYSkudHJpZ2dlckVsZW1lbnQudmFsdWU/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksZS5wcmV2ZW50RGVmYXVsdCgpKX19LHtkZWZhdWx0Ol8oKCk9PltGKFAodWMpLHsiYXMtY2hpbGQiOmBgLCJkaXNhYmxlLW91dHNpZGUtcG9pbnRlci1ldmVudHMiOmUuZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzLG9uRm9jdXNPdXRzaWRlOnRbMl18fD14KCgpPT57fSxbYHByZXZlbnRgXSksb25EaXNtaXNzOnRbM118fD1lPT5QKGEpLm9uT3BlbkNoYW5nZSghMSksb25Fc2NhcGVLZXlEb3duOnRbNF18fD1lPT5yKGBlc2NhcGVLZXlEb3duYCxlKSxvblBvaW50ZXJEb3duT3V0c2lkZTp0WzVdfHw9ZT0+cihgcG9pbnRlckRvd25PdXRzaWRlYCxlKX0se2RlZmF1bHQ6XygoKT0+Wyh6KCksVihBZShlLnBvc2l0aW9uPT09YHBvcHBlcmA/YWQ6ZmQpLGIoey4uLmUuJGF0dHJzLC4uLlAoRSl9LHtpZDpQKGEpLmNvbnRlbnRJZCxyZWY6ZT0+e2lmKCFlKXJldHVybjtsZXQgdD1QKEQpKGUpO3Q/Lmhhc0F0dHJpYnV0ZShgZGF0YS1yZWthLXBvcHBlci1jb250ZW50LXdyYXBwZXJgKT9jLnZhbHVlPXQuZmlyc3RFbGVtZW50Q2hpbGQ6Yy52YWx1ZT10fSxyb2xlOmBsaXN0Ym94YCwiZGF0YS1zdGF0ZSI6UChhKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCxkaXI6UChhKS5kaXIudmFsdWUsc3R5bGU6e2Rpc3BsYXk6YGZsZXhgLGZsZXhEaXJlY3Rpb246YGNvbHVtbmAsb3V0bGluZTpgbm9uZWB9LG9uQ29udGV4dG1lbnU6dFswXXx8PXgoKCk9Pnt9LFtgcHJldmVudGBdKSxvblBsYWNlZDp0WzFdfHw9ZT0+aC52YWx1ZT0hMCxvbktleWRvd246d30pLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgLGBkYXRhLXN0YXRlYCxgZGlyYCxgb25LZXlkb3duYF0pKV0pLF86M30sOCxbYGRpc2FibGUtb3V0c2lkZS1wb2ludGVyLWV2ZW50c2BdKV0pLF86M30pXSksXzozfSkpfX0pLFt1ZCxkZF09YShgU2VsZWN0SXRlbUFsaWduZWRQb3NpdGlvbmApLGZkPWooe2luaGVyaXRBdHRyczohMSxfX25hbWU6YFNlbGVjdEl0ZW1BbGlnbmVkUG9zaXRpb25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHBsYWNlZGBdLHNldHVwKGUse2VtaXQ6bn0pe2xldCByPWUsaT1uLHtnZXRJdGVtczphfT1qYygpLG89dGQoKSxzPXNkKCksYz1CKCExKSxsPUIoITApLHU9QigpLHtmb3J3YXJkUmVmOmQsY3VycmVudEVsZW1lbnQ6Zn09dCgpLHt2aWV3cG9ydDptLHNlbGVjdGVkSXRlbTpoLHNlbGVjdGVkSXRlbVRleHQ6dixmb2N1c1NlbGVjdGVkSXRlbTp5fT1zO2Z1bmN0aW9uIHgoKXtpZihvLnRyaWdnZXJFbGVtZW50LnZhbHVlJiZvLnZhbHVlRWxlbWVudC52YWx1ZSYmdS52YWx1ZSYmZi52YWx1ZSYmbT8udmFsdWUmJmg/LnZhbHVlJiZ2Py52YWx1ZSl7bGV0IGU9by50cmlnZ2VyRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PWYudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1vLnZhbHVlRWxlbWVudC52YWx1ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXYudmFsdWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoby5kaXIudmFsdWUhPT1gcnRsYCl7bGV0IGk9ci5sZWZ0LXQubGVmdCxhPW4ubGVmdC1pLG89ZS5sZWZ0LWEscz1lLndpZHRoK28sYz1NYXRoLm1heChzLHQud2lkdGgpLGw9d2luZG93LmlubmVyV2lkdGgtMTAsZD1UcyhhLDEwLE1hdGgubWF4KDEwLGwtYykpO3UudmFsdWUuc3R5bGUubWluV2lkdGg9YCR7c31weGAsdS52YWx1ZS5zdHlsZS5sZWZ0PWAke2R9cHhgfWVsc2V7bGV0IGk9dC5yaWdodC1yLnJpZ2h0LGE9d2luZG93LmlubmVyV2lkdGgtbi5yaWdodC1pLG89d2luZG93LmlubmVyV2lkdGgtZS5yaWdodC1hLHM9ZS53aWR0aCtvLGM9TWF0aC5tYXgocyx0LndpZHRoKSxsPXdpbmRvdy5pbm5lcldpZHRoLTEwLGQ9VHMoYSwxMCxNYXRoLm1heCgxMCxsLWMpKTt1LnZhbHVlLnN0eWxlLm1pbldpZHRoPWAke3N9cHhgLHUudmFsdWUuc3R5bGUucmlnaHQ9YCR7ZH1weGB9bGV0IHM9YSgpLm1hcChlPT5lLnJlZiksbD13aW5kb3cuaW5uZXJIZWlnaHQtMjAsZD1tLnZhbHVlLnNjcm9sbEhlaWdodCxwPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYudmFsdWUpLGc9TnVtYmVyLnBhcnNlSW50KHAuYm9yZGVyVG9wV2lkdGgsMTApLF89TnVtYmVyLnBhcnNlSW50KHAucGFkZGluZ1RvcCwxMCkseT1OdW1iZXIucGFyc2VJbnQocC5ib3JkZXJCb3R0b21XaWR0aCwxMCksYj1OdW1iZXIucGFyc2VJbnQocC5wYWRkaW5nQm90dG9tLDEwKSx4PWcrXytkK2IreSxTPU1hdGgubWluKGgudmFsdWUub2Zmc2V0SGVpZ2h0KjUseCksQz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtLnZhbHVlKSx3PU51bWJlci5wYXJzZUludChDLnBhZGRpbmdUb3AsMTApLFQ9TnVtYmVyLnBhcnNlSW50KEMucGFkZGluZ0JvdHRvbSwxMCksRT1lLnRvcCtlLmhlaWdodC8yLTEwLGVlPWwtRSxEPWgudmFsdWUub2Zmc2V0SGVpZ2h0LzIsdGU9aC52YWx1ZS5vZmZzZXRUb3ArRCxuZT1nK18rdGUscmU9eC1uZTtpZihuZTw9RSl7bGV0IGU9aC52YWx1ZT09PXMuYXQoLTEpO3UudmFsdWUuc3R5bGUuYm90dG9tPWAwcHhgO2xldCB0PWYudmFsdWUuY2xpZW50SGVpZ2h0LW0udmFsdWUub2Zmc2V0VG9wLW0udmFsdWUub2Zmc2V0SGVpZ2h0LG49bmUrTWF0aC5tYXgoZWUsRCsoZT9UOjApK3QreSk7dS52YWx1ZS5zdHlsZS5oZWlnaHQ9YCR7bn1weGB9ZWxzZXtsZXQgZT1oLnZhbHVlPT09c1swXTt1LnZhbHVlLnN0eWxlLnRvcD1gMHB4YDtsZXQgdD1NYXRoLm1heChFLGcrbS52YWx1ZS5vZmZzZXRUb3ArKGU/dzowKStEKStyZTt1LnZhbHVlLnN0eWxlLmhlaWdodD1gJHt0fXB4YCxtLnZhbHVlLnNjcm9sbFRvcD1uZS1FK20udmFsdWUub2Zmc2V0VG9wfXUudmFsdWUuc3R5bGUubWFyZ2luPWAxMHB4IDBgLHUudmFsdWUuc3R5bGUubWluSGVpZ2h0PWAke1N9cHhgLHUudmFsdWUuc3R5bGUubWF4SGVpZ2h0PWAke2x9cHhgLGkoYHBsYWNlZGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+Yy52YWx1ZT0hMCl9fWxldCBTPUIoYGApO3ZlKGFzeW5jKCk9Pnthd2FpdCBBKCkseCgpLGYudmFsdWUmJihTLnZhbHVlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYudmFsdWUpLnpJbmRleCl9KTtmdW5jdGlvbiBDKGUpe2UmJmwudmFsdWU9PT0hMCYmKHgoKSx5Py4oKSxsLnZhbHVlPSExKX1yZXR1cm4gZyhvLnRyaWdnZXJFbGVtZW50LCgpPT57eCgpfSksZGQoe2NvbnRlbnRXcmFwcGVyOnUsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6YyxvblNjcm9sbEJ1dHRvbkNoYW5nZTpDfSksKGUsdCk9Pih6KCksTihgZGl2YCx7cmVmX2tleTpgY29udGVudFdyYXBwZXJFbGVtZW50YCxyZWY6dSxzdHlsZTp1dCh7ZGlzcGxheTpgZmxleGAsZmxleERpcmVjdGlvbjpgY29sdW1uYCxwb3NpdGlvbjpgZml4ZWRgLHpJbmRleDpTLnZhbHVlfSl9LFtGKFAocCksYih7cmVmOlAoZCksc3R5bGU6e2JveFNpemluZzpgYm9yZGVyLWJveGAsbWF4SGVpZ2h0OmAxMDAlYH19LHsuLi5lLiRhdHRycywuLi5yfSkse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpXSw0KSl9fSkscGQ9aih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0UHJvdmlkZXJgLHByb3BzOntjb250ZXh0Ont0eXBlOk9iamVjdCxyZXF1aXJlZDohMH19LHNldHVwKGUpe3JldHVybiBuZChlLmNvbnRleHQpLGNkKG9kKSwoZSx0KT0+UihlLiRzbG90cyxgZGVmYXVsdGApfX0pLG1kPXtrZXk6MX0saGQ9aih7aW5oZXJpdEF0dHJzOiExLF9fbmFtZTpgU2VsZWN0Q29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0scG9zaXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxib2R5TG9jazp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxtZW1vRGVwZW5kZW5jaWVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiExfSxzaWRlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9LHNpZGVPZmZzZXQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiExfSxzaWRlRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhbGlnbjp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhbGlnbk9mZnNldDp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sY29sbGlzaW9uQm91bmRhcnk6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sY29sbGlzaW9uUGFkZGluZzp7dHlwZTpbTnVtYmVyLE9iamVjdF0scmVxdWlyZWQ6ITF9LGFycm93UGFkZGluZzp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITF9LGhpZGVTaGlmdGVkQXJyb3c6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sc3RpY2t5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxwb3NpdGlvblN0cmF0ZWd5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sdXBkYXRlUG9zaXRpb25TdHJhdGVneTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRpc2FibGVVcGRhdGVPbkxheW91dFNoaWZ0Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHByaW9yaXRpemVQb3NpdGlvbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxyZWZlcmVuY2U6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX19LGVtaXRzOltgY2xvc2VBdXRvRm9jdXNgLGBlc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IHI9ZSxpPW4ocix0KSxhPXRkKCksbz1CKCk7dmUoKCk9PntvLnZhbHVlPW5ldyBEb2N1bWVudEZyYWdtZW50fSk7bGV0IHM9QigpLGM9SSgoKT0+ci5mb3JjZU1vdW50fHxhLm9wZW4udmFsdWUpLHU9QihjLnZhbHVlKSxkO2Z1bmN0aW9uIGYoKXtkJiY9KGNsZWFyVGltZW91dChkKSx2b2lkIDApfXJldHVybiBsKGMsKGUsdCxuKT0+e2YoKSxkPXNldFRpbWVvdXQoKCk9Pnt1LnZhbHVlPWMudmFsdWUsZD12b2lkIDB9KSxuKGYpfSksa2UoZiksKGUsdCk9PmMudmFsdWV8fHUudmFsdWV8fHMudmFsdWU/LnByZXNlbnQ/KHooKSxWKFAocmMpLHtrZXk6MCxyZWZfa2V5OmBwcmVzZW5jZVJlZmAscmVmOnMscHJlc2VudDpjLnZhbHVlfSx7ZGVmYXVsdDpfKCgpPT5bRihsZCx3ZShtKHsuLi5QKGkpLC4uLmUuJGF0dHJzfSkpLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KV0pLF86M30sOCxbYHByZXNlbnRgXSkpOm8udmFsdWU/KHooKSxOKGBkaXZgLG1kLFsoeigpLFYob2Use3RvOm8udmFsdWV9LFtGKHBkLHtjb250ZXh0OlAoYSl9LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bjb250ZXh0YF0pXSw4LFtgdG9gXSkpXSkpOkgoYHYtaWZgLCEwKX19KSxnZD1qKHtfX25hbWU6YFNlbGVjdEljb25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtyZXR1cm4oZSx0KT0+KHooKSxWKFAocCkseyJhcmlhLWhpZGRlbiI6YHRydWVgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGR9LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCx7fSwoKT0+W3RbMF18fD1LZShg4pa8YCldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgXSkpfX0pLFtfZCx2ZF09YShgU2VsZWN0SXRlbWApLHlkPWooe19fbmFtZTpgU2VsZWN0SXRlbWAscHJvcHM6e3ZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHRleHRWYWx1ZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgc2VsZWN0YF0sc2V0dXAoZSx7ZW1pdDpufSl7bGV0IHI9ZSxpPW4se2Rpc2FibGVkOmF9PSRlKHIpLHM9dGQoKSxjPXNkKCkse2ZvcndhcmRSZWY6bCxjdXJyZW50RWxlbWVudDp1fT10KCkse0NvbGxlY3Rpb25JdGVtOmR9PWpjKCksZj1JKCgpPT5adShzLm1vZGVsVmFsdWU/LnZhbHVlLHIudmFsdWUscy5ieSkpLG09QighMSksaD1CKHIudGV4dFZhbHVlPz9gYCksZz1vKHZvaWQgMCxgcmVrYS1zZWxlY3QtaXRlbS10ZXh0YCk7YXN5bmMgZnVuY3Rpb24gdihlKXtlLmRlZmF1bHRQcmV2ZW50ZWR8fEVzKGBzZWxlY3Quc2VsZWN0YCx5LHtvcmlnaW5hbEV2ZW50OmUsdmFsdWU6ci52YWx1ZX0pfWFzeW5jIGZ1bmN0aW9uIHkoZSl7YXdhaXQgQSgpLGkoYHNlbGVjdGAsZSksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGEudmFsdWV8fChzLm9uVmFsdWVDaGFuZ2Uoci52YWx1ZSkscy5tdWx0aXBsZS52YWx1ZXx8cy5vbk9wZW5DaGFuZ2UoITEpKSl9YXN5bmMgZnVuY3Rpb24gYihlKXthd2FpdCBBKCksIWUuZGVmYXVsdFByZXZlbnRlZCYmKGEudmFsdWU/Yy5vbkl0ZW1MZWF2ZT8uKCk6ZS5jdXJyZW50VGFyZ2V0Py5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pKX1hc3luYyBmdW5jdGlvbiBTKGUpe2F3YWl0IEEoKSwhZS5kZWZhdWx0UHJldmVudGVkJiZlLmN1cnJlbnRUYXJnZXQ9PT1aKCkmJmMub25JdGVtTGVhdmU/LigpfWFzeW5jIGZ1bmN0aW9uIEMoZSl7YXdhaXQgQSgpLCFlLmRlZmF1bHRQcmV2ZW50ZWQmJihjLnNlYXJjaFJlZj8udmFsdWU9PT1gYHx8ZS5rZXkhPT1gIGApJiYoWHUuaW5jbHVkZXMoZS5rZXkpJiZ2KGUpLGUua2V5PT09YCBgJiZlLnByZXZlbnREZWZhdWx0KCkpfWlmKHIudmFsdWU9PT1gYCl0aHJvdyBFcnJvcihgQSA8U2VsZWN0SXRlbSAvPiBtdXN0IGhhdmUgYSB2YWx1ZSBwcm9wIHRoYXQgaXMgbm90IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTZWxlY3QgdmFsdWUgY2FuIGJlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIHNlbGVjdGlvbiBhbmQgc2hvdyB0aGUgcGxhY2Vob2xkZXIuYCk7cmV0dXJuIHZlKCgpPT57dS52YWx1ZSYmYy5pdGVtUmVmQ2FsbGJhY2sodS52YWx1ZSxyLnZhbHVlLHIuZGlzYWJsZWQpfSksdmQoe3ZhbHVlOnIudmFsdWUsZGlzYWJsZWQ6YSx0ZXh0SWQ6Zyxpc1NlbGVjdGVkOmYsb25JdGVtVGV4dENoYW5nZTplPT57aC52YWx1ZT0oKGgudmFsdWV8fGU/LnRleHRDb250ZW50KT8/YGApLnRyaW0oKX19KSwoZSx0KT0+KHooKSxWKFAoZCkse3ZhbHVlOnt0ZXh0VmFsdWU6aC52YWx1ZX19LHtkZWZhdWx0Ol8oKCk9PltGKFAocCkse3JlZjpQKGwpLHJvbGU6YG9wdGlvbmAsImFyaWEtbGFiZWxsZWRieSI6UChnKSwiZGF0YS1oaWdobGlnaHRlZCI6bS52YWx1ZT9gYDp2b2lkIDAsImFyaWEtc2VsZWN0ZWQiOmYudmFsdWUsImRhdGEtc3RhdGUiOmYudmFsdWU/YGNoZWNrZWRgOmB1bmNoZWNrZWRgLCJhcmlhLWRpc2FibGVkIjpQKGEpfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOlAoYSk/YGA6dm9pZCAwLHRhYmluZGV4OlAoYSk/dm9pZCAwOi0xLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsb25Gb2N1czp0WzBdfHw9ZT0+bS52YWx1ZT0hMCxvbkJsdXI6dFsxXXx8PWU9Pm0udmFsdWU9ITEsb25Qb2ludGVydXA6dixvblBvaW50ZXJkb3duOnRbMl18fD1lPT57ZS5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG9uVG91Y2hlbmQ6dFszXXx8PXgoKCk9Pnt9LFtgcHJldmVudGAsYHN0b3BgXSksb25Qb2ludGVybW92ZTpiLG9uUG9pbnRlcmxlYXZlOlMsb25LZXlkb3duOkN9LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2BhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLWhpZ2hsaWdodGVkYCxgYXJpYS1zZWxlY3RlZGAsYGRhdGEtc3RhdGVgLGBhcmlhLWRpc2FibGVkYCxgZGF0YS1kaXNhYmxlZGAsYHRhYmluZGV4YCxgYXNgLGBhcy1jaGlsZGBdKV0pLF86M30sOCxbYHZhbHVlYF0pKX19KSxiZD1qKHtfX25hbWU6YFNlbGVjdEl0ZW1JbmRpY2F0b3JgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgdD1lLG49X2QoKTtyZXR1cm4oZSxyKT0+UChuKS5pc1NlbGVjdGVkLnZhbHVlPyh6KCksVihQKHApLGIoe2tleTowLCJhcmlhLWhpZGRlbiI6YHRydWVgfSx0KSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNikpOkgoYHYtaWZgLCEwKX19KSx4ZD1qKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RJdGVtVGV4dGAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBzcGFuYH19LHNldHVwKGUpe2xldCBuPWUscj10ZCgpLGk9c2QoKSxhPV9kKCkse2ZvcndhcmRSZWY6byxjdXJyZW50RWxlbWVudDpzfT10KCksYz1JKCgpPT4oe3ZhbHVlOmEudmFsdWUsZGlzYWJsZWQ6YS5kaXNhYmxlZC52YWx1ZSx0ZXh0Q29udGVudDpzLnZhbHVlPy50ZXh0Q29udGVudD8/YS52YWx1ZT8udG9TdHJpbmcoKT8/YGB9KSk7cmV0dXJuIHZlKCgpPT57cy52YWx1ZSYmKGEub25JdGVtVGV4dENoYW5nZShzLnZhbHVlKSxpLml0ZW1UZXh0UmVmQ2FsbGJhY2socy52YWx1ZSxhLnZhbHVlLGEuZGlzYWJsZWQudmFsdWUpLHIub25PcHRpb25BZGQoYy52YWx1ZSkpfSksa2UoKCk9PntyLm9uT3B0aW9uUmVtb3ZlKGMudmFsdWUpfSksKGUsdCk9Pih6KCksVihQKHApLGIoe2lkOlAoYSkudGV4dElkLHJlZjpQKG8pfSx7Li4ubiwuLi5lLiRhdHRyc30pLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2LFtgaWRgXSkpfX0pLFNkPWooe19fbmFtZTpgU2VsZWN0UG9ydGFsYCxwcm9wczp7dG86e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZGVmZXI6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sZm9yY2VNb3VudDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IHQ9ZTtyZXR1cm4oZSxuKT0+KHooKSxWKFAoa2MpLHdlKG0odCkpLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KSl9fSksQ2Q9aih7X19uYW1lOmBTZWxlY3RTY3JvbGxCdXR0b25JbXBsYCxlbWl0czpbYGF1dG9TY3JvbGxgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgbj10LHtnZXRJdGVtczpyfT1qYygpLGk9c2QoKSxhPUIobnVsbCk7ZnVuY3Rpb24gbygpe2EudmFsdWUhPT1udWxsJiYod2luZG93LmNsZWFySW50ZXJ2YWwoYS52YWx1ZSksYS52YWx1ZT1udWxsKX1MKCgpPT57cigpLm1hcChlPT5lLnJlZikuZmluZChlPT5lPT09WigpKT8uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOmBuZWFyZXN0YH0pfSk7ZnVuY3Rpb24gcygpe2EudmFsdWU9PT1udWxsJiYoYS52YWx1ZT13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9PntuKGBhdXRvU2Nyb2xsYCl9LDUwKSl9ZnVuY3Rpb24gYygpe2kub25JdGVtTGVhdmU/LigpLGEudmFsdWU9PT1udWxsJiYoYS52YWx1ZT13aW5kb3cuc2V0SW50ZXJ2YWwoKCk9PntuKGBhdXRvU2Nyb2xsYCl9LDUwKSl9cmV0dXJuIFQoKCk9Pm8oKSksKGUsdCk9Pih6KCksVihQKHApLGIoeyJhcmlhLWhpZGRlbiI6YHRydWVgLHN0eWxlOntmbGV4U2hyaW5rOjB9fSxlLiRwYXJlbnQ/LiRwcm9wcyx7b25Qb2ludGVyZG93bjpzLG9uUG9pbnRlcm1vdmU6YyxvblBvaW50ZXJsZWF2ZTp0WzBdfHw9KCk9PntvKCl9fSkse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpKX19KSx3ZD1qKHtfX25hbWU6YFNlbGVjdFNjcm9sbERvd25CdXR0b25gLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgbj1zZCgpLHI9bi5wb3NpdGlvbj09PWBpdGVtLWFsaWduZWRgP3VkKCk6dm9pZCAwLHtmb3J3YXJkUmVmOmksY3VycmVudEVsZW1lbnQ6YX09dCgpLG89QighMSk7cmV0dXJuIEwoZT0+e2lmKG4udmlld3BvcnQ/LnZhbHVlJiZuLmlzUG9zaXRpb25lZD8udmFsdWUpe2xldCB0PW4udmlld3BvcnQudmFsdWU7ZnVuY3Rpb24gcigpe2xldCBlPXQuc2Nyb2xsSGVpZ2h0LXQuY2xpZW50SGVpZ2h0O28udmFsdWU9TWF0aC5jZWlsKHQuc2Nyb2xsVG9wKTxlfXIoKSx0LmFkZEV2ZW50TGlzdGVuZXIoYHNjcm9sbGAsciksZSgoKT0+dC5yZW1vdmVFdmVudExpc3RlbmVyKGBzY3JvbGxgLHIpKX19KSxsKGEsKCk9PnthLnZhbHVlJiZyPy5vblNjcm9sbEJ1dHRvbkNoYW5nZShhLnZhbHVlKX0pLChlLHQpPT5vLnZhbHVlPyh6KCksVihDZCx7a2V5OjAscmVmOlAoaSksb25BdXRvU2Nyb2xsOnRbMF18fD0oKT0+e2xldHt2aWV3cG9ydDplLHNlbGVjdGVkSXRlbTp0fT1QKG4pO2U/LnZhbHVlJiZ0Py52YWx1ZSYmKGUudmFsdWUuc2Nyb2xsVG9wPWUudmFsdWUuc2Nyb2xsVG9wK3QudmFsdWUub2Zmc2V0SGVpZ2h0KX19LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDUxMikpOkgoYHYtaWZgLCEwKX19KSxUZD1qKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IG49c2QoKSxyPW4ucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD91ZCgpOnZvaWQgMCx7Zm9yd2FyZFJlZjppLGN1cnJlbnRFbGVtZW50OmF9PXQoKSxvPUIoITEpO3JldHVybiBMKGU9PntpZihuLnZpZXdwb3J0Py52YWx1ZSYmbi5pc1Bvc2l0aW9uZWQ/LnZhbHVlKXtsZXQgdD1uLnZpZXdwb3J0LnZhbHVlO2Z1bmN0aW9uIHIoKXtvLnZhbHVlPXQuc2Nyb2xsVG9wPjB9cigpLHQuYWRkRXZlbnRMaXN0ZW5lcihgc2Nyb2xsYCxyKSxlKCgpPT50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHNjcm9sbGAscikpfX0pLGwoYSwoKT0+e2EudmFsdWUmJnI/Lm9uU2Nyb2xsQnV0dG9uQ2hhbmdlKGEudmFsdWUpfSksKGUsdCk9Pm8udmFsdWU/KHooKSxWKENkLHtrZXk6MCxyZWY6UChpKSxvbkF1dG9TY3JvbGw6dFswXXx8PSgpPT57bGV0e3ZpZXdwb3J0OmUsc2VsZWN0ZWRJdGVtOnR9PVAobik7ZT8udmFsdWUmJnQ/LnZhbHVlJiYoZS52YWx1ZS5zY3JvbGxUb3A9ZS52YWx1ZS5zY3JvbGxUb3AtdC52YWx1ZS5vZmZzZXRIZWlnaHQpfX0se2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sNTEyKSk6SChgdi1pZmAsITApfX0pLEVkPWooe19fbmFtZTpgU2VsZWN0VHJpZ2dlcmAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHJlZmVyZW5jZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYnV0dG9uYH19LHNldHVwKGUpe2xldCBuPWUscj10ZCgpLHtmb3J3YXJkUmVmOmksY3VycmVudEVsZW1lbnQ6YX09dCgpLHM9SSgoKT0+ci5kaXNhYmxlZD8udmFsdWV8fG4uZGlzYWJsZWQpO3IuY29udGVudElkfHw9byh2b2lkIDAsYHJla2Etc2VsZWN0LWNvbnRlbnRgKSx2ZSgoKT0+e3Iub25UcmlnZ2VyQ2hhbmdlKGEudmFsdWUpfSk7bGV0e2dldEl0ZW1zOmN9PWpjKCkse3NlYXJjaDpsLGhhbmRsZVR5cGVhaGVhZFNlYXJjaDp1LHJlc2V0VHlwZWFoZWFkOmR9PVFzKCk7ZnVuY3Rpb24gZigpe3MudmFsdWV8fChyLm9uT3BlbkNoYW5nZSghMCksZCgpKX1mdW5jdGlvbiBtKGUpe2YoKSxyLnRyaWdnZXJQb2ludGVyRG93blBvc1JlZi52YWx1ZT17eDpNYXRoLnJvdW5kKGUucGFnZVgpLHk6TWF0aC5yb3VuZChlLnBhZ2VZKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5idXR0b249PT0wJiZlLmN0cmxLZXk9PT0hMX1sZXQgZz0hMTtmdW5jdGlvbiB2KGUpe2lmKGUucG9pbnRlclR5cGU9PT1gdG91Y2hgKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7bGV0IHQ9ZS50YXJnZXQ7dC5oYXNQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCkmJnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKSxoKGUpJiYobShlKSxnPSEwKX1mdW5jdGlvbiB5KGUpe2goZSkmJmUucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBiKGUpe2d8fGUuY3VycmVudFRhcmdldD8uZm9jdXMoKSxnPSExfXJldHVybihlLHQpPT4oeigpLFYoUChJYykseyJhcy1jaGlsZCI6YGAscmVmZXJlbmNlOmUucmVmZXJlbmNlfSx7ZGVmYXVsdDpfKCgpPT5bRihQKHApLHtyZWY6UChpKSxyb2xlOmBjb21ib2JveGAsdHlwZTplLmFzPT09YGJ1dHRvbmA/YGJ1dHRvbmA6dm9pZCAwLCJhcmlhLWNvbnRyb2xzIjpQKHIpLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6UChyKS5vcGVuLnZhbHVlfHwhMSwiYXJpYS1yZXF1aXJlZCI6UChyKS5yZXF1aXJlZD8udmFsdWUsImFyaWEtYXV0b2NvbXBsZXRlIjpgbm9uZWAsZGlzYWJsZWQ6cy52YWx1ZSxkaXI6UChyKT8uZGlyLnZhbHVlLCJkYXRhLXN0YXRlIjpQKHIpPy5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6cy52YWx1ZT9gYDp2b2lkIDAsImRhdGEtcGxhY2Vob2xkZXIiOlAoJHUpKFAocikubW9kZWxWYWx1ZT8udmFsdWUpP2BgOnZvaWQgMCwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzLG9uQ2xpY2s6YixvblBvaW50ZXJkb3duOnYsb25Nb3VzZWRvd246eSxvblBvaW50ZXJ1cDp0WzBdfHw9eChlPT57ZS5wb2ludGVyVHlwZT09PWB0b3VjaGAmJm0oZSl9LFtgcHJldmVudGBdKSxvbktleWRvd246dFsxXXx8PWU9PntsZXQgdD1QKGwpIT09YGA7IShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpJiZlLmtleS5sZW5ndGg9PT0xJiZ0JiZlLmtleT09PWAgYHx8KFAodSkoZS5rZXksUChjKSgpKSxQKFl1KS5pbmNsdWRlcyhlLmtleSkmJihmKCksZS5wcmV2ZW50RGVmYXVsdCgpKSl9fSx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgYXJpYS1yZXF1aXJlZGAsYGRpc2FibGVkYCxgZGlyYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkYXRhLXBsYWNlaG9sZGVyYCxgYXMtY2hpbGRgLGBhc2BdKV0pLF86M30sOCxbYHJlZmVyZW5jZWBdKSl9fSksRGQ9aih7X19uYW1lOmBTZWxlY3RWYWx1ZWAscHJvcHM6e3BsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMSxkZWZhdWx0OmBgfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITEsZGVmYXVsdDpgc3BhbmB9fSxzZXR1cChlKXtsZXQgbj1lLHtmb3J3YXJkUmVmOnIsY3VycmVudEVsZW1lbnQ6aX09dCgpLGE9dGQoKTt2ZSgoKT0+e2EudmFsdWVFbGVtZW50PWl9KTtsZXQgbz1JKCgpPT57bGV0IGU9W10sdD1BcnJheS5mcm9tKGEub3B0aW9uc1NldC52YWx1ZSksbj1lPT50LmZpbmQodD0+WnUoZSx0LnZhbHVlLGEuYnkpKTtyZXR1cm4gZT1BcnJheS5pc0FycmF5KGEubW9kZWxWYWx1ZS52YWx1ZSk/YS5tb2RlbFZhbHVlLnZhbHVlLm1hcChlPT5uKGUpPy50ZXh0Q29udGVudD8/YGApOltuKGEubW9kZWxWYWx1ZS52YWx1ZSk/LnRleHRDb250ZW50Pz9gYF0sZS5maWx0ZXIoQm9vbGVhbil9KSxzPUkoKCk9Pm8udmFsdWUubGVuZ3RoP28udmFsdWUuam9pbihgLCBgKTpuLnBsYWNlaG9sZGVyKTtyZXR1cm4oZSx0KT0+KHooKSxWKFAocCkse3JlZjpQKHIpLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsc3R5bGU6e3BvaW50ZXJFdmVudHM6YG5vbmVgfSwiZGF0YS1wbGFjZWhvbGRlciI6by52YWx1ZS5sZW5ndGg/dm9pZCAwOm4ucGxhY2Vob2xkZXJ9LHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCx7c2VsZWN0ZWRMYWJlbDpvLnZhbHVlLG1vZGVsVmFsdWU6UChhKS5tb2RlbFZhbHVlLnZhbHVlfSwoKT0+W0tlKGsocy52YWx1ZSksMSldKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLXBsYWNlaG9sZGVyYF0pKX19KSxPZD1qKHtfX25hbWU6YFNlbGVjdFZpZXdwb3J0YCxwcm9wczp7bm9uY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlKXtsZXQgbj1lLHtub25jZTpyfT0kZShuKSxpPUp1KHIpLGE9c2QoKSxvPWEucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYD91ZCgpOnZvaWQgMCx7Zm9yd2FyZFJlZjpzLGN1cnJlbnRFbGVtZW50OmN9PXQoKTt2ZSgoKT0+e2E/Lm9uVmlld3BvcnRDaGFuZ2UoYy52YWx1ZSl9KTtsZXQgbD1CKDApO2Z1bmN0aW9uIHUoZSl7bGV0IHQ9ZS5jdXJyZW50VGFyZ2V0LHtzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpuLGNvbnRlbnRXcmFwcGVyOnJ9PW8/P3t9O2lmKG4/LnZhbHVlJiZyPy52YWx1ZSl7bGV0IGU9TWF0aC5hYnMobC52YWx1ZS10LnNjcm9sbFRvcCk7aWYoZT4wKXtsZXQgbj13aW5kb3cuaW5uZXJIZWlnaHQtMjAsaT1OdW1iZXIucGFyc2VGbG9hdChyLnZhbHVlLnN0eWxlLm1pbkhlaWdodCksYT1OdW1iZXIucGFyc2VGbG9hdChyLnZhbHVlLnN0eWxlLmhlaWdodCksbz1NYXRoLm1heChpLGEpO2lmKG88bil7bGV0IGk9bytlLGE9TWF0aC5taW4obixpKSxzPWktYTtyLnZhbHVlLnN0eWxlLmhlaWdodD1gJHthfXB4YCxyLnZhbHVlLnN0eWxlLmJvdHRvbT09PWAwcHhgJiYodC5zY3JvbGxUb3A9cz4wP3M6MCxyLnZhbHVlLnN0eWxlLmp1c3RpZnlDb250ZW50PWBmbGV4LWVuZGApfX19bC52YWx1ZT10LnNjcm9sbFRvcH1yZXR1cm4oZSx0KT0+KHooKSxOKHcsbnVsbCxbRihQKHApLGIoe3JlZjpQKHMpLCJkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0IjpgYCxyb2xlOmBwcmVzZW50YXRpb25gfSx7Li4uZS4kYXR0cnMsLi4ubn0se3N0eWxlOntwb3NpdGlvbjpgcmVsYXRpdmVgLGZsZXg6MSxvdmVyZmxvdzpgaGlkZGVuIGF1dG9gfSxvblNjcm9sbDp1fSkse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sMTYpLEYoUChwKSx7YXM6YHN0eWxlYCxub25jZTpQKGkpfSx7ZGVmYXVsdDpfKCgpPT50WzBdfHw9W0tlKGAgLyogSGlkZSBzY3JvbGxiYXJzIGNyb3NzLWJyb3dzZXIgYW5kIGVuYWJsZSBtb21lbnR1bSBzY3JvbGwgZm9yIHRvdWNoIGRldmljZXMgKi8gW2RhdGEtcmVrYS1zZWxlY3Qtdmlld3BvcnRdIHsgc2Nyb2xsYmFyLXdpZHRoOm5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyB9IFtkYXRhLXJla2Etc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9IGApXSksXzoxLF9fOlswXX0sOCxbYG5vbmNlYF0pXSw2NCkpfX0pLGtkPWooe19fbmFtZTpgQ2FyZERlc2NyaXB0aW9uYCxwcm9wczp7Y2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWU7cmV0dXJuKGUsbik9Pih6KCksTihgZGl2YCx7ImRhdGEtc2xvdCI6YGNhcmQtZGVzY3JpcHRpb25gLGNsYXNzOmR0KFAoZ2UpKGB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbWAsdC5jbGFzcykpfSxbUihlLiRzbG90cyxgZGVmYXVsdGApXSwyKSl9fSksQWQ9aih7X19uYW1lOmBJbnB1dGAscHJvcHM6e2RlZmF1bHRWYWx1ZTp7fSxtb2RlbFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IG49ZSxyPVMobixgbW9kZWxWYWx1ZWAsdCx7cGFzc2l2ZTohMCxkZWZhdWx0VmFsdWU6bi5kZWZhdWx0VmFsdWV9KTtyZXR1cm4oZSx0KT0+ZWUoKHooKSxOKGBpbnB1dGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+YWUocik/ci52YWx1ZT1lOm51bGwsImRhdGEtc2xvdCI6YGlucHV0YCxjbGFzczpkdChQKGdlKShgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazphcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlLzUwIGRpc2FibGVkOmJnLWlucHV0LzUwIGRhcms6ZGlzYWJsZWQ6YmctaW5wdXQvODAgaC04IHJvdW5kZWQtbGcgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTIuNSBweS0xIHRleHQtYmFzZSB0cmFuc2l0aW9uLWNvbG9ycyBmaWxlOmgtNiBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBmb2N1cy12aXNpYmxlOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy0zIG1kOnRleHQtc20gdy1mdWxsIG1pbi13LTAgb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwYCxuLmNsYXNzKSl9LG51bGwsMikpLFtbcHQsUChyKV1dKX19KSxqZD17Y2xhc3M6YG14LWF1dG8gZmxleCBtaW4taC1bNzB2aF0gbWF4LXctbWQgZmxleC1jb2wganVzdGlmeS1jZW50ZXIgcHgtNGB9LE1kPXtjbGFzczpgZmxleCBzaXplLTEyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctcHJpbWFyeS8xMCB0ZXh0LXByaW1hcnlgfSxOZD17Y2xhc3M6YGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xYH0sUGQ9eyJhcmlhLWxhYmVsbGVkYnkiOmBhdXRoZ2F0ZS1zZWN1cml0eS1oZWFkaW5nYCxjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMS41IHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sRmQ9e2NsYXNzOmBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0xLjVgfSxJZD17Y2xhc3M6YGZsZXggaXRlbXMtc3RhcnQgZ2FwLTEuNWB9LExkPXtjbGFzczpgZmxleCBpdGVtcy1zdGFydCBnYXAtMS41YH0sUmQ9e2NsYXNzOmByZWxhdGl2ZWB9LHpkPSgoZSx0KT0+e2xldCBuPWUuX192Y2NPcHRzfHxlO2ZvcihsZXRbZSxyXW9mIHQpbltlXT1yO3JldHVybiBufSkoaih7X19uYW1lOmBBdXRoR2F0ZWAsc2V0dXAoZSl7bGV0IHQ9bHQoKSxuPWplKCkscj1CKGBgKSxpPUIoITEpLGE9QihudWxsKSxvPUkoKCk9PnIudmFsdWUudHJpbSgpIT09YGApO2Z1bmN0aW9uIHMoKXtsZXQgZT1yLnZhbHVlO3IudmFsdWU9YGAsdC5zdWJtaXQoZSksbi5yZWZyZXNoKCl9ZnVuY3Rpb24gYygpe0EoKCk9PmEudmFsdWU/LiRlbD8uZm9jdXMoKSl9cmV0dXJuIHZlKGMpLGwoKCk9PnQuZXJyb3IsZT0+e2UmJmMoKX0pLChlLG4pPT57bGV0IGM9c3QoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiB6KCksTihgZGl2YCxqZCxbRihQKGRlKSxudWxsLHtkZWZhdWx0Ol8oKCk9PltGKFAoZikse2NsYXNzOmBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlcmB9LHtkZWZhdWx0Ol8oKCk9PltNKGBkaXZgLE1kLFtGKGMse2ljb246UChVZSksY2xhc3M6YHNpemUtNWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxNKGBkaXZgLE5kLFtuWzNdfHw9TShgc3BhbmAse2NsYXNzOmB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZGB9LGBMTE0gR2F0ZXdheWAsLTEpLEYoUChsZSkse2NsYXNzOmB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRgfSx7ZGVmYXVsdDpfKCgpPT5bLi4ublsyXXx8PVtLZShgQWRtaW4ga2V5IHJlcXVpcmVkYCwtMSldXSksXzoxfSldKSxGKFAoa2QpLG51bGwse2RlZmF1bHQ6XygoKT0+Wy4uLm5bNF18fD1bS2UoYEVudGVyIGFuIGFkbWluIEFQSSBrZXkgdG8gY29udGludWUuYCwtMSldXSksXzoxfSldKSxfOjF9KSxGKFAoY3QpLHtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtNGB9LHtkZWZhdWx0Ol8oKCk9PltuWzEwXXx8PU0oYGgyYCx7aWQ6YGF1dGhnYXRlLXNlY3VyaXR5LWhlYWRpbmdgLGNsYXNzOmBzci1vbmx5YH0sYCBIb3cgdGhpcyBrZXkgaXMgaGFuZGxlZCBgLC0xKSxNKGB1bGAsUGQsW00oYGxpYCxGZCxbRihjLHtpY29uOlAoX2UpLGNsYXNzOmBtdC0wLjUgc2l6ZS0zIHNocmluay0wYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxuWzVdfHw9TShgc3BhbmAsbnVsbCxgS2VwdCBvbmx5IGluIHRoaXMgdGFiJ3Mgc2Vzc2lvbiBzdG9yYWdlYCwtMSldKSxNKGBsaWAsSWQsW0YoYyx7aWNvbjpQKF9lKSxjbGFzczpgbXQtMC41IHNpemUtMyBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSksbls2XXx8PU0oYHNwYW5gLG51bGwsYE5ldmVyIHdyaXR0ZW4gdG8gZGlza2AsLTEpXSksTShgbGlgLExkLFtGKGMse2ljb246UChfZSksY2xhc3M6YG10LTAuNSBzaXplLTMgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG5bN118fD1NKGBzcGFuYCxudWxsLGBTZW50IG9ubHkgdG8gdGhpcyBwYWdlJ3Mgb3duIC9hZG1pbi9hcGkvKiByZXF1ZXN0c2AsLTEpXSldKSxNKGBmb3JtYCx7Y2xhc3M6YGZsZXggZmxleC1jb2wgZ2FwLTNgLG9uU3VibWl0OngocyxbYHByZXZlbnRgXSl9LFtNKGBkaXZgLFJkLFtGKFAoQWQpLHtyZWZfa2V5OmBrZXlJbnB1dEVsYCxyZWY6YSxtb2RlbFZhbHVlOnIudmFsdWUsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOm5bMF18fD1lPT5yLnZhbHVlPWUsdHlwZTppLnZhbHVlP2B0ZXh0YDpgcGFzc3dvcmRgLGF1dG9jb21wbGV0ZTpgb2ZmYCxwbGFjZWhvbGRlcjpgQVBJIGtleWAsImFyaWEtbGFiZWwiOmBBZG1pbiBBUEkga2V5YCwiYXJpYS1pbnZhbGlkIjohIVAodCkuZXJyb3IsImFyaWEtZGVzY3JpYmVkYnkiOlAodCkuZXJyb3I/YGF1dGhnYXRlLWVycm9yYDp2b2lkIDAsY2xhc3M6ZHQoW2BoLTEwIHByLTEwYCx7ImF1dGhnYXRlLXNoYWtlIjpQKHQpLmVycm9yfV0pfSxudWxsLDgsW2Btb2RlbFZhbHVlYCxgdHlwZWAsYGFyaWEtaW52YWxpZGAsYGFyaWEtZGVzY3JpYmVkYnlgLGBjbGFzc2BdKSxGKFAoaCkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb24teHNgLGNsYXNzOmBhYnNvbHV0ZSB0b3AtMS8yIHJpZ2h0LTEuNSAtdHJhbnNsYXRlLXktMS8yIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRgLCJhcmlhLWxhYmVsIjppLnZhbHVlP2BIaWRlIGtleWA6YFNob3cga2V5YCxvbkNsaWNrOm5bMV18fD1lPT5pLnZhbHVlPSFpLnZhbHVlfSx7ZGVmYXVsdDpfKCgpPT5bRihjLHtpY29uOmkudmFsdWU/UChaZSk6UChDZSksY2xhc3M6YHNpemUtMy41YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGFyaWEtbGFiZWxgXSldKSxGKFAoaCkse3R5cGU6YHN1Ym1pdGAsY2xhc3M6YGgtMTAgdy1mdWxsYCxkaXNhYmxlZDohby52YWx1ZX0se2RlZmF1bHQ6XygoKT0+Wy4uLm5bOF18fD1bS2UoYCBDb250aW51ZSBgLC0xKV1dKSxfOjF9LDgsW2BkaXNhYmxlZGBdKV0sMzIpLFAodCkuZXJyb3I/KHooKSxWKFAoaHMpLHtrZXk6MCxpZDpgYXV0aGdhdGUtZXJyb3JgLHZhcmlhbnQ6YGRlc3RydWN0aXZlYH0se2RlZmF1bHQ6XygoKT0+W0YoUChfcyksbnVsbCx7ZGVmYXVsdDpfKCgpPT5bLi4ubls5XXx8PVtLZShgQXV0aGVudGljYXRpb24gZmFpbGVkYCwtMSldXSksXzoxfSksRihQKGdzKSxudWxsLHtkZWZhdWx0Ol8oKCk9PltLZShrKFAodCkuZXJyb3IpLDEpXSksXzoxfSldKSxfOjF9KSk6SChgYCwhMCldKSxfOjF9KV0pLF86MX0pXSl9fX0pLFtbYF9fc2NvcGVJZGAsYGRhdGEtdi1iNmQ2ZmIxZWBdXSksQmQ9e2NsYXNzOmBtdC0xIGxpc3QtZGlzYyBzcGFjZS15LTAuNSBwbC00IGZvbnQtbW9ubyB0ZXh0LXhzYH0sVmQ9e2tleTowLGNsYXNzOmBtdC0xIHRleHQteHNgfSxIZD1qKHtfX25hbWU6YENvbmZpZ1dhcm5pbmdzQmFubmVyYCxwcm9wczp7d2FybmluZ3M6e30sd2FybmluZ3NEcm9wcGVkOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49QighMSk7ZnVuY3Rpb24gcigpe24udmFsdWU9IW4udmFsdWV9cmV0dXJuKGUsaSk9PntsZXQgYT1zdChgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIHQud2FybmluZ3MubGVuZ3RoPjA/KHooKSxWKFAoaHMpLHtrZXk6MCx2YXJpYW50OmB3YXJuYH0se2RlZmF1bHQ6XygoKT0+W0YoYSx7aWNvbjpQKHFlKSxjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxGKFAoX3MpLHtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0se2RlZmF1bHQ6XygoKT0+W00oYHNwYW5gLG51bGwsayh0Lndhcm5pbmdzLmxlbmd0aCkrYCBjb25maWd1cmF0aW9uIGArayh0Lndhcm5pbmdzLmxlbmd0aD09PTE/YHdhcm5pbmdgOmB3YXJuaW5nc2ApLDEpLEYoUChoKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgeHNgLCJhcmlhLWV4cGFuZGVkIjpuLnZhbHVlLCJhcmlhLWxhYmVsIjpgJHtuLnZhbHVlP2BIaWRlYDpgU2hvd2B9IGNvbmZpZ3VyYXRpb24gd2FybmluZyBkZXRhaWxzYCxvbkNsaWNrOnJ9LHtkZWZhdWx0Ol8oKCk9PltLZShrKG4udmFsdWU/YEhpZGVgOmBTaG93YCksMSldKSxfOjF9LDgsW2BhcmlhLWV4cGFuZGVkYCxgYXJpYS1sYWJlbGBdKV0pLF86MX0pLG4udmFsdWU/KHooKSxWKFAoZ3MpLHtrZXk6MH0se2RlZmF1bHQ6XygoKT0+W00oYHVsYCxCZCxbKHooITApLE4odyxudWxsLERlKHQud2FybmluZ3MsKGUsdCk9Pih6KCksTihgbGlgLHtrZXk6dH0sayhlKSwxKSkpLDEyOCkpXSksdC53YXJuaW5nc0Ryb3BwZWQ/KHooKSxOKGBwYCxWZCxgYW5kIGArayh0Lndhcm5pbmdzRHJvcHBlZCkrYCBtb3JlIHdlcmUgbm90IGtlcHRgLDEpKTpIKGBgLCEwKV0pLF86MX0pKTpIKGBgLCEwKV0pLF86MX0pKTpIKGBgLCEwKX19fSksVWQ9aih7X19uYW1lOmBTZWxlY3RgLHByb3BzOntvcGVuOnt0eXBlOkJvb2xlYW59LGRlZmF1bHRPcGVuOnt0eXBlOkJvb2xlYW59LGRlZmF1bHRWYWx1ZTp7fSxtb2RlbFZhbHVlOnt9LG51bGxhYmxlVmFsdWU6e30sYnk6e3R5cGU6W1N0cmluZyxGdW5jdGlvbl19LGRpcjp7fSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxhdXRvY29tcGxldGU6e30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sbmFtZTp7fSxyZXF1aXJlZDp7dHlwZTpCb29sZWFufX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWAsYHVwZGF0ZTpvcGVuYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IHI9bihlLHQpO3JldHVybihlLHQpPT4oeigpLFYoUChyZCksYih7ImRhdGEtc2xvdCI6YHNlbGVjdGB9LFAocikpLHtkZWZhdWx0Ol8odD0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgLHdlKG0odCkpKV0pLF86M30sMTYpKX19KSxXZD1qKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBTZWxlY3RDb250ZW50YCxwcm9wczp7Zm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxwb3NpdGlvbjp7ZGVmYXVsdDpgaXRlbS1hbGlnbmVkYH0sYm9keUxvY2s6e3R5cGU6Qm9vbGVhbn0sbWVtb0RlcGVuZGVuY2llczp7fSxzaWRlOnt9LHNpZGVPZmZzZXQ6e30sc2lkZUZsaXA6e3R5cGU6Qm9vbGVhbn0sYWxpZ246e2RlZmF1bHQ6YGNlbnRlcmB9LGFsaWduT2Zmc2V0Ont9LGFsaWduRmxpcDp7dHlwZTpCb29sZWFufSxhdm9pZENvbGxpc2lvbnM6e3R5cGU6Qm9vbGVhbn0sY29sbGlzaW9uQm91bmRhcnk6e30sY29sbGlzaW9uUGFkZGluZzp7fSxhcnJvd1BhZGRpbmc6e30saGlkZVNoaWZ0ZWRBcnJvdzp7dHlwZTpCb29sZWFufSxzdGlja3k6e30saGlkZVdoZW5EZXRhY2hlZDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblN0cmF0ZWd5Ont9LHVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3k6e30sZGlzYWJsZVVwZGF0ZU9uTGF5b3V0U2hpZnQ6e3R5cGU6Qm9vbGVhbn0scHJpb3JpdGl6ZVBvc2l0aW9uOnt0eXBlOkJvb2xlYW59LHJlZmVyZW5jZTp7fSxkaXI6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6e3R5cGU6Qm9vbGVhbn0sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgY2xvc2VBdXRvRm9jdXNgLGBlc2NhcGVLZXlEb3duYCxgcG9pbnRlckRvd25PdXRzaWRlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IHI9ZSxpPXQsYT1tZShyLGBjbGFzc2ApLG89bihhLGkpO3JldHVybih0LG4pPT4oeigpLFYoUChTZCksbnVsbCx7ZGVmYXVsdDpfKCgpPT5bRihQKGhkKSxiKHsiZGF0YS1zbG90Ijpgc2VsZWN0LWNvbnRlbnRgLCJkYXRhLWFsaWduLXRyaWdnZXIiOmUucG9zaXRpb249PT1gaXRlbS1hbGlnbmVkYH0sey4uLnQuJGF0dHJzLC4uLlAobyl9LHtjbGFzczpQKGdlKShgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLW9wZW46YW5pbWF0ZS1pbiBkYXRhLWNsb3NlZDphbmltYXRlLW91dCBkYXRhLWNsb3NlZDpmYWRlLW91dC0wIGRhdGEtb3BlbjpmYWRlLWluLTAgZGF0YS1jbG9zZWQ6em9vbS1vdXQtOTUgZGF0YS1vcGVuOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmluZy1mb3JlZ3JvdW5kLzEwIG1pbi13LTM2IHJvdW5kZWQtbGcgc2hhZG93LW1kIHJpbmctMSBkdXJhdGlvbi0xMDAgZGF0YS1bc2lkZT1pbmxpbmUtc3RhcnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPWlubGluZS1lbmRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGNuLW1lbnUtdHJhbnNsdWNlbnQgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yZWthLXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG9yaWdpbi0oLS1yZWthLXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byBkYXRhLVthbGlnbi10cmlnZ2VyPXRydWVdOmFuaW1hdGUtbm9uZWAsZS5wb3NpdGlvbj09PWBwb3BwZXJgJiZgZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMWAsci5jbGFzcyl9KSx7ZGVmYXVsdDpfKCgpPT5bRihQKEpkKSksRihQKE9kKSx7ImRhdGEtcG9zaXRpb24iOmUucG9zaXRpb24sY2xhc3M6ZHQoUChnZSkoYGRhdGEtW3Bvc2l0aW9uPXBvcHBlcl06aC0oLS1yZWthLXNlbGVjdC10cmlnZ2VyLWhlaWdodCkgZGF0YS1bcG9zaXRpb249cG9wcGVyXTp3LWZ1bGwgZGF0YS1bcG9zaXRpb249cG9wcGVyXTptaW4tdy0oLS1yZWthLXNlbGVjdC10cmlnZ2VyLXdpZHRoKWApKX0se2RlZmF1bHQ6XygoKT0+W1IodC4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGRhdGEtcG9zaXRpb25gLGBjbGFzc2BdKSxGKFAocWQpKV0pLF86M30sMTYsW2BkYXRhLWFsaWduLXRyaWdnZXJgLGBjbGFzc2BdKV0pLF86M30pKX19KSxHZD17Y2xhc3M6YHBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJgfSxLZD1qKHtfX25hbWU6YFNlbGVjdEl0ZW1gLHByb3BzOnt2YWx1ZTp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSx0ZXh0VmFsdWU6e30sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPW1lKHQsYGNsYXNzYCkscj1pKG4pO3JldHVybihlLG4pPT4oeigpLFYoUCh5ZCksYih7ImRhdGEtc2xvdCI6YHNlbGVjdC1pdGVtYH0sUChyKSx7Y2xhc3M6UChnZSkoYGZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIG5vdC1kYXRhLVt2YXJpYW50PWRlc3RydWN0aXZlXTpmb2N1czoqKjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGdhcC0xLjUgcm91bmRlZC1tZCBweS0xIHByLTggcGwtMS41IHRleHQtc20gWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMiByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6XygoKT0+W00oYHNwYW5gLEdkLFtGKFAoYmQpLG51bGwse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGluZGljYXRvci1pY29uYCx7fSwoKT0+W0YoUChwcykse2ljb246UChfZSksY2xhc3M6YHBvaW50ZXItZXZlbnRzLW5vbmUgc2l6ZS0zLjVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9KV0pLEYoUCh4ZCksbnVsbCx7ZGVmYXVsdDpfKCgpPT5bUihlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLHFkPWooe19fbmFtZTpgU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1tZSh0LGBjbGFzc2ApLHI9aShuKTtyZXR1cm4oZSxuKT0+KHooKSxWKFAod2QpLGIoeyJkYXRhLXNsb3QiOmBzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uYH0sUChyKSx7Y2xhc3M6UChnZSkoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bRihQKHBzKSx7aWNvbjpQKHllKSxjbGFzczpgc2l6ZS00YH0sbnVsbCw4LFtgaWNvbmBdKV0pXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxKZD1qKHtfX25hbWU6YFNlbGVjdFNjcm9sbFVwQnV0dG9uYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPW1lKHQsYGNsYXNzYCkscj1pKG4pO3JldHVybihlLG4pPT4oeigpLFYoUChUZCksYih7ImRhdGEtc2xvdCI6YHNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uYH0sUChyKSx7Y2xhc3M6UChnZSkoYGJnLXBvcG92ZXIgei0xMCBmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xIFsmX3N2Zzpub3QoW2NsYXNzKj1zaXplLV0pXTpzaXplLTRgLHQuY2xhc3MpfSkse2RlZmF1bHQ6XygoKT0+W1IoZS4kc2xvdHMsYGRlZmF1bHRgLHt9LCgpPT5bRihQKHBzKSx7aWNvbjpQKHMpLGNsYXNzOmBzaXplLTRgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLFlkPWooe19fbmFtZTpgU2VsZWN0VHJpZ2dlcmAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW59LHJlZmVyZW5jZTp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19LHNpemU6e2RlZmF1bHQ6YGRlZmF1bHRgfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPW1lKHQsYGNsYXNzYCxgc2l6ZWApLHI9aShuKTtyZXR1cm4obixpKT0+KHooKSxWKFAoRWQpLGIoeyJkYXRhLXNsb3QiOmBzZWxlY3QtdHJpZ2dlcmAsImRhdGEtc2l6ZSI6ZS5zaXplfSxQKHIpLHtjbGFzczpQKGdlKShgYm9yZGVyLWlucHV0IGRhdGEtcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZ2FwLTEuNSByb3VuZGVkLWxnIGJvcmRlciBiZy10cmFuc3BhcmVudCBweS0yIHByLTIgcGwtMi41IHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTMgYXJpYS1pbnZhbGlkOnJpbmctMyBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOCBkYXRhLVtzaXplPXNtXTpoLTcgZGF0YS1bc2l6ZT1zbV06cm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTBweCldICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPXNpemUtXSldOnNpemUtNCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gd2hpdGVzcGFjZS1ub3dyYXAgb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMGAsdC5jbGFzcyl9KSx7ZGVmYXVsdDpfKCgpPT5bUihuLiRzbG90cyxgZGVmYXVsdGApLEYoUChnZCkseyJhcy1jaGlsZCI6YGB9LHtkZWZhdWx0Ol8oKCk9PltGKFAocHMpLHtpY29uOlAoeWUpLGNsYXNzOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2l6ZS00IHBvaW50ZXItZXZlbnRzLW5vbmVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSldKSxfOjN9LDE2LFtgZGF0YS1zaXplYCxgY2xhc3NgXSkpfX0pLFhkPWooe19fbmFtZTpgU2VsZWN0VmFsdWVgLHByb3BzOntwbGFjZWhvbGRlcjp7fSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9fSxzZXR1cChlKXtsZXQgdD1lO3JldHVybihlLG4pPT4oeigpLFYoUChEZCksYih7ImRhdGEtc2xvdCI6YHNlbGVjdC12YWx1ZWB9LHQpLHtkZWZhdWx0Ol8oKCk9PltSKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDE2KSl9fSksWmQ9e3Byb3ZpZGVyczpgbW9kZWxzYCx1c2FnZTpgY29uc3VtZXJzYCxjaGFydHM6YHNwZW5kYCxldmVudHM6YHJlbGlhYmlsaXR5YCx0YXJnZXRzOmB0YXJnZXRzYH07ZnVuY3Rpb24gUWQoZSl7bGV0IHQ9ZS5zdGFydHNXaXRoKGAjYCk/ZS5zbGljZSgxKTplLG49dC5pbmRleE9mKGA/YCkscj1uPT09LTE/dDp0LnNsaWNlKDAsbiksaT1uPT09LTE/YGA6dC5zbGljZShuKzEpO2lmKFBlKHIpKXJldHVybntwYWdlOnIscXVlcnk6bmV3IFVSTFNlYXJjaFBhcmFtcyhpKX07bGV0IGE9WmRbcl07cmV0dXJuIGE/e3BhZ2U6YSxxdWVyeTpuZXcgVVJMU2VhcmNoUGFyYW1zfTp7cGFnZTpRZSxxdWVyeTpuZXcgVVJMU2VhcmNoUGFyYW1zKGkpfX1mdW5jdGlvbiAkZChlLHQpe2xldCBuPU9iamVjdC5lbnRyaWVzKHQpLmZpbHRlcigoWyxlXSk9PmUhPT1gYCk7cmV0dXJuIG4ubGVuZ3RoPT09MD9gIyR7ZX1gOmAjJHtlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMobikudG9TdHJpbmcoKX1gfXZhciBlZj0vXihhbGx8Z3JvdXA6Lit8dXNlcjouK3xwcm92aWRlcjouKykkLztmdW5jdGlvbiB0ZihlKXtsZXQgdD17fSxuPWUuZ2V0KGByYW5nZWApO24mJm90KG4pJiYodC5yYW5nZT1uKTtsZXQgcj1lLmdldChgY21wYCk7ciYmVmUocikmJih0LmNtcD1yKTtsZXQgaT1lLmdldChgc2NvcGVgKTtyZXR1cm4gaSYmZWYudGVzdChpKSYmKHQuc2NvcGU9aSksdH12YXIgbmY9bmV3IFNldChbYHJhbmdlYCxgY21wYCxgc2NvcGVgXSk7ZnVuY3Rpb24gcmYoZSl7bGV0IHQ9e307Zm9yKGxldFtuLHJdb2YgZS5lbnRyaWVzKCkpbmYuaGFzKG4pfHxyIT09YGAmJih0W25dPXIpO3JldHVybiB0fXZhciBhZj14ZShgZmlsdGVyc2Ase3N0YXRlOigpPT4oe3JhbmdlOmA3ZGAsY21wOm50LHNjb3BlOmBhbGxgfSksZ2V0dGVyczp7d2luZG93OmU9PlNlW2UucmFuZ2VdLndpbmRvdyxzcGFuOmU9PlNlW2UucmFuZ2VdLnNwYW4sY21wU3BlYzplPT57bGV0IHQ9WGUoZS5yYW5nZSk7cmV0dXJuey4uLnQscmVxdWVzdGVkOmUuY21wPT09YHByZXZgJiZ0LmF2YWlsYWJsZX19fSxhY3Rpb25zOntzZXRGaWx0ZXJzKGUpe2UucmFuZ2UhPT12b2lkIDAmJih0aGlzLnJhbmdlPWUucmFuZ2UpLGUuY21wIT09dm9pZCAwJiYodGhpcy5jbXA9ZS5jbXApLGUuc2NvcGUhPT12b2lkIDAmJih0aGlzLnNjb3BlPWUuc2NvcGUpfX19KSxvZj17Y2xhc3M6YGZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBnYXAtM2B9LHNmPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LGNmPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtMWB9LGxmPWooe19fbmFtZTpgR2xvYmFsRmlsdGVyQmFyYCxzZXR1cChlKXtsZXQgdD17IjI0aCI6YExhc3QgMjQgaG91cnNgLCI0OGgiOmBMYXN0IDQ4IGhvdXJzYCwiN2QiOmBMYXN0IDcgZGF5c2AsIjE0ZCI6YExhc3QgMTQgZGF5c2AsIjMwZCI6YExhc3QgMzAgZGF5c2AsIjNtbyI6YExhc3QgMyBtb250aHNgLCI2bW8iOmBMYXN0IDYgbW9udGhzYCwiMTJtbyI6YExhc3QgMTIgbW9udGhzYH0sbj1hZigpO2Z1bmN0aW9uIHIoZSl7dHlwZW9mIGU9PWBzdHJpbmdgJiZuLnNldEZpbHRlcnMoe3JhbmdlOmV9KX1mdW5jdGlvbiBpKCl7aWYobi5jbXA9PT1gcHJldmApe24uc2V0RmlsdGVycyh7Y21wOmBub25lYH0pO3JldHVybn1uLmNtcFNwZWMuYXZhaWxhYmxlJiZuLnNldEZpbHRlcnMoe2NtcDpgcHJldmB9KX1sZXQgYT1JKCgpPT5uLmNtcCE9PWBwcmV2YCYmIW4uY21wU3BlYy5hdmFpbGFibGUpLG89SSgoKT0+bi5jbXA9PT1gcHJldmAmJiFuLmNtcFNwZWMuYXZhaWxhYmxlP2BDb21wYXJpc29uIHVuYXZhaWxhYmxlIGZvciB0aGlzIHJhbmdlICgke24uY21wU3BlYy5yZWFzb259KSDigJQgY2xpY2sgdG8gdHVybiBvZmZgOm4uY21wU3BlYy5hdmFpbGFibGU/YENvbXBhcmUgYWdhaW5zdCB0aGUgcHJldmlvdXMgZXF1YWwtbGVuZ3RoIHBlcmlvZGA6YENvbXBhcmlzb24gdW5hdmFpbGFibGUgZm9yIHRoaXMgcmFuZ2U6ICR7bi5jbXBTcGVjLnJlYXNvbn1gKSxzPUIobi5zY29wZSk7bCgoKT0+bi5zY29wZSxlPT57cy52YWx1ZT1lfSk7ZnVuY3Rpb24gYygpe2xldCBlPXMudmFsdWUudHJpbSgpfHxgYWxsYDtlZi50ZXN0KGUpP24uc2V0RmlsdGVycyh7c2NvcGU6ZX0pOnMudmFsdWU9bi5zY29wZX1yZXR1cm4oZSxsKT0+e2xldCB1PXN0KGBGb250QXdlc29tZUljb25gKTtyZXR1cm4geigpLE4oYGRpdmAsb2YsW00oYGRpdmAsc2YsW2xbMV18fD1NKGBsYWJlbGAse2lkOmBnbG9iYWwtZmlsdGVyLXJhbmdlLWxhYmVsYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgUmFuZ2VgLC0xKSxGKFAoVWQpLHsibW9kZWwtdmFsdWUiOlAobikucmFuZ2UsIm9uVXBkYXRlOm1vZGVsVmFsdWUiOnJ9LHtkZWZhdWx0Ol8oKCk9PltGKFAoWWQpLHsiYXJpYS1sYWJlbGxlZGJ5IjpgZ2xvYmFsLWZpbHRlci1yYW5nZS1sYWJlbGAsY2xhc3M6YHctMzZgfSx7ZGVmYXVsdDpfKCgpPT5bRihQKFhkKSldKSxfOjF9KSxGKFAoV2QpLG51bGwse2RlZmF1bHQ6XygoKT0+Wyh6KCEwKSxOKHcsbnVsbCxEZShQKEllKSxlPT4oeigpLFYoUChLZCkse2tleTplLHZhbHVlOmV9LHtkZWZhdWx0Ol8oKCk9PltLZShrKHRbZV0pLDEpXSksXzoyfSwxMDMyLFtgdmFsdWVgXSkpKSwxMjgpKV0pLF86MX0pXSksXzoxfSw4LFtgbW9kZWwtdmFsdWVgXSldKSxGKFAoaCkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgb3V0bGluZWAsImFyaWEtcHJlc3NlZCI6UChuKS5jbXA9PT1gcHJldmAsZGlzYWJsZWQ6YS52YWx1ZSx0aXRsZTpvLnZhbHVlLG9uQ2xpY2s6aX0se2RlZmF1bHQ6XygoKT0+W0YodSx7aWNvbjpQKGV0KSxjbGFzczpgc2l6ZS0zLjVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLGxbMl18fD1LZShgIHZzIHByZXZpb3VzIHBlcmlvZCBgLC0xKV0pLF86MX0sOCxbYGFyaWEtcHJlc3NlZGAsYGRpc2FibGVkYCxgdGl0bGVgXSksTShgZGl2YCxjZixbbFszXXx8PU0oYGxhYmVsYCx7Zm9yOmBnbG9iYWwtZmlsdGVyLXNjb3BlYCxjbGFzczpgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LW11dGVkLWZvcmVncm91bmRgfSxgU2NvcGVgLC0xKSxGKFAoQWQpLHtpZDpgZ2xvYmFsLWZpbHRlci1zY29wZWAsbW9kZWxWYWx1ZTpzLnZhbHVlLCJvblVwZGF0ZTptb2RlbFZhbHVlIjpsWzBdfHw9ZT0+cy52YWx1ZT1lLGNsYXNzOmB3LTQ4YCxwbGFjZWhvbGRlcjpgYWxsYCx0aXRsZTpgYWxsLCBncm91cDo8bmFtZT4sIHVzZXI6PG5hbWU+LCBvciBwcm92aWRlcjo8bmFtZT5gLG9uS2V5dXA6aGUoYyxbYGVudGVyYF0pLG9uQmx1cjpjfSxudWxsLDgsW2Btb2RlbFZhbHVlYF0pXSldKX19fSksdWY9eyJhcmlhLWxhYmVsIjpgUHJpbWFyeWAsY2xhc3M6YGZsZXggZ2FwLTEgb3ZlcmZsb3cteC1hdXRvIGJvcmRlci1iIGJvcmRlci1ib3JkZXIgcGItMiBtZDp3LTUyIG1kOnNocmluay0wIG1kOmZsZXgtY29sIG1kOmJvcmRlci1yIG1kOmJvcmRlci1iLTAgbWQ6cHItMyBtZDpwYi0wYH0sZGY9W2BhcmlhLWN1cnJlbnRgLGBvbkNsaWNrYF0sZmY9aih7X19uYW1lOmBTaWRlYmFyTmF2YCxzZXR1cChlKXtsZXQgdD1KZSgpO3JldHVybihlLG4pPT57bGV0IHI9c3QoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiB6KCksTihgbmF2YCx1ZixbKHooITApLE4odyxudWxsLERlKFAoV2UpLGU9Pih6KCksTihgYnV0dG9uYCx7a2V5OmUuaWQsdHlwZTpgYnV0dG9uYCwiYXJpYS1jdXJyZW50IjpQKHQpLnBhZ2U9PT1lLmlkP2BwYWdlYDp2b2lkIDAsY2xhc3M6ZHQoW2BmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIG1kOnctZnVsbGAsUCh0KS5wYWdlPT09ZS5pZD9gYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmRgOmB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYF0pLG9uQ2xpY2s6bj0+UCh0KS5nb1RvKGUuaWQpfSxbRihyLHtpY29uOmUuaWNvbixjbGFzczpgc2l6ZS00YCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKSxNKGBzcGFuYCxudWxsLGsoZS5sYWJlbCksMSldLDEwLGRmKSkpLDEyOCkpXSl9fX0pLHBmPXtjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBmaXhlZCBpbnNldC14LTAgYm90dG9tLTAgei01MCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgcC00IHBiLVtjYWxjKGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSsxcmVtKV0gc206aW5zZXQteC1hdXRvIHNtOnJpZ2h0LTQgc206Ym90dG9tLTQgc206dy05NmB9LG1mPXsiYXJpYS1saXZlIjpgYXNzZXJ0aXZlYCxjbGFzczpgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yYH0saGY9e2NsYXNzOmBtaW4tdy0wIGZsZXgtMSB0ZXh0LXNtYH0sZ2Y9eyJhcmlhLWxpdmUiOmBwb2xpdGVgLGNsYXNzOmBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTJgfSxfZj17Y2xhc3M6YG1pbi13LTAgZmxleC0xIHRleHQtc21gfSx2Zj1qKHtfX25hbWU6YFRvYXN0Vmlld3BvcnRgLHNldHVwKGUpe2xldCB0PWJlKCksbj17c3VjY2VzczpfZSxlcnJvcjpxZSxpbmZvOlllfSxyPXtzdWNjZXNzOmB0ZXh0LWNoYXJ0LXJlcXVlc3RzYCxlcnJvcjpgdGV4dC1kZXN0cnVjdGl2ZWAsaW5mbzpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0saT1JKCgpPT50LnRvYXN0cy5maWx0ZXIoZT0+ZS5raW5kIT09YGVycm9yYCkpLGE9SSgoKT0+dC50b2FzdHMuZmlsdGVyKGU9PmUua2luZD09PWBlcnJvcmApKTtmdW5jdGlvbiBvKGUpe3QuZGlzbWlzcyhlLmlkKX1yZXR1cm4oZSx0KT0+e2xldCBzPXN0KGBGb250QXdlc29tZUljb25gKTtyZXR1cm4geigpLE4oYGRpdmAscGYsW00oYGRpdmAsbWYsW0YoVGUse3RhZzpgZGl2YCxjbGFzczpgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yYCwiZW50ZXItYWN0aXZlLWNsYXNzIjpgdHJhbnNpdGlvbiBkdXJhdGlvbi0xNTAgZWFzZS1vdXQgbW90aW9uLXJlZHVjZTp0cmFuc2l0aW9uLW5vbmVgLCJlbnRlci1mcm9tLWNsYXNzIjpgdHJhbnNsYXRlLXktMiBvcGFjaXR5LTBgLCJsZWF2ZS1hY3RpdmUtY2xhc3MiOmB0cmFuc2l0aW9uIGR1cmF0aW9uLTE1MCBlYXNlLWluIG1vdGlvbi1yZWR1Y2U6dHJhbnNpdGlvbi1ub25lYCwibGVhdmUtdG8tY2xhc3MiOmBvcGFjaXR5LTBgfSx7ZGVmYXVsdDpfKCgpPT5bKHooITApLE4odyxudWxsLERlKGEudmFsdWUsZT0+KHooKSxOKGBkaXZgLHtrZXk6ZS5pZCxjbGFzczpgcG9pbnRlci1ldmVudHMtYXV0byBmbGV4IGl0ZW1zLXN0YXJ0IGdhcC0yIHJvdW5kZWQtbGcgYm9yZGVyIGJnLXBvcG92ZXIgcHgtMyBweS0yLjUgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LWxnYH0sW0Yocyx7aWNvbjpuW2Uua2luZF0sY2xhc3M6ZHQoW2BtdC0wLjUgc2l6ZS0zLjUgc2hyaW5rLTBgLHJbZS5raW5kXV0pLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYCxgY2xhc3NgXSksTShgcGAsaGYsayhlLm1lc3NhZ2UpLDEpLEYoUChoKSx7dHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbmAsY2xhc3M6YC1tdC0xIC1tci0xIHNpemUtNiBzaHJpbmstMCB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCwiYXJpYS1sYWJlbCI6YERpc21pc3M6ICR7ZS5tZXNzYWdlfWAsb25DbGljazp0PT5vKGUpfSx7ZGVmYXVsdDpfKCgpPT5bRihzLHtpY29uOlAoRmUpLGNsYXNzOmBzaXplLTNgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSw4LFtgYXJpYS1sYWJlbGAsYG9uQ2xpY2tgXSldKSkpLDEyOCkpXSksXzoxfSldKSxNKGBkaXZgLGdmLFtGKFRlLHt0YWc6YGRpdmAsY2xhc3M6YGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMmAsImVudGVyLWFjdGl2ZS1jbGFzcyI6YHRyYW5zaXRpb24gZHVyYXRpb24tMTUwIGVhc2Utb3V0IG1vdGlvbi1yZWR1Y2U6dHJhbnNpdGlvbi1ub25lYCwiZW50ZXItZnJvbS1jbGFzcyI6YHRyYW5zbGF0ZS15LTIgb3BhY2l0eS0wYCwibGVhdmUtYWN0aXZlLWNsYXNzIjpgdHJhbnNpdGlvbiBkdXJhdGlvbi0xNTAgZWFzZS1pbiBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZWAsImxlYXZlLXRvLWNsYXNzIjpgb3BhY2l0eS0wYH0se2RlZmF1bHQ6XygoKT0+Wyh6KCEwKSxOKHcsbnVsbCxEZShpLnZhbHVlLGU9Pih6KCksTihgZGl2YCx7a2V5OmUuaWQsY2xhc3M6YHBvaW50ZXItZXZlbnRzLWF1dG8gZmxleCBpdGVtcy1zdGFydCBnYXAtMiByb3VuZGVkLWxnIGJvcmRlciBiZy1wb3BvdmVyIHB4LTMgcHktMi41IHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1sZ2B9LFtGKHMse2ljb246bltlLmtpbmRdLGNsYXNzOmR0KFtgbXQtMC41IHNpemUtMy41IHNocmluay0wYCxyW2Uua2luZF1dKSwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmAsYGNsYXNzYF0pLE0oYHBgLF9mLGsoZS5tZXNzYWdlKSwxKSxGKFAoaCkse3R5cGU6YGJ1dHRvbmAsdmFyaWFudDpgZ2hvc3RgLHNpemU6YGljb25gLGNsYXNzOmAtbXQtMSAtbXItMSBzaXplLTYgc2hyaW5rLTAgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZGAsImFyaWEtbGFiZWwiOmBEaXNtaXNzOiAke2UubWVzc2FnZX1gLG9uQ2xpY2s6dD0+byhlKX0se2RlZmF1bHQ6XygoKT0+W0Yocyx7aWNvbjpQKEZlKSxjbGFzczpgc2l6ZS0zYCwiYXJpYS1oaWRkZW4iOmB0cnVlYH0sbnVsbCw4LFtgaWNvbmBdKV0pLF86MX0sOCxbYGFyaWEtbGFiZWxgLGBvbkNsaWNrYF0pXSkpKSwxMjgpKV0pLF86MX0pXSldKX19fSk7ZnVuY3Rpb24geWYoKXtsZXQgZT1hZigpLHQ9SmUoKTtmdW5jdGlvbiBuKG4pe2xldHtwYWdlOnIscXVlcnk6aX09UWQobiksYT10ZihpKTtlLnNldEZpbHRlcnMoe3JhbmdlOmEucmFuZ2U/P2A3ZGAsY21wOmEuY21wPz9gbm9uZWAsc2NvcGU6YS5zY29wZT8/YGFsbGB9KSx0LmdvVG8ocixyZihpKSl9bGV0IHI9dHlwZW9mIHdpbmRvdzxgdWA7ciYmbih3aW5kb3cubG9jYXRpb24uaGFzaCk7bGV0IGk9SSgoKT0+e2xldCBuPXt9O3JldHVybiBlLnJhbmdlIT09YDdkYCYmKG4ucmFuZ2U9ZS5yYW5nZSksZS5jbXAhPT1gbm9uZWAmJihuLmNtcD1lLmNtcCksZS5zY29wZSE9PWBhbGxgJiYobi5zY29wZT1lLnNjb3BlKSxPYmplY3QuYXNzaWduKG4sdC5wYXJhbXMpLCRkKHQucGFnZSxuKX0pO2woaSxlPT57ciYmd2luZG93LmxvY2F0aW9uLmhhc2ghPT1lJiZ3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCxgYCxlKX0se2ltbWVkaWF0ZTohMH0pO2Z1bmN0aW9uIGEoKXtuKHdpbmRvdy5sb2NhdGlvbi5oYXNoKX1yJiYodmUoKCk9PndpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxhKSksa2UoKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCxhKSkpfXZhciBiZj0oZnVuY3Rpb24oKXtsZXQgZT10eXBlb2YgZG9jdW1lbnQ8YHVgJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYCkucmVsTGlzdDtyZXR1cm4gZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApP2Btb2R1bGVwcmVsb2FkYDpgcHJlbG9hZGB9KSgpLHhmPWZ1bmN0aW9uKGUpe3JldHVybmAvYWRtaW4vYCtlfSxTZj17fSxDZj1mdW5jdGlvbihlLHQsbil7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYodCYmdC5sZW5ndGg+MCl7bGV0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGxpbmtgKSxpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXWApLGE9aT8ubm9uY2V8fGk/LmdldEF0dHJpYnV0ZShgbm9uY2VgKTtmdW5jdGlvbiBvKGUpe3JldHVybiBQcm9taXNlLmFsbChlLm1hcChlPT5Qcm9taXNlLnJlc29sdmUoZSkudGhlbihlPT4oe3N0YXR1czpgZnVsZmlsbGVkYCx2YWx1ZTplfSksZT0+KHtzdGF0dXM6YHJlamVjdGVkYCxyZWFzb246ZX0pKSkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGltcG9ydC5tZXRhLnJlc29sdmU/aW1wb3J0Lm1ldGEucmVzb2x2ZShlKTpuZXcgVVJMKGUsaW1wb3J0Lm1ldGEudXJsKS5ocmVmfXI9byh0Lm1hcCh0PT57aWYodD14Zih0LG4pLHQ9cyh0KSx0IGluIFNmKXJldHVybjtTZlt0XT0hMDtsZXQgcj10LmVuZHNXaXRoKGAuY3NzYCk7Zm9yKGxldCBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2xldCBpPWVbbl07aWYoaS5ocmVmPT09dCYmKCFyfHxpLnJlbD09PWBzdHlsZXNoZWV0YCkpcmV0dXJufWxldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGxpbmtgKTtpZihpLnJlbD1yP2BzdHlsZXNoZWV0YDpiZixyfHwoaS5hcz1gc2NyaXB0YCksaS5jcm9zc09yaWdpbj1gYCxpLmhyZWY9dCxhJiZpLnNldEF0dHJpYnV0ZShgbm9uY2VgLGEpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaSkscilyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9PntpLmFkZEV2ZW50TGlzdGVuZXIoYGxvYWRgLGUpLGkuYWRkRXZlbnRMaXN0ZW5lcihgZXJyb3JgLCgpPT5uKEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7dH1gKSkpfSl9KSl9ZnVuY3Rpb24gaShlKXtsZXQgdD1uZXcgRXZlbnQoYHZpdGU6cHJlbG9hZEVycm9yYCx7Y2FuY2VsYWJsZTohMH0pO2lmKHQucGF5bG9hZD1lLHdpbmRvdy5kaXNwYXRjaEV2ZW50KHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQpdGhyb3cgZX1yZXR1cm4gci50aGVuKHQ9Pntmb3IobGV0IGUgb2YgdHx8W10pZS5zdGF0dXM9PT1gcmVqZWN0ZWRgJiZpKGUucmVhc29uKTtyZXR1cm4gZSgpLmNhdGNoKGkpfSl9LHdmPXtjbGFzczpgZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTQgcHgtNCBweS02IHNtOnB4LTYgbGc6cHgtOGB9LFRmPXtjbGFzczpgZmxleCBmbGV4LWNvbCBnYXAtM2B9LEVmPXtjbGFzczpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yYH0sRGY9e2tleTowLGNsYXNzOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH0sT2Y9e2tleToyLGNsYXNzOmBmbGV4IGZsZXgtY29sIGdhcC00IG1kOmZsZXgtcm93YH0sa2Y9e2NsYXNzOmBtaW4tdy0wIGZsZXgtMWB9LEFmPWBodHRwczovL2dpdGh1Yi5jb20vbHVrYXN6cmFjenlsby90cmFlZmlrLWxsbWdhdGV3YXlgLGpmPXVlKGooe19fbmFtZTpgQXBwYCxzZXR1cChlKXtsZXQgdD1sdCgpLG49amUoKSxyPUplKCk7eWYoKTtsZXQgaT17aG9tZTpNZSgoKT0+Q2YoKCk9PmltcG9ydChgLi9Ib21lUGFnZS14eGFvLUR6US5qc2ApLF9fdml0ZV9fbWFwRGVwcyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl0pKSksc3BlbmQ6TWUoKCk9PkNmKCgpPT5pbXBvcnQoYC4vU3BlbmRQYWdlLTZaWDJxM1p2LmpzYCksX192aXRlX19tYXBEZXBzKFsxMywxLDIsMyw0LDUsMTQsMTUsNiwxNiwxNyw4LDE4LDE5LDExLDEyLDIwLDIxXSkpKSxjb25zdW1lcnM6TWUoKCk9PkNmKCgpPT5pbXBvcnQoYC4vQ29uc3VtZXJzUGFnZS1pOHNaVjlNWC5qc2ApLF9fdml0ZV9fbWFwRGVwcyhbMjIsMSwyMywzLDE3LDUsMiw0LDI0LDE0LDE1LDYsMTYsMjUsNyw4LDE4LDE5LDldKSkpLG1vZGVsczpNZSgoKT0+Q2YoKCk9PmltcG9ydChgLi9Nb2RlbHNQYWdlLUNjQTFSSEs2LmpzYCksX192aXRlX19tYXBEZXBzKFsyNiwxLDIzLDMsMTcsNSw0LDE0LDE1LDI1LDcsOCwxMiwyMCwyNywyMV0pKSkscmVsaWFiaWxpdHk6TWUoKCk9PkNmKCgpPT5pbXBvcnQoYC4vUmVsaWFiaWxpdHlQYWdlLTYtYno1eDZ6LmpzYCksX192aXRlX19tYXBEZXBzKFsyOCwxLDQsNSwxNCwyNSw3LDE5LDksMTAsMTIsMjcsMjFdKSkpLGNvbmZpZzpNZSgoKT0+Q2YoKCk9PmltcG9ydChgLi9Db25maWdQYWdlLTdJWWNhZlB3LmpzYCksX192aXRlX19tYXBEZXBzKFsyOSwxLDIsMywxNyw0LDI0XSkpKSx0YXJnZXRzOk1lKCgpPT5DZigoKT0+aW1wb3J0KGAuL1RhcmdldHNQYWdlLURZVVZoaHNqLmpzYCksX192aXRlX19tYXBEZXBzKFszMCwxLDQsNSwxNCwxNSwyNSwxOF0pKSl9LGE9SSgoKT0+aVtyLnBhZ2VdKSxvPUkoKCk9PntpZihuLmVycm9yKXJldHVybmByZWZyZXNoIGZhaWxlZDogJHtuLmVycm9yfWA7bGV0IGU9bi5vdmVydmlldz8ucmVwbGljYTtyZXR1cm5gbGFzdCB1cGRhdGVkICR7bi5sYXN0VXBkYXRlZD8udG9Mb2NhbGVUaW1lU3RyaW5nKCk/P2BgfSR7ZT9gIMK3IHJlcGxpY2EgJHtlfWA6YGB9YH0pLHM9SSgoKT0+IW4uZXJyb3ImJiFuLmxhc3RVcGRhdGVkKTtyZXR1cm4gdmUoKCk9PntuLnN0YXJ0UG9sbGluZygpfSksKGUscik9PntsZXQgaT1zdChgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIHooKSxOKHcsbnVsbCxbTShgZGl2YCx3ZixbTShgaGVhZGVyYCxUZixbTShgZGl2YCxFZixbclswXXx8PU0oYGgxYCx7Y2xhc3M6YHRleHQteGwgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodGB9LGBMTE0gR2F0ZXdheSDigJQgQWRtaW5gLC0xKSxGKFAoaCkse2FzOmBhYCxocmVmOkFmLHRhcmdldDpgX2JsYW5rYCxyZWw6YG5vb3BlbmVyIG5vcmVmZXJyZXJgLHZhcmlhbnQ6YGdob3N0YCxzaXplOmBpY29uYCwiYXJpYS1sYWJlbCI6YEdpdEh1YiByZXBvc2l0b3J5YCxjbGFzczpgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZGB9LHtkZWZhdWx0Ol8oKCk9PltGKGkse2ljb246UChtcyksY2xhc3M6YHNpemUtNGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9KV0pLFAodCkuaXNBdXRoZW50aWNhdGVkPyh6KCksTihgcGAsRGYsW3MudmFsdWU/KHooKSxOKHcse2tleTowfSxbRihQKHJ0KSx7Y2xhc3M6YGgtNCB3LTQwYH0pLHJbMV18fD1NKGBzcGFuYCx7Y2xhc3M6YHNyLW9ubHlgfSxgTG9hZGluZyBkYXNoYm9hcmQgc3RhdHVz4oCmYCwtMSldLDY0KSk6KHooKSxOKHcse2tleToxfSxbUChuKS5lcnJvcj8oeigpLFYoaSx7a2V5OjAsaWNvbjpQKGF0KSxjbGFzczpgc2l6ZS0zLjUgdGV4dC1kZXN0cnVjdGl2ZWAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSkpOkgoYGAsITApLE0oYHNwYW5gLHtjbGFzczpkdChQKG4pLmVycm9yP2B0ZXh0LWRlc3RydWN0aXZlYDp2b2lkIDApfSxrKG8udmFsdWUpLDMpXSw2NCkpXSkpOkgoYGAsITApLFAodCkuaXNBdXRoZW50aWNhdGVkPyh6KCksVihsZix7a2V5OjF9KSk6SChgYCwhMCldKSxQKHQpLmlzQXV0aGVudGljYXRlZD8oeigpLFYoSGQse2tleTowLHdhcm5pbmdzOlAobikub3ZlcnZpZXc/Lndhcm5pbmdzPz9bXSwid2FybmluZ3MtZHJvcHBlZCI6UChuKS5vdmVydmlldz8ud2FybmluZ3NEcm9wcGVkfSxudWxsLDgsW2B3YXJuaW5nc2AsYHdhcm5pbmdzLWRyb3BwZWRgXSkpOkgoYGAsITApLFAodCkuaXNBdXRoZW50aWNhdGVkPyh6KCksTihgZGl2YCxPZixbRihmZiksTShgbWFpbmAsa2YsWyh6KCksVihBZShhLnZhbHVlKSkpXSldKSk6KHooKSxWKHpkLHtrZXk6MX0pKV0pLEYodmYpXSw2NCl9fX0pKTtqZi51c2UoTmUoKSksamYuY29tcG9uZW50KGBGb250QXdlc29tZUljb25gLHBzKSxqZi5tb3VudChgI2FwcGApO2V4cG9ydHtwcyBhcyBfLFdkIGFzIGEsa2QgYXMgYyxEcyBhcyBkLFogYXMgZixocyBhcyBnLGdzIGFzIGgsS2QgYXMgaSxqYyBhcyBsLF9zIGFzIG0sWGQgYXMgbixVZCBhcyBvLHdzIGFzIHAsWWQgYXMgcixBZCBhcyBzLGFmIGFzIHQscmMgYXMgdX07", + "aW1wb3J0e2IgYXMgZX1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHtpIGFzIHR9ZnJvbSIuL3VzYWdlLWJhcnMtQkpPWUhzdVIuanMiO2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKGUpfHxlPD0wP251bGw6KGUtKE51bWJlci5pc0Zpbml0ZSh0KT90OjApKS9lfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGU9PT1udWxsP2Buby10cmFmZmljYDplPC45P2BzZXZlcmVgOmU8Ljk5P2BkZWdyYWRlZGA6YGhlYWx0aHlgfWZ1bmN0aW9uIGkoZSx0KXtsZXQgcj1uKGUsdCk7cmV0dXJuIHIhPT1udWxsJiZyPC45OX1mdW5jdGlvbiBhKGUpe3JldHVybiBlPj0xP2AxMDAlYDpgJHtNYXRoLmZsb29yKGUqMTAwKX0lYH1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIU51bWJlci5pc0Zpbml0ZShlKXx8ZTw9MD9udWxsOihOdW1iZXIuaXNGaW5pdGUodCk/dDowKS9lfWZ1bmN0aW9uIHMoZSx0PWBubyBkYXRhYCl7cmV0dXJuIGU9PT1udWxsP3Q6ZTw9MD9gMCVgOmAke01hdGguY2VpbChlKjEwMCl9JWB9ZnVuY3Rpb24gYyhlLHQsbil7cmV0dXJuIGU9PT0xP3Q6bn1mdW5jdGlvbiBsKGUsdCl7aWYoZTw9MClyZXR1cm5gbm8gdHJhZmZpYyBpbiB0aGUgbGFzdCBtaW51dGVgO2xldCByPW4oZSx0KSxpPXI9PT1udWxsP2BgOmAgKCR7YShyKX0pYDtyZXR1cm5gJHtlfSAke2MoZSxgYXR0ZW1wdGAsYGF0dGVtcHRzYCl9LCAke3R9ICR7Yyh0LGBmYWlsdXJlYCxgZmFpbHVyZXNgKX0gaW4gdGhlIGxhc3QgbWludXRlJHtpfWB9ZnVuY3Rpb24gdShlLHQpe2lmKGU8PTApcmV0dXJuYG5vIHRyYWZmaWMgdG9kYXlgO2xldCByPW4oZSx0KSxpPXI9PT1udWxsP2BgOmAgKCR7YShyKX0pYDtyZXR1cm5gJHtlfSAke2MoZSxgYXR0ZW1wdGAsYGF0dGVtcHRzYCl9LCAke3R9ICR7Yyh0LGBmYWlsdXJlYCxgZmFpbHVyZXNgKX0gdG9kYXkke2l9YH1mdW5jdGlvbiBkKHQpe2xldCBuPTA7Zm9yKGxldCByIG9mIHQpe2xldCB0PXIubGltaXRzPy5jb3N0UGVyTW9udGhVU0Q7dCYmdD4wJiYobis9ZSh0KSl9cmV0dXJuIG59ZnVuY3Rpb24gZihlLHQpe3JldHVybiB0PD0wP251bGw6ZS90fWZ1bmN0aW9uIHAoZSl7aWYoZT09PW51bGwpcmV0dXJuYG9rYDtzd2l0Y2godChlKSl7Y2FzZWBub3JtYWxgOnJldHVybmBva2A7Y2FzZWBhbWJlcmA6cmV0dXJuYHdhcm5gO2Nhc2VgcmVkYDpyZXR1cm5gY3JpdGljYWxgfX1mdW5jdGlvbiBtKGUpe3JldHVybiBlLmZpbHRlcihlPT5lLmhlYWx0aFN0YXRlIT09YGNsb3NlZGApLmxlbmd0aH1mdW5jdGlvbiBoKGUpe2xldCB0PTAscj0wO2ZvcihsZXQgbiBvZiBlKXQrPW4uYXR0ZW1wdHNNaW51dGUscis9bi5mYWlsdXJlc01pbnV0ZTtsZXQgaT1uKHQscik7cmV0dXJue3JhdGU6aT09PW51bGw/bnVsbDoxLWksYXR0ZW1wdHM6dCxmYWlsdXJlczpyfX1mdW5jdGlvbiBnKGUpe2lmKGU9PT1udWxsKXJldHVybmBva2A7c3dpdGNoKHIoMS1lKSl7Y2FzZWBuby10cmFmZmljYDpjYXNlYGhlYWx0aHlgOnJldHVybmBva2A7Y2FzZWBkZWdyYWRlZGA6cmV0dXJuYHdhcm5gO2Nhc2Vgc2V2ZXJlYDpyZXR1cm5gY3JpdGljYWxgfX1leHBvcnR7bSBhcyBhLHMgYXMgYyxsIGFzIGQsbyBhcyBmLGggYXMgaSxhIGFzIGwsbiBhcyBtLHAgYXMgbixkIGFzIG8sciBhcyBwLGcgYXMgcix1IGFzIHMsZiBhcyB0LGkgYXMgdX07", ), }, - "kpi-chm3BiuF.js": { + "reliability-CYdJq_74.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e2MgYXMgZSxvIGFzIHR9ZnJvbSIuL1RyeUxvbmdlclJhbmdlQnV0dG9uLUNqa1VuYU96LmpzIjtpbXBvcnR7YyBhcyBuLHMgYXMgcn1mcm9tIi4vcHJvdmlkZXItcmF0ZS1EVTdPZ1NlQi5qcyI7ZnVuY3Rpb24gaShlKXtsZXQgbj0wO2ZvcihsZXQgciBvZiBlKXtsZXQgZT1yLmxpbWl0cz8uY29zdFBlck1vbnRoVVNEO2UmJmU+MCYmKG4rPU1hdGgucm91bmQoZSp0KSl9cmV0dXJuIG59ZnVuY3Rpb24gYShlLHQpe3JldHVybiB0PD0wP251bGw6ZS90fWZ1bmN0aW9uIG8odCl7aWYodD09PW51bGwpcmV0dXJuYG9rYDtzd2l0Y2goZSh0KSl7Y2FzZWBub3JtYWxgOnJldHVybmBva2A7Y2FzZWBhbWJlcmA6cmV0dXJuYHdhcm5gO2Nhc2VgcmVkYDpyZXR1cm5gY3JpdGljYWxgfX1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmZpbHRlcihlPT5lLmhlYWx0aFN0YXRlIT09YGNsb3NlZGApLmxlbmd0aH1mdW5jdGlvbiBjKGUpe2xldCB0PTAscj0wO2ZvcihsZXQgbiBvZiBlKXQrPW4uYXR0ZW1wdHNNaW51dGUscis9bi5mYWlsdXJlc01pbnV0ZTtsZXQgaT1uKHQscik7cmV0dXJue3JhdGU6aT09PW51bGw/bnVsbDoxLWksYXR0ZW1wdHM6dCxmYWlsdXJlczpyfX1mdW5jdGlvbiBsKGUpe2lmKGU9PT1udWxsKXJldHVybmBva2A7c3dpdGNoKHIoMS1lKSl7Y2FzZWBuby10cmFmZmljYDpjYXNlYGhlYWx0aHlgOnJldHVybmBva2A7Y2FzZWBkZWdyYWRlZGA6cmV0dXJuYHdhcm5gO2Nhc2Vgc2V2ZXJlYDpyZXR1cm5gY3JpdGljYWxgfX1leHBvcnR7cyBhcyBhLGMgYXMgaSxvIGFzIG4saSBhcyBvLGwgYXMgcixhIGFzIHR9Ow==", + "aW1wb3J0e1MgYXMgZSxiIGFzIHQsZCBhcyBuLGcgYXMgcix4IGFzIGkseXQgYXMgYX1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO2ltcG9ydHt0IGFzIG99ZnJvbSIuL2luZGV4LTg4Q1RSTkhQLmpzIjtpbXBvcnR7biBhcyBzfWZyb20iLi9zZXJpZXMtRFpzdUFYSEkuanMiO2Z1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZT09PWBob3VyYD97d2luZG93OmBob3VyYCxzcGFuOnR9OmU9PT1gZGF5YD97d2luZG93OmBkYXlgLHNwYW46dH06e3dpbmRvdzpgZGF5YCxzcGFuOjMwfX1mdW5jdGlvbiBsKGUsdCl7bGV0IG49bmV3IE1hcCh0LnNlcmllcy5tYXAoZT0+W2Uuc2NvcGUsZS5wb2ludHNdKSk7cmV0dXJuIGUuc2VyaWVzLm1hcChlPT4oe3Njb3BlOmUuc2NvcGUscG9pbnRzOnMobi5nZXQoZS5zY29wZSk/P0FycmF5KGUucG9pbnRzLmxlbmd0aCkuZmlsbCgwKSxlLnBvaW50cyl9KSl9dmFyIHU9YShgcmVsaWFiaWxpdHlgLHtzdGF0ZTooKT0+KHtidWNrZXRzOltdLHdpbmRvd1VzZWQ6YGRheWAsZXJyb3JSYXRlOltdLHRpbWVvdXRzOltdLGZhaWxvdmVyczpbXSxyZWplY3Rpb25zOltdLHVucHJpY2VkOltdLGxvYWRpbmc6ITEsbGFzdFVwZGF0ZWQ6bnVsbCxlcnJvcjpgYCxyZXFJZDowLHByb3ZpZGVyUGVyZkJ1Y2tldHM6W10scHJvdmlkZXJQZXJmV2luZG93VXNlZDpgZGF5YCxwcm92aWRlclBlcmZQb2ludHM6W10scHJvdmlkZXJQZXJmTGF0ZW5jeUVuYWJsZWQ6ITEscHJvdmlkZXJQZXJmTG9hZGluZzohMSxwcm92aWRlclBlcmZFcnJvcjpgYCxwcm92aWRlclBlcmZSZXFJZDowfSksYWN0aW9uczp7YXN5bmMgZmV0Y2goKXtsZXQgYT1yKCkub3ZlcnZpZXc7aWYoYT09PW51bGwpcmV0dXJuO2xldCBzPSsrdGhpcy5yZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCBlPW8oKSxyPWEucHJvdmlkZXJzLm1hcChlPT5lLm5hbWUpO2lmKHIubGVuZ3RoPT09MCl7aWYocyE9PXRoaXMucmVxSWQpcmV0dXJuO3RoaXMuYnVja2V0cz1bXSx0aGlzLndpbmRvd1VzZWQ9YyhlLndpbmRvdyxlLnNwYW4pLndpbmRvdyx0aGlzLmVycm9yUmF0ZT1bXSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuZmFpbG92ZXJzPVtdLHRoaXMucmVqZWN0aW9ucz1bXSx0aGlzLnVucHJpY2VkPVtdLHRoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUsdGhpcy5lcnJvcj1gYDtyZXR1cm59bGV0e3dpbmRvdzppLHNwYW46dX09YyhlLndpbmRvdyxlLnNwYW4pLGQ9ci5tYXAoZT0+YHByb3ZpZGVyOiR7ZX1gKSxbZixwLG0saCxnLF9dPWF3YWl0IFByb21pc2UuYWxsKFt0KG4oe3Njb3BlOmQsbWV0cmljOmBhdHRlbXB0YCx3aW5kb3c6aSxzcGFuOnV9KSksdChuKHtzY29wZTpkLG1ldHJpYzpgZmFpbGAsd2luZG93Omksc3Bhbjp1fSkpLHQobih7c2NvcGU6ZCxtZXRyaWM6YHRpbWVvdXRgLHdpbmRvdzppLHNwYW46dX0pKSx0KG4oe3Njb3BlOmQsbWV0cmljOmBmb3ZlcmAsd2luZG93Omksc3Bhbjp1fSkpLHQobih7c2NvcGU6W2B0b3RhbGBdLG1ldHJpYzpgcmVqYCx3aW5kb3c6aSxzcGFuOnV9KSksdChuKHtzY29wZTpbYHRvdGFsYF0sbWV0cmljOmByNDAyYCx3aW5kb3c6aSxzcGFuOnV9KSldKTtpZihzIT09dGhpcy5yZXFJZClyZXR1cm47dGhpcy5idWNrZXRzPWYuYnVja2V0cyx0aGlzLndpbmRvd1VzZWQ9aSx0aGlzLmVycm9yUmF0ZT1sKGYscCksdGhpcy50aW1lb3V0cz1tLnNlcmllcyx0aGlzLmZhaWxvdmVycz1oLnNlcmllcyx0aGlzLnJlamVjdGlvbnM9Zy5zZXJpZXNbMF0/LnBvaW50cz8/W10sdGhpcy51bnByaWNlZD1fLnNlcmllc1swXT8ucG9pbnRzPz9bXSx0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGB9Y2F0Y2godCl7aWYocyE9PXRoaXMucmVxSWR8fGkodCkpcmV0dXJuO3RoaXMuZXJyb3I9ZSh0KX1maW5hbGx5e3M9PT10aGlzLnJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19LGFzeW5jIGZldGNoUHJvdmlkZXJQZXJmKG4pe2xldCBhPSsrdGhpcy5wcm92aWRlclBlcmZSZXFJZCxzPXIoKS5vdmVydmlldz8uZmVhdHVyZXMubGF0ZW5jeVN0YXRzPz8hMTtpZighbnx8IXMpe2lmKGEhPT10aGlzLnByb3ZpZGVyUGVyZlJlcUlkKXJldHVybjt0aGlzLnByb3ZpZGVyUGVyZkJ1Y2tldHM9W10sdGhpcy5wcm92aWRlclBlcmZQb2ludHM9W10sdGhpcy5wcm92aWRlclBlcmZMYXRlbmN5RW5hYmxlZD0hMSx0aGlzLnByb3ZpZGVyUGVyZkVycm9yPWBgLHRoaXMucHJvdmlkZXJQZXJmTG9hZGluZz0hMTtyZXR1cm59dGhpcy5wcm92aWRlclBlcmZMb2FkaW5nPSEwO3RyeXtsZXQgZT1vKCkse3dpbmRvdzpyLHNwYW46aX09YyhlLndpbmRvdyxlLnNwYW4pLHM9bmV3IFVSTFNlYXJjaFBhcmFtcyh7a2luZDpgcHJvdmlkZXJgLHdpbmRvdzpyLHNwYW46U3RyaW5nKGkpLHNlcmllczpgMWB9KTtzLmFwcGVuZChgaWRgLG4pO2xldCBsPWF3YWl0IHQoYC9hZG1pbi9hcGkvcGVyZm9ybWFuY2U/JHtzLnRvU3RyaW5nKCl9YCk7aWYoYSE9PXRoaXMucHJvdmlkZXJQZXJmUmVxSWQpcmV0dXJuO3RoaXMucHJvdmlkZXJQZXJmQnVja2V0cz1sLmJ1Y2tldHM/P1tdLHRoaXMucHJvdmlkZXJQZXJmV2luZG93VXNlZD1yLHRoaXMucHJvdmlkZXJQZXJmUG9pbnRzPWwucG9pbnRzPz9bXSx0aGlzLnByb3ZpZGVyUGVyZkxhdGVuY3lFbmFibGVkPWwubGF0ZW5jeUVuYWJsZWQsdGhpcy5wcm92aWRlclBlcmZFcnJvcj1gYH1jYXRjaCh0KXtpZihhIT09dGhpcy5wcm92aWRlclBlcmZSZXFJZHx8aSh0KSlyZXR1cm47dGhpcy5wcm92aWRlclBlcmZFcnJvcj1lKHQpfWZpbmFsbHl7YT09PXRoaXMucHJvdmlkZXJQZXJmUmVxSWQmJih0aGlzLnByb3ZpZGVyUGVyZkxvYWRpbmc9ITEpfX19fSk7ZXhwb3J0e3UgYXMgbixjIGFzIHR9Ow==", ), }, - "provider-rate-DU7OgSeB.js": { + "search-expand-B-wROcnL.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "ZnVuY3Rpb24gZShlLHQpe3JldHVybiFOdW1iZXIuaXNGaW5pdGUoZSl8fGU8PTA/bnVsbDooZS0oTnVtYmVyLmlzRmluaXRlKHQpP3Q6MCkpL2V9ZnVuY3Rpb24gdChlKXtyZXR1cm4gZT09PW51bGw/YG5vLXRyYWZmaWNgOmU8Ljk/YHNldmVyZWA6ZTwuOTk/YGRlZ3JhZGVkYDpgaGVhbHRoeWB9ZnVuY3Rpb24gbih0LG4pe2xldCByPWUodCxuKTtyZXR1cm4gciE9PW51bGwmJnI8Ljk5fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGU+PTE/YDEwMCVgOmAke01hdGguZmxvb3IoZSoxMDApfSVgfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKGUpfHxlPD0wP251bGw6KE51bWJlci5pc0Zpbml0ZSh0KT90OjApL2V9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT09PW51bGw/YG5vIGRhdGFgOmU8PTA/YDAlYDpgJHtNYXRoLmNlaWwoZSoxMDApfSVgfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiBlPT09MT90Om59ZnVuY3Rpb24gcyh0LG4pe2lmKHQ8PTApcmV0dXJuYG5vIHRyYWZmaWMgaW4gdGhlIGxhc3QgbWludXRlYDtsZXQgaT1lKHQsbiksYT1pPT09bnVsbD9gYDpgICgke3IoaSl9KWA7cmV0dXJuYCR7dH0gJHtvKHQsYGF0dGVtcHRgLGBhdHRlbXB0c2ApfSwgJHtufSAke28obixgZmFpbHVyZWAsYGZhaWx1cmVzYCl9IGluIHRoZSBsYXN0IG1pbnV0ZSR7YX1gfWZ1bmN0aW9uIGModCxuKXtpZih0PD0wKXJldHVybmBubyB0cmFmZmljIHRvZGF5YDtsZXQgaT1lKHQsbiksYT1pPT09bnVsbD9gYDpgICgke3IoaSl9KWA7cmV0dXJuYCR7dH0gJHtvKHQsYGF0dGVtcHRgLGBhdHRlbXB0c2ApfSwgJHtufSAke28obixgZmFpbHVyZWAsYGZhaWx1cmVzYCl9IHRvZGF5JHthfWB9ZXhwb3J0e3MgYXMgYSxlIGFzIGMsbiBhcyBpLGEgYXMgbixpIGFzIG8scix0IGFzIHMsYyBhcyB0fTs=", + "aW1wb3J0e2EgYXMgZSxpIGFzIHQsbixyLHMgYXMgaSx0IGFzIGF9ZnJvbSIuL3VzZUlkLVRjWEJ3VU9oLmpzIjtpbXBvcnR7JCBhcyBvLEYgYXMgcyxHbiBhcyBjLEsgYXMgbCxMciBhcyB1LE1yIGFzIGQsT3IgYXMgZixRIGFzIHAsUW4gYXMgbSxSIGFzIGgsU2kgYXMgZyxVIGFzIF8sVXQgYXMgdixXbiBhcyB5LF8gYXMgYixfbiBhcyB4LGNpIGFzIFMsY24gYXMgQyxkciBhcyB3LGZyIGFzIFQsZ3QgYXMgRSxoaSBhcyBELGlyIGFzIE8sayxrbiBhcyBBLGxuIGFzIGVlLG9uIGFzIGosb3QgYXMgTSxzbiBhcyBOLHR0IGFzIHRlLHVuIGFzIG5lLHZpIGFzIFAsd2kgYXMgRix4aSBhcyBJLHluIGFzIEx9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7ZCBhcyByZSxmIGFzIGllLG0gYXMgUn1mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO2ltcG9ydHt0IGFzIHp9ZnJvbSIuL3VzZUNvcHlGZWVkYmFjay1DalJ6T08tVy5qcyI7aW1wb3J0e3QgYXMgQn1mcm9tIi4vY2xpcGJvYXJkLUI3M2ZaMGMxLmpzIjtpbXBvcnR7ZiBhcyBWLG8gYXMgSCx0IGFzIFV9ZnJvbSIuL2JhZGdlLUJKTGctUjNNLmpzIjtmdW5jdGlvbiBXKGUsdCl7cmV0dXJuIGllKGUpPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKGU9PlIoZSx0KSk6UihlLHQpfXZhciBHPVtgSU5QVVRgLGBURVhUQVJFQWBdO2Z1bmN0aW9uIEsoZSx0LG4scj17fSl7aWYoIXR8fHIuZW5hYmxlSWdub3JlZEVsZW1lbnQmJkcuaW5jbHVkZXModC5ub2RlTmFtZSkpcmV0dXJuIG51bGw7bGV0e2Fycm93S2V5T3B0aW9uczppPWBib3RoYCxhdHRyaWJ1dGVOYW1lOmE9YFtkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtXWAsaXRlbXNBcnJheTpvPVtdLGxvb3A6cz0hMCxkaXI6Yz1gbHRyYCxwcmV2ZW50U2Nyb2xsOmw9ITAsZm9jdXM6dT0hMX09cixbZCxmLHAsbSxoLGddPVtlLmtleT09PWBBcnJvd1JpZ2h0YCxlLmtleT09PWBBcnJvd0xlZnRgLGUua2V5PT09YEFycm93VXBgLGUua2V5PT09YEFycm93RG93bmAsZS5rZXk9PT1gSG9tZWAsZS5rZXk9PT1gRW5kYF0sXz1wfHxtLHY9ZHx8ZjtpZighaCYmIWcmJighXyYmIXZ8fGk9PT1gdmVydGljYWxgJiZ2fHxpPT09YGhvcml6b250YWxgJiZfKSlyZXR1cm4gbnVsbDtsZXQgeT1uP0FycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKGEpKTpvO2lmKCF5Lmxlbmd0aClyZXR1cm4gbnVsbDtsJiZlLnByZXZlbnREZWZhdWx0KCk7bGV0IGI9bnVsbDtyZXR1cm4gdnx8Xz9iPXEoeSx0LHtnb0ZvcndhcmQ6Xz9tOmM9PT1gbHRyYD9kOmYsbG9vcDpzfSk6aD9iPXkuYXQoMCl8fG51bGw6ZyYmKGI9eS5hdCgtMSl8fG51bGwpLHUmJmI/LmZvY3VzKCksYn1mdW5jdGlvbiBxKGUsdCxuLHI9ZS5pbmNsdWRlcyh0KT9lLmxlbmd0aDplLmxlbmd0aCsxKXtpZigtLXI9PT0wKXJldHVybiBudWxsO2xldCBpPWUuaW5kZXhPZih0KSxhO2lmKGE9aT09PS0xP24uZ29Gb3J3YXJkPzA6ZS5sZW5ndGgtMTpuLmdvRm9yd2FyZD9pKzE6aS0xLCFuLmxvb3AmJihhPDB8fGE+PWUubGVuZ3RoKSlyZXR1cm4gbnVsbDtsZXQgbz1lWyhhK2UubGVuZ3RoKSVlLmxlbmd0aF07cmV0dXJuIG8/by5oYXNBdHRyaWJ1dGUoYGRpc2FibGVkYCkmJm8uZ2V0QXR0cmlidXRlKGBkaXNhYmxlZGApIT09YGZhbHNlYD9xKGUsbyxuLHIpOm86bnVsbH12YXJbSixZXT1pKGBDb2xsYXBzaWJsZVJvb3RgKSxhZT1MKHtfX25hbWU6YENvbGxhcHNpYmxlUm9vdGAscHJvcHM6e2RlZmF1bHRPcGVuOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sb3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2B1cGRhdGU6b3BlbmBdLHNldHVwKGUse2V4cG9zZTpuLGVtaXQ6cn0pe2xldCBpPWUsYT1oKGksYG9wZW5gLHIse2RlZmF1bHRWYWx1ZTppLmRlZmF1bHRPcGVuLHBhc3NpdmU6aS5vcGVuPT09dm9pZCAwfSkse2Rpc2FibGVkOm8sdW5tb3VudE9uSGlkZTpzfT1EKGkpO3JldHVybiBZKHtjb250ZW50SWQ6YGAsZGlzYWJsZWQ6byxvcGVuOmEsdW5tb3VudE9uSGlkZTpzLG9uT3BlblRvZ2dsZTooKT0+e28udmFsdWV8fChhLnZhbHVlPSFhLnZhbHVlKX19KSxuKHtvcGVuOmF9KSx0KCksKGUsdCk9PihPKCksQyhQKGspLHthczplLmFzLCJhcy1jaGlsZCI6aS5hc0NoaWxkLCJkYXRhLXN0YXRlIjpQKGEpP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6UChvKT9gYDp2b2lkIDB9LHtkZWZhdWx0OnUoKCk9Plt3KGUuJHNsb3RzLGBkZWZhdWx0YCx7b3BlbjpQKGEpfSldKSxfOjN9LDgsW2Bhc2AsYGFzLWNoaWxkYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLG9lPUwoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YENvbGxhcHNpYmxlQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Bjb250ZW50Rm91bmRgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bixvPUooKTtvLmNvbnRlbnRJZHx8PWEodm9pZCAwLGByZWthLWNvbGxhcHNpYmxlLWNvbnRlbnRgKTtsZXQgbD1TKCkse2ZvcndhcmRSZWY6ZixjdXJyZW50RWxlbWVudDpwfT10KCksaD1TKDApLGc9UygwKSxfPWooKCk9Pm8ub3Blbi52YWx1ZSksdj1TKF8udmFsdWUpLGI9UygpO2QoKCk9PltfLnZhbHVlLGwudmFsdWU/LnByZXNlbnRdLGFzeW5jKCk9Pnthd2FpdCBjKCk7bGV0IGU9cC52YWx1ZTtpZighZSlyZXR1cm47Yi52YWx1ZT1iLnZhbHVlfHx7dHJhbnNpdGlvbkR1cmF0aW9uOmUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLGFuaW1hdGlvbk5hbWU6ZS5zdHlsZS5hbmltYXRpb25OYW1lfSxlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gMHNgLGUuc3R5bGUuYW5pbWF0aW9uTmFtZT1gbm9uZWA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtnLnZhbHVlPXQuaGVpZ2h0LGgudmFsdWU9dC53aWR0aCx2LnZhbHVlfHwoZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249Yi52YWx1ZS50cmFuc2l0aW9uRHVyYXRpb24sZS5zdHlsZS5hbmltYXRpb25OYW1lPWIudmFsdWUuYW5pbWF0aW9uTmFtZSl9LHtpbW1lZGlhdGU6ITB9KTtsZXQgVD1qKCgpPT52LnZhbHVlJiZvLm9wZW4udmFsdWUpO3JldHVybiBtKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57di52YWx1ZT0hMX0pfSkscyhwLGBiZWZvcmVtYXRjaGAsZT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e28ub25PcGVuVG9nZ2xlKCksaShgY29udGVudEZvdW5kYCl9KX0pLChlLHQpPT4oTygpLEMoUChyZSkse3JlZl9rZXk6YHByZXNlbnRSZWZgLHJlZjpsLHByZXNlbnQ6ZS5mb3JjZU1vdW50fHxQKG8pLm9wZW4udmFsdWUsImZvcmNlLW1vdW50IjohMH0se2RlZmF1bHQ6dSgoe3ByZXNlbnQ6dH0pPT5beChQKGspLHkoZS4kYXR0cnMse2lkOlAobykuY29udGVudElkLHJlZjpQKGYpLCJhcy1jaGlsZCI6ci5hc0NoaWxkLGFzOmUuYXMsaGlkZGVuOnQ/dm9pZCAwOlAobykudW5tb3VudE9uSGlkZS52YWx1ZT9gYDpgdW50aWwtZm91bmRgLCJkYXRhLXN0YXRlIjpULnZhbHVlP3ZvaWQgMDpQKG8pLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpQKG8pLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsc3R5bGU6eyItLXJla2EtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmAke2cudmFsdWV9cHhgLCItLXJla2EtY29sbGFwc2libGUtY29udGVudC13aWR0aCI6YCR7aC52YWx1ZX1weGB9fSkse2RlZmF1bHQ6dSgoKT0+WyFQKG8pLnVubW91bnRPbkhpZGUudmFsdWV8fHQ/dyhlLiRzbG90cyxgZGVmYXVsdGAse2tleTowfSk6ZWUoYHYtaWZgLCEwKV0pLF86Mn0sMTA0MCxbYGlkYCxgYXMtY2hpbGRgLGBhc2AsYGhpZGRlbmAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYCxgc3R5bGVgXSldKSxfOjN9LDgsW2BwcmVzZW50YF0pKX19KSxzZT1MKHtfX25hbWU6YENvbGxhcHNpYmxlVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IG49ZTt0KCk7bGV0IHI9SigpO3JldHVybihlLHQpPT4oTygpLEMoUChrKSx7dHlwZTplLmFzPT09YGJ1dHRvbmA/YGJ1dHRvbmA6dm9pZCAwLGFzOmUuYXMsImFzLWNoaWxkIjpuLmFzQ2hpbGQsImFyaWEtY29udHJvbHMiOlAocikuY29udGVudElkLCJhcmlhLWV4cGFuZGVkIjpQKHIpLm9wZW4udmFsdWUsImRhdGEtc3RhdGUiOlAocikub3Blbi52YWx1ZT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOlAocikuZGlzYWJsZWQ/LnZhbHVlP2BgOnZvaWQgMCxkaXNhYmxlZDpQKHIpLmRpc2FibGVkPy52YWx1ZSxvbkNsaWNrOlAocikub25PcGVuVG9nZ2xlfSx7ZGVmYXVsdDp1KCgpPT5bdyhlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdHlwZWAsYGFzYCxgYXMtY2hpbGRgLGBhcmlhLWNvbnRyb2xzYCxgYXJpYS1leHBhbmRlZGAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYCxgZGlzYWJsZWRgLGBvbkNsaWNrYF0pKX19KTtmdW5jdGlvbiBjZSh7dHlwZTplLGRlZmF1bHRWYWx1ZTp0LG1vZGVsVmFsdWU6bn0pe2xldCByPW58fHQ7cmV0dXJuIG4hPT12b2lkIDB8fHQhPT12b2lkIDA/QXJyYXkuaXNBcnJheShyKT9gbXVsdGlwbGVgOmBzaW5nbGVgOmU/P2BzaW5nbGVgfWZ1bmN0aW9uIGxlKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl7cmV0dXJuIGV8fGNlKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl9ZnVuY3Rpb24gdWUoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dH0pe3JldHVybiB0PT09dm9pZCAwP2U9PT1gc2luZ2xlYD92b2lkIDA6W106dH1mdW5jdGlvbiBkZShlLHQpe2xldCBuPWooKCk9PmxlKGUpKSxyPWgoZSxgbW9kZWxWYWx1ZWAsdCx7ZGVmYXVsdFZhbHVlOnVlKGUpLHBhc3NpdmU6ZS5tb2RlbFZhbHVlPT09dm9pZCAwLGRlZXA6ITB9KTtmdW5jdGlvbiBpKGUpe2lmKG4udmFsdWU9PT1gc2luZ2xlYClyLnZhbHVlPVIoZSxyLnZhbHVlKT92b2lkIDA6ZTtlbHNle2xldCB0PUFycmF5LmlzQXJyYXkoci52YWx1ZSk/Wy4uLnIudmFsdWV8fFtdXTpbci52YWx1ZV0uZmlsdGVyKEJvb2xlYW4pO2lmKFcodCxlKSl7bGV0IG49dC5maW5kSW5kZXgodD0+Uih0LGUpKTt0LnNwbGljZShuLDEpfWVsc2UgdC5wdXNoKGUpO3IudmFsdWU9dH19cmV0dXJue21vZGVsVmFsdWU6cixjaGFuZ2VNb2RlbFZhbHVlOmksaXNTaW5nbGU6aigoKT0+bi52YWx1ZT09PWBzaW5nbGVgKX19dmFyW1gsZmVdPWkoYEFjY29yZGlvblJvb3RgKSxwZT1MKHtfX25hbWU6YEFjY29yZGlvblJvb3RgLHByb3BzOntjb2xsYXBzaWJsZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sZGlyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHZlcnRpY2FsYH0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sdHlwZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LG1vZGVsVmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sZGVmYXVsdFZhbHVlOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAobix7ZW1pdDpyfSl7bGV0IGk9bixhPXIse2RpcjpvLGRpc2FibGVkOnMsdW5tb3VudE9uSGlkZTpjfT1EKGkpLGw9ZShvKSx7bW9kZWxWYWx1ZTpkLGNoYW5nZU1vZGVsVmFsdWU6Zixpc1NpbmdsZTpwfT1kZShpLGEpLHtmb3J3YXJkUmVmOm0sY3VycmVudEVsZW1lbnQ6aH09dCgpO3JldHVybiBmZSh7ZGlzYWJsZWQ6cyxkaXJlY3Rpb246bCxvcmllbnRhdGlvbjppLm9yaWVudGF0aW9uLHBhcmVudEVsZW1lbnQ6aCxpc1NpbmdsZTpwLGNvbGxhcHNpYmxlOmkuY29sbGFwc2libGUsbW9kZWxWYWx1ZTpkLGNoYW5nZU1vZGVsVmFsdWU6Zix1bm1vdW50T25IaWRlOmN9KSwoZSx0KT0+KE8oKSxDKFAoaykse3JlZjpQKG0pLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXN9LHtkZWZhdWx0OnUoKCk9Plt3KGUuJHNsb3RzLGBkZWZhdWx0YCx7bW9kZWxWYWx1ZTpQKGQpfSldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYF0pKX19KSxaPWZ1bmN0aW9uKGUpe3JldHVybiBlLk9wZW49YG9wZW5gLGUuQ2xvc2VkPWBjbG9zZWRgLGV9KFp8fHt9KSxbUSxtZV09aShgQWNjb3JkaW9uSXRlbWApLGhlPUwoe19fbmFtZTpgQWNjb3JkaW9uSXRlbWAscHJvcHM6e2Rpc2FibGVkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LHZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6dm9pZCAwfSxhc0NoaWxkOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzOnt0eXBlOm51bGwscmVxdWlyZWQ6ITF9fSxzZXR1cChlLHtleHBvc2U6bn0pe2xldCByPWUsaT1YKCksYT1qKCgpPT5pLmlzU2luZ2xlLnZhbHVlP3IudmFsdWU9PT1pLm1vZGVsVmFsdWUudmFsdWU6QXJyYXkuaXNBcnJheShpLm1vZGVsVmFsdWUudmFsdWUpJiZpLm1vZGVsVmFsdWUudmFsdWUuaW5jbHVkZXMoci52YWx1ZSkpLG89aigoKT0+aS5kaXNhYmxlZC52YWx1ZXx8ci5kaXNhYmxlZCkscz1qKCgpPT5vLnZhbHVlP2BgOnZvaWQgMCksYz1qKCgpPT5hLnZhbHVlP1ouT3BlbjpaLkNsb3NlZCk7bih7b3BlbjphLGRhdGFEaXNhYmxlZDpzfSk7bGV0e2N1cnJlbnRSZWY6bCxjdXJyZW50RWxlbWVudDpkfT10KCk7bWUoe29wZW46YSxkYXRhU3RhdGU6YyxkaXNhYmxlZDpvLGRhdGFEaXNhYmxlZDpzLHRyaWdnZXJJZDpgYCxjdXJyZW50UmVmOmwsY3VycmVudEVsZW1lbnQ6ZCx2YWx1ZTpqKCgpPT5yLnZhbHVlKX0pO2Z1bmN0aW9uIGYoZSl7bGV0IHQ9ZS50YXJnZXQ7aWYoQXJyYXkuZnJvbShpLnBhcmVudEVsZW1lbnQudmFsdWU/LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtXWApPz9bXSkuZmluZEluZGV4KGU9PmU9PT10KT09PS0xKXJldHVybiBudWxsO0soZSx0LGkucGFyZW50RWxlbWVudC52YWx1ZSx7YXJyb3dLZXlPcHRpb25zOmkub3JpZW50YXRpb24sZGlyOmkuZGlyZWN0aW9uLnZhbHVlLGZvY3VzOiEwfSl9cmV0dXJuKGUsdCk9PihPKCksQyhQKGFlKSx7ImRhdGEtb3JpZW50YXRpb24iOlAoaSkub3JpZW50YXRpb24sImRhdGEtZGlzYWJsZWQiOnMudmFsdWUsImRhdGEtc3RhdGUiOmMudmFsdWUsZGlzYWJsZWQ6by52YWx1ZSxvcGVuOmEudmFsdWUsYXM6ci5hcywiYXMtY2hpbGQiOnIuYXNDaGlsZCwidW5tb3VudC1vbi1oaWRlIjpyLnVubW91bnRPbkhpZGU/P1AoaSkudW5tb3VudE9uSGlkZS52YWx1ZSxvbktleWRvd246dihmLFtgdXBgLGBkb3duYCxgbGVmdGAsYHJpZ2h0YCxgaG9tZWAsYGVuZGBdKX0se2RlZmF1bHQ6dSgoKT0+W3coZS4kc2xvdHMsYGRlZmF1bHRgLHtvcGVuOmEudmFsdWV9KV0pLF86M30sOCxbYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLWRpc2FibGVkYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYCxgb3BlbmAsYGFzYCxgYXMtY2hpbGRgLGB1bm1vdW50LW9uLWhpZGVgXSkpfX0pLGdlPUwoe19fbmFtZTpgQWNjb3JkaW9uQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0IG49ZSxyPVgoKSxpPVEoKTtyZXR1cm4gdCgpLChlLHQpPT4oTygpLEMoUChvZSkse3JvbGU6YHJlZ2lvbmAsImFzLWNoaWxkIjpuLmFzQ2hpbGQsYXM6ZS5hcywiZm9yY2UtbW91bnQiOm4uZm9yY2VNb3VudCwiYXJpYS1sYWJlbGxlZGJ5IjpQKGkpLnRyaWdnZXJJZCwiZGF0YS1zdGF0ZSI6UChpKS5kYXRhU3RhdGUudmFsdWUsImRhdGEtZGlzYWJsZWQiOlAoaSkuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpQKHIpLm9yaWVudGF0aW9uLHN0eWxlOnsiLS1yZWthLWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjpgdmFyKC0tcmVrYS1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoKWAsIi0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOmB2YXIoLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0KWB9LG9uQ29udGVudEZvdW5kOnRbMF18fD1lPT5QKHIpLmNoYW5nZU1vZGVsVmFsdWUoUChpKS52YWx1ZS52YWx1ZSl9LHtkZWZhdWx0OnUoKCk9Plt3KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgZm9yY2UtbW91bnRgLGBhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSkpfX0pLF9lPUwoe19fbmFtZTpgQWNjb3JkaW9uSGVhZGVyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGgzYH19LHNldHVwKGUpe2xldCBuPWUscj1YKCksaT1RKCk7cmV0dXJuIHQoKSwoZSx0KT0+KE8oKSxDKFAoaykse2FzOm4uYXMsImFzLWNoaWxkIjpuLmFzQ2hpbGQsImRhdGEtb3JpZW50YXRpb24iOlAocikub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOlAoaSkuZGF0YVN0YXRlLnZhbHVlLCJkYXRhLWRpc2FibGVkIjpQKGkpLmRhdGFEaXNhYmxlZC52YWx1ZX0se2RlZmF1bHQ6dSgoKT0+W3coZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLHZlPUwoe19fbmFtZTpgQWNjb3JkaW9uVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1YKCkscj1RKCk7ci50cmlnZ2VySWR8fD1hKHZvaWQgMCxgcmVrYS1hY2NvcmRpb24tdHJpZ2dlcmApO2Z1bmN0aW9uIGkoKXtsZXQgZT1uLmlzU2luZ2xlLnZhbHVlJiZyLm9wZW4udmFsdWUmJiFuLmNvbGxhcHNpYmxlO3IuZGlzYWJsZWQudmFsdWV8fGV8fG4uY2hhbmdlTW9kZWxWYWx1ZShyLnZhbHVlLnZhbHVlKX1yZXR1cm4oZSxhKT0+KE8oKSxDKFAoc2UpLHtpZDpQKHIpLnRyaWdnZXJJZCxyZWY6UChyKS5jdXJyZW50UmVmLCJkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtIjpgYCxhczp0LmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJhcmlhLWRpc2FibGVkIjpQKHIpLmRpc2FibGVkLnZhbHVlfHx2b2lkIDAsImFyaWEtZXhwYW5kZWQiOlAocikub3Blbi52YWx1ZXx8ITEsImRhdGEtZGlzYWJsZWQiOlAocikuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpQKG4pLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjpQKHIpLmRhdGFTdGF0ZS52YWx1ZSxkaXNhYmxlZDpQKHIpLmRpc2FibGVkLnZhbHVlLG9uQ2xpY2s6aX0se2RlZmF1bHQ6dSgoKT0+W3coZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGlkYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtZGlzYWJsZWRgLGBhcmlhLWV4cGFuZGVkYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgXSkpfX0pLHllPVtgdGl0bGVgXSxiZT1MKHtpbmhlcml0QXR0cnM6ITEsX19uYW1lOmBEZXRhaWxGaWVsZGAscHJvcHM6e2xhYmVsOnt9LGxhYmVsVGl0bGU6e2RlZmF1bHQ6dm9pZCAwfSxudW1lcmljOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LHNldHVwKGUpe3JldHVybih0LG4pPT4oTygpLG5lKGBkaXZgLG51bGwsW04oYGR0YCx7Y2xhc3M6YHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kYCx0aXRsZTplLmxhYmVsVGl0bGV9LEYoZS5sYWJlbCksOSx5ZSksTihgZGRgLHkodC4kYXR0cnMse2NsYXNzOmUubnVtZXJpYz9gdGFidWxhci1udW1zYDp2b2lkIDB9KSxbdyh0LiRzbG90cyxgZGVmYXVsdGApXSwxNildKSl9fSksJD1MKHtfX25hbWU6YE1vZGVsQ2hpcGAscHJvcHM6e2lkOnt9LGNvbnRleHRUb2tlbnM6e30saW5wdXRQZXJNVG9rVXNkOnt9LG91dHB1dFBlck1Ub2tVc2Q6e319LHNldHVwKGUpe2xldCB0PWUsbj1mKGBsYWJlbGApLHtzdGF0ZTpyLHNldDppfT16KCksYT1iKCk7YXN5bmMgZnVuY3Rpb24gbygpe2xldCBlPWF3YWl0IEIodC5pZCxuLnZhbHVlPz92b2lkIDApO2koZSksZT09PWBmYWlsZWRgJiZhLnB1c2goe2tpbmQ6YGVycm9yYCxtZXNzYWdlOmBDb3VsZCBub3QgY29weSAke3QuaWR9LmB9KX1sZXQgcz17aWRsZTpNLGNvcGllZDpwLHNlbGVjdGVkOnAsZmFpbGVkOkV9LGM9aigoKT0+KHtpZGxlOmBDb3B5ICR7dC5pZH1gLGNvcGllZDpgQ29waWVkYCxzZWxlY3RlZDpgU2VsZWN0ZWQg4oCUIHByZXNzIEN0cmwvQ21kK0NgLGZhaWxlZDpgQ29weSBmYWlsZWRgfSkpLGw9aigoKT0+e2xldCBlPVtdO3JldHVybiB0LmlucHV0UGVyTVRva1VzZCE9PXZvaWQgMCYmdC5vdXRwdXRQZXJNVG9rVXNkIT09dm9pZCAwJiZlLnB1c2goVih0LmlucHV0UGVyTVRva1VzZCx0Lm91dHB1dFBlck1Ub2tVc2QpKSx0LmNvbnRleHRUb2tlbnMhPT12b2lkIDAmJmUucHVzaChgJHtIKHQuY29udGV4dFRva2Vucyl9IGNvbnRleHRgKSxlLmpvaW4oYCDCtyBgKX0pLGQ9aigoKT0+e2xldCBlPWMudmFsdWVbci52YWx1ZV07cmV0dXJuIGwudmFsdWU/YCR7ZX0gwrcgJHtsLnZhbHVlfWA6ZX0pO3JldHVybih0LG4pPT57bGV0IGk9VChgRm9udEF3ZXNvbWVJY29uYCk7cmV0dXJuIE8oKSxDKFAoVSkse2FzOmBidXR0b25gLHR5cGU6YGJ1dHRvbmAsdmFyaWFudDpgc2Vjb25kYXJ5YCxjbGFzczpJKFtgbWF4LXctZnVsbCBjdXJzb3ItcG9pbnRlciBnYXAtMSB0cnVuY2F0ZSBmb250LW1vbm8gdGV4dC14cyBmb250LW5vcm1hbCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZGAsUChyKT09PWBmYWlsZWRgP2B0ZXh0LWRlc3RydWN0aXZlYDpgYF0pLHRpdGxlOmQudmFsdWUsImFyaWEtbGFiZWwiOmQudmFsdWUsb25DbGljazpvfSx7ZGVmYXVsdDp1KCgpPT5bTihgc3BhbmAse3JlZjpgbGFiZWxgLGNsYXNzOmBtaW4tdy0wIHRydW5jYXRlIHNlbGVjdC10ZXh0YH0sRihlLmlkKSw1MTMpLHgoaSx7aWNvbjpzW1AocildLGNsYXNzOmBzaXplLTIuNSBzaHJpbmstMGAsImFyaWEtaGlkZGVuIjpgdHJ1ZWB9LG51bGwsOCxbYGljb25gXSldKSxfOjF9LDgsW2BjbGFzc2AsYHRpdGxlYCxgYXJpYS1sYWJlbGBdKX19fSkseGU9TCh7X19uYW1lOmBBY2NvcmRpb25gLHByb3BzOntjb2xsYXBzaWJsZTp7dHlwZTpCb29sZWFufSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxkaXI6e30sb3JpZW50YXRpb246e30sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LHR5cGU6e30sbW9kZWxWYWx1ZTp7fSxkZWZhdWx0VmFsdWU6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChlLHtlbWl0OnR9KXtsZXQgcj1lLGk9dCxhPV8ocixgY2xhc3NgKSxvPW4oYSxpKTtyZXR1cm4oZSx0KT0+KE8oKSxDKFAocGUpLHkoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb25gfSxQKG8pLHtjbGFzczpQKGwpKGBmbGV4IHctZnVsbCBmbGV4LWNvbGAsci5jbGFzcyl9KSx7ZGVmYXVsdDp1KHQ9Plt3KGUuJHNsb3RzLGBkZWZhdWx0YCxnKEEodCkpKV0pLF86M30sMTYsW2BjbGFzc2BdKSl9fSksU2U9TCh7X19uYW1lOmBBY2NvcmRpb25Db250ZW50YCxwcm9wczp7Zm9yY2VNb3VudDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Xyh0LGBjbGFzc2ApO3JldHVybihlLHIpPT4oTygpLEMoUChnZSkseSh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1jb250ZW50YH0sUChuKSx7Y2xhc3M6YGRhdGEtb3BlbjphbmltYXRlLWFjY29yZGlvbi1kb3duIGRhdGEtY2xvc2VkOmFuaW1hdGUtYWNjb3JkaW9uLXVwIHRleHQtc20gb3ZlcmZsb3ctaGlkZGVuYH0pLHtkZWZhdWx0OnUoKCk9PltOKGBkaXZgLHtjbGFzczpJKFAobCkoYHB0LTAgcGItMi41IFsmX2FdOnVuZGVybGluZSBbJl9hXTp1bmRlcmxpbmUtb2Zmc2V0LTMgWyZfYV06aG92ZXI6dGV4dC1mb3JlZ3JvdW5kIFsmX3A6bm90KDpsYXN0LWNoaWxkKV06bWItNGAsdC5jbGFzcykpfSxbdyhlLiRzbG90cyxgZGVmYXVsdGApXSwyKV0pLF86M30sMTYpKX19KSxDZT1MKHtfX25hbWU6YEFjY29yZGlvbkl0ZW1gLHByb3BzOntkaXNhYmxlZDp7dHlwZTpCb29sZWFufSx2YWx1ZTp7fSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW59LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1fKHQsYGNsYXNzYCksaT1yKG4pO3JldHVybihlLG4pPT4oTygpLEMoUChoZSkseSh7ImRhdGEtc2xvdCI6YGFjY29yZGlvbi1pdGVtYH0sUChpKSx7Y2xhc3M6UChsKShgbm90LWxhc3Q6Ym9yZGVyLWJgLHQuY2xhc3MpfSkse2RlZmF1bHQ6dSh0PT5bdyhlLiRzbG90cyxgZGVmYXVsdGAsZyhBKHQpKSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLHdlPUwoe19fbmFtZTpgQWNjb3JkaW9uVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbn0sYXM6e30sY2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX0saGVhZGVyQ2xhc3M6e3R5cGU6W0Jvb2xlYW4sbnVsbCxTdHJpbmcsT2JqZWN0LEFycmF5XX19LHNldHVwKGUpe2xldCB0PWUsbj1fKHQsYGNsYXNzYCxgaGVhZGVyQ2xhc3NgKTtyZXR1cm4oZSxyKT0+e2xldCBpPVQoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBPKCksQyhQKF9lKSx7Y2xhc3M6SShQKGwpKGBmbGV4YCx0LmhlYWRlckNsYXNzKSl9LHtkZWZhdWx0OnUoKCk9Plt4KFAodmUpLHkoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlcmB9LFAobikse2NsYXNzOlAobCkoYGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTphZnRlcjpib3JkZXItcmluZyAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByb3VuZGVkLWxnIHB5LTIuNSB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTMgKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTptbC1hdXRvICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06c2l6ZS00IGdyb3VwL2FjY29yZGlvbi10cmlnZ2VyIHJlbGF0aXZlIGZsZXggZmxleC0xIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tYWxsIG91dGxpbmUtbm9uZSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTBgLHQuY2xhc3MpfSkse2RlZmF1bHQ6dSgoKT0+W3coZS4kc2xvdHMsYGRlZmF1bHRgKSx3KGUuJHNsb3RzLGBpY29uYCx7fSwoKT0+W3goaSx7aWNvbjpQKG8pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBzaHJpbmstMCBncm91cC1hcmlhLWV4cGFuZGVkL2FjY29yZGlvbi10cmlnZ2VyOmhpZGRlbmB9LG51bGwsOCxbYGljb25gXSkseChpLHtpY29uOlAodGUpLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBoaWRkZW4gc2hyaW5rLTAgZ3JvdXAtYXJpYS1leHBhbmRlZC9hY2NvcmRpb24tdHJpZ2dlcjppbmxpbmVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9LDgsW2BjbGFzc2BdKX19fSk7ZnVuY3Rpb24gVGUoZSx0LG4pe2lmKCF0KXJldHVybiBuZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7bGV0IHI9bmV3IFNldChlLm1hbnVhbGx5RXhwYW5kZWQpO2ZvcihsZXQgdCBvZiBuKWUubWFudWFsbHlDb2xsYXBzZWQuaGFzKHQpfHxyLmFkZCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBFZShlLHQsbil7bj8oZS5tYW51YWxseUV4cGFuZGVkLmRlbGV0ZSh0KSxlLm1hbnVhbGx5Q29sbGFwc2VkLmFkZCh0KSk6KGUubWFudWFsbHlDb2xsYXBzZWQuZGVsZXRlKHQpLGUubWFudWFsbHlFeHBhbmRlZC5hZGQodCkpfWZ1bmN0aW9uIERlKGUpe2UubWFudWFsbHlDb2xsYXBzZWQuY2xlYXIoKX1leHBvcnR7Q2UgYXMgYSwkIGFzIGMsd2UgYXMgaSxiZSBhcyBsLFRlIGFzIG4sU2UgYXMgbyxFZSBhcyByLHhlIGFzIHMsRGUgYXMgdH07", ), }, - "reliability-CFIkRxVV.js": { + "series-DZsuAXHI.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e190IGFzIGUsYiBhcyB0LGQgYXMgbixnIGFzIHIseSBhcyBpfWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e3QgYXMgYX1mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO2ltcG9ydHtuIGFzIG99ZnJvbSIuL3Nlcmllcy1OSVJWQlhNUC5qcyI7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlPT09YGhvdXJgP3t3aW5kb3c6YGhvdXJgLHNwYW46dH06ZT09PWBkYXlgP3t3aW5kb3c6YGRheWAsc3Bhbjp0fTp7d2luZG93OmBkYXlgLHNwYW46MzB9fWZ1bmN0aW9uIGMoZSx0KXtsZXQgbj1uZXcgTWFwKHQuc2VyaWVzLm1hcChlPT5bZS5zY29wZSxlLnBvaW50c10pKTtyZXR1cm4gZS5zZXJpZXMubWFwKGU9Pih7c2NvcGU6ZS5zY29wZSxwb2ludHM6byhuLmdldChlLnNjb3BlKT8/QXJyYXkoZS5wb2ludHMubGVuZ3RoKS5maWxsKDApLGUucG9pbnRzKX0pKX12YXIgbD1bYC0tY2hhcnQtcmVxdWVzdHNgLGAtLWNoYXJ0LXRva2Vucy1pbmAsYC0tY2hhcnQtdG9rZW5zLW91dGAsYC0tY2hhcnQtY29zdGBdO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGxbZSVsLmxlbmd0aF19dmFyIGQ9ZShgcmVsaWFiaWxpdHlgLHtzdGF0ZTooKT0+KHtidWNrZXRzOltdLHdpbmRvd1VzZWQ6YGRheWAsZXJyb3JSYXRlOltdLHRpbWVvdXRzOltdLGZhaWxvdmVyczpbXSxyZWplY3Rpb25zOltdLHVucHJpY2VkOltdLGxvYWRpbmc6ITEsbGFzdFVwZGF0ZWQ6bnVsbCxlcnJvcjpgYCxyZXFJZDowLHByb3ZpZGVyUGVyZkJ1Y2tldHM6W10scHJvdmlkZXJQZXJmV2luZG93VXNlZDpgZGF5YCxwcm92aWRlclBlcmZQb2ludHM6W10scHJvdmlkZXJQZXJmTGF0ZW5jeUVuYWJsZWQ6ITEscHJvdmlkZXJQZXJmTG9hZGluZzohMSxwcm92aWRlclBlcmZFcnJvcjpgYCxwcm92aWRlclBlcmZSZXFJZDowfSksYWN0aW9uczp7YXN5bmMgZmV0Y2goKXtsZXQgZT1yKCkub3ZlcnZpZXc7aWYoZT09PW51bGwpcmV0dXJuO2xldCBvPSsrdGhpcy5yZXFJZDt0aGlzLmxvYWRpbmc9ITA7dHJ5e2xldCByPWEoKSxpPWUucHJvdmlkZXJzLm1hcChlPT5lLm5hbWUpO2lmKGkubGVuZ3RoPT09MCl7aWYobyE9PXRoaXMucmVxSWQpcmV0dXJuO3RoaXMuYnVja2V0cz1bXSx0aGlzLndpbmRvd1VzZWQ9cyhyLndpbmRvdyxyLnNwYW4pLndpbmRvdyx0aGlzLmVycm9yUmF0ZT1bXSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuZmFpbG92ZXJzPVtdLHRoaXMucmVqZWN0aW9ucz1bXSx0aGlzLnVucHJpY2VkPVtdLHRoaXMubGFzdFVwZGF0ZWQ9bmV3IERhdGUsdGhpcy5lcnJvcj1gYDtyZXR1cm59bGV0e3dpbmRvdzpsLHNwYW46dX09cyhyLndpbmRvdyxyLnNwYW4pLGQ9aS5tYXAoZT0+YHByb3ZpZGVyOiR7ZX1gKSxbZixwLG0saCxnLF9dPWF3YWl0IFByb21pc2UuYWxsKFt0KG4oe3Njb3BlOmQsbWV0cmljOmBhdHRlbXB0YCx3aW5kb3c6bCxzcGFuOnV9KSksdChuKHtzY29wZTpkLG1ldHJpYzpgZmFpbGAsd2luZG93Omwsc3Bhbjp1fSkpLHQobih7c2NvcGU6ZCxtZXRyaWM6YHRpbWVvdXRgLHdpbmRvdzpsLHNwYW46dX0pKSx0KG4oe3Njb3BlOmQsbWV0cmljOmBmb3ZlcmAsd2luZG93Omwsc3Bhbjp1fSkpLHQobih7c2NvcGU6W2B0b3RhbGBdLG1ldHJpYzpgcmVqYCx3aW5kb3c6bCxzcGFuOnV9KSksdChuKHtzY29wZTpbYHRvdGFsYF0sbWV0cmljOmByNDAyYCx3aW5kb3c6bCxzcGFuOnV9KSldKTtpZihvIT09dGhpcy5yZXFJZClyZXR1cm47dGhpcy5idWNrZXRzPWYuYnVja2V0cyx0aGlzLndpbmRvd1VzZWQ9bCx0aGlzLmVycm9yUmF0ZT1jKGYscCksdGhpcy50aW1lb3V0cz1tLnNlcmllcyx0aGlzLmZhaWxvdmVycz1oLnNlcmllcyx0aGlzLnJlamVjdGlvbnM9Zy5zZXJpZXNbMF0/LnBvaW50cz8/W10sdGhpcy51bnByaWNlZD1fLnNlcmllc1swXT8ucG9pbnRzPz9bXSx0aGlzLmxhc3RVcGRhdGVkPW5ldyBEYXRlLHRoaXMuZXJyb3I9YGB9Y2F0Y2goZSl7aWYobyE9PXRoaXMucmVxSWR8fGUgaW5zdGFuY2VvZiBpJiYoZS5zdGF0dXM9PT00MDF8fGUuc3RhdHVzPT09NDAzKSlyZXR1cm47dGhpcy5lcnJvcj1lIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOlN0cmluZyhlKX1maW5hbGx5e289PT10aGlzLnJlcUlkJiYodGhpcy5sb2FkaW5nPSExKX19LGFzeW5jIGZldGNoUHJvdmlkZXJQZXJmKGUpe2xldCBuPSsrdGhpcy5wcm92aWRlclBlcmZSZXFJZCxvPXIoKS5vdmVydmlldz8uZmVhdHVyZXMubGF0ZW5jeVN0YXRzPz8hMTtpZighZXx8IW8pe2lmKG4hPT10aGlzLnByb3ZpZGVyUGVyZlJlcUlkKXJldHVybjt0aGlzLnByb3ZpZGVyUGVyZkJ1Y2tldHM9W10sdGhpcy5wcm92aWRlclBlcmZQb2ludHM9W10sdGhpcy5wcm92aWRlclBlcmZMYXRlbmN5RW5hYmxlZD0hMSx0aGlzLnByb3ZpZGVyUGVyZkVycm9yPWBgLHRoaXMucHJvdmlkZXJQZXJmTG9hZGluZz0hMTtyZXR1cm59dGhpcy5wcm92aWRlclBlcmZMb2FkaW5nPSEwO3RyeXtsZXQgcj1hKCkse3dpbmRvdzppLHNwYW46b309cyhyLndpbmRvdyxyLnNwYW4pLGM9bmV3IFVSTFNlYXJjaFBhcmFtcyh7a2luZDpgcHJvdmlkZXJgLHdpbmRvdzppLHNwYW46U3RyaW5nKG8pLHNlcmllczpgMWB9KTtjLmFwcGVuZChgaWRgLGUpO2xldCBsPWF3YWl0IHQoYC9hZG1pbi9hcGkvcGVyZm9ybWFuY2U/JHtjLnRvU3RyaW5nKCl9YCk7aWYobiE9PXRoaXMucHJvdmlkZXJQZXJmUmVxSWQpcmV0dXJuO3RoaXMucHJvdmlkZXJQZXJmQnVja2V0cz1sLmJ1Y2tldHM/P1tdLHRoaXMucHJvdmlkZXJQZXJmV2luZG93VXNlZD1pLHRoaXMucHJvdmlkZXJQZXJmUG9pbnRzPWwucG9pbnRzPz9bXSx0aGlzLnByb3ZpZGVyUGVyZkxhdGVuY3lFbmFibGVkPWwubGF0ZW5jeUVuYWJsZWQsdGhpcy5wcm92aWRlclBlcmZFcnJvcj1gYH1jYXRjaChlKXtpZihuIT09dGhpcy5wcm92aWRlclBlcmZSZXFJZHx8ZSBpbnN0YW5jZW9mIGkmJihlLnN0YXR1cz09PTQwMXx8ZS5zdGF0dXM9PT00MDMpKXJldHVybjt0aGlzLnByb3ZpZGVyUGVyZkVycm9yPWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6U3RyaW5nKGUpfWZpbmFsbHl7bj09PXRoaXMucHJvdmlkZXJQZXJmUmVxSWQmJih0aGlzLnByb3ZpZGVyUGVyZkxvYWRpbmc9ITEpfX19fSk7ZXhwb3J0e3UgYXMgbixkIGFzIHIscyBhcyB0fTs=", + "aW1wb3J0e2cgYXMgZX1mcm9tIi4vYmFkZ2UtQkpMZy1SM00uanMiO2ltcG9ydHtvIGFzIHR9ZnJvbSIuL2twaS1QMDhVdnJLaS5qcyI7ZnVuY3Rpb24gbihlKXtmb3IobGV0IHQgb2ZbYGdyb3VwYCxgdXNlcmAsYG1vZGVsYCxgcHJvdmlkZXJgXSl7bGV0IG49YCR7dH06YDtpZihlLnN0YXJ0c1dpdGgobikpcmV0dXJue2tpbmQ6dCxpZDplLnNsaWNlKG4ubGVuZ3RoKX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlKXtyZXR1cm4gbihlKT8uaWQ/P2V9ZnVuY3Rpb24gaShlLHQpe3JldHVybmAke2V9OiR7dH1gfWZ1bmN0aW9uIGEoZSl7aWYoZT09PWBgKXJldHVybntraW5kOmBncm91cGB9O2xldCB0PW4oZSk7cmV0dXJuIHQ/LmtpbmQ9PT1gZ3JvdXBgP3traW5kOmB1c2VyYCxncm91cDp0LmlkfTp7a2luZDpgdXNlcm1vZGVsYCx1c2VyOnQ/LmtpbmQ9PT1gdXNlcmA/dC5pZDplfX1mdW5jdGlvbiBvKHIsaSxhKXtsZXQgbz1uKHIpO2lmKCFvKXtsZXQgbj10KGkpO3JldHVybiBuPjA/e2Nvc3RQZXJNb250aFVTRDplKG4pfTp2b2lkIDB9aWYoby5raW5kPT09YGdyb3VwYClyZXR1cm4gaS5maW5kKGU9PmUubmFtZT09PW8uaWQpPy5saW1pdHM7aWYoby5raW5kPT09YHVzZXJgKXJldHVybiBhLmZpbmQoZT0+ZS5pZD09PW8uaWQpPy5saW1pdHN9ZnVuY3Rpb24gcyhlKXtsZXQgdD0wO2ZvcihsZXQgbiBvZiBlKXQrPW47cmV0dXJuIHR9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB0PD0wP1tdOlsuLi5lXS5zb3J0KChlLHQpPT5zKHQucG9pbnRzKS1zKGUucG9pbnRzKSkuc2xpY2UoMCx0KX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGUubWFwKChlLG4pPT57bGV0IHI9MDtmb3IobGV0IGUgb2YgdClyKz1lLnBvaW50c1tuXT8/MDtyZXR1cm4gTWF0aC5tYXgoMCxlLXIpfSl9ZnVuY3Rpb24gdShlKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgciBvZiBlKXtsZXQgZT1uKHIuc2NvcGUpLGk9ZT8ua2luZD09PWBtb2RlbGA/ZS5pZDpyLnNjb3BlLGE9aS5pbmRleE9mKGAvYCksbz1hPT09LTE/aTppLnNsaWNlKDAsYSkscz10LmdldChvKT8/QXJyYXkoci5wb2ludHMubGVuZ3RoKS5maWxsKDApO2ZvcihsZXQgZT0wO2U8ci5wb2ludHMubGVuZ3RoO2UrKylzW2VdPShzW2VdPz8wKSsoci5wb2ludHNbZV0/PzApO3Quc2V0KG8scyl9cmV0dXJuIEFycmF5LmZyb20odC5lbnRyaWVzKCkpLm1hcCgoW2UsdF0pPT4oe3Njb3BlOmUscG9pbnRzOnR9KSkuc29ydCgoZSx0KT0+cyh0LnBvaW50cyktcyhlLnBvaW50cykpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdC5tYXAoKHQsbik9PnQ+MD8oZVtuXT8/MCkvdDpudWxsKX1leHBvcnR7YSxvIGFzIGMsdSBhcyBpLHIgYXMgbCxkIGFzIG4saSBhcyBvLGMgYXMgcixuIGFzIHMsbCBhcyB0fTs=", ), }, - "search-expand-CHd4FWZZ.js": { + "tabs-Cuh6FQ0j.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e2EgYXMgZSxpIGFzIHQsbixyLHMgYXMgaSx0IGFzIGF9ZnJvbSIuL3VzZUlkLUI5ZEp1bW9JLmpzIjtpbXBvcnR7JCBhcyBvLEFyIGFzIHMsRCBhcyBjLERuIGFzIGwsRXIgYXMgdSxGciBhcyBkLEhuIGFzIGYsSSBhcyBwLE4gYXMgbSxTaSBhcyBoLFVuIGFzIGcsViBhcyBfLFZ0IGFzIHYsVyBhcyB5LFggYXMgYixYbiBhcyBlZSxaIGFzIHgsXyBhcyBTLF9uIGFzIEMsYW4gYXMgdyxiaSBhcyBULGVyIGFzIHRlLGdpIGFzIEUsaG4gYXMgRCxpbiBhcyBPLGl0IGFzIG5lLGxyIGFzIGssbXQgYXMgcmUsbnIgYXMgQSxvaSBhcyBqLG9uIGFzIE0scGkgYXMgTixzbiBhcyBQLHVyIGFzIEYseWkgYXMgSX1mcm9tIi4vU2tlbGV0b24tQjB6aUI2T2QuanMiO2ltcG9ydHtkIGFzIGllLHAgYXMgTCx1IGFzIFJ9ZnJvbSIuL2luZGV4LWR5d1M4T3BULmpzIjtpbXBvcnR7dCBhcyB6fWZyb20iLi9jbGlwYm9hcmQtQjczZlowYzEuanMiO2ltcG9ydHthIGFzIEIsZCBhcyBWLHQgYXMgSH1mcm9tIi4vYmFkZ2UtRFVpQlREeUEuanMiO2Z1bmN0aW9uIFUoZSx0KXtyZXR1cm4gaWUoZSk/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoZT0+TChlLHQpKTpMKGUsdCl9dmFyIFc9W2BJTlBVVGAsYFRFWFRBUkVBYF07ZnVuY3Rpb24gRyhlLHQsbixyPXt9KXtpZighdHx8ci5lbmFibGVJZ25vcmVkRWxlbWVudCYmVy5pbmNsdWRlcyh0Lm5vZGVOYW1lKSlyZXR1cm4gbnVsbDtsZXR7YXJyb3dLZXlPcHRpb25zOmk9YGJvdGhgLGF0dHJpYnV0ZU5hbWU6YT1gW2RhdGEtcmVrYS1jb2xsZWN0aW9uLWl0ZW1dYCxpdGVtc0FycmF5Om89W10sbG9vcDpzPSEwLGRpcjpjPWBsdHJgLHByZXZlbnRTY3JvbGw6bD0hMCxmb2N1czp1PSExfT1yLFtkLGYscCxtLGgsZ109W2Uua2V5PT09YEFycm93UmlnaHRgLGUua2V5PT09YEFycm93TGVmdGAsZS5rZXk9PT1gQXJyb3dVcGAsZS5rZXk9PT1gQXJyb3dEb3duYCxlLmtleT09PWBIb21lYCxlLmtleT09PWBFbmRgXSxfPXB8fG0sdj1kfHxmO2lmKCFoJiYhZyYmKCFfJiYhdnx8aT09PWB2ZXJ0aWNhbGAmJnZ8fGk9PT1gaG9yaXpvbnRhbGAmJl8pKXJldHVybiBudWxsO2xldCB5PW4/QXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JBbGwoYSkpOm87aWYoIXkubGVuZ3RoKXJldHVybiBudWxsO2wmJmUucHJldmVudERlZmF1bHQoKTtsZXQgYj1udWxsO3JldHVybiB2fHxfP2I9Syh5LHQse2dvRm9yd2FyZDpfP206Yz09PWBsdHJgP2Q6Zixsb29wOnN9KTpoP2I9eS5hdCgwKXx8bnVsbDpnJiYoYj15LmF0KC0xKXx8bnVsbCksdSYmYj8uZm9jdXMoKSxifWZ1bmN0aW9uIEsoZSx0LG4scj1lLmluY2x1ZGVzKHQpP2UubGVuZ3RoOmUubGVuZ3RoKzEpe2lmKC0tcj09PTApcmV0dXJuIG51bGw7bGV0IGk9ZS5pbmRleE9mKHQpLGE7aWYoYT1pPT09LTE/bi5nb0ZvcndhcmQ/MDplLmxlbmd0aC0xOm4uZ29Gb3J3YXJkP2krMTppLTEsIW4ubG9vcCYmKGE8MHx8YT49ZS5sZW5ndGgpKXJldHVybiBudWxsO2xldCBvPWVbKGErZS5sZW5ndGgpJWUubGVuZ3RoXTtyZXR1cm4gbz9vLmhhc0F0dHJpYnV0ZShgZGlzYWJsZWRgKSYmby5nZXRBdHRyaWJ1dGUoYGRpc2FibGVkYCkhPT1gZmFsc2VgP0soZSxvLG4scik6bzpudWxsfXZhcltxLEpdPWkoYENvbGxhcHNpYmxlUm9vdGApLFk9Qyh7X19uYW1lOmBDb2xsYXBzaWJsZVJvb3RgLHByb3BzOntkZWZhdWx0T3Blbjp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LG9wZW46e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OnZvaWQgMH0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm9wZW5gXSxzZXR1cChlLHtleHBvc2U6bixlbWl0OnJ9KXtsZXQgaT1lLGE9cChpLGBvcGVuYCxyLHtkZWZhdWx0VmFsdWU6aS5kZWZhdWx0T3BlbixwYXNzaXZlOmkub3Blbj09PXZvaWQgMH0pLHtkaXNhYmxlZDpvLHVubW91bnRPbkhpZGU6c309TihpKTtyZXR1cm4gSih7Y29udGVudElkOmBgLGRpc2FibGVkOm8sb3BlbjphLHVubW91bnRPbkhpZGU6cyxvbk9wZW5Ub2dnbGU6KCk9PntvLnZhbHVlfHwoYS52YWx1ZT0hYS52YWx1ZSl9fSksbih7b3BlbjphfSksdCgpLChlLHQpPT4oQSgpLE0oRShjKSx7YXM6ZS5hcywiYXMtY2hpbGQiOmkuYXNDaGlsZCwiZGF0YS1zdGF0ZSI6RShhKT9gb3BlbmA6YGNsb3NlZGAsImRhdGEtZGlzYWJsZWQiOkUobyk/YGA6dm9pZCAwfSx7ZGVmYXVsdDpkKCgpPT5bayhlLiRzbG90cyxgZGVmYXVsdGAse29wZW46RShhKX0pXSksXzozfSw4LFtgYXNgLGBhcy1jaGlsZGAsYGRhdGEtc3RhdGVgLGBkYXRhLWRpc2FibGVkYF0pKX19KSxYPUMoe2luaGVyaXRBdHRyczohMSxfX25hbWU6YENvbGxhcHNpYmxlQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2Bjb250ZW50Rm91bmRgXSxzZXR1cChlLHtlbWl0Om59KXtsZXQgcj1lLGk9bixvPXEoKTtvLmNvbnRlbnRJZHx8PWEodm9pZCAwLGByZWthLWNvbGxhcHNpYmxlLWNvbnRlbnRgKTtsZXQgbD1qKCkse2ZvcndhcmRSZWY6dSxjdXJyZW50RWxlbWVudDpwfT10KCksaD1qKDApLF89aigwKSx2PU8oKCk9Pm8ub3Blbi52YWx1ZSkseT1qKHYudmFsdWUpLGI9aigpO3MoKCk9Plt2LnZhbHVlLGwudmFsdWU/LnByZXNlbnRdLGFzeW5jKCk9Pnthd2FpdCBnKCk7bGV0IGU9cC52YWx1ZTtpZighZSlyZXR1cm47Yi52YWx1ZT1iLnZhbHVlfHx7dHJhbnNpdGlvbkR1cmF0aW9uOmUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uLGFuaW1hdGlvbk5hbWU6ZS5zdHlsZS5hbmltYXRpb25OYW1lfSxlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gMHNgLGUuc3R5bGUuYW5pbWF0aW9uTmFtZT1gbm9uZWA7bGV0IHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtfLnZhbHVlPXQuaGVpZ2h0LGgudmFsdWU9dC53aWR0aCx5LnZhbHVlfHwoZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249Yi52YWx1ZS50cmFuc2l0aW9uRHVyYXRpb24sZS5zdHlsZS5hbmltYXRpb25OYW1lPWIudmFsdWUuYW5pbWF0aW9uTmFtZSl9LHtpbW1lZGlhdGU6ITB9KTtsZXQgeD1PKCgpPT55LnZhbHVlJiZvLm9wZW4udmFsdWUpO3JldHVybiBlZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3kudmFsdWU9ITF9KX0pLG0ocCxgYmVmb3JlbWF0Y2hgLGU9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntvLm9uT3BlblRvZ2dsZSgpLGkoYGNvbnRlbnRGb3VuZGApfSl9KSwoZSx0KT0+KEEoKSxNKEUoUikse3JlZl9rZXk6YHByZXNlbnRSZWZgLHJlZjpsLHByZXNlbnQ6ZS5mb3JjZU1vdW50fHxFKG8pLm9wZW4udmFsdWUsImZvcmNlLW1vdW50IjohMH0se2RlZmF1bHQ6ZCgoe3ByZXNlbnQ6dH0pPT5bRChFKGMpLGYoZS4kYXR0cnMse2lkOkUobykuY29udGVudElkLHJlZjpFKHUpLCJhcy1jaGlsZCI6ci5hc0NoaWxkLGFzOmUuYXMsaGlkZGVuOnQ/dm9pZCAwOkUobykudW5tb3VudE9uSGlkZS52YWx1ZT9gYDpgdW50aWwtZm91bmRgLCJkYXRhLXN0YXRlIjp4LnZhbHVlP3ZvaWQgMDpFKG8pLm9wZW4udmFsdWU/YG9wZW5gOmBjbG9zZWRgLCJkYXRhLWRpc2FibGVkIjpFKG8pLmRpc2FibGVkPy52YWx1ZT9gYDp2b2lkIDAsc3R5bGU6eyItLXJla2EtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmAke18udmFsdWV9cHhgLCItLXJla2EtY29sbGFwc2libGUtY29udGVudC13aWR0aCI6YCR7aC52YWx1ZX1weGB9fSkse2RlZmF1bHQ6ZCgoKT0+WyFFKG8pLnVubW91bnRPbkhpZGUudmFsdWV8fHQ/ayhlLiRzbG90cyxgZGVmYXVsdGAse2tleTowfSk6UChgdi1pZmAsITApXSksXzoyfSwxMDQwLFtgaWRgLGBhcy1jaGlsZGAsYGFzYCxgaGlkZGVuYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBzdHlsZWBdKV0pLF86M30sOCxbYHByZXNlbnRgXSkpfX0pLGFlPUMoe19fbmFtZTpgQ29sbGFwc2libGVUcmlnZ2VyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGJ1dHRvbmB9fSxzZXR1cChlKXtsZXQgbj1lO3QoKTtsZXQgcj1xKCk7cmV0dXJuKGUsdCk9PihBKCksTShFKGMpLHt0eXBlOmUuYXM9PT1gYnV0dG9uYD9gYnV0dG9uYDp2b2lkIDAsYXM6ZS5hcywiYXMtY2hpbGQiOm4uYXNDaGlsZCwiYXJpYS1jb250cm9scyI6RShyKS5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOkUocikub3Blbi52YWx1ZSwiZGF0YS1zdGF0ZSI6RShyKS5vcGVuLnZhbHVlP2BvcGVuYDpgY2xvc2VkYCwiZGF0YS1kaXNhYmxlZCI6RShyKS5kaXNhYmxlZD8udmFsdWU/YGA6dm9pZCAwLGRpc2FibGVkOkUocikuZGlzYWJsZWQ/LnZhbHVlLG9uQ2xpY2s6RShyKS5vbk9wZW5Ub2dnbGV9LHtkZWZhdWx0OmQoKCk9PltrKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2B0eXBlYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtY29udHJvbHNgLGBhcmlhLWV4cGFuZGVkYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgLGBkaXNhYmxlZGAsYG9uQ2xpY2tgXSkpfX0pO2Z1bmN0aW9uIG9lKHt0eXBlOmUsZGVmYXVsdFZhbHVlOnQsbW9kZWxWYWx1ZTpufSl7bGV0IHI9bnx8dDtyZXR1cm4gbiE9PXZvaWQgMHx8dCE9PXZvaWQgMD9BcnJheS5pc0FycmF5KHIpP2BtdWx0aXBsZWA6YHNpbmdsZWA6ZT8/YHNpbmdsZWB9ZnVuY3Rpb24gc2Uoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KXtyZXR1cm4gZXx8b2Uoe3R5cGU6ZSxkZWZhdWx0VmFsdWU6dCxtb2RlbFZhbHVlOm59KX1mdW5jdGlvbiBjZSh7dHlwZTplLGRlZmF1bHRWYWx1ZTp0fSl7cmV0dXJuIHQ9PT12b2lkIDA/ZT09PWBzaW5nbGVgP3ZvaWQgMDpbXTp0fWZ1bmN0aW9uIGxlKGUsdCl7bGV0IG49TygoKT0+c2UoZSkpLHI9cChlLGBtb2RlbFZhbHVlYCx0LHtkZWZhdWx0VmFsdWU6Y2UoZSkscGFzc2l2ZTplLm1vZGVsVmFsdWU9PT12b2lkIDAsZGVlcDohMH0pO2Z1bmN0aW9uIGkoZSl7aWYobi52YWx1ZT09PWBzaW5nbGVgKXIudmFsdWU9TChlLHIudmFsdWUpP3ZvaWQgMDplO2Vsc2V7bGV0IHQ9QXJyYXkuaXNBcnJheShyLnZhbHVlKT9bLi4uci52YWx1ZXx8W11dOltyLnZhbHVlXS5maWx0ZXIoQm9vbGVhbik7aWYoVSh0LGUpKXtsZXQgbj10LmZpbmRJbmRleCh0PT5MKHQsZSkpO3Quc3BsaWNlKG4sMSl9ZWxzZSB0LnB1c2goZSk7ci52YWx1ZT10fX1yZXR1cm57bW9kZWxWYWx1ZTpyLGNoYW5nZU1vZGVsVmFsdWU6aSxpc1NpbmdsZTpPKCgpPT5uLnZhbHVlPT09YHNpbmdsZWApfX12YXJbWix1ZV09aShgQWNjb3JkaW9uUm9vdGApLGRlPUMoe19fbmFtZTpgQWNjb3JkaW9uUm9vdGAscHJvcHM6e2NvbGxhcHNpYmxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMX0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgdmVydGljYWxgfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSx0eXBlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSxkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgdXBkYXRlOm1vZGVsVmFsdWVgXSxzZXR1cChuLHtlbWl0OnJ9KXtsZXQgaT1uLGE9cix7ZGlyOm8sZGlzYWJsZWQ6cyx1bm1vdW50T25IaWRlOmx9PU4oaSksdT1lKG8pLHttb2RlbFZhbHVlOmYsY2hhbmdlTW9kZWxWYWx1ZTpwLGlzU2luZ2xlOm19PWxlKGksYSkse2ZvcndhcmRSZWY6aCxjdXJyZW50RWxlbWVudDpnfT10KCk7cmV0dXJuIHVlKHtkaXNhYmxlZDpzLGRpcmVjdGlvbjp1LG9yaWVudGF0aW9uOmkub3JpZW50YXRpb24scGFyZW50RWxlbWVudDpnLGlzU2luZ2xlOm0sY29sbGFwc2libGU6aS5jb2xsYXBzaWJsZSxtb2RlbFZhbHVlOmYsY2hhbmdlTW9kZWxWYWx1ZTpwLHVubW91bnRPbkhpZGU6bH0pLChlLHQpPT4oQSgpLE0oRShjKSx7cmVmOkUoaCksImFzLWNoaWxkIjplLmFzQ2hpbGQsYXM6ZS5hc30se2RlZmF1bHQ6ZCgoKT0+W2soZS4kc2xvdHMsYGRlZmF1bHRgLHttb2RlbFZhbHVlOkUoZil9KV0pLF86M30sOCxbYGFzLWNoaWxkYCxgYXNgXSkpfX0pLFE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuT3Blbj1gb3BlbmAsZS5DbG9zZWQ9YGNsb3NlZGAsZX0oUXx8e30pLFskLGZlXT1pKGBBY2NvcmRpb25JdGVtYCkscGU9Qyh7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUse2V4cG9zZTpufSl7bGV0IHI9ZSxpPVooKSxhPU8oKCk9PmkuaXNTaW5nbGUudmFsdWU/ci52YWx1ZT09PWkubW9kZWxWYWx1ZS52YWx1ZTpBcnJheS5pc0FycmF5KGkubW9kZWxWYWx1ZS52YWx1ZSkmJmkubW9kZWxWYWx1ZS52YWx1ZS5pbmNsdWRlcyhyLnZhbHVlKSksbz1PKCgpPT5pLmRpc2FibGVkLnZhbHVlfHxyLmRpc2FibGVkKSxzPU8oKCk9Pm8udmFsdWU/YGA6dm9pZCAwKSxjPU8oKCk9PmEudmFsdWU/US5PcGVuOlEuQ2xvc2VkKTtuKHtvcGVuOmEsZGF0YURpc2FibGVkOnN9KTtsZXR7Y3VycmVudFJlZjpsLGN1cnJlbnRFbGVtZW50OnV9PXQoKTtmZSh7b3BlbjphLGRhdGFTdGF0ZTpjLGRpc2FibGVkOm8sZGF0YURpc2FibGVkOnMsdHJpZ2dlcklkOmBgLGN1cnJlbnRSZWY6bCxjdXJyZW50RWxlbWVudDp1LHZhbHVlOk8oKCk9PnIudmFsdWUpfSk7ZnVuY3Rpb24gZihlKXtsZXQgdD1lLnRhcmdldDtpZihBcnJheS5mcm9tKGkucGFyZW50RWxlbWVudC52YWx1ZT8ucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtcmVrYS1jb2xsZWN0aW9uLWl0ZW1dYCk/P1tdKS5maW5kSW5kZXgoZT0+ZT09PXQpPT09LTEpcmV0dXJuIG51bGw7RyhlLHQsaS5wYXJlbnRFbGVtZW50LnZhbHVlLHthcnJvd0tleU9wdGlvbnM6aS5vcmllbnRhdGlvbixkaXI6aS5kaXJlY3Rpb24udmFsdWUsZm9jdXM6ITB9KX1yZXR1cm4oZSx0KT0+KEEoKSxNKEUoWSkseyJkYXRhLW9yaWVudGF0aW9uIjpFKGkpLm9yaWVudGF0aW9uLCJkYXRhLWRpc2FibGVkIjpzLnZhbHVlLCJkYXRhLXN0YXRlIjpjLnZhbHVlLGRpc2FibGVkOm8udmFsdWUsb3BlbjphLnZhbHVlLGFzOnIuYXMsImFzLWNoaWxkIjpyLmFzQ2hpbGQsInVubW91bnQtb24taGlkZSI6ci51bm1vdW50T25IaWRlPz9FKGkpLnVubW91bnRPbkhpZGUudmFsdWUsb25LZXlkb3duOnYoZixbYHVwYCxgZG93bmAsYGxlZnRgLGByaWdodGAsYGhvbWVgLGBlbmRgXSl9LHtkZWZhdWx0OmQoKCk9PltrKGUuJHNsb3RzLGBkZWZhdWx0YCx7b3BlbjphLnZhbHVlfSldKSxfOjN9LDgsW2BkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtc3RhdGVgLGBkaXNhYmxlZGAsYG9wZW5gLGBhc2AsYGFzLWNoaWxkYCxgdW5tb3VudC1vbi1oaWRlYF0pKX19KSxtZT1DKHtfX25hbWU6YEFjY29yZGlvbkNvbnRlbnRgLHByb3BzOntmb3JjZU1vdW50Ont0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCBuPWUscj1aKCksaT0kKCk7cmV0dXJuIHQoKSwoZSx0KT0+KEEoKSxNKEUoWCkse3JvbGU6YHJlZ2lvbmAsImFzLWNoaWxkIjpuLmFzQ2hpbGQsYXM6ZS5hcywiZm9yY2UtbW91bnQiOm4uZm9yY2VNb3VudCwiYXJpYS1sYWJlbGxlZGJ5IjpFKGkpLnRyaWdnZXJJZCwiZGF0YS1zdGF0ZSI6RShpKS5kYXRhU3RhdGUudmFsdWUsImRhdGEtZGlzYWJsZWQiOkUoaSkuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpFKHIpLm9yaWVudGF0aW9uLHN0eWxlOnsiLS1yZWthLWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjpgdmFyKC0tcmVrYS1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoKWAsIi0tcmVrYS1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOmB2YXIoLS1yZWthLWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0KWB9LG9uQ29udGVudEZvdW5kOnRbMF18fD1lPT5FKHIpLmNoYW5nZU1vZGVsVmFsdWUoRShpKS52YWx1ZS52YWx1ZSl9LHtkZWZhdWx0OmQoKCk9PltrKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgZm9yY2UtbW91bnRgLGBhcmlhLWxhYmVsbGVkYnlgLGBkYXRhLXN0YXRlYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSkpfX0pLGhlPUMoe19fbmFtZTpgQWNjb3JkaW9uSGVhZGVyYCxwcm9wczp7YXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGgzYH19LHNldHVwKGUpe2xldCBuPWUscj1aKCksaT0kKCk7cmV0dXJuIHQoKSwoZSx0KT0+KEEoKSxNKEUoYykse2FzOm4uYXMsImFzLWNoaWxkIjpuLmFzQ2hpbGQsImRhdGEtb3JpZW50YXRpb24iOkUocikub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOkUoaSkuZGF0YVN0YXRlLnZhbHVlLCJkYXRhLWRpc2FibGVkIjpFKGkpLmRhdGFEaXNhYmxlZC52YWx1ZX0se2RlZmF1bHQ6ZCgoKT0+W2soZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGFzYCxgYXMtY2hpbGRgLGBkYXRhLW9yaWVudGF0aW9uYCxgZGF0YS1zdGF0ZWAsYGRhdGEtZGlzYWJsZWRgXSkpfX0pLGdlPUMoe19fbmFtZTpgQWNjb3JkaW9uVHJpZ2dlcmAscHJvcHM6e2FzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LHNldHVwKGUpe2xldCB0PWUsbj1aKCkscj0kKCk7ci50cmlnZ2VySWR8fD1hKHZvaWQgMCxgcmVrYS1hY2NvcmRpb24tdHJpZ2dlcmApO2Z1bmN0aW9uIGkoKXtsZXQgZT1uLmlzU2luZ2xlLnZhbHVlJiZyLm9wZW4udmFsdWUmJiFuLmNvbGxhcHNpYmxlO3IuZGlzYWJsZWQudmFsdWV8fGV8fG4uY2hhbmdlTW9kZWxWYWx1ZShyLnZhbHVlLnZhbHVlKX1yZXR1cm4oZSxhKT0+KEEoKSxNKEUoYWUpLHtpZDpFKHIpLnRyaWdnZXJJZCxyZWY6RShyKS5jdXJyZW50UmVmLCJkYXRhLXJla2EtY29sbGVjdGlvbi1pdGVtIjpgYCxhczp0LmFzLCJhcy1jaGlsZCI6dC5hc0NoaWxkLCJhcmlhLWRpc2FibGVkIjpFKHIpLmRpc2FibGVkLnZhbHVlfHx2b2lkIDAsImFyaWEtZXhwYW5kZWQiOkUocikub3Blbi52YWx1ZXx8ITEsImRhdGEtZGlzYWJsZWQiOkUocikuZGF0YURpc2FibGVkLnZhbHVlLCJkYXRhLW9yaWVudGF0aW9uIjpFKG4pLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjpFKHIpLmRhdGFTdGF0ZS52YWx1ZSxkaXNhYmxlZDpFKHIpLmRpc2FibGVkLnZhbHVlLG9uQ2xpY2s6aX0se2RlZmF1bHQ6ZCgoKT0+W2soZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYGlkYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtZGlzYWJsZWRgLGBhcmlhLWV4cGFuZGVkYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gLGBkYXRhLXN0YXRlYCxgZGlzYWJsZWRgXSkpfX0pLF9lPUMoe19fbmFtZTpgTW9kZWxDaGlwYCxwcm9wczp7aWQ6e30sY29udGV4dFRva2Vuczp7fSxpbnB1dFBlck1Ub2tVc2Q6e30sb3V0cHV0UGVyTVRva1VzZDp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPXUoYGxhYmVsYCkscj1qKGBpZGxlYCksaSxhPVMoKTtmdW5jdGlvbiBvKCl7Y2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoKT0+e3IudmFsdWU9YGlkbGVgfSwxNTAwKX1hc3luYyBmdW5jdGlvbiBzKCl7bGV0IGU9YXdhaXQgeih0LmlkLG4udmFsdWU/P3ZvaWQgMCk7ci52YWx1ZT1lLGU9PT1gZmFpbGVkYCYmYS5wdXNoKHtraW5kOmBlcnJvcmAsbWVzc2FnZTpgQ291bGQgbm90IGNvcHkgJHt0LmlkfS5gfSksbygpfWxldCBjPXtpZGxlOm5lLGNvcGllZDpiLHNlbGVjdGVkOmIsZmFpbGVkOnJlfSxsPU8oKCk9Pih7aWRsZTpgQ29weSAke3QuaWR9YCxjb3BpZWQ6YENvcGllZGAsc2VsZWN0ZWQ6YFNlbGVjdGVkIOKAlCBwcmVzcyBDdHJsL0NtZCtDYCxmYWlsZWQ6YENvcHkgZmFpbGVkYH0pKSxmPU8oKCk9PntsZXQgZT1bXTtyZXR1cm4gdC5pbnB1dFBlck1Ub2tVc2QhPT12b2lkIDAmJnQub3V0cHV0UGVyTVRva1VzZCE9PXZvaWQgMCYmZS5wdXNoKFYodC5pbnB1dFBlck1Ub2tVc2QsdC5vdXRwdXRQZXJNVG9rVXNkKSksdC5jb250ZXh0VG9rZW5zIT09dm9pZCAwJiZlLnB1c2goYCR7Qih0LmNvbnRleHRUb2tlbnMpfSBjb250ZXh0YCksZS5qb2luKGAgwrcgYCl9KSxwPU8oKCk9PntsZXQgZT1sLnZhbHVlW3IudmFsdWVdO3JldHVybiBmLnZhbHVlP2Ake2V9IMK3ICR7Zi52YWx1ZX1gOmV9KTtyZXR1cm4gdGUoKCk9PntjbGVhclRpbWVvdXQoaSl9KSwodCxuKT0+e2xldCBpPUYoYEZvbnRBd2Vzb21lSWNvbmApO3JldHVybiBBKCksTShFKEgpLHthczpgYnV0dG9uYCx0eXBlOmBidXR0b25gLHZhcmlhbnQ6YHNlY29uZGFyeWAsY2xhc3M6SShbYG1heC13LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZ2FwLTEgdHJ1bmNhdGUgZm9udC1tb25vIHRleHQteHMgZm9udC1ub3JtYWwgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmRgLHIudmFsdWU9PT1gZmFpbGVkYD9gdGV4dC1kZXN0cnVjdGl2ZWA6YGBdKSx0aXRsZTpwLnZhbHVlLCJhcmlhLWxhYmVsIjpwLnZhbHVlLG9uQ2xpY2s6c30se2RlZmF1bHQ6ZCgoKT0+W3coYHNwYW5gLHtyZWY6YGxhYmVsYCxjbGFzczpgbWluLXctMCB0cnVuY2F0ZSBzZWxlY3QtdGV4dGB9LGgoZS5pZCksNTEzKSxEKGkse2ljb246Y1tyLnZhbHVlXSxjbGFzczpgc2l6ZS0yLjUgc2hyaW5rLTBgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSw4LFtgY2xhc3NgLGB0aXRsZWAsYGFyaWEtbGFiZWxgXSl9fX0pLHZlPUMoe19fbmFtZTpgQWNjb3JkaW9uYCxwcm9wczp7Y29sbGFwc2libGU6e3R5cGU6Qm9vbGVhbn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sZGlyOnt9LG9yaWVudGF0aW9uOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSx0eXBlOnt9LG1vZGVsVmFsdWU6e30sZGVmYXVsdFZhbHVlOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoZSx7ZW1pdDp0fSl7bGV0IHI9ZSxpPXQsYT1fKHIsYGNsYXNzYCksbz1uKGEsaSk7cmV0dXJuKGUsdCk9PihBKCksTShFKGRlKSxmKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uYH0sRShvKSx7Y2xhc3M6RSh5KShgZmxleCB3LWZ1bGwgZmxleC1jb2xgLHIuY2xhc3MpfSkse2RlZmF1bHQ6ZCh0PT5bayhlLiRzbG90cyxgZGVmYXVsdGAsVChsKHQpKSldKSxfOjN9LDE2LFtgY2xhc3NgXSkpfX0pLHllPUMoe19fbmFtZTpgQWNjb3JkaW9uQ29udGVudGAscHJvcHM6e2ZvcmNlTW91bnQ6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPV8odCxgY2xhc3NgKTtyZXR1cm4oZSxyKT0+KEEoKSxNKEUobWUpLGYoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb24tY29udGVudGB9LEUobikse2NsYXNzOmBkYXRhLW9wZW46YW5pbWF0ZS1hY2NvcmRpb24tZG93biBkYXRhLWNsb3NlZDphbmltYXRlLWFjY29yZGlvbi11cCB0ZXh0LXNtIG92ZXJmbG93LWhpZGRlbmB9KSx7ZGVmYXVsdDpkKCgpPT5bdyhgZGl2YCx7Y2xhc3M6SShFKHkpKGBwdC0wIHBiLTIuNSBbJl9hXTp1bmRlcmxpbmUgWyZfYV06dW5kZXJsaW5lLW9mZnNldC0zIFsmX2FdOmhvdmVyOnRleHQtZm9yZWdyb3VuZCBbJl9wOm5vdCg6bGFzdC1jaGlsZCldOm1iLTRgLHQuY2xhc3MpKX0sW2soZS4kc2xvdHMsYGRlZmF1bHRgKV0sMildKSxfOjN9LDE2KSl9fSksYmU9Qyh7X19uYW1lOmBBY2NvcmRpb25JdGVtYCxwcm9wczp7ZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbn0sdmFsdWU6e30sdW5tb3VudE9uSGlkZTp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Xyh0LGBjbGFzc2ApLGk9cihuKTtyZXR1cm4oZSxuKT0+KEEoKSxNKEUocGUpLGYoeyJkYXRhLXNsb3QiOmBhY2NvcmRpb24taXRlbWB9LEUoaSkse2NsYXNzOkUoeSkoYG5vdC1sYXN0OmJvcmRlci1iYCx0LmNsYXNzKX0pLHtkZWZhdWx0OmQodD0+W2soZS4kc2xvdHMsYGRlZmF1bHRgLFQobCh0KSkpXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSx4ZT1DKHtfX25hbWU6YEFjY29yZGlvblRyaWdnZXJgLHByb3BzOnthc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19LGhlYWRlckNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49Xyh0LGBjbGFzc2AsYGhlYWRlckNsYXNzYCk7cmV0dXJuKGUscik9PntsZXQgaT1GKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gQSgpLE0oRShoZSkse2NsYXNzOkkoRSh5KShgZmxleGAsdC5oZWFkZXJDbGFzcykpfSx7ZGVmYXVsdDpkKCgpPT5bRChFKGdlKSxmKHsiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXJgfSxFKG4pLHtjbGFzczpFKHkpKGBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6YWZ0ZXI6Ym9yZGVyLXJpbmcgKio6ZGF0YS1bc2xvdD1hY2NvcmRpb24tdHJpZ2dlci1pY29uXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1sZyBweS0yLjUgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGZvY3VzLXZpc2libGU6cmluZy0zICoqOmRhdGEtW3Nsb3Q9YWNjb3JkaW9uLXRyaWdnZXItaWNvbl06bWwtYXV0byAqKjpkYXRhLVtzbG90PWFjY29yZGlvbi10cmlnZ2VyLWljb25dOnNpemUtNCBncm91cC9hY2NvcmRpb24tdHJpZ2dlciByZWxhdGl2ZSBmbGV4IGZsZXgtMSBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwYCx0LmNsYXNzKX0pLHtkZWZhdWx0OmQoKCk9PltrKGUuJHNsb3RzLGBkZWZhdWx0YCksayhlLiRzbG90cyxgaWNvbmAse30sKCk9PltEKGkse2ljb246RSh4KSwiZGF0YS1zbG90IjpgYWNjb3JkaW9uLXRyaWdnZXItaWNvbmAsImFyaWEtaGlkZGVuIjpgdHJ1ZWAsY2xhc3M6YHBvaW50ZXItZXZlbnRzLW5vbmUgc2hyaW5rLTAgZ3JvdXAtYXJpYS1leHBhbmRlZC9hY2NvcmRpb24tdHJpZ2dlcjpoaWRkZW5gfSxudWxsLDgsW2BpY29uYF0pLEQoaSx7aWNvbjpFKG8pLCJkYXRhLXNsb3QiOmBhY2NvcmRpb24tdHJpZ2dlci1pY29uYCwiYXJpYS1oaWRkZW4iOmB0cnVlYCxjbGFzczpgcG9pbnRlci1ldmVudHMtbm9uZSBoaWRkZW4gc2hyaW5rLTAgZ3JvdXAtYXJpYS1leHBhbmRlZC9hY2NvcmRpb24tdHJpZ2dlcjppbmxpbmVgfSxudWxsLDgsW2BpY29uYF0pXSldKSxfOjN9LDE2LFtgY2xhc3NgXSldKSxfOjN9LDgsW2BjbGFzc2BdKX19fSk7ZnVuY3Rpb24gU2UoZSx0LG4pe2lmKCF0KXJldHVybiBuZXcgU2V0KGUubWFudWFsbHlFeHBhbmRlZCk7bGV0IHI9bmV3IFNldChlLm1hbnVhbGx5RXhwYW5kZWQpO2ZvcihsZXQgdCBvZiBuKWUubWFudWFsbHlDb2xsYXBzZWQuaGFzKHQpfHxyLmFkZCh0KTtyZXR1cm4gcn1mdW5jdGlvbiBDZShlLHQsbil7bj8oZS5tYW51YWxseUV4cGFuZGVkLmRlbGV0ZSh0KSxlLm1hbnVhbGx5Q29sbGFwc2VkLmFkZCh0KSk6KGUubWFudWFsbHlDb2xsYXBzZWQuZGVsZXRlKHQpLGUubWFudWFsbHlFeHBhbmRlZC5hZGQodCkpfWZ1bmN0aW9uIHdlKGUpe2UubWFudWFsbHlDb2xsYXBzZWQuY2xlYXIoKX1leHBvcnR7YmUgYXMgYSxfZSBhcyBjLHhlIGFzIGksU2UgYXMgbix5ZSBhcyBvLENlIGFzIHIsdmUgYXMgcyx3ZSBhcyB0fTs=", + "aW1wb3J0e2EgYXMgZSxpIGFzIHQsbixyLHMgYXMgaSx0IGFzIGF9ZnJvbSIuL3VzZUlkLVRjWEJ3VU9oLmpzIjtpbXBvcnR7R24gYXMgbyxLIGFzIHMsTHIgYXMgYyxNciBhcyBsLFFuIGFzIHUsUiBhcyBkLFNpIGFzIGYsVSBhcyBwLFV0IGFzIG0sV24gYXMgaCxXdCBhcyBnLF9uIGFzIF8sY2kgYXMgdixjbiBhcyB5LGRpIGFzIGIsZHIgYXMgeCxoaSBhcyBTLGlyIGFzIEMsayBhcyB3LGtuIGFzIFQsbnIgYXMgRSxvbiBhcyBELHEgYXMgTyx2aSBhcyBrLHluIGFzIEF9ZnJvbSIuL1NrZWxldG9uLUQwTm52SFkxLmpzIjtpbXBvcnR7cCBhcyBqLHUgYXMgTX1mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO3ZhciBOPWByb3ZpbmdGb2N1c0dyb3VwLm9uRW50cnlGb2N1c2AsUD17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxGPXtBcnJvd0xlZnQ6YHByZXZgLEFycm93VXA6YHByZXZgLEFycm93UmlnaHQ6YG5leHRgLEFycm93RG93bjpgbmV4dGAsUGFnZVVwOmBmaXJzdGAsSG9tZTpgZmlyc3RgLFBhZ2VEb3duOmBsYXN0YCxFbmQ6YGxhc3RgfTtmdW5jdGlvbiBJKGUsdCl7cmV0dXJuIHQ9PT1gcnRsYD9lPT09YEFycm93TGVmdGA/YEFycm93UmlnaHRgOmU9PT1gQXJyb3dSaWdodGA/YEFycm93TGVmdGA6ZTplfWZ1bmN0aW9uIEwoZSx0LG4pe2xldCByPUkoZS5rZXksbik7aWYoISh0PT09YHZlcnRpY2FsYCYmW2BBcnJvd0xlZnRgLGBBcnJvd1JpZ2h0YF0uaW5jbHVkZXMocikpJiYhKHQ9PT1gaG9yaXpvbnRhbGAmJltgQXJyb3dVcGAsYEFycm93RG93bmBdLmluY2x1ZGVzKHIpKSlyZXR1cm4gRltyXX1mdW5jdGlvbiBSKGUsdD0hMSl7bGV0IG49aigpO2ZvcihsZXQgciBvZiBlKWlmKHI9PT1ufHwoci5mb2N1cyh7cHJldmVudFNjcm9sbDp0fSksaigpIT09bikpcmV0dXJufWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbQixWXT1pKGBSb3ZpbmdGb2N1c0dyb3VwYCksSD1BKHtfX25hbWU6YFJvdmluZ0ZvY3VzR3JvdXBgLHByb3BzOntvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGxvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxjdXJyZW50VGFiU3RvcElkOnt0eXBlOltTdHJpbmcsbnVsbF0scmVxdWlyZWQ6ITF9LGRlZmF1bHRDdXJyZW50VGFiU3RvcElkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0scHJldmVudFNjcm9sbE9uRW50cnlGb2N1czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgZW50cnlGb2N1c2AsYHVwZGF0ZTpjdXJyZW50VGFiU3RvcElkYF0sc2V0dXAodCx7ZXhwb3NlOm4sZW1pdDpyfSl7bGV0IGk9dCxhPXIse2xvb3A6byxvcmllbnRhdGlvbjpzLGRpcjpsfT1TKGkpLHU9ZShsKSxmPWQoaSxgY3VycmVudFRhYlN0b3BJZGAsYSx7ZGVmYXVsdFZhbHVlOmkuZGVmYXVsdEN1cnJlbnRUYWJTdG9wSWQscGFzc2l2ZTppLmN1cnJlbnRUYWJTdG9wSWQ9PT12b2lkIDB9KSxwPXYoITEpLG09dighMSksaD12KDApLHtnZXRJdGVtczpnLENvbGxlY3Rpb25TbG90OmJ9PU0oe2lzUHJvdmlkZXI6ITB9KTtmdW5jdGlvbiBUKGUpe2xldCB0PSFtLnZhbHVlO2lmKGUuY3VycmVudFRhcmdldCYmZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXQmJnQmJiFwLnZhbHVlKXtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoTixQKTtpZihlLmN1cnJlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudCh0KSxhKGBlbnRyeUZvY3VzYCx0KSwhdC5kZWZhdWx0UHJldmVudGVkKXtsZXQgZT1nKCkubWFwKGU9PmUucmVmKS5maWx0ZXIoZT0+ZS5kYXRhc2V0LmRpc2FibGVkIT09YGApO1IoW2UuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1hY3RpdmVgKT09PWBgKSxlLmZpbmQoZT0+ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtaGlnaGxpZ2h0ZWRgKT09PWBgKSxlLmZpbmQoZT0+ZS5pZD09PWYudmFsdWUpLC4uLmVdLmZpbHRlcihCb29sZWFuKSxpLnByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXMpfX1tLnZhbHVlPSExfWZ1bmN0aW9uIEUoKXtzZXRUaW1lb3V0KCgpPT57bS52YWx1ZT0hMX0sMSl9cmV0dXJuIG4oe2dldEl0ZW1zOmd9KSxWKHtsb29wOm8sZGlyOnUsb3JpZW50YXRpb246cyxjdXJyZW50VGFiU3RvcElkOmYsb25JdGVtRm9jdXM6ZT0+e2YudmFsdWU9ZX0sb25JdGVtU2hpZnRUYWI6KCk9PntwLnZhbHVlPSEwfSxvbkZvY3VzYWJsZUl0ZW1BZGQ6KCk9PntoLnZhbHVlKyt9LG9uRm9jdXNhYmxlSXRlbVJlbW92ZTooKT0+e2gudmFsdWUtLX19KSwoZSx0KT0+KEMoKSx5KGsoYiksbnVsbCx7ZGVmYXVsdDpjKCgpPT5bXyhrKHcpLHt0YWJpbmRleDpwLnZhbHVlfHxoLnZhbHVlPT09MD8tMTowLCJkYXRhLW9yaWVudGF0aW9uIjprKHMpLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsZGlyOmsodSksc3R5bGU6e291dGxpbmU6YG5vbmVgfSxvbk1vdXNlZG93bjp0WzBdfHw9ZT0+bS52YWx1ZT0hMCxvbk1vdXNldXA6RSxvbkZvY3VzOlQsb25CbHVyOnRbMV18fD1lPT5wLnZhbHVlPSExfSx7ZGVmYXVsdDpjKCgpPT5beChlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdGFiaW5kZXhgLGBkYXRhLW9yaWVudGF0aW9uYCxgYXNgLGBhcy1jaGlsZGAsYGRpcmBdKV0pLF86M30pKX19KSxVPUEoe19fbmFtZTpgUm92aW5nRm9jdXNJdGVtYCxwcm9wczp7dGFiU3RvcElkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZm9jdXNhYmxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYWN0aXZlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsbG93U2hpZnRLZXk6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUIoKSxyPWEoKSxpPUQoKCk9PnQudGFiU3RvcElkfHxyKSxzPUQoKCk9Pm4uY3VycmVudFRhYlN0b3BJZC52YWx1ZT09PWkudmFsdWUpLHtnZXRJdGVtczpkLENvbGxlY3Rpb25JdGVtOmZ9PU0oKTt1KCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtQWRkKCl9KSxFKCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtUmVtb3ZlKCl9KSxsKCgpPT50LmZvY3VzYWJsZSwoZSx0KT0+e2UhPT10JiYoZT9uLm9uRm9jdXNhYmxlSXRlbUFkZCgpOm4ub25Gb2N1c2FibGVJdGVtUmVtb3ZlKCkpfSk7ZnVuY3Rpb24gcChlKXtpZihlLmtleT09PWBUYWJgJiZlLnNoaWZ0S2V5KXtuLm9uSXRlbVNoaWZ0VGFiKCk7cmV0dXJufWlmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0KXJldHVybjtsZXQgcj1MKGUsbi5vcmllbnRhdGlvbi52YWx1ZSxuLmRpci52YWx1ZSk7aWYociE9PXZvaWQgMCl7aWYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5fHwhdC5hbGxvd1NoaWZ0S2V5JiZlLnNoaWZ0S2V5KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGk9Wy4uLmQoKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCldO2lmKHI9PT1gbGFzdGApaS5yZXZlcnNlKCk7ZWxzZSBpZihyPT09YHByZXZgfHxyPT09YG5leHRgKXtyPT09YHByZXZgJiZpLnJldmVyc2UoKTtsZXQgdD1pLmluZGV4T2YoZS5jdXJyZW50VGFyZ2V0KTtpPW4ubG9vcC52YWx1ZT96KGksdCsxKTppLnNsaWNlKHQrMSl9bygoKT0+UihpKSl9fXJldHVybihlLHQpPT4oQygpLHkoayhmKSxudWxsLHtkZWZhdWx0OmMoKCk9PltfKGsodykse3RhYmluZGV4OnMudmFsdWU/MDotMSwiZGF0YS1vcmllbnRhdGlvbiI6ayhuKS5vcmllbnRhdGlvbi52YWx1ZSwiZGF0YS1hY3RpdmUiOmUuYWN0aXZlP2BgOnZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6ZS5mb2N1c2FibGU/dm9pZCAwOmBgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsb25Nb3VzZWRvd246dFswXXx8PXQ9PntlLmZvY3VzYWJsZT9rKG4pLm9uSXRlbUZvY3VzKGkudmFsdWUpOnQucHJldmVudERlZmF1bHQoKX0sb25Gb2N1czp0WzFdfHw9ZT0+ayhuKS5vbkl0ZW1Gb2N1cyhpLnZhbHVlKSxvbktleWRvd246cH0se2RlZmF1bHQ6YygoKT0+W3goZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHRhYmluZGV4YCxgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtYWN0aXZlYCxgZGF0YS1kaXNhYmxlZGAsYGFzYCxgYXMtY2hpbGRgXSldKSxfOjN9KSl9fSksW1csR109aShgVGFic1Jvb3RgKSxLPUEoe19fbmFtZTpgVGFic1Jvb3RgLHByb3BzOntkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGhvcml6b250YWxgfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhY3RpdmF0aW9uTW9kZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYXV0b21hdGljYH0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKG4se2VtaXQ6cn0pe2xldCBpPW4sbz1yLHtvcmllbnRhdGlvbjpzLHVubW91bnRPbkhpZGU6bCxkaXI6dX09UyhpKSxmPWUodSk7dCgpO2xldCBwPWQoaSxgbW9kZWxWYWx1ZWAsbyx7ZGVmYXVsdFZhbHVlOmkuZGVmYXVsdFZhbHVlLHBhc3NpdmU6aS5tb2RlbFZhbHVlPT09dm9pZCAwfSksbT12KCksaD1iKG5ldyBTZXQpO3JldHVybiBHKHttb2RlbFZhbHVlOnAsY2hhbmdlTW9kZWxWYWx1ZTplPT57cC52YWx1ZT1lfSxvcmllbnRhdGlvbjpzLGRpcjpmLHVubW91bnRPbkhpZGU6bCxhY3RpdmF0aW9uTW9kZTppLmFjdGl2YXRpb25Nb2RlLGJhc2VJZDphKHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6bSxjb250ZW50SWRzOmgscmVnaXN0ZXJDb250ZW50OmU9PntoLnZhbHVlPW5ldyBTZXQoWy4uLmgudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldChoLnZhbHVlKTt0LmRlbGV0ZShlKSxoLnZhbHVlPXR9fSksKGUsdCk9PihDKCkseShrKHcpLHtkaXI6ayhmKSwiZGF0YS1vcmllbnRhdGlvbiI6ayhzKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzfSx7ZGVmYXVsdDpjKCgpPT5beChlLiRzbG90cyxgZGVmYXVsdGAse21vZGVsVmFsdWU6ayhwKX0pXSksXzozfSw4LFtgZGlyYCxgZGF0YS1vcmllbnRhdGlvbmAsYGFzLWNoaWxkYCxgYXNgXSkpfX0pO2Z1bmN0aW9uIHEoZSx0KXtyZXR1cm5gJHtlfS10cmlnZ2VyLSR7dH1gfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBZPUEoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0e2xvb3A6bn09UyhlKSx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PXQoKSxhPVcoKTtyZXR1cm4gYS50YWJzTGlzdD1pLChlLHQpPT4oQygpLHkoayhIKSx7ImFzLWNoaWxkIjpgYCxvcmllbnRhdGlvbjprKGEpLm9yaWVudGF0aW9uLnZhbHVlLGRpcjprKGEpLmRpci52YWx1ZSxsb29wOmsobil9LHtkZWZhdWx0OmMoKCk9PltfKGsodykse3JlZjprKHIpLHJvbGU6YHRhYmxpc3RgLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImFyaWEtb3JpZW50YXRpb24iOmsoYSkub3JpZW50YXRpb24udmFsdWV9LHtkZWZhdWx0OmMoKCk9Plt4KGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgYXJpYS1vcmllbnRhdGlvbmBdKV0pLF86M30sOCxbYG9yaWVudGF0aW9uYCxgZGlyYCxgbG9vcGBdKSl9fSksWD1BKHtfX25hbWU6YFRhYnNUcmlnZ2VyYCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IG49ZSx7Zm9yd2FyZFJlZjpyfT10KCksaT1XKCksYT1EKCgpPT5xKGkuYmFzZUlkLG4udmFsdWUpKSxvPUQoKCk9PmkuY29udGVudElkcy52YWx1ZS5oYXMobi52YWx1ZSk/SihpLmJhc2VJZCxuLnZhbHVlKTp2b2lkIDApLHM9RCgoKT0+bi52YWx1ZT09PWkubW9kZWxWYWx1ZS52YWx1ZSk7cmV0dXJuKGUsdCk9PihDKCkseShrKFUpLHsiYXMtY2hpbGQiOmBgLGZvY3VzYWJsZTohZS5kaXNhYmxlZCxhY3RpdmU6cy52YWx1ZX0se2RlZmF1bHQ6YygoKT0+W18oayh3KSx7aWQ6YS52YWx1ZSxyZWY6ayhyKSxyb2xlOmB0YWJgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLXNlbGVjdGVkIjpzLnZhbHVlP2B0cnVlYDpgZmFsc2VgLCJhcmlhLWNvbnRyb2xzIjpvLnZhbHVlLCJkYXRhLXN0YXRlIjpzLnZhbHVlP2BhY3RpdmVgOmBpbmFjdGl2ZWAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwiZGF0YS1kaXNhYmxlZCI6ZS5kaXNhYmxlZD9gYDp2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOmsoaSkub3JpZW50YXRpb24udmFsdWUsb25Nb3VzZWRvd246dFswXXx8PWcodD0+eyFlLmRpc2FibGVkJiZ0LmN0cmxLZXk9PT0hMT9rKGkpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSk6dC5wcmV2ZW50RGVmYXVsdCgpfSxbYGxlZnRgXSksb25LZXlkb3duOnRbMV18fD1tKHQ9PmsoaSkuY2hhbmdlTW9kZWxWYWx1ZShlLnZhbHVlKSxbYGVudGVyYCxgc3BhY2VgXSksb25Gb2N1czp0WzJdfHw9KCk9PntsZXQgdD1rKGkpLmFjdGl2YXRpb25Nb2RlIT09YG1hbnVhbGA7IXMudmFsdWUmJiFlLmRpc2FibGVkJiZ0JiZrKGkpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSl9fSx7ZGVmYXVsdDpjKCgpPT5beChlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgaWRgLGB0eXBlYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtc2VsZWN0ZWRgLGBhcmlhLWNvbnRyb2xzYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSldKSxfOjN9LDgsW2Bmb2N1c2FibGVgLGBhY3RpdmVgXSkpfX0pLFo9QSh7X19uYW1lOmBUYWJzYCxwcm9wczp7ZGVmYXVsdFZhbHVlOnt9LG9yaWVudGF0aW9uOnt9LGRpcjp7fSxhY3RpdmF0aW9uTW9kZTp7fSxtb2RlbFZhbHVlOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCByPWUsaT10LGE9cChyLGBjbGFzc2ApLG89bihhLGkpO3JldHVybihlLHQpPT4oQygpLHkoayhLKSxoKHsiZGF0YS1zbG90IjpgdGFic2AsImRhdGEtb3JpZW50YXRpb24iOmsobykub3JpZW50YXRpb258fGBob3Jpem9udGFsYH0sayhvKSx7Y2xhc3M6ayhzKShgZ2FwLTIgZ3JvdXAvdGFicyBmbGV4IGRhdGEtaG9yaXpvbnRhbDpmbGV4LWNvbGAsci5jbGFzcyl9KSx7ZGVmYXVsdDpjKHQ9Plt4KGUuJHNsb3RzLGBkZWZhdWx0YCxmKFQodCkpKV0pLF86M30sMTYsW2BkYXRhLW9yaWVudGF0aW9uYCxgY2xhc3NgXSkpfX0pLFE9QSh7X19uYW1lOmBUYWJzTGlzdGAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50OntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1wKHQsYGNsYXNzYCxgdmFyaWFudGApO3JldHVybihyLGkpPT4oQygpLHkoayhZKSxoKHsiZGF0YS1zbG90IjpgdGFicy1saXN0YCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnR9LGsobikse2NsYXNzOmsocykoayhlZSkoe3ZhcmlhbnQ6ZS52YXJpYW50fSksdC5jbGFzcyl9KSx7ZGVmYXVsdDpjKCgpPT5beChyLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGRhdGEtdmFyaWFudGAsYGNsYXNzYF0pKX19KSwkPUEoe19fbmFtZTpgVGFic1RyaWdnZXJgLHByb3BzOnt2YWx1ZTp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49cCh0LGBjbGFzc2ApLGk9cihuKTtyZXR1cm4oZSxuKT0+KEMoKSx5KGsoWCksaCh7ImRhdGEtc2xvdCI6YHRhYnMtdHJpZ2dlcmAsY2xhc3M6ayhzKShgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9ZGVmYXVsdF0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1zbSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpzaGFkb3ctbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xIHJlbGF0aXZlIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZm9yZWdyb3VuZC82MCB0cmFuc2l0aW9uLWFsbCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpmbGV4LW5vbmUgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOnctZnVsbCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6anVzdGlmeS1zdGFydCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmluZyBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazpob3Zlcjp0ZXh0LWZvcmVncm91bmQgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLGBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpiZy10cmFuc3BhcmVudCBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpiZy10cmFuc3BhcmVudCBkYXJrOmdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJvcmRlci10cmFuc3BhcmVudCBkYXJrOmdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJnLXRyYW5zcGFyZW50YCxgZGF0YS1hY3RpdmU6YmctYmFja2dyb3VuZCBkYXRhLWFjdGl2ZTp0ZXh0LWZvcmVncm91bmQgZGFyazpkYXRhLWFjdGl2ZTpib3JkZXItaW5wdXQgZGFyazpkYXRhLWFjdGl2ZTpiZy1pbnB1dC8zMCBkYXJrOmRhdGEtYWN0aXZlOnRleHQtZm9yZWdyb3VuZGAsYGFmdGVyOmFic29sdXRlIGFmdGVyOmJnLWZvcmVncm91bmQgYWZ0ZXI6b3BhY2l0eS0wIGFmdGVyOnRyYW5zaXRpb24tb3BhY2l0eSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjppbnNldC14LTAgZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6Ym90dG9tLVstNXB4XSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjpoLTAuNSBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6aW5zZXQteS0wIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjotcmlnaHQtMSBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6dy0wLjUgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YWZ0ZXI6b3BhY2l0eS0xMDBgLHQuY2xhc3MpfSxrKGkpKSx7ZGVmYXVsdDpjKCgpPT5beChlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxlZT1PKGByb3VuZGVkLWxnIHAtMC43NSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpoLTggZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6bWF4LXctZnVsbCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpqdXN0aWZ5LXN0YXJ0IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOm92ZXJmbG93LXgtYXV0byBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpvdmVyZmxvdy15LWhpZGRlbiBkYXRhLVt2YXJpYW50PWxpbmVdOnJvdW5kZWQtbm9uZSBncm91cC90YWJzLWxpc3QgaW5saW5lLWZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6aC1maXQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmZsZXgtY29sYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLW11dGVkYCxsaW5lOmBnYXAtMSBiZy10cmFuc3BhcmVudGB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2V4cG9ydHtRIGFzIG4sWiBhcyByLCQgYXMgdH07", ), }, - "series-NIRVBXMP.js": { + "usage-bars-BJOYHsuR.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "ZnVuY3Rpb24gZShlKXtsZXQgdD0wO2ZvcihsZXQgbiBvZiBlKXQrPW47cmV0dXJuIHR9ZnVuY3Rpb24gdCh0LG4pe3JldHVybiBuPD0wP1tdOlsuLi50XS5zb3J0KCh0LG4pPT5lKG4ucG9pbnRzKS1lKHQucG9pbnRzKSkuc2xpY2UoMCxuKX1mdW5jdGlvbiBuKGUsdCl7cmV0dXJuIGUubWFwKChlLG4pPT57bGV0IHI9MDtmb3IobGV0IGUgb2YgdClyKz1lLnBvaW50c1tuXT8/MDtyZXR1cm4gTWF0aC5tYXgoMCxlLXIpfSl9ZnVuY3Rpb24gcih0KXtsZXQgbj1uZXcgTWFwO2ZvcihsZXQgZSBvZiB0KXtsZXQgdD1lLnNjb3BlLnN0YXJ0c1dpdGgoYG1vZGVsOmApP2Uuc2NvcGUuc2xpY2UoNik6ZS5zY29wZSxyPXQuaW5kZXhPZihgL2ApLGk9cj09PS0xP3Q6dC5zbGljZSgwLHIpLGE9bi5nZXQoaSk/P0FycmF5KGUucG9pbnRzLmxlbmd0aCkuZmlsbCgwKTtmb3IobGV0IHQ9MDt0PGUucG9pbnRzLmxlbmd0aDt0KyspYVt0XT0oYVt0XT8/MCkrKGUucG9pbnRzW3RdPz8wKTtuLnNldChpLGEpfXJldHVybiBBcnJheS5mcm9tKG4uZW50cmllcygpKS5tYXAoKFtlLHRdKT0+KHtzY29wZTplLHBvaW50czp0fSkpLnNvcnQoKHQsbik9PmUobi5wb2ludHMpLWUodC5wb2ludHMpKX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIHQubWFwKCh0LG4pPT50PjA/KGVbbl0/PzApL3Q6bnVsbCl9ZXhwb3J0e3IgYXMgaSxpIGFzIG4sdCBhcyByLG4gYXMgdH07", + "aW1wb3J0e2IgYXMgZSxsIGFzIHQscyBhcyBufWZyb20iLi9iYWRnZS1CSkxnLVIzTS5qcyI7ZnVuY3Rpb24gcihlKXtyZXR1cm4hTnVtYmVyLmlzRmluaXRlKGUpfHxlPC44P2Bub3JtYWxgOmU8MT9gYW1iZXJgOmByZWRgfXZhciBpPXtyZXFNaW46YHJlcS9taW5gLHJlcURheTpgcmVxL2RheWAsdG9rRGF5OmB0b2tlbnMgKGluK291dCkvZGF5YCx0b2tNb250aDpgdG9rZW5zIChpbitvdXQpL21vbnRoYCxjb3N0RGF5OmBjb3N0L2RheWAsY29zdE1vbnRoOmBjb3N0L21vbnRoYH07ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJue2lkOmUsdXNlZDp0LGxpbWl0Om4scmF0aW86dC9ufX1mdW5jdGlvbiBvKHQpe2xldCBuPXQubGltaXRzO2lmKCFufHx0LnN0b3JlRG93bilyZXR1cm5bXTtsZXQgcj1bXTtpZihuLnJlcXVlc3RzUGVyTWludXRlJiZyLnB1c2goYShgcmVxTWluYCx0LnJlcXVlc3RzUGVyTWludXRlLG4ucmVxdWVzdHNQZXJNaW51dGUpKSxuLnJlcXVlc3RzUGVyRGF5JiZyLnB1c2goYShgcmVxRGF5YCx0LnJlcXVlc3RzUGVyRGF5LG4ucmVxdWVzdHNQZXJEYXkpKSxuLnRva2Vuc1BlckRheSYmci5wdXNoKGEoYHRva0RheWAsdC50b2tlbnNJblBlckRheSt0LnRva2Vuc091dFBlckRheSxuLnRva2Vuc1BlckRheSkpLG4udG9rZW5zUGVyTW9udGgmJnIucHVzaChhKGB0b2tNb250aGAsdC50b2tlbnNJblBlck1vbnRoK3QudG9rZW5zT3V0UGVyTW9udGgsbi50b2tlbnNQZXJNb250aCkpLG4uY29zdFBlckRheVVTRCl7bGV0IGk9ZShuLmNvc3RQZXJEYXlVU0QpO2k+MCYmci5wdXNoKGEoYGNvc3REYXlgLHQuY29zdFBlckRheU1pY3JvVXNkLGkpKX1pZihuLmNvc3RQZXJNb250aFVTRCl7bGV0IGk9ZShuLmNvc3RQZXJNb250aFVTRCk7aT4wJiZyLnB1c2goYShgY29zdE1vbnRoYCx0LmNvc3RQZXJNb250aE1pY3JvVXNkLGkpKX1yZXR1cm4gcn1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmlkLnN0YXJ0c1dpdGgoYGNvc3RgKT9gJHtuKGUudXNlZCl9IC8gJHtuKGUubGltaXQpfWA6YCR7dChlLnVzZWQpfSAvICR7dChlLmxpbWl0KX1gfWV4cG9ydHtyIGFzIGksbyBhcyBuLHMgYXMgcixpIGFzIHR9Ow==", ), }, - "tabs-YlhnHpK-.js": { + "useCopyFeedback-CjRzOO-W.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e2EgYXMgZSxpIGFzIHQsbixyLHMgYXMgaSx0IGFzIGF9ZnJvbSIuL3VzZUlkLUI5ZEp1bW9JLmpzIjtpbXBvcnR7QXIgYXMgbyxEIGFzIHMsRG4gYXMgYyxGciBhcyBsLEcgYXMgdSxIbiBhcyBkLEh0IGFzIGYsSSBhcyBwLFVuIGFzIG0sViBhcyBoLFZ0IGFzIGcsVyBhcyBfLFhuIGFzIHYsX24gYXMgeSxiaSBhcyBiLGVyIGFzIHgsZ2kgYXMgUyxobiBhcyBDLGluIGFzIHcsbGkgYXMgVCxsciBhcyBFLG5yIGFzIEQsb2kgYXMgTyxvbiBhcyBrLHBpIGFzIEF9ZnJvbSIuL1NrZWxldG9uLUIwemlCNk9kLmpzIjtpbXBvcnR7ZiBhcyBqLGwgYXMgTX1mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO3ZhciBOPWByb3ZpbmdGb2N1c0dyb3VwLm9uRW50cnlGb2N1c2AsUD17YnViYmxlczohMSxjYW5jZWxhYmxlOiEwfSxGPXtBcnJvd0xlZnQ6YHByZXZgLEFycm93VXA6YHByZXZgLEFycm93UmlnaHQ6YG5leHRgLEFycm93RG93bjpgbmV4dGAsUGFnZVVwOmBmaXJzdGAsSG9tZTpgZmlyc3RgLFBhZ2VEb3duOmBsYXN0YCxFbmQ6YGxhc3RgfTtmdW5jdGlvbiBJKGUsdCl7cmV0dXJuIHQ9PT1gcnRsYD9lPT09YEFycm93TGVmdGA/YEFycm93UmlnaHRgOmU9PT1gQXJyb3dSaWdodGA/YEFycm93TGVmdGA6ZTplfWZ1bmN0aW9uIEwoZSx0LG4pe2xldCByPUkoZS5rZXksbik7aWYoISh0PT09YHZlcnRpY2FsYCYmW2BBcnJvd0xlZnRgLGBBcnJvd1JpZ2h0YF0uaW5jbHVkZXMocikpJiYhKHQ9PT1gaG9yaXpvbnRhbGAmJltgQXJyb3dVcGAsYEFycm93RG93bmBdLmluY2x1ZGVzKHIpKSlyZXR1cm4gRltyXX1mdW5jdGlvbiBSKGUsdD0hMSl7bGV0IG49aigpO2ZvcihsZXQgciBvZiBlKWlmKHI9PT1ufHwoci5mb2N1cyh7cHJldmVudFNjcm9sbDp0fSksaigpIT09bikpcmV0dXJufWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5tYXAoKG4scik9PmVbKHQrciklZS5sZW5ndGhdKX12YXJbQixWXT1pKGBSb3ZpbmdGb2N1c0dyb3VwYCksSD15KHtfX25hbWU6YFJvdmluZ0ZvY3VzR3JvdXBgLHByb3BzOntvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDp2b2lkIDB9LGRpcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGxvb3A6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMSxkZWZhdWx0OiExfSxjdXJyZW50VGFiU3RvcElkOnt0eXBlOltTdHJpbmcsbnVsbF0scmVxdWlyZWQ6ITF9LGRlZmF1bHRDdXJyZW50VGFiU3RvcElkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0scHJldmVudFNjcm9sbE9uRW50cnlGb2N1czp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX19LGVtaXRzOltgZW50cnlGb2N1c2AsYHVwZGF0ZTpjdXJyZW50VGFiU3RvcElkYF0sc2V0dXAodCx7ZXhwb3NlOm4sZW1pdDpyfSl7bGV0IGk9dCxhPXIse2xvb3A6byxvcmllbnRhdGlvbjpjLGRpcjp1fT1BKGkpLGQ9ZSh1KSxmPXAoaSxgY3VycmVudFRhYlN0b3BJZGAsYSx7ZGVmYXVsdFZhbHVlOmkuZGVmYXVsdEN1cnJlbnRUYWJTdG9wSWQscGFzc2l2ZTppLmN1cnJlbnRUYWJTdG9wSWQ9PT12b2lkIDB9KSxtPU8oITEpLGg9TyghMSksZz1PKDApLHtnZXRJdGVtczpfLENvbGxlY3Rpb25TbG90OnZ9PU0oe2lzUHJvdmlkZXI6ITB9KTtmdW5jdGlvbiB5KGUpe2xldCB0PSFoLnZhbHVlO2lmKGUuY3VycmVudFRhcmdldCYmZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXQmJnQmJiFtLnZhbHVlKXtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoTixQKTtpZihlLmN1cnJlbnRUYXJnZXQuZGlzcGF0Y2hFdmVudCh0KSxhKGBlbnRyeUZvY3VzYCx0KSwhdC5kZWZhdWx0UHJldmVudGVkKXtsZXQgZT1fKCkubWFwKGU9PmUucmVmKS5maWx0ZXIoZT0+ZS5kYXRhc2V0LmRpc2FibGVkIT09YGApO1IoW2UuZmluZChlPT5lLmdldEF0dHJpYnV0ZShgZGF0YS1hY3RpdmVgKT09PWBgKSxlLmZpbmQoZT0+ZS5nZXRBdHRyaWJ1dGUoYGRhdGEtaGlnaGxpZ2h0ZWRgKT09PWBgKSxlLmZpbmQoZT0+ZS5pZD09PWYudmFsdWUpLC4uLmVdLmZpbHRlcihCb29sZWFuKSxpLnByZXZlbnRTY3JvbGxPbkVudHJ5Rm9jdXMpfX1oLnZhbHVlPSExfWZ1bmN0aW9uIGIoKXtzZXRUaW1lb3V0KCgpPT57aC52YWx1ZT0hMX0sMSl9cmV0dXJuIG4oe2dldEl0ZW1zOl99KSxWKHtsb29wOm8sZGlyOmQsb3JpZW50YXRpb246YyxjdXJyZW50VGFiU3RvcElkOmYsb25JdGVtRm9jdXM6ZT0+e2YudmFsdWU9ZX0sb25JdGVtU2hpZnRUYWI6KCk9PnttLnZhbHVlPSEwfSxvbkZvY3VzYWJsZUl0ZW1BZGQ6KCk9PntnLnZhbHVlKyt9LG9uRm9jdXNhYmxlSXRlbVJlbW92ZTooKT0+e2cudmFsdWUtLX19KSwoZSx0KT0+KEQoKSxrKFModiksbnVsbCx7ZGVmYXVsdDpsKCgpPT5bQyhTKHMpLHt0YWJpbmRleDptLnZhbHVlfHxnLnZhbHVlPT09MD8tMTowLCJkYXRhLW9yaWVudGF0aW9uIjpTKGMpLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsZGlyOlMoZCksc3R5bGU6e291dGxpbmU6YG5vbmVgfSxvbk1vdXNlZG93bjp0WzBdfHw9ZT0+aC52YWx1ZT0hMCxvbk1vdXNldXA6YixvbkZvY3VzOnksb25CbHVyOnRbMV18fD1lPT5tLnZhbHVlPSExfSx7ZGVmYXVsdDpsKCgpPT5bRShlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgdGFiaW5kZXhgLGBkYXRhLW9yaWVudGF0aW9uYCxgYXNgLGBhcy1jaGlsZGAsYGRpcmBdKV0pLF86M30pKX19KSxVPXkoe19fbmFtZTpgUm92aW5nRm9jdXNJdGVtYCxwcm9wczp7dGFiU3RvcElkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZm9jdXNhYmxlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYWN0aXZlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITF9LGFsbG93U2hpZnRLZXk6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExLGRlZmF1bHQ6YHNwYW5gfX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPUIoKSxyPWEoKSxpPXcoKCk9PnQudGFiU3RvcElkfHxyKSxjPXcoKCk9Pm4uY3VycmVudFRhYlN0b3BJZC52YWx1ZT09PWkudmFsdWUpLHtnZXRJdGVtczp1LENvbGxlY3Rpb25JdGVtOmR9PU0oKTt2KCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtQWRkKCl9KSx4KCgpPT57dC5mb2N1c2FibGUmJm4ub25Gb2N1c2FibGVJdGVtUmVtb3ZlKCl9KSxvKCgpPT50LmZvY3VzYWJsZSwoZSx0KT0+e2UhPT10JiYoZT9uLm9uRm9jdXNhYmxlSXRlbUFkZCgpOm4ub25Gb2N1c2FibGVJdGVtUmVtb3ZlKCkpfSk7ZnVuY3Rpb24gZihlKXtpZihlLmtleT09PWBUYWJgJiZlLnNoaWZ0S2V5KXtuLm9uSXRlbVNoaWZ0VGFiKCk7cmV0dXJufWlmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0KXJldHVybjtsZXQgcj1MKGUsbi5vcmllbnRhdGlvbi52YWx1ZSxuLmRpci52YWx1ZSk7aWYociE9PXZvaWQgMCl7aWYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5fHwhdC5hbGxvd1NoaWZ0S2V5JiZlLnNoaWZ0S2V5KXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGk9Wy4uLnUoKS5tYXAoZT0+ZS5yZWYpLmZpbHRlcihlPT5lLmRhdGFzZXQuZGlzYWJsZWQhPT1gYCldO2lmKHI9PT1gbGFzdGApaS5yZXZlcnNlKCk7ZWxzZSBpZihyPT09YHByZXZgfHxyPT09YG5leHRgKXtyPT09YHByZXZgJiZpLnJldmVyc2UoKTtsZXQgdD1pLmluZGV4T2YoZS5jdXJyZW50VGFyZ2V0KTtpPW4ubG9vcC52YWx1ZT96KGksdCsxKTppLnNsaWNlKHQrMSl9bSgoKT0+UihpKSl9fXJldHVybihlLHQpPT4oRCgpLGsoUyhkKSxudWxsLHtkZWZhdWx0OmwoKCk9PltDKFMocykse3RhYmluZGV4OmMudmFsdWU/MDotMSwiZGF0YS1vcmllbnRhdGlvbiI6UyhuKS5vcmllbnRhdGlvbi52YWx1ZSwiZGF0YS1hY3RpdmUiOmUuYWN0aXZlP2BgOnZvaWQgMCwiZGF0YS1kaXNhYmxlZCI6ZS5mb2N1c2FibGU/dm9pZCAwOmBgLGFzOmUuYXMsImFzLWNoaWxkIjplLmFzQ2hpbGQsb25Nb3VzZWRvd246dFswXXx8PXQ9PntlLmZvY3VzYWJsZT9TKG4pLm9uSXRlbUZvY3VzKGkudmFsdWUpOnQucHJldmVudERlZmF1bHQoKX0sb25Gb2N1czp0WzFdfHw9ZT0+UyhuKS5vbkl0ZW1Gb2N1cyhpLnZhbHVlKSxvbktleWRvd246Zn0se2RlZmF1bHQ6bCgoKT0+W0UoZS4kc2xvdHMsYGRlZmF1bHRgKV0pLF86M30sOCxbYHRhYmluZGV4YCxgZGF0YS1vcmllbnRhdGlvbmAsYGRhdGEtYWN0aXZlYCxgZGF0YS1kaXNhYmxlZGAsYGFzYCxgYXMtY2hpbGRgXSldKSxfOjN9KSl9fSksW1csR109aShgVGFic1Jvb3RgKSxLPXkoe19fbmFtZTpgVGFic1Jvb3RgLHByb3BzOntkZWZhdWx0VmFsdWU6e3R5cGU6bnVsbCxyZXF1aXJlZDohMX0sb3JpZW50YXRpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExLGRlZmF1bHQ6YGhvcml6b250YWxgfSxkaXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiExfSxhY3RpdmF0aW9uTW9kZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITEsZGVmYXVsdDpgYXV0b21hdGljYH0sbW9kZWxWYWx1ZTp7dHlwZTpudWxsLHJlcXVpcmVkOiExfSx1bm1vdW50T25IaWRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKG4se2VtaXQ6cn0pe2xldCBpPW4sbz1yLHtvcmllbnRhdGlvbjpjLHVubW91bnRPbkhpZGU6dSxkaXI6ZH09QShpKSxmPWUoZCk7dCgpO2xldCBtPXAoaSxgbW9kZWxWYWx1ZWAsbyx7ZGVmYXVsdFZhbHVlOmkuZGVmYXVsdFZhbHVlLHBhc3NpdmU6aS5tb2RlbFZhbHVlPT09dm9pZCAwfSksaD1PKCksZz1UKG5ldyBTZXQpO3JldHVybiBHKHttb2RlbFZhbHVlOm0sY2hhbmdlTW9kZWxWYWx1ZTplPT57bS52YWx1ZT1lfSxvcmllbnRhdGlvbjpjLGRpcjpmLHVubW91bnRPbkhpZGU6dSxhY3RpdmF0aW9uTW9kZTppLmFjdGl2YXRpb25Nb2RlLGJhc2VJZDphKHZvaWQgMCxgcmVrYS10YWJzYCksdGFic0xpc3Q6aCxjb250ZW50SWRzOmcscmVnaXN0ZXJDb250ZW50OmU9PntnLnZhbHVlPW5ldyBTZXQoWy4uLmcudmFsdWUsZV0pfSx1bnJlZ2lzdGVyQ29udGVudDplPT57bGV0IHQ9bmV3IFNldChnLnZhbHVlKTt0LmRlbGV0ZShlKSxnLnZhbHVlPXR9fSksKGUsdCk9PihEKCksayhTKHMpLHtkaXI6UyhmKSwiZGF0YS1vcmllbnRhdGlvbiI6UyhjKSwiYXMtY2hpbGQiOmUuYXNDaGlsZCxhczplLmFzfSx7ZGVmYXVsdDpsKCgpPT5bRShlLiRzbG90cyxgZGVmYXVsdGAse21vZGVsVmFsdWU6UyhtKX0pXSksXzozfSw4LFtgZGlyYCxgZGF0YS1vcmllbnRhdGlvbmAsYGFzLWNoaWxkYCxgYXNgXSkpfX0pO2Z1bmN0aW9uIHEoZSx0KXtyZXR1cm5gJHtlfS10cmlnZ2VyLSR7dH1gfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm5gJHtlfS1jb250ZW50LSR7dH1gfXZhciBZPXkoe19fbmFtZTpgVGFic0xpc3RgLHByb3BzOntsb29wOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITEsZGVmYXVsdDohMH0sYXNDaGlsZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExfSxhczp7dHlwZTpudWxsLHJlcXVpcmVkOiExfX0sc2V0dXAoZSl7bGV0e2xvb3A6bn09QShlKSx7Zm9yd2FyZFJlZjpyLGN1cnJlbnRFbGVtZW50Oml9PXQoKSxhPVcoKTtyZXR1cm4gYS50YWJzTGlzdD1pLChlLHQpPT4oRCgpLGsoUyhIKSx7ImFzLWNoaWxkIjpgYCxvcmllbnRhdGlvbjpTKGEpLm9yaWVudGF0aW9uLnZhbHVlLGRpcjpTKGEpLmRpci52YWx1ZSxsb29wOlMobil9LHtkZWZhdWx0OmwoKCk9PltDKFMocykse3JlZjpTKHIpLHJvbGU6YHRhYmxpc3RgLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLGFzOmUuYXMsImFyaWEtb3JpZW50YXRpb24iOlMoYSkub3JpZW50YXRpb24udmFsdWV9LHtkZWZhdWx0OmwoKCk9PltFKGUuJHNsb3RzLGBkZWZhdWx0YCldKSxfOjN9LDgsW2Bhcy1jaGlsZGAsYGFzYCxgYXJpYS1vcmllbnRhdGlvbmBdKV0pLF86M30sOCxbYG9yaWVudGF0aW9uYCxgZGlyYCxgbG9vcGBdKSl9fSksWD15KHtfX25hbWU6YFRhYnNUcmlnZ2VyYCxwcm9wczp7dmFsdWU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLHJlcXVpcmVkOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHJlcXVpcmVkOiExLGRlZmF1bHQ6ITF9LGFzQ2hpbGQ6e3R5cGU6Qm9vbGVhbixyZXF1aXJlZDohMX0sYXM6e3R5cGU6bnVsbCxyZXF1aXJlZDohMSxkZWZhdWx0OmBidXR0b25gfX0sc2V0dXAoZSl7bGV0IG49ZSx7Zm9yd2FyZFJlZjpyfT10KCksaT1XKCksYT13KCgpPT5xKGkuYmFzZUlkLG4udmFsdWUpKSxvPXcoKCk9PmkuY29udGVudElkcy52YWx1ZS5oYXMobi52YWx1ZSk/SihpLmJhc2VJZCxuLnZhbHVlKTp2b2lkIDApLGM9dygoKT0+bi52YWx1ZT09PWkubW9kZWxWYWx1ZS52YWx1ZSk7cmV0dXJuKGUsdCk9PihEKCksayhTKFUpLHsiYXMtY2hpbGQiOmBgLGZvY3VzYWJsZTohZS5kaXNhYmxlZCxhY3RpdmU6Yy52YWx1ZX0se2RlZmF1bHQ6bCgoKT0+W0MoUyhzKSx7aWQ6YS52YWx1ZSxyZWY6UyhyKSxyb2xlOmB0YWJgLHR5cGU6ZS5hcz09PWBidXR0b25gP2BidXR0b25gOnZvaWQgMCxhczplLmFzLCJhcy1jaGlsZCI6ZS5hc0NoaWxkLCJhcmlhLXNlbGVjdGVkIjpjLnZhbHVlP2B0cnVlYDpgZmFsc2VgLCJhcmlhLWNvbnRyb2xzIjpvLnZhbHVlLCJkYXRhLXN0YXRlIjpjLnZhbHVlP2BhY3RpdmVgOmBpbmFjdGl2ZWAsZGlzYWJsZWQ6ZS5kaXNhYmxlZCwiZGF0YS1kaXNhYmxlZCI6ZS5kaXNhYmxlZD9gYDp2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOlMoaSkub3JpZW50YXRpb24udmFsdWUsb25Nb3VzZWRvd246dFswXXx8PWYodD0+eyFlLmRpc2FibGVkJiZ0LmN0cmxLZXk9PT0hMT9TKGkpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSk6dC5wcmV2ZW50RGVmYXVsdCgpfSxbYGxlZnRgXSksb25LZXlkb3duOnRbMV18fD1nKHQ9PlMoaSkuY2hhbmdlTW9kZWxWYWx1ZShlLnZhbHVlKSxbYGVudGVyYCxgc3BhY2VgXSksb25Gb2N1czp0WzJdfHw9KCk9PntsZXQgdD1TKGkpLmFjdGl2YXRpb25Nb2RlIT09YG1hbnVhbGA7IWMudmFsdWUmJiFlLmRpc2FibGVkJiZ0JiZTKGkpLmNoYW5nZU1vZGVsVmFsdWUoZS52YWx1ZSl9fSx7ZGVmYXVsdDpsKCgpPT5bRShlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSw4LFtgaWRgLGB0eXBlYCxgYXNgLGBhcy1jaGlsZGAsYGFyaWEtc2VsZWN0ZWRgLGBhcmlhLWNvbnRyb2xzYCxgZGF0YS1zdGF0ZWAsYGRpc2FibGVkYCxgZGF0YS1kaXNhYmxlZGAsYGRhdGEtb3JpZW50YXRpb25gXSldKSxfOjN9LDgsW2Bmb2N1c2FibGVgLGBhY3RpdmVgXSkpfX0pLFo9eSh7X19uYW1lOmBUYWJzYCxwcm9wczp7ZGVmYXVsdFZhbHVlOnt9LG9yaWVudGF0aW9uOnt9LGRpcjp7fSxhY3RpdmF0aW9uTW9kZTp7fSxtb2RlbFZhbHVlOnt9LHVubW91bnRPbkhpZGU6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfX0sZW1pdHM6W2B1cGRhdGU6bW9kZWxWYWx1ZWBdLHNldHVwKGUse2VtaXQ6dH0pe2xldCByPWUsaT10LGE9aChyLGBjbGFzc2ApLG89bihhLGkpO3JldHVybihlLHQpPT4oRCgpLGsoUyhLKSxkKHsiZGF0YS1zbG90IjpgdGFic2AsImRhdGEtb3JpZW50YXRpb24iOlMobykub3JpZW50YXRpb258fGBob3Jpem9udGFsYH0sUyhvKSx7Y2xhc3M6UyhfKShgZ2FwLTIgZ3JvdXAvdGFicyBmbGV4IGRhdGEtaG9yaXpvbnRhbDpmbGV4LWNvbGAsci5jbGFzcyl9KSx7ZGVmYXVsdDpsKHQ9PltFKGUuJHNsb3RzLGBkZWZhdWx0YCxiKGModCkpKV0pLF86M30sMTYsW2BkYXRhLW9yaWVudGF0aW9uYCxgY2xhc3NgXSkpfX0pLFE9eSh7X19uYW1lOmBUYWJzTGlzdGAscHJvcHM6e2xvb3A6e3R5cGU6Qm9vbGVhbn0sYXNDaGlsZDp7dHlwZTpCb29sZWFufSxhczp7fSxjbGFzczp7dHlwZTpbQm9vbGVhbixudWxsLFN0cmluZyxPYmplY3QsQXJyYXldfSx2YXJpYW50OntkZWZhdWx0OmBkZWZhdWx0YH19LHNldHVwKGUpe2xldCB0PWUsbj1oKHQsYGNsYXNzYCxgdmFyaWFudGApO3JldHVybihyLGkpPT4oRCgpLGsoUyhZKSxkKHsiZGF0YS1zbG90IjpgdGFicy1saXN0YCwiZGF0YS12YXJpYW50IjplLnZhcmlhbnR9LFMobikse2NsYXNzOlMoXykoUyhlZSkoe3ZhcmlhbnQ6ZS52YXJpYW50fSksdC5jbGFzcyl9KSx7ZGVmYXVsdDpsKCgpPT5bRShyLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGRhdGEtdmFyaWFudGAsYGNsYXNzYF0pKX19KSwkPXkoe19fbmFtZTpgVGFic1RyaWdnZXJgLHByb3BzOnt2YWx1ZTp7fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFufSxhc0NoaWxkOnt0eXBlOkJvb2xlYW59LGFzOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxzZXR1cChlKXtsZXQgdD1lLG49aCh0LGBjbGFzc2ApLGk9cihuKTtyZXR1cm4oZSxuKT0+KEQoKSxrKFMoWCksZCh7ImRhdGEtc2xvdCI6YHRhYnMtdHJpZ2dlcmAsY2xhc3M6UyhfKShgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LXNtIGZvbnQtbWVkaXVtIGdyb3VwLWRhdGEtW3ZhcmlhbnQ9ZGVmYXVsdF0vdGFicy1saXN0OmRhdGEtYWN0aXZlOnNoYWRvdy1zbSBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpzaGFkb3ctbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9c2l6ZS1dKV06c2l6ZS00IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xIHJlbGF0aXZlIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZm9yZWdyb3VuZC82MCB0cmFuc2l0aW9uLWFsbCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpmbGV4LW5vbmUgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOnctZnVsbCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6anVzdGlmeS1zdGFydCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctMyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtcmluZyBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGFyazp0ZXh0LW11dGVkLWZvcmVncm91bmQgZGFyazpob3Zlcjp0ZXh0LWZvcmVncm91bmQgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTBgLGBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpiZy10cmFuc3BhcmVudCBncm91cC1kYXRhLVt2YXJpYW50PWxpbmVdL3RhYnMtbGlzdDpkYXRhLWFjdGl2ZTpiZy10cmFuc3BhcmVudCBkYXJrOmdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJvcmRlci10cmFuc3BhcmVudCBkYXJrOmdyb3VwLWRhdGEtW3ZhcmlhbnQ9bGluZV0vdGFicy1saXN0OmRhdGEtYWN0aXZlOmJnLXRyYW5zcGFyZW50YCxgZGF0YS1hY3RpdmU6YmctYmFja2dyb3VuZCBkYXRhLWFjdGl2ZTp0ZXh0LWZvcmVncm91bmQgZGFyazpkYXRhLWFjdGl2ZTpib3JkZXItaW5wdXQgZGFyazpkYXRhLWFjdGl2ZTpiZy1pbnB1dC8zMCBkYXJrOmRhdGEtYWN0aXZlOnRleHQtZm9yZWdyb3VuZGAsYGFmdGVyOmFic29sdXRlIGFmdGVyOmJnLWZvcmVncm91bmQgYWZ0ZXI6b3BhY2l0eS0wIGFmdGVyOnRyYW5zaXRpb24tb3BhY2l0eSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjppbnNldC14LTAgZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6YWZ0ZXI6Ym90dG9tLVstNXB4XSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczphZnRlcjpoLTAuNSBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6aW5zZXQteS0wIGdyb3VwLWRhdGEtdmVydGljYWwvdGFiczphZnRlcjotcmlnaHQtMSBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6YWZ0ZXI6dy0wLjUgZ3JvdXAtZGF0YS1bdmFyaWFudD1saW5lXS90YWJzLWxpc3Q6ZGF0YS1hY3RpdmU6YWZ0ZXI6b3BhY2l0eS0xMDBgLHQuY2xhc3MpfSxTKGkpKSx7ZGVmYXVsdDpsKCgpPT5bRShlLiRzbG90cyxgZGVmYXVsdGApXSksXzozfSwxNixbYGNsYXNzYF0pKX19KSxlZT11KGByb3VuZGVkLWxnIHAtMC43NSBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpoLTggZ3JvdXAtZGF0YS1ob3Jpem9udGFsL3RhYnM6bWF4LXctZnVsbCBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpqdXN0aWZ5LXN0YXJ0IGdyb3VwLWRhdGEtaG9yaXpvbnRhbC90YWJzOm92ZXJmbG93LXgtYXV0byBncm91cC1kYXRhLWhvcml6b250YWwvdGFiczpvdmVyZmxvdy15LWhpZGRlbiBkYXRhLVt2YXJpYW50PWxpbmVdOnJvdW5kZWQtbm9uZSBncm91cC90YWJzLWxpc3QgaW5saW5lLWZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1kYXRhLXZlcnRpY2FsL3RhYnM6aC1maXQgZ3JvdXAtZGF0YS12ZXJ0aWNhbC90YWJzOmZsZXgtY29sYCx7dmFyaWFudHM6e3ZhcmlhbnQ6e2RlZmF1bHQ6YGJnLW11dGVkYCxsaW5lOmBnYXAtMSBiZy10cmFuc3BhcmVudGB9fSxkZWZhdWx0VmFyaWFudHM6e3ZhcmlhbnQ6YGRlZmF1bHRgfX0pO2V4cG9ydHtRIGFzIG4sWiBhcyByLCQgYXMgdH07", + "aW1wb3J0e2NpIGFzIGUsbnIgYXMgdH1mcm9tIi4vU2tlbGV0b24tRDBObnZIWTEuanMiO3ZhciBuPTE1MDA7ZnVuY3Rpb24gcigpe2xldCByPWUoYGlkbGVgKSxpO2Z1bmN0aW9uIGEoZSl7ci52YWx1ZT1lLGNsZWFyVGltZW91dChpKSxpPXNldFRpbWVvdXQoKCk9PntyLnZhbHVlPWBpZGxlYH0sbil9cmV0dXJuIHQoKCk9PmNsZWFyVGltZW91dChpKSkse3N0YXRlOnIsc2V0OmF9fWV4cG9ydHtyIGFzIHR9Ow==", ), }, - "useId-B9dJumoI.js": { + "useId-TcXBwUOh.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0eyRuIGFzIGUsJHIgYXMgdCwkdCBhcyBuLEFuIGFzIHIsQXIgYXMgaSxBdCBhcyBhLEJuIGFzIG8sQnIgYXMgZWUsQnQgYXMgcyxDaSBhcyBjLENuIGFzIHRlLENyIGFzIG5lLEN0IGFzIHJlLERuIGFzIGllLERyIGFzIGFlLER0IGFzIG9lLEVuIGFzIHNlLEVyIGFzIGNlLEV0IGFzIGxlLEZuIGFzIHVlLEZyIGFzIGRlLEZ0IGFzIGZlLEduIGFzIHBlLEdyIGFzIG1lLEd0IGFzIGwsSG4gYXMgdSxIciBhcyBkLEh0IGFzIGYsSW4gYXMgcCxJciBhcyBtLEl0IGFzIGgsSm4gYXMgZyxKciBhcyBfLEp0IGFzIHYsS24gYXMgeSxLciBhcyBiLEt0IGFzIHgsTG4gYXMgUyxMciBhcyBDLEx0IGFzIHcsTSBhcyBULE1uIGFzIEUsTXIgYXMgRCxNdCBhcyBPLE5uIGFzIGssTnIgYXMgQSxOdCBhcyBqLE9uIGFzIE0sT3IgYXMgTixPdCBhcyBQLFBuIGFzIEYsUHIgYXMgSSxQdCBhcyBMLFFuIGFzIFIsUXIgYXMgeixRdCBhcyBoZSxSbiBhcyBnZSxSciBhcyBfZSxSdCBhcyB2ZSxTaSBhcyB5ZSxTbiBhcyBiZSxTciBhcyBCLFN0IGFzIHhlLFRuIGFzIFYsVHIgYXMgU2UsVHQgYXMgQ2UsVW4gYXMgd2UsVXIgYXMgVGUsVXQgYXMgRWUsVm4gYXMgRGUsVnIgYXMgT2UsVnQgYXMga2UsV24gYXMgQWUsV3IgYXMgamUsV3QgYXMgTWUsWG4gYXMgTmUsWHIgYXMgUGUsWHQgYXMgRmUsWW4gYXMgSWUsWXIgYXMgTGUsWXQgYXMgUmUsWm4gYXMgemUsWnIgYXMgQmUsWnQgYXMgVmUsX2kgYXMgSCxfbiBhcyBIZSxfciBhcyBVZSxhaSBhcyBXZSxhbiBhcyBHZSxhciBhcyBLZSxiaSBhcyBxZSxibiBhcyBKZSxiciBhcyBZZSxidCBhcyBYZSxjaSBhcyBaZSxjbiBhcyBRZSxjciBhcyBVLGRpIGFzICRlLGRuIGFzIGV0LGRyIGFzIHR0LGVpIGFzIG50LGVuIGFzIHJ0LGVyIGFzIGl0LGZpIGFzIFcsZm4gYXMgYXQsZnIgYXMgb3QsZ2kgYXMgc3QsZ24gYXMgY3QsZ3IgYXMgbHQsaGkgYXMgRyxobiBhcyB1dCxociBhcyBkdCxpaSBhcyBmdCxpbiBhcyBLLGlyIGFzIHEsam4gYXMgcHQsanIgYXMgbXQsanQgYXMgaHQsa24gYXMgZ3Qsa3IgYXMgX3Qsa3QgYXMgdnQsbGkgYXMgeXQsbG4gYXMgYnQsbHIgYXMgeHQsbWkgYXMgU3QsbW4gYXMgQ3QsbXIgYXMgd3QsbmkgYXMgVHQsbm4gYXMgRXQsbnIgYXMgRHQsb2kgYXMgSixvbiBhcyBPdCxvciBhcyBrdCxwaSBhcyBBdCxwbiBhcyBqdCxwciBhcyBNdCxxbiBhcyBOdCxxciBhcyBQdCxxdCBhcyBGdCxyaSBhcyBJdCxybiBhcyBMdCxyciBhcyBSdCxzaSBhcyB6dCxzbiBhcyBCdCxzciBhcyBWdCx0aSBhcyBIdCx0biBhcyBVdCx0ciBhcyBZLHVpIGFzIFd0LHVuIGFzIEd0LHVyIGFzIEt0LHZpIGFzIHF0LHZuIGFzIEp0LHZyIGFzIFl0LHduIGFzIFh0LHdyIGFzIFp0LHd0IGFzIFF0LHhpIGFzICR0LHhuIGFzIGVuLHhyIGFzIHRuLHh0IGFzIG5uLHlpIGFzIHJuLHluIGFzIGFuLHlyIGFzIG9uLHl0IGFzIHNuLHpuIGFzIGNuLHpyIGFzIGxuLHp0IGFzIHVufWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7dmFyIFg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGRuPSgoZSx0KT0+e2xldCBuPXt9O2Zvcih2YXIgciBpbiBlKVgobixyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSk7cmV0dXJuIHR8fFgobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOmBNb2R1bGVgfSksbn0pKHtCYXNlVHJhbnNpdGlvbjooKT0+RWUsQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnM6KCk9Pk1lLENvbW1lbnQ6KCk9PmwsRGVwcmVjYXRpb25UeXBlczooKT0+bnVsbCxFZmZlY3RTY29wZTooKT0+ZWUsRXJyb3JDb2RlczooKT0+eCxFcnJvclR5cGVTdHJpbmdzOigpPT5GdCxGcmFnbWVudDooKT0+dixLZWVwQWxpdmU6KCk9PlJlLFJlYWN0aXZlRWZmZWN0OigpPT5PZSxTdGF0aWM6KCk9PkZlLFN1c3BlbnNlOigpPT5WZSxUZWxlcG9ydDooKT0+aGUsVGV4dDooKT0+bixUcmFja09wVHlwZXM6KCk9PmQsVHJhbnNpdGlvbjooKT0+c24sVHJhbnNpdGlvbkdyb3VwOigpPT5YZSxUcmlnZ2VyT3BUeXBlczooKT0+VGUsVnVlRWxlbWVudDooKT0+bm4sYXNzZXJ0TnVtYmVyOigpPT5ydCxjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZzooKT0+VXQsY2FsbFdpdGhFcnJvckhhbmRsaW5nOigpPT5FdCxjYW1lbGl6ZTooKT0+SCxjYXBpdGFsaXplOigpPT5xdCxjbG9uZVZOb2RlOigpPT5MdCxjb21wYXRVdGlsczooKT0+bnVsbCxjb21waWxlOigpPT5mbixjb21wdXRlZDooKT0+SyxjcmVhdGVBcHA6KCk9PnhlLGNyZWF0ZUJsb2NrOigpPT5PdCxjcmVhdGVDb21tZW50Vk5vZGU6KCk9PkJ0LGNyZWF0ZUVsZW1lbnRCbG9jazooKT0+UWUsY3JlYXRlRWxlbWVudFZOb2RlOigpPT5HZSxjcmVhdGVIeWRyYXRpb25SZW5kZXJlcjooKT0+YnQsY3JlYXRlUHJvcHNSZXN0UHJveHk6KCk9Pkd0LGNyZWF0ZVJlbmRlcmVyOigpPT5ldCxjcmVhdGVTU1JBcHA6KCk9PnJlLGNyZWF0ZVNsb3RzOigpPT5hdCxjcmVhdGVTdGF0aWNWTm9kZTooKT0+anQsY3JlYXRlVGV4dFZOb2RlOigpPT5DdCxjcmVhdGVWTm9kZTooKT0+dXQsY3VzdG9tUmVmOigpPT5qZSxkZWZpbmVBc3luY0NvbXBvbmVudDooKT0+Y3QsZGVmaW5lQ29tcG9uZW50OigpPT5IZSxkZWZpbmVDdXN0b21FbGVtZW50OigpPT5RdCxkZWZpbmVFbWl0czooKT0+SnQsZGVmaW5lRXhwb3NlOigpPT5hbixkZWZpbmVNb2RlbDooKT0+SmUsZGVmaW5lT3B0aW9uczooKT0+ZW4sZGVmaW5lUHJvcHM6KCk9PmJlLGRlZmluZVNTUkN1c3RvbUVsZW1lbnQ6KCk9PkNlLGRlZmluZVNsb3RzOigpPT50ZSxkZXZ0b29sczooKT0+WHQsZWZmZWN0OigpPT5tZSxlZmZlY3RTY29wZTooKT0+YixnZXRDdXJyZW50SW5zdGFuY2U6KCk9PlYsZ2V0Q3VycmVudFNjb3BlOigpPT5QdCxnZXRDdXJyZW50V2F0Y2hlcjooKT0+XyxnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW46KCk9PnNlLGd1YXJkUmVhY3RpdmVQcm9wczooKT0+aWUsaDooKT0+TSxoYW5kbGVFcnJvcjooKT0+Z3QsaGFzSW5qZWN0aW9uQ29udGV4dDooKT0+cixoeWRyYXRlOigpPT5sZSxoeWRyYXRlT25JZGxlOigpPT5wdCxoeWRyYXRlT25JbnRlcmFjdGlvbjooKT0+RSxoeWRyYXRlT25NZWRpYVF1ZXJ5OigpPT5rLGh5ZHJhdGVPblZpc2libGU6KCk9PkYsaW5pdEN1c3RvbUZvcm1hdHRlcjooKT0+dWUsaW5pdERpcmVjdGl2ZXNGb3JTU1I6KCk9Pm9lLGluamVjdDooKT0+cCxpc01lbW9TYW1lOigpPT5TLGlzUHJveHk6KCk9PkxlLGlzUmVhY3RpdmU6KCk9PlBlLGlzUmVhZG9ubHk6KCk9PkJlLGlzUmVmOigpPT56LGlzUnVudGltZU9ubHk6KCk9PmdlLGlzU2hhbGxvdzooKT0+dCxpc1ZOb2RlOigpPT5jbixtYXJrUmF3OigpPT5udCxtZXJnZURlZmF1bHRzOigpPT5vLG1lcmdlTW9kZWxzOigpPT5EZSxtZXJnZVByb3BzOigpPT51LG5leHRUaWNrOigpPT53ZSxub2RlT3BzOigpPT5QLG5vcm1hbGl6ZUNsYXNzOigpPT5ybixub3JtYWxpemVQcm9wczooKT0+cWUsbm9ybWFsaXplU3R5bGU6KCk9PiR0LG9uQWN0aXZhdGVkOigpPT5BZSxvbkJlZm9yZU1vdW50OigpPT5wZSxvbkJlZm9yZVVubW91bnQ6KCk9Pnksb25CZWZvcmVVcGRhdGU6KCk9Pk50LG9uRGVhY3RpdmF0ZWQ6KCk9Pmcsb25FcnJvckNhcHR1cmVkOigpPT5JZSxvbk1vdW50ZWQ6KCk9Pk5lLG9uUmVuZGVyVHJhY2tlZDooKT0+emUsb25SZW5kZXJUcmlnZ2VyZWQ6KCk9PlIsb25TY29wZURpc3Bvc2U6KCk9Pkh0LG9uU2VydmVyUHJlZmV0Y2g6KCk9PmUsb25Vbm1vdW50ZWQ6KCk9Pml0LG9uVXBkYXRlZDooKT0+WSxvbldhdGNoZXJDbGVhbnVwOigpPT5UdCxvcGVuQmxvY2s6KCk9PkR0LHBhdGNoUHJvcDooKT0+dnQscG9wU2NvcGVJZDooKT0+UnQscHJvdmlkZTooKT0+cSxwcm94eVJlZnM6KCk9Pkl0LHB1c2hTY29wZUlkOigpPT5LZSxxdWV1ZVBvc3RGbHVzaENiOigpPT5rdCxyZWFjdGl2ZTooKT0+ZnQscmVhZG9ubHk6KCk9PldlLHJlZjooKT0+SixyZWdpc3RlclJ1bnRpbWVDb21waWxlcjooKT0+VnQscmVuZGVyOigpPT5hLHJlbmRlckxpc3Q6KCk9PlUscmVuZGVyU2xvdDooKT0+eHQscmVzb2x2ZUNvbXBvbmVudDooKT0+S3QscmVzb2x2ZURpcmVjdGl2ZTooKT0+dHQscmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ6KCk9Pm90LHJlc29sdmVGaWx0ZXI6KCk9Pm51bGwscmVzb2x2ZVRyYW5zaXRpb25Ib29rczooKT0+TXQsc2V0QmxvY2tUcmFja2luZzooKT0+d3Qsc2V0RGV2dG9vbHNIb29rOigpPT5kdCxzZXRUcmFuc2l0aW9uSG9va3M6KCk9Pmx0LHNoYWxsb3dSZWFjdGl2ZTooKT0+enQsc2hhbGxvd1JlYWRvbmx5OigpPT5aZSxzaGFsbG93UmVmOigpPT55dCxzc3JDb250ZXh0S2V5OigpPT5VZSxzc3JVdGlsczooKT0+WXQsc3RvcDooKT0+V3QsdG9EaXNwbGF5U3RyaW5nOigpPT55ZSx0b0hhbmRsZXJLZXk6KCk9PmMsdG9IYW5kbGVyczooKT0+b24sdG9SYXc6KCk9PiRlLHRvUmVmOigpPT5XLHRvUmVmczooKT0+QXQsdG9WYWx1ZTooKT0+U3QsdHJhbnNmb3JtVk5vZGVBcmdzOigpPT5ZZSx0cmlnZ2VyUmVmOigpPT5HLHVucmVmOigpPT5zdCx1c2VBdHRyczooKT0+dG4sdXNlQ3NzTW9kdWxlOigpPT5odCx1c2VDc3NWYXJzOigpPT5PLHVzZUhvc3Q6KCk9PmosdXNlSWQ6KCk9PkIsdXNlTW9kZWw6KCk9Pm5lLHVzZVNTUkNvbnRleHQ6KCk9Plp0LHVzZVNoYWRvd1Jvb3Q6KCk9PkwsdXNlU2xvdHM6KCk9PlNlLHVzZVRlbXBsYXRlUmVmOigpPT5jZSx1c2VUcmFuc2l0aW9uU3RhdGU6KCk9PmFlLHZNb2RlbENoZWNrYm94OigpPT5mZSx2TW9kZWxEeW5hbWljOigpPT5oLHZNb2RlbFJhZGlvOigpPT53LHZNb2RlbFNlbGVjdDooKT0+dmUsdk1vZGVsVGV4dDooKT0+dW4sdlNob3c6KCk9PnMsdmVyc2lvbjooKT0+Tix3YXJuOigpPT5fdCx3YXRjaDooKT0+aSx3YXRjaEVmZmVjdDooKT0+bXQsd2F0Y2hQb3N0RWZmZWN0OigpPT5ELHdhdGNoU3luY0VmZmVjdDooKT0+QSx3aXRoQXN5bmNDb250ZXh0OigpPT5JLHdpdGhDdHg6KCk9PmRlLHdpdGhEZWZhdWx0czooKT0+bSx3aXRoRGlyZWN0aXZlczooKT0+Qyx3aXRoS2V5czooKT0+a2Usd2l0aE1lbW86KCk9Pl9lLHdpdGhNb2RpZmllcnM6KCk9PmYsd2l0aFNjb3BlSWQ6KCk9PmxufSksZm49KCk9Pnt9O2Z1bmN0aW9uIFooZSx0KXtsZXQgbj10eXBlb2YgZT09YHN0cmluZ2AmJiF0P2Ake2V9Q29udGV4dGA6dCxyPVN5bWJvbChuKTtyZXR1cm5bdD0+e2xldCBuPXAocix0KTtpZihufHxuPT09bnVsbClyZXR1cm4gbjt0aHJvdyBFcnJvcihgSW5qZWN0aW9uIFxgJHtyLnRvU3RyaW5nKCl9XGAgbm90IGZvdW5kLiBDb21wb25lbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiAke0FycmF5LmlzQXJyYXkoZSk/YG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICR7ZS5qb2luKGAsIGApfWA6YFxgJHtlfVxgYH1gKX0sZT0+KHEocixlKSxlKV19dmFyW1EscG5dPVooYENvbmZpZ1Byb3ZpZGVyYCk7ZnVuY3Rpb24gbW4oZSl7bGV0IHQ9USh7ZGlyOkooYGx0cmApfSk7cmV0dXJuIEsoKCk9PmU/LnZhbHVlfHx0LmRpcj8udmFsdWV8fGBsdHJgKX1mdW5jdGlvbiBobihlKXtsZXQgdD1WKCksbj10Py50eXBlLmVtaXRzLHI9e307cmV0dXJuIG4/Lmxlbmd0aHx8Y29uc29sZS53YXJuKGBObyBlbWl0dGVkIGV2ZW50IGZvdW5kLiBQbGVhc2UgY2hlY2sgY29tcG9uZW50OiAke3Q/LnR5cGUuX19uYW1lfWApLG4/LmZvckVhY2godD0+e3JbYyhIKHQpKV09KC4uLm4pPT5lKHQsLi4ubil9KSxyfWZ1bmN0aW9uIGduKCl7bGV0IGU9VigpLHQ9SigpLG49SygoKT0+cigpKTtZKCgpPT57bi52YWx1ZSE9PXIoKSYmRyh0KX0pO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdC52YWx1ZSYmYCRlbGBpbiB0LnZhbHVlJiZbYCN0ZXh0YCxgI2NvbW1lbnRgXS5pbmNsdWRlcyh0LnZhbHVlLiRlbC5ub2RlTmFtZSk/dC52YWx1ZS4kZWwubmV4dEVsZW1lbnRTaWJsaW5nOlQodCl9bGV0IGk9T2JqZWN0LmFzc2lnbih7fSxlLmV4cG9zZWQpLGE9e307Zm9yKGxldCB0IGluIGUucHJvcHMpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5lLnByb3BzW3RdfSk7aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjApZm9yKGxldCBlIGluIGkpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pW2VdfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIiRlbCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+ZS52bm9kZS5lbH0pLGUuZXhwb3NlZD1hO2Z1bmN0aW9uIG8obil7aWYodC52YWx1ZT1uLG4mJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiJGVsIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5uIGluc3RhbmNlb2YgRWxlbWVudD9uOm4uJGVsfSksIShuIGluc3RhbmNlb2YgRWxlbWVudCkmJiFPYmplY3QuaGFzT3duKG4sYCRlbGApKSl7bGV0IHQ9bi4kLmV4cG9zZWQscj1PYmplY3QuYXNzaWduKHt9LGEpO2ZvcihsZXQgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+dFtlXX0pO2UuZXhwb3NlZD1yfX1yZXR1cm57Zm9yd2FyZFJlZjpvLGN1cnJlbnRSZWY6dCxjdXJyZW50RWxlbWVudDpufX1mdW5jdGlvbiAkKGUpe2xldCB0PVYoKSxuPU9iamVjdC5rZXlzKHQ/LnR5cGUucHJvcHM/P3t9KS5yZWR1Y2UoKGUsbik9PntsZXQgcj0odD8udHlwZS5wcm9wc1tuXSkuZGVmYXVsdDtyZXR1cm4gciE9PXZvaWQgMCYmKGVbbl09ciksZX0se30pLHI9VyhlKTtyZXR1cm4gSygoKT0+e2xldCBlPXt9LGk9dD8udm5vZGUucHJvcHM/P3t9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHQ9PntlW0godCldPWlbdF19KSxPYmplY3Qua2V5cyh7Li4ubiwuLi5lfSkucmVkdWNlKChlLHQpPT4oci52YWx1ZVt0XSE9PXZvaWQgMCYmKGVbdF09ci52YWx1ZVt0XSksZSkse30pfSl9ZnVuY3Rpb24gX24oZSx0KXtsZXQgbj0kKGUpLHI9dD9obih0KTp7fTtyZXR1cm4gSygoKT0+KHsuLi5uLnZhbHVlLC4uLnJ9KSl9dmFyIHZuPTA7ZnVuY3Rpb24geW4oZSx0PWByZWthYCl7aWYoZSlyZXR1cm4gZTtsZXQgbixyPVEoe3VzZUlkOnZvaWQgMH0pO3JldHVybiBuPXIudXNlSWQ/ci51c2VJZCgpOmB1c2VJZGBpbiBkbj9CPy4oKTpgJHsrK3ZufWAsdD9gJHt0fS0ke259YDpufWV4cG9ydHttbiBhcyBhLGduIGFzIGksX24gYXMgbixRIGFzIG8sJCBhcyByLFogYXMgcyx5biBhcyB0fTs=", + "aW1wb3J0eyRuIGFzIGUsJHIgYXMgdCwkdCBhcyBuLEFuIGFzIHIsQXIgYXMgaSxBdCBhcyBhLEJuIGFzIG8sQnIgYXMgZWUsQnQgYXMgdGUsQ2kgYXMgbmUsQ24gYXMgcmUsQ3IgYXMgaWUsQ3QgYXMgYWUsRG4gYXMgcyxEciBhcyBvZSxEdCBhcyBzZSxFbiBhcyBjZSxFciBhcyBsZSxFdCBhcyB1ZSxGbiBhcyBkZSxGciBhcyBmZSxGdCBhcyBwZSxHbiBhcyBtZSxHciBhcyBoZSxHdCBhcyBjLEhuIGFzIGwsSHIgYXMgdSxIdCBhcyBkLEluIGFzIGYsSXIgYXMgcCxJdCBhcyBtLEpuIGFzIGgsSnIgYXMgZyxKdCBhcyBfLEtuIGFzIHYsS3IgYXMgeSxLdCBhcyBiLExuIGFzIHgsTHIgYXMgUyxMdCBhcyBDLE1uIGFzIHcsTXIgYXMgVCxNdCBhcyBFLE5uIGFzIEQsTnIgYXMgTyxOdCBhcyBrLE9uIGFzIEEsT3IgYXMgaixPdCBhcyBNLFAgYXMgTixQbiBhcyBQLFByIGFzIEYsUHQgYXMgSSxRbiBhcyBMLFFyIGFzIFIsUXQgYXMgZ2UsUm4gYXMgeixSciBhcyBfZSxSdCBhcyB2ZSxTaSBhcyB5ZSxTbiBhcyBiZSxTciBhcyB4ZSxTdCBhcyBTZSxUaSBhcyBCLFRuIGFzIENlLFRyIGFzIHdlLFR0IGFzIFRlLFVuIGFzIEVlLFVyIGFzIERlLFV0IGFzIE9lLFZuIGFzIGtlLFZyIGFzIEFlLFZ0IGFzIGplLFduIGFzIE1lLFdyIGFzIE5lLFd0IGFzIFBlLFhuIGFzIEZlLFhyIGFzIEllLFh0IGFzIExlLFluIGFzIFJlLFlyIGFzIHplLFl0IGFzIEJlLFpuIGFzIFZlLFpyIGFzIEhlLFp0IGFzIFVlLF9pIGFzIFYsX24gYXMgV2UsX3IgYXMgR2UsYWkgYXMgS2UsYW4gYXMgcWUsYXIgYXMgSmUsYmkgYXMgWWUsYm4gYXMgWGUsYnIgYXMgWmUsY2kgYXMgSCxjbiBhcyBRZSxjciBhcyBVLGRpIGFzICRlLGRuIGFzIGV0LGRyIGFzIHR0LGVpIGFzIG50LGVuIGFzIHJ0LGVyIGFzIGl0LGZpIGFzIGF0LGZuIGFzIG90LGZyIGFzIHN0LGdpIGFzIGN0LGduIGFzIGx0LGdyIGFzIHV0LGhpIGFzIGR0LGhuIGFzIGZ0LGhyIGFzIHB0LGlpIGFzIG10LGluIGFzIGh0LGlyIGFzIGd0LGpuIGFzIF90LGpyIGFzIHZ0LGp0IGFzIHl0LGtuIGFzIGJ0LGtyIGFzIHh0LGt0IGFzIFN0LGxpIGFzIEN0LGxuIGFzIHd0LGxyIGFzIFR0LG1pIGFzIFcsbW4gYXMgRXQsbXIgYXMgRHQsbmkgYXMgT3Qsbm4gYXMga3QsbnIgYXMgQXQsb2kgYXMganQsb24gYXMgRyxvciBhcyBLLHBpIGFzIE10LHBuIGFzIE50LHByIGFzIFB0LHFuIGFzIEZ0LHFyIGFzIEl0LHF0IGFzIEx0LHJpIGFzIFJ0LHJuIGFzIHp0LHJyIGFzIHEsc2kgYXMgQnQsc24gYXMgVnQsc3IgYXMgSHQsdGkgYXMgVXQsdG4gYXMgV3QsdHIgYXMgR3QsdWkgYXMgS3QsdW4gYXMgcXQsdXIgYXMgSnQsdmkgYXMgWXQsdm4gYXMgWHQsdnIgYXMgWnQsd2kgYXMgUXQsd24gYXMgJHQsd3IgYXMgSix3dCBhcyBlbix4aSBhcyB0bix4biBhcyBubix4ciBhcyBybix4dCBhcyBhbix5aSBhcyBZLHluIGFzIG9uLHlyIGFzIHNuLHpuIGFzIGNuLHpyIGFzIGxuLHp0IGFzIHVufWZyb20iLi9Ta2VsZXRvbi1EME5udkhZMS5qcyI7dmFyIFg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGRuPSgoZSx0KT0+e2xldCBuPXt9O2Zvcih2YXIgciBpbiBlKVgobixyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSk7cmV0dXJuIHR8fFgobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOmBNb2R1bGVgfSksbn0pKHtCYXNlVHJhbnNpdGlvbjooKT0+YyxCYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9yczooKT0+YixDb21tZW50OigpPT5MdCxEZXByZWNhdGlvblR5cGVzOigpPT5udWxsLEVmZmVjdFNjb3BlOigpPT51LEVycm9yQ29kZXM6KCk9Pl8sRXJyb3JUeXBlU3RyaW5nczooKT0+QmUsRnJhZ21lbnQ6KCk9PkxlLEtlZXBBbGl2ZTooKT0+VWUsUmVhY3RpdmVFZmZlY3Q6KCk9PkRlLFN0YXRpYzooKT0+Z2UsU3VzcGVuc2U6KCk9Pm4sVGVsZXBvcnQ6KCk9PnJ0LFRleHQ6KCk9Pld0LFRyYWNrT3BUeXBlczooKT0+TmUsVHJhbnNpdGlvbjooKT0+YW4sVHJhbnNpdGlvbkdyb3VwOigpPT5TZSxUcmlnZ2VyT3BUeXBlczooKT0+aGUsVnVlRWxlbWVudDooKT0+YWUsYXNzZXJ0TnVtYmVyOigpPT5rdCxjYWxsV2l0aEFzeW5jRXJyb3JIYW5kbGluZzooKT0+enQsY2FsbFdpdGhFcnJvckhhbmRsaW5nOigpPT5odCxjYW1lbGl6ZTooKT0+WSxjYXBpdGFsaXplOigpPT5ZZSxjbG9uZVZOb2RlOigpPT5xZSxjb21wYXRVdGlsczooKT0+bnVsbCxjb21waWxlOigpPT5mbixjb21wdXRlZDooKT0+RyxjcmVhdGVBcHA6KCk9PmVuLGNyZWF0ZUJsb2NrOigpPT5RZSxjcmVhdGVDb21tZW50Vk5vZGU6KCk9Pnd0LGNyZWF0ZUVsZW1lbnRCbG9jazooKT0+cXQsY3JlYXRlRWxlbWVudFZOb2RlOigpPT5WdCxjcmVhdGVIeWRyYXRpb25SZW5kZXJlcjooKT0+ZXQsY3JlYXRlUHJvcHNSZXN0UHJveHk6KCk9Pm90LGNyZWF0ZVJlbmRlcmVyOigpPT5OdCxjcmVhdGVTU1JBcHA6KCk9PlRlLGNyZWF0ZVNsb3RzOigpPT5FdCxjcmVhdGVTdGF0aWNWTm9kZTooKT0+ZnQsY3JlYXRlVGV4dFZOb2RlOigpPT5sdCxjcmVhdGVWTm9kZTooKT0+V2UsY3VzdG9tUmVmOigpPT55LGRlZmluZUFzeW5jQ29tcG9uZW50OigpPT5YdCxkZWZpbmVDb21wb25lbnQ6KCk9Pm9uLGRlZmluZUN1c3RvbUVsZW1lbnQ6KCk9PnVlLGRlZmluZUVtaXRzOigpPT5YZSxkZWZpbmVFeHBvc2U6KCk9Pm5uLGRlZmluZU1vZGVsOigpPT5iZSxkZWZpbmVPcHRpb25zOigpPT5yZSxkZWZpbmVQcm9wczooKT0+JHQsZGVmaW5lU1NSQ3VzdG9tRWxlbWVudDooKT0+c2UsZGVmaW5lU2xvdHM6KCk9PkNlLGRldnRvb2xzOigpPT5jZSxlZmZlY3Q6KCk9Pkl0LGVmZmVjdFNjb3BlOigpPT5nLGdldEN1cnJlbnRJbnN0YW5jZTooKT0+cyxnZXRDdXJyZW50U2NvcGU6KCk9PnplLGdldEN1cnJlbnRXYXRjaGVyOigpPT5JZSxnZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW46KCk9PkEsZ3VhcmRSZWFjdGl2ZVByb3BzOigpPT5idCxoOigpPT5yLGhhbmRsZUVycm9yOigpPT5fdCxoYXNJbmplY3Rpb25Db250ZXh0OigpPT53LGh5ZHJhdGU6KCk9Pk0saHlkcmF0ZU9uSWRsZTooKT0+RCxoeWRyYXRlT25JbnRlcmFjdGlvbjooKT0+UCxoeWRyYXRlT25NZWRpYVF1ZXJ5OigpPT5kZSxoeWRyYXRlT25WaXNpYmxlOigpPT5mLGluaXRDdXN0b21Gb3JtYXR0ZXI6KCk9PngsaW5pdERpcmVjdGl2ZXNGb3JTU1I6KCk9PlN0LGluamVjdDooKT0+eixpc01lbW9TYW1lOigpPT5jbixpc1Byb3h5OigpPT5IZSxpc1JlYWN0aXZlOigpPT5SLGlzUmVhZG9ubHk6KCk9PnQsaXNSZWY6KCk9Pm50LGlzUnVudGltZU9ubHk6KCk9Pm8saXNTaGFsbG93OigpPT5VdCxpc1ZOb2RlOigpPT5rZSxtYXJrUmF3OigpPT5PdCxtZXJnZURlZmF1bHRzOigpPT5sLG1lcmdlTW9kZWxzOigpPT5FZSxtZXJnZVByb3BzOigpPT5NZSxuZXh0VGljazooKT0+bWUsbm9kZU9wczooKT0+YSxub3JtYWxpemVDbGFzczooKT0+dG4sbm9ybWFsaXplUHJvcHM6KCk9PnllLG5vcm1hbGl6ZVN0eWxlOigpPT5uZSxvbkFjdGl2YXRlZDooKT0+dixvbkJlZm9yZU1vdW50OigpPT5GdCxvbkJlZm9yZVVubW91bnQ6KCk9Pmgsb25CZWZvcmVVcGRhdGU6KCk9PlJlLG9uRGVhY3RpdmF0ZWQ6KCk9PkZlLG9uRXJyb3JDYXB0dXJlZDooKT0+VmUsb25Nb3VudGVkOigpPT5MLG9uUmVuZGVyVHJhY2tlZDooKT0+ZSxvblJlbmRlclRyaWdnZXJlZDooKT0+aXQsb25TY29wZURpc3Bvc2U6KCk9PlJ0LG9uU2VydmVyUHJlZmV0Y2g6KCk9Pkd0LG9uVW5tb3VudGVkOigpPT5BdCxvblVwZGF0ZWQ6KCk9PnEsb25XYXRjaGVyQ2xlYW51cDooKT0+bXQsb3BlbkJsb2NrOigpPT5ndCxwYXRjaFByb3A6KCk9Pnl0LHBvcFNjb3BlSWQ6KCk9PkplLHByb3ZpZGU6KCk9PksscHJveHlSZWZzOigpPT5LZSxwdXNoU2NvcGVJZDooKT0+SHQscXVldWVQb3N0Rmx1c2hDYjooKT0+VSxyZWFjdGl2ZTooKT0+anQscmVhZG9ubHk6KCk9PkJ0LHJlZjooKT0+SCxyZWdpc3RlclJ1bnRpbWVDb21waWxlcjooKT0+VHQscmVuZGVyOigpPT5FLHJlbmRlckxpc3Q6KCk9Pkp0LHJlbmRlclNsb3Q6KCk9PnR0LHJlc29sdmVDb21wb25lbnQ6KCk9PnN0LHJlc29sdmVEaXJlY3RpdmU6KCk9PlB0LHJlc29sdmVEeW5hbWljQ29tcG9uZW50OigpPT5EdCxyZXNvbHZlRmlsdGVyOigpPT5udWxsLHJlc29sdmVUcmFuc2l0aW9uSG9va3M6KCk9PnB0LHNldEJsb2NrVHJhY2tpbmc6KCk9PnV0LHNldERldnRvb2xzSG9vazooKT0+R2Usc2V0VHJhbnNpdGlvbkhvb2tzOigpPT5adCxzaGFsbG93UmVhY3RpdmU6KCk9PkN0LHNoYWxsb3dSZWFkb25seTooKT0+S3Qsc2hhbGxvd1JlZjooKT0+JGUsc3NyQ29udGV4dEtleTooKT0+c24sc3NyVXRpbHM6KCk9PlplLHN0b3A6KCk9PmF0LHRvRGlzcGxheVN0cmluZzooKT0+UXQsdG9IYW5kbGVyS2V5OigpPT5CLHRvSGFuZGxlcnM6KCk9PnJuLHRvUmF3OigpPT5NdCx0b1JlZjooKT0+Vyx0b1JlZnM6KCk9PmR0LHRvVmFsdWU6KCk9PmN0LHRyYW5zZm9ybVZOb2RlQXJnczooKT0+eGUsdHJpZ2dlclJlZjooKT0+Vix1bnJlZjooKT0+WXQsdXNlQXR0cnM6KCk9PmllLHVzZUNzc01vZHVsZTooKT0+ayx1c2VDc3NWYXJzOigpPT5JLHVzZUhvc3Q6KCk9PnBlLHVzZUlkOigpPT5KLHVzZU1vZGVsOigpPT53ZSx1c2VTU1JDb250ZXh0OigpPT5sZSx1c2VTaGFkb3dSb290OigpPT5tLHVzZVNsb3RzOigpPT5vZSx1c2VUZW1wbGF0ZVJlZjooKT0+aix1c2VUcmFuc2l0aW9uU3RhdGU6KCk9Pnh0LHZNb2RlbENoZWNrYm94OigpPT5DLHZNb2RlbER5bmFtaWM6KCk9PnZlLHZNb2RlbFJhZGlvOigpPT51bix2TW9kZWxTZWxlY3Q6KCk9PnRlLHZNb2RlbFRleHQ6KCk9PmplLHZTaG93OigpPT5kLHZlcnNpb246KCk9Pmksd2FybjooKT0+dnQsd2F0Y2g6KCk9PlQsd2F0Y2hFZmZlY3Q6KCk9Pk8sd2F0Y2hQb3N0RWZmZWN0OigpPT5GLHdhdGNoU3luY0VmZmVjdDooKT0+ZmUsd2l0aEFzeW5jQ29udGV4dDooKT0+cCx3aXRoQ3R4OigpPT5TLHdpdGhEZWZhdWx0czooKT0+X2Usd2l0aERpcmVjdGl2ZXM6KCk9PmxuLHdpdGhLZXlzOigpPT5PZSx3aXRoTWVtbzooKT0+ZWUsd2l0aE1vZGlmaWVyczooKT0+UGUsd2l0aFNjb3BlSWQ6KCk9PkFlfSksZm49KCk9Pnt9O2Z1bmN0aW9uIFooZSx0KXtsZXQgbj10eXBlb2YgZT09YHN0cmluZ2AmJiF0P2Ake2V9Q29udGV4dGA6dCxyPVN5bWJvbChuKTtyZXR1cm5bdD0+e2xldCBuPXoocix0KTtpZihufHxuPT09bnVsbClyZXR1cm4gbjt0aHJvdyBFcnJvcihgSW5qZWN0aW9uIFxgJHtyLnRvU3RyaW5nKCl9XGAgbm90IGZvdW5kLiBDb21wb25lbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiAke0FycmF5LmlzQXJyYXkoZSk/YG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICR7ZS5qb2luKGAsIGApfWA6YFxgJHtlfVxgYH1gKX0sZT0+KEsocixlKSxlKV19dmFyW1EscG5dPVooYENvbmZpZ1Byb3ZpZGVyYCk7ZnVuY3Rpb24gbW4oZSl7bGV0IHQ9USh7ZGlyOkgoYGx0cmApfSk7cmV0dXJuIEcoKCk9PmU/LnZhbHVlfHx0LmRpcj8udmFsdWV8fGBsdHJgKX1mdW5jdGlvbiBobihlKXtsZXQgdD1zKCksbj10Py50eXBlLmVtaXRzLHI9e307cmV0dXJuIG4/Lmxlbmd0aHx8Y29uc29sZS53YXJuKGBObyBlbWl0dGVkIGV2ZW50IGZvdW5kLiBQbGVhc2UgY2hlY2sgY29tcG9uZW50OiAke3Q/LnR5cGUuX19uYW1lfWApLG4/LmZvckVhY2godD0+e3JbQihZKHQpKV09KC4uLm4pPT5lKHQsLi4ubil9KSxyfWZ1bmN0aW9uIGduKCl7bGV0IGU9cygpLHQ9SCgpLG49RygoKT0+cigpKTtxKCgpPT57bi52YWx1ZSE9PXIoKSYmVih0KX0pO2Z1bmN0aW9uIHIoKXtyZXR1cm4gdC52YWx1ZSYmYCRlbGBpbiB0LnZhbHVlJiZbYCN0ZXh0YCxgI2NvbW1lbnRgXS5pbmNsdWRlcyh0LnZhbHVlLiRlbC5ub2RlTmFtZSk/dC52YWx1ZS4kZWwubmV4dEVsZW1lbnRTaWJsaW5nOk4odCl9bGV0IGk9T2JqZWN0LmFzc2lnbih7fSxlLmV4cG9zZWQpLGE9e307Zm9yKGxldCB0IGluIGUucHJvcHMpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5lLnByb3BzW3RdfSk7aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjApZm9yKGxldCBlIGluIGkpT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5pW2VdfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIiRlbCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+ZS52bm9kZS5lbH0pLGUuZXhwb3NlZD1hO2Z1bmN0aW9uIG8obil7aWYodC52YWx1ZT1uLG4mJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiJGVsIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5uIGluc3RhbmNlb2YgRWxlbWVudD9uOm4uJGVsfSksIShuIGluc3RhbmNlb2YgRWxlbWVudCkmJiFPYmplY3QuaGFzT3duKG4sYCRlbGApKSl7bGV0IHQ9bi4kLmV4cG9zZWQscj1PYmplY3QuYXNzaWduKHt9LGEpO2ZvcihsZXQgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+dFtlXX0pO2UuZXhwb3NlZD1yfX1yZXR1cm57Zm9yd2FyZFJlZjpvLGN1cnJlbnRSZWY6dCxjdXJyZW50RWxlbWVudDpufX1mdW5jdGlvbiAkKGUpe2xldCB0PXMoKSxuPU9iamVjdC5rZXlzKHQ/LnR5cGUucHJvcHM/P3t9KS5yZWR1Y2UoKGUsbik9PntsZXQgcj0odD8udHlwZS5wcm9wc1tuXSkuZGVmYXVsdDtyZXR1cm4gciE9PXZvaWQgMCYmKGVbbl09ciksZX0se30pLHI9VyhlKTtyZXR1cm4gRygoKT0+e2xldCBlPXt9LGk9dD8udm5vZGUucHJvcHM/P3t9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKHQ9PntlW1kodCldPWlbdF19KSxPYmplY3Qua2V5cyh7Li4ubiwuLi5lfSkucmVkdWNlKChlLHQpPT4oci52YWx1ZVt0XSE9PXZvaWQgMCYmKGVbdF09ci52YWx1ZVt0XSksZSkse30pfSl9ZnVuY3Rpb24gX24oZSx0KXtsZXQgbj0kKGUpLHI9dD9obih0KTp7fTtyZXR1cm4gRygoKT0+KHsuLi5uLnZhbHVlLC4uLnJ9KSl9dmFyIHZuPTA7ZnVuY3Rpb24geW4oZSx0PWByZWthYCl7aWYoZSlyZXR1cm4gZTtsZXQgbixyPVEoe3VzZUlkOnZvaWQgMH0pO3JldHVybiBuPXIudXNlSWQ/ci51c2VJZCgpOmB1c2VJZGBpbiBkbj9KPy4oKTpgJHsrK3ZufWAsdD9gJHt0fS0ke259YDpufWV4cG9ydHttbiBhcyBhLGduIGFzIGksX24gYXMgbixRIGFzIG8sJCBhcyByLFogYXMgcyx5biBhcyB0fTs=", ), }, - "useSearchQuery-bQZP4TsZ.js": { + "useSearchQuery-BSkC8bGd.js": { contentType: "text/javascript; charset=utf-8", body: decodeAdminAsset( - "aW1wb3J0e0UgYXMgZSxGciBhcyB0LFcgYXMgbixfbiBhcyByLGNuIGFzIGksZ2kgYXMgYSxobiBhcyBvLGh0IGFzIHMsaW4gYXMgYyxuciBhcyBsLG9pIGFzIHUsb24gYXMgZCxzbiBhcyBmLHVyIGFzIHAsdXQgYXMgbSx5aSBhcyBofWZyb20iLi9Ta2VsZXRvbi1CMHppQjZPZC5qcyI7aW1wb3J0e3MgYXMgZ31mcm9tIi4vaW5kZXgtZHl3UzhPcFQuanMiO3ZhciBfPXIoe19fbmFtZTpgU2VhcmNoSW5wdXRgLHByb3BzOnttb2RlbFZhbHVlOnt9LHBsYWNlaG9sZGVyOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAocix7ZW1pdDp1fSl7bGV0IF89cix2PXUseT1jKCgpPT5fLm1vZGVsVmFsdWUubGVuZ3RoPjApO2Z1bmN0aW9uIGIoZSl7dihgdXBkYXRlOm1vZGVsVmFsdWVgLFN0cmluZyhlKSl9ZnVuY3Rpb24geCgpe3YoYHVwZGF0ZTptb2RlbFZhbHVlYCxgYCl9cmV0dXJuKGMsdSk9PntsZXQgdj1wKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gbCgpLGkoYGRpdmAse2NsYXNzOmgoYShuKShgcmVsYXRpdmVgLF8uY2xhc3MpKX0sW28odix7aWNvbjphKG0pLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgbGVmdC0yLjUgc2l6ZS0zLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLG8oYShnKSx7Im1vZGVsLXZhbHVlIjpyLm1vZGVsVmFsdWUsdHlwZTpgdGV4dGAscGxhY2Vob2xkZXI6ci5wbGFjZWhvbGRlciwiYXJpYS1sYWJlbCI6ci5wbGFjZWhvbGRlcixjbGFzczpgcHItOCBwbC04YCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6Yn0sbnVsbCw4LFtgbW9kZWwtdmFsdWVgLGBwbGFjZWhvbGRlcmAsYGFyaWEtbGFiZWxgXSkseS52YWx1ZT8obCgpLGQoYShlKSx7a2V5OjAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbi14c2AsImFyaWEtbGFiZWwiOmBDbGVhciBzZWFyY2hgLGNsYXNzOmBhYnNvbHV0ZSB0b3AtMS8yIHJpZ2h0LTEgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCxvbkNsaWNrOnh9LHtkZWZhdWx0OnQoKCk9PltvKHYse2ljb246YShzKSxjbGFzczpgc2l6ZS0zLjVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSkpOmYoYGAsITApXSwyKX19fSk7ZnVuY3Rpb24gdihlKXtsZXQgdD1lPz91KGBgKSxuPWMoKCk9PnQudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO3JldHVybntxdWVyeTp0LG5vcm1hbGl6ZWQ6bixoYXNRdWVyeTpjKCgpPT5uLnZhbHVlLmxlbmd0aD4wKX19ZXhwb3J0e18gYXMgbix2IGFzIHR9Ow==", + "aW1wb3J0e0sgYXMgZSxMciBhcyB0LE8gYXMgbixfbiBhcyByLF90IGFzIGksY2kgYXMgYSxjbiBhcyBvLGZyIGFzIHMsZnQgYXMgYyxpciBhcyBsLGxuIGFzIHUsb24gYXMgZCx1biBhcyBmLHZpIGFzIHAseGkgYXMgbSx5biBhcyBofWZyb20iLi9Ta2VsZXRvbi1EME5udkhZMS5qcyI7aW1wb3J0e2MgYXMgZ31mcm9tIi4vaW5kZXgtODhDVFJOSFAuanMiO3ZhciBfPWgoe19fbmFtZTpgU2VhcmNoSW5wdXRgLHByb3BzOnttb2RlbFZhbHVlOnt9LHBsYWNlaG9sZGVyOnt9LGNsYXNzOnt0eXBlOltCb29sZWFuLG51bGwsU3RyaW5nLE9iamVjdCxBcnJheV19fSxlbWl0czpbYHVwZGF0ZTptb2RlbFZhbHVlYF0sc2V0dXAoYSx7ZW1pdDpofSl7bGV0IF89YSx2PWgseT1kKCgpPT5fLm1vZGVsVmFsdWUubGVuZ3RoPjApO2Z1bmN0aW9uIGIoZSl7dihgdXBkYXRlOm1vZGVsVmFsdWVgLFN0cmluZyhlKSl9ZnVuY3Rpb24geCgpe3YoYHVwZGF0ZTptb2RlbFZhbHVlYCxgYCl9cmV0dXJuKGQsaCk9PntsZXQgdj1zKGBGb250QXdlc29tZUljb25gKTtyZXR1cm4gbCgpLGYoYGRpdmAse2NsYXNzOm0ocChlKShgcmVsYXRpdmVgLF8uY2xhc3MpKX0sW3Iodix7aWNvbjpwKGMpLGNsYXNzOmBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgbGVmdC0yLjUgc2l6ZS0zLjUgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmRgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pLHIocChnKSx7Im1vZGVsLXZhbHVlIjphLm1vZGVsVmFsdWUsdHlwZTpgdGV4dGAscGxhY2Vob2xkZXI6YS5wbGFjZWhvbGRlciwiYXJpYS1sYWJlbCI6YS5wbGFjZWhvbGRlcixjbGFzczpgcHItOCBwbC04YCwib25VcGRhdGU6bW9kZWxWYWx1ZSI6Yn0sbnVsbCw4LFtgbW9kZWwtdmFsdWVgLGBwbGFjZWhvbGRlcmAsYGFyaWEtbGFiZWxgXSkseS52YWx1ZT8obCgpLG8ocChuKSx7a2V5OjAsdHlwZTpgYnV0dG9uYCx2YXJpYW50OmBnaG9zdGAsc2l6ZTpgaWNvbi14c2AsImFyaWEtbGFiZWwiOmBDbGVhciBzZWFyY2hgLGNsYXNzOmBhYnNvbHV0ZSB0b3AtMS8yIHJpZ2h0LTEgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kYCxvbkNsaWNrOnh9LHtkZWZhdWx0OnQoKCk9PltyKHYse2ljb246cChpKSxjbGFzczpgc2l6ZS0zLjVgLCJhcmlhLWhpZGRlbiI6YHRydWVgfSxudWxsLDgsW2BpY29uYF0pXSksXzoxfSkpOnUoYGAsITApXSwyKX19fSk7ZnVuY3Rpb24gdihlKXtsZXQgdD1lPz9hKGBgKSxuPWQoKCk9PnQudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO3JldHVybntxdWVyeTp0LG5vcm1hbGl6ZWQ6bixoYXNRdWVyeTpkKCgpPT5uLnZhbHVlLmxlbmd0aD4wKX19ZXhwb3J0e18gYXMgbix2IGFzIHR9Ow==", ), }, } diff --git a/webui/src/components/AttributionDrilldown.vue b/webui/src/components/AttributionDrilldown.vue index 07b548b..6b8e243 100644 --- a/webui/src/components/AttributionDrilldown.vue +++ b/webui/src/components/AttributionDrilldown.vue @@ -11,13 +11,12 @@ import EmptyState from '@/components/EmptyState.vue' import EntityLink from '@/components/EntityLink.vue' import ErrorState from '@/components/ErrorState.vue' import SkeletonTable from '@/components/SkeletonTable.vue' +import StatDisabledAlert from '@/components/StatDisabledAlert.vue' import TryLongerRangeButton from '@/components/TryLongerRangeButton.vue' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { formatCost } from '@/lib/format' import { loadState } from '@/lib/load-state' -import { useNavStore } from '@/stores/nav' +import { drilldownLevel, makeScope } from '@/lib/scope' import { SPEND_METRIC_LABEL } from '@/stores/spend' import type { AdminTotalsResponse, HistoryMetric, HistoryWindow } from '@/types/api' @@ -70,15 +69,7 @@ const props = defineProps<{ const emit = defineEmits<{ 'update:drill': [value: string] }>() -const nav = useNavStore() - -type Level = { kind: 'group' } | { kind: 'user'; group: string } | { kind: 'usermodel'; user: string } - -const level = computed(() => { - if (props.drill === '') return { kind: 'group' } - if (props.drill.startsWith('group:')) return { kind: 'user', group: props.drill.slice('group:'.length) } - return { kind: 'usermodel', user: props.drill.slice('user:'.length) } -}) +const level = computed(() => drilldownLevel(props.drill)) /** * parentGroupLabel is a BEST-EFFORT breadcrumb label for the group a @@ -97,15 +88,15 @@ function goToGroups(): void { emit('update:drill', '') } function goToParentGroup(): void { - if (parentGroupLabel.value) emit('update:drill', `group:${parentGroupLabel.value}`) + if (parentGroupLabel.value) emit('update:drill', makeScope('group', parentGroupLabel.value)) } function onRowClick(id: string): void { const l = level.value if (l.kind === 'group') { - emit('update:drill', `group:${id}`) + emit('update:drill', makeScope('group', id)) } else if (l.kind === 'user' && props.userModelStatsEnabled) { parentGroupLabel.value = l.group - emit('update:drill', `user:${id}`) + emit('update:drill', makeScope('user', id)) } } @@ -189,13 +180,12 @@ const noTrafficInRange = computed(() => !showUserModelHint.value && pro - - Per-user-model statistics are off - - Enable admin.stats.userModel in the middleware config to see per-model attribution for this user. - - - + diff --git a/webui/src/components/BudgetRatioBars.vue b/webui/src/components/BudgetRatioBars.vue new file mode 100644 index 0000000..df80a17 --- /dev/null +++ b/webui/src/components/BudgetRatioBars.vue @@ -0,0 +1,26 @@ + + + diff --git a/webui/src/components/BurnDownChart.vue b/webui/src/components/BurnDownChart.vue index 39d1db8..4eb283a 100644 --- a/webui/src/components/BurnDownChart.vue +++ b/webui/src/components/BurnDownChart.vue @@ -1,13 +1,13 @@ diff --git a/webui/src/components/ChartCard.vue b/webui/src/components/ChartCard.vue new file mode 100644 index 0000000..8d0e5bc --- /dev/null +++ b/webui/src/components/ChartCard.vue @@ -0,0 +1,121 @@ + + + diff --git a/webui/src/components/ConsumerDirectory.vue b/webui/src/components/ConsumerDirectory.vue index d2e3f4b..f057a80 100644 --- a/webui/src/components/ConsumerDirectory.vue +++ b/webui/src/components/ConsumerDirectory.vue @@ -3,30 +3,32 @@ import type { SortingState } from '@tanstack/vue-table' import { getCoreRowModel, getSortedRowModel, useVueTable } from '@tanstack/vue-table' import { computed, onMounted, onUnmounted, reactive, ref, watch } from 'vue' +import BudgetRatioBars from '@/components/BudgetRatioBars.vue' import CompactNumber from '@/components/CompactNumber.vue' import CostForecastCard from '@/components/CostForecastCard.vue' import CsvExportButton from '@/components/CsvExportButton.vue' +import DetailField from '@/components/DetailField.vue' import EmptyState from '@/components/EmptyState.vue' import ErrorState from '@/components/ErrorState.vue' +import LoadStateView from '@/components/LoadStateView.vue' import ModelChip from '@/components/ModelChip.vue' import SearchInput from '@/components/SearchInput.vue' import SkeletonList from '@/components/SkeletonList.vue' -import SkeletonTable from '@/components/SkeletonTable.vue' import SortHeaderButton from '@/components/SortHeaderButton.vue' +import StatItem from '@/components/StatItem.vue' import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { valueUpdater } from '@/components/ui/table' -import UsageBar from '@/components/UsageBar.vue' import UsageTable from '@/components/UsageTable.vue' import { useNow } from '@/composables/useNow' import { useSearchQuery } from '@/composables/useSearchQuery' -import { headroom, monthProgress, projectMonthEnd } from '@/lib/forecast' -import { formatCost, formatExactInt, formatLimits } from '@/lib/format' +import { monthCostProjection, NOT_ENOUGH_DATA, WILL_EXCEED_TITLE } from '@/lib/forecast' +import { formatCost, formatLimits } from '@/lib/format' import { loadState } from '@/lib/load-state' import { type ExpandState, clearExpandOverrides, computeExpandedItems, toggleItemExpand } from '@/lib/search-expand' -import { BUDGET_RATIO_LABEL, type BudgetRatio, budgetRatios } from '@/lib/usage-bars' +import { budgetRatios } from '@/lib/usage-bars' import { usageColumns } from '@/lib/usage-columns' import { usageCsv } from '@/lib/usage-csv' import { groupMatches, groupNameMatches, matchingMembersOfGroup, membersOfGroup, userMatches } from '@/lib/usage-search' @@ -227,19 +229,30 @@ function isGlobPattern(entry: string): boolean { return /[*?[]/.test(entry) } -/** budgetValueText renders one BudgetRatio's "used / limit" detail text (UsageBar's aria-valuetext/title). */ -function budgetValueText(ratio: BudgetRatio): string { - if (ratio.id.startsWith('cost')) return `${formatCost(ratio.used)} / ${formatCost(ratio.limit)}` - return `${formatExactInt(ratio.used)} / ${formatExactInt(ratio.limit)}` -} - -/** groupCostProjection mirrors usage-columns.ts's own costMonthProjColumn math for one group row. */ +/** groupCostProjection renders lib/forecast.ts's shared monthCostProjection (reuse-audit.md F7) for one group row as display text. */ function groupCostProjection(entry: AdminUsageEntryView, now: Date): { text: string; willExceed: boolean } { - const elapsedFraction = monthProgress(now) - const projected = projectMonthEnd(entry.costPerMonthMicroUsd, elapsedFraction) - if (projected === null) return { text: 'not enough data yet', willExceed: false } - return { text: formatCost(projected), willExceed: headroom(projected, entry.limits?.costPerMonthUSD).willExceed } + const projection = monthCostProjection(entry, now) + return { text: projection.micros === null ? NOT_ENOUGH_DATA : formatCost(projection.micros), willExceed: projection.willExceed } } +/** + * GROUP_DETAIL_FIELDS (reuse-audit.md F6) drives the group accordion's 4 + * uniform "storeDown ? '?' : " detail fields with one + * v-for instead of four hand-rolled DetailField copies — the same label/ + * accessor pairs lib/usage-columns.ts's own numericColumn calls already + * name for these exact ids (tokInDay, tokOutDay, tokInMonth, tokOutMonth). + * req/min and rejected/day are rendered explicitly, ahead of this v-for, + * to keep the HEAD field order (rejected/day also needs its own + * conditional destructive-tone class). Not the ColumnDef objects + * themselves: a TanStack ColumnDef's `cell` needs a full CellContext + * (row/column/table) to render, which this plain `dl` grid — driven by + * `row.original` alone, no table instance — has no reason to construct. + */ +const GROUP_DETAIL_FIELDS: { label: string; read: (entry: AdminUsageEntryView) => number }[] = [ + { label: 'tokIn/day', read: (e) => e.tokensInPerDay }, + { label: 'tokOut/day', read: (e) => e.tokensOutPerDay }, + { label: 'tokIn/month', read: (e) => e.tokensInPerMonth }, + { label: 'tokOut/month', read: (e) => e.tokensOutPerMonth }, +] // --- CSV export --- const usersColumns = computed(() => usageColumns('Name', 'Group', groupNameOf, now.value, sourceOf)) @@ -289,28 +302,13 @@ function groupsCsv(): string { Usage summed across every user and group combined. -
-

Requests/day

-

-
-
-

Rejected/day

-

- -

-
-
-

Tokens in/day

-

-
-
-

Tokens out/day

-

-
-
-

Cost/day

-

{{ formatCost(usage.total.costPerDayMicroUsd) }}

-
+ + + + + + + {{ formatCost(usage.total.costPerDayMicroUsd) }}
@@ -354,145 +352,90 @@ function groupsCsv(): string {
-
-
Providers
-
-
- - {{ providerName }} - -
- All providers -
-
-
-
Models
-
-
- -
- All models -
-
-
-
MCP servers
-
-
- - {{ serverName }} - -
- All MCP servers -
-
-
-
Agents
-
-
- - {{ agentName }} - -
- All agents -
-
+ +
+ + {{ providerName }} + +
+ All providers +
+ +
+ +
+ All models +
+ +
+ + {{ serverName }} + +
+ All MCP servers +
+ +
+ + {{ agentName }} + +
+ All agents +
-
-
Limits
-
{{ formatLimits(row.original.limits) }}
-
-
-
req/min
-
- - -
-
-
-
rejected/day
-
- - -
-
-
-
tokIn/day
-
- - -
-
-
-
tokOut/day
-
- - -
-
-
-
tokIn/month
-
- - -
-
-
-
tokOut/month
-
- - -
-
-
-
cost/month
-
{{ row.original.storeDown ? '?' : formatCost(row.original.costPerMonthMicroUsd) }}
-
-
-
cost/month (proj.)
-
- {{ row.original.storeDown ? '?' : groupCostProjection(row.original, now).text }} -
-
-
-
- {{ formatLimits(row.original.limits) }} + + + + + - {{ BUDGET_RATIO_LABEL[ratio.id] }} - - -
+ + + + + + + + {{ row.original.storeDown ? '?' : formatCost(row.original.costPerMonthMicroUsd) }} + + {{ row.original.storeDown ? '?' : groupCostProjection(row.original, now).text }} + + +

Members

-

{{ groupsEmptyMessage }}

+
@@ -524,19 +467,18 @@ function groupsCsv(): string { - - - + + + diff --git a/webui/src/components/CostAvoidedCard.vue b/webui/src/components/CostAvoidedCard.vue index 116bc68..a38fd52 100644 --- a/webui/src/components/CostAvoidedCard.vue +++ b/webui/src/components/CostAvoidedCard.vue @@ -1,8 +1,8 @@ + + diff --git a/webui/src/components/GlobalFilterBar.vue b/webui/src/components/GlobalFilterBar.vue index a462509..edbfc4b 100644 --- a/webui/src/components/GlobalFilterBar.vue +++ b/webui/src/components/GlobalFilterBar.vue @@ -2,9 +2,9 @@ import { faArrowRightArrowLeft } from '@fortawesome/free-solid-svg-icons' import { computed, ref, watch } from 'vue' +import LabeledSelect from '@/components/LabeledSelect.vue' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { SCOPE_PATTERN } from '@/lib/hash-state' import { RANGE_KEYS } from '@/lib/range' import type { RangeKey } from '@/lib/range' @@ -21,6 +21,7 @@ const RANGE_LABEL: Record = { '6mo': 'Last 6 months', '12mo': 'Last 12 months', } +const RANGE_OPTIONS = RANGE_KEYS.map((key) => ({ value: key, label: RANGE_LABEL[key] })) /** * GlobalFilterBar (redesign-plan.md section 3.1) is the shell's one @@ -94,17 +95,7 @@ function commitScope(): void {