🪄 Mission Control Dashboard Plugin

linkPlugin settings

name

Mission Control Dashboard

Information

description

Multifunctional, highly configurable account dashboard


icon

dashboard


setting

Tag to apply to planning notes

Default is "planning/quarterly"

setting

Console logging

Default is false, only for debugging

instructions

This plugin allows you to get a high-level glimpse of what's going on in your world. Here is the help page on how to install it.



We call the different components "widgets," and these widgets can be reordered by clicking "Layout" in the top-left, or by clicking for two seconds on the title bar of a widget. You can add a background image under "Settings."

Prerequisites: Ensure you have created at least one Task Domain to use the dashboard. All notes and tasks are picked from the selected domain. Task Domain setup instructions.

Current widgets offered by the Amplenote Dashboard include:

1. Quarterly planning. The starting point for the "Dreamtask" widget, and for your day in general. The dashboard ensures that you keep what matters top-of-mind. By default, it allows the quarterly plan to be augmented with a monthly plan. If you make it 2-tall, it also has room to present your weekly plan.
2. Victory Value. How much is getting done each day, and how do you feel while doing it? Hover on a day to remember the specific tasks you finished.
3. Dreamtask. Use your preferred LLM to synthesize your quarterly/monthly/weekly plan with the tasks in your task domain. Get 2-4 tasks recommended each day, with a record of past recommendations to ensure that you get new tasks every day of the week.
4. Day Sketcher. Sketch out what to focus on today in a tab-navigable per-hour breakdown.
5. Revisit candidates. Notes with tasks that have been languishing. When you get distracted from a project, this widget helps you re-engage with long-term ideas.
6. Mood tracker. Display your daily mood ratings in either "cycle" or "wave" form. Even though nobody wants to hear about your crappy day, Amplenote Dashboard wants to help you feel "seen" by letting you leave a record of each day's highs & lows, as recommended by the experts.
7. Peak hours. Which hours were most productive during the currently selected month: both for originating ideas that ended up being high in Victory Value, or for completing said ideas?
8. Calendar. The control center for the date-based modules, allows you to see which dates have events scheduled along with specifying which date you want to see featured in the rest of the dashboard.
9. Task Agenda. What's on the docket in the coming days? Uses the Task Domain selected atop the dashboard, combined with the date selected in Calendar.
10. Inspiration quotes. Take a wild guess.
11. Quick actions. Jump to your daily jot, calendar, or a random note 🎲

Drop a comment if there's another widget you'd like to see added?



linkCodes

(()=>{var x="KCgpPT57dmFyIF95PU9iamVjdC5jcmVhdGU7dmFyIHJwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgQXk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgT3k9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFJ5PU9iamVjdC5nZXRQcm90b3R5cGVPZixJeT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBpcj0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpO3ZhciBNeT0oZSx0LG4scik9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgbyBvZiBPeSh0KSkhSXkuY2FsbChlLG8pJiZvIT09biYmcnAoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKHI9QXkodCxvKSl8fHIuZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgbGU9KGUsdCxuKT0+KG49ZSE9bnVsbD9feShSeShlKSk6e30sTXkodHx8IWV8fCFlLl9fZXNNb2R1bGU/cnAobiwiZGVmYXVsdCIse3ZhbHVlOmUsZW51bWVyYWJsZTohMH0pOm4sZSkpO3ZhciBtcD1pcihLPT57InVzZSBzdHJpY3QiO3ZhciBJbz1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksUHk9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksTHk9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSx6eT1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLCR5PVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksRnk9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxVeT1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksV3k9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxCeT1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLGp5PVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxWeT1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iiksb3A9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIEh5KGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9b3AmJmVbb3BdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgc3A9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGxwPU9iamVjdC5hc3NpZ24sdXA9e307ZnVuY3Rpb24gTHIoZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9dXAsdGhpcy51cGRhdGVyPW58fHNwfUxyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0xyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9O0xyLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gY3AoKXt9Y3AucHJvdG90eXBlPUxyLnByb3RvdHlwZTtmdW5jdGlvbiBjbChlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz11cCx0aGlzLnVwZGF0ZXI9bnx8c3B9dmFyIGRsPWNsLnByb3RvdHlwZT1uZXcgY3A7ZGwuY29uc3RydWN0b3I9Y2w7bHAoZGwsTHIucHJvdG90eXBlKTtkbC5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgYXA9QXJyYXkuaXNBcnJheSxkcD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHBsPXtjdXJyZW50Om51bGx9LHBwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gZnAoZSx0LG4pe3ZhciByLG89e30sYT1udWxsLGk9bnVsbDtpZih0IT1udWxsKWZvcihyIGluIHQucmVmIT09dm9pZCAwJiYoaT10LnJlZiksdC5rZXkhPT12b2lkIDAmJihhPSIiK3Qua2V5KSx0KWRwLmNhbGwodCxyKSYmIXBwLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGw9QXJyYXkocyksdT0wO3U8czt1KyspbFt1XT1hcmd1bWVudHNbdSsyXTtvLmNoaWxkcmVuPWx9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyxzKW9bcl09PT12b2lkIDAmJihvW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpJbyx0eXBlOmUsa2V5OmEscmVmOmkscHJvcHM6byxfb3duZXI6cGwuY3VycmVudH19ZnVuY3Rpb24gR3koZSx0KXtyZXR1cm57JCR0eXBlb2Y6SW8sdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX1mdW5jdGlvbiBmbChlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS4kJHR5cGVvZj09PUlvfWZ1bmN0aW9uIEt5KGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2UucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIGlwPS9cLysvZztmdW5jdGlvbiB1bChlLHQpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD9LeSgiIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gYWkoZSx0LG4scixvKXt2YXIgYT10eXBlb2YgZTsoYT09PSJ1bmRlZmluZWQifHxhPT09ImJvb2xlYW4iKSYmKGU9bnVsbCk7dmFyIGk9ITE7aWYoZT09PW51bGwpaT0hMDtlbHNlIHN3aXRjaChhKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmk9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIElvOmNhc2UgUHk6aT0hMH19aWYoaSlyZXR1cm4gaT1lLG89byhpKSxlPXI9PT0iIj8iLiIrdWwoaSwwKTpyLGFwKG8pPyhuPSIiLGUhPW51bGwmJihuPWUucmVwbGFjZShpcCwiJCYvIikrIi8iKSxhaShvLHQsbiwiIixmdW5jdGlvbih1KXtyZXR1cm4gdX0pKTpvIT1udWxsJiYoZmwobykmJihvPUd5KG8sbisoIW8ua2V5fHxpJiZpLmtleT09PW8ua2V5PyIiOigiIitvLmtleSkucmVwbGFjZShpcCwiJCYvIikrIi8iKStlKSksdC5wdXNoKG8pKSwxO2lmKGk9MCxyPXI9PT0iIj8iLiI6cisiOiIsYXAoZSkpZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2E9ZVtzXTt2YXIgbD1yK3VsKGEscyk7aSs9YWkoYSx0LG4sbCxvKX1lbHNlIGlmKGw9SHkoZSksdHlwZW9mIGw9PSJmdW5jdGlvbiIpZm9yKGU9bC5jYWxsKGUpLHM9MDshKGE9ZS5uZXh0KCkpLmRvbmU7KWE9YS52YWx1ZSxsPXIrdWwoYSxzKyspLGkrPWFpKGEsdCxuLGwsbyk7ZWxzZSBpZihhPT09Im9iamVjdCIpdGhyb3cgdD1TdHJpbmcoZSksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisodD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOnQpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGl9ZnVuY3Rpb24gb2koZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBhaShlLHIsIiIsIiIsZnVuY3Rpb24oYSl7cmV0dXJuIHQuY2FsbChuLGEsbysrKX0pLHJ9ZnVuY3Rpb24gWXkoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgSmU9e2N1cnJlbnQ6bnVsbH0saWk9e3RyYW5zaXRpb246bnVsbH0scXk9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6SmUsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6aWksUmVhY3RDdXJyZW50T3duZXI6cGx9O2Z1bmN0aW9uIGhwKCl7dGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIil9Sy5DaGlsZHJlbj17bWFwOm9pLGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe29pKGUsZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIG9pKGUsZnVuY3Rpb24oKXt0Kyt9KSx0fSx0b0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBvaShlLGZ1bmN0aW9uKHQpe3JldHVybiB0fSl8fFtdfSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFmbChlKSl0aHJvdyBFcnJvcigiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuIik7cmV0dXJuIGV9fTtLLkNvbXBvbmVudD1McjtLLkZyYWdtZW50PUx5O0suUHJvZmlsZXI9JHk7Sy5QdXJlQ29tcG9uZW50PWNsO0suU3RyaWN0TW9kZT16eTtLLlN1c3BlbnNlPUJ5O0suX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9cXk7Sy5hY3Q9aHA7Sy5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe2lmKGU9PW51bGwpdGhyb3cgRXJyb3IoIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkICIrZSsiLiIpO3ZhciByPWxwKHt9LGUucHJvcHMpLG89ZS5rZXksYT1lLnJlZixpPWUuX293bmVyO2lmKHQhPW51bGwpe2lmKHQucmVmIT09dm9pZCAwJiYoYT10LnJlZixpPXBsLmN1cnJlbnQpLHQua2V5IT09dm9pZCAwJiYobz0iIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBzPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGwgaW4gdClkcC5jYWxsKHQsbCkmJiFwcC5oYXNPd25Qcm9wZXJ0eShsKSYmKHJbbF09dFtsXT09PXZvaWQgMCYmcyE9PXZvaWQgMD9zW2xdOnRbbF0pfXZhciBsPWFyZ3VtZW50cy5sZW5ndGgtMjtpZihsPT09MSlyLmNoaWxkcmVuPW47ZWxzZSBpZigxPGwpe3M9QXJyYXkobCk7Zm9yKHZhciB1PTA7dTxsO3UrKylzW3VdPWFyZ3VtZW50c1t1KzJdO3IuY2hpbGRyZW49c31yZXR1cm57JCR0eXBlb2Y6SW8sdHlwZTplLnR5cGUsa2V5Om8scmVmOmEscHJvcHM6cixfb3duZXI6aX19O0suY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZT17JCR0eXBlb2Y6VXksX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsLF9kZWZhdWx0VmFsdWU6bnVsbCxfZ2xvYmFsTmFtZTpudWxsfSxlLlByb3ZpZGVyPXskJHR5cGVvZjpGeSxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9O0suY3JlYXRlRWxlbWVudD1mcDtLLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnAuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fTtLLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtLLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOld5LHJlbmRlcjplfX07Sy5pc1ZhbGlkRWxlbWVudD1mbDtLLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOlZ5LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6WXl9fTtLLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6anksdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtLLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1paS50cmFuc2l0aW9uO2lpLnRyYW5zaXRpb249e307dHJ5e2UoKX1maW5hbGx5e2lpLnRyYW5zaXRpb249dH19O0sudW5zdGFibGVfYWN0PWhwO0sudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUuY3VycmVudC51c2VDYWxsYmFjayhlLHQpfTtLLnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEplLmN1cnJlbnQudXNlQ29udGV4dChlKX07Sy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtLLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIEplLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlKX07Sy51c2VFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSmUuY3VycmVudC51c2VFZmZlY3QoZSx0KX07Sy51c2VJZD1mdW5jdGlvbigpe3JldHVybiBKZS5jdXJyZW50LnVzZUlkKCl9O0sudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIEplLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9O0sudXNlSW5zZXJ0aW9uRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEplLmN1cnJlbnQudXNlSW5zZXJ0aW9uRWZmZWN0KGUsdCl9O0sudXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEplLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGUsdCl9O0sudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBKZS5jdXJyZW50LnVzZU1lbW8oZSx0KX07Sy51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSmUuY3VycmVudC51c2VSZWR1Y2VyKGUsdCxuKX07Sy51c2VSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIEplLmN1cnJlbnQudXNlUmVmKGUpfTtLLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBKZS5jdXJyZW50LnVzZVN0YXRlKGUpfTtLLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSmUuY3VycmVudC51c2VTeW5jRXh0ZXJuYWxTdG9yZShlLHQsbil9O0sudXNlVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiBKZS5jdXJyZW50LnVzZVRyYW5zaXRpb24oKX07Sy52ZXJzaW9uPSIxOC4zLjEifSk7dmFyIGllPWlyKChqRSxncCk9PnsidXNlIHN0cmljdCI7Z3AuZXhwb3J0cz1tcCgpfSk7dmFyIFRwPWlyKHVlPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHZsKGUsdCl7dmFyIG49ZS5sZW5ndGg7ZS5wdXNoKHQpO2U6Zm9yKDswPG47KXt2YXIgcj1uLTE+Pj4xLG89ZVtyXTtpZigwPHNpKG8sdCkpZVtyXT10LGVbbl09byxuPXI7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBQdChlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP251bGw6ZVswXX1mdW5jdGlvbiB1aShlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7dmFyIHQ9ZVswXSxuPWUucG9wKCk7aWYobiE9PXQpe2VbMF09bjtlOmZvcih2YXIgcj0wLG89ZS5sZW5ndGgsYT1vPj4+MTtyPGE7KXt2YXIgaT0yKihyKzEpLTEscz1lW2ldLGw9aSsxLHU9ZVtsXTtpZigwPnNpKHMsbikpbDxvJiYwPnNpKHUscyk/KGVbcl09dSxlW2xdPW4scj1sKTooZVtyXT1zLGVbaV09bixyPWkpO2Vsc2UgaWYobDxvJiYwPnNpKHUsbikpZVtyXT11LGVbbF09bixyPWw7ZWxzZSBicmVhayBlfX1yZXR1cm4gdH1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWUuc29ydEluZGV4LXQuc29ydEluZGV4O3JldHVybiBuIT09MD9uOmUuaWQtdC5pZH10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iPyh2cD1wZXJmb3JtYW5jZSx1ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gdnAubm93KCl9KTooaGw9RGF0ZSx5cD1obC5ub3coKSx1ZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gaGwubm93KCkteXB9KTt2YXIgdnAsaGwseXAsSnQ9W10sSW49W10sUXk9MSxrdD1udWxsLEhlPTMsY2k9ITEsc3I9ITEsUG89ITEsYnA9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDpudWxsLGtwPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsd3A9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24geWwoZSl7Zm9yKHZhciB0PVB0KEluKTt0IT09bnVsbDspe2lmKHQuY2FsbGJhY2s9PT1udWxsKXVpKEluKTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1lKXVpKEluKSx0LnNvcnRJbmRleD10LmV4cGlyYXRpb25UaW1lLHZsKEp0LHQpO2Vsc2UgYnJlYWs7dD1QdChJbil9fWZ1bmN0aW9uIHdsKGUpe2lmKFBvPSExLHlsKGUpLCFzcilpZihQdChKdCkhPT1udWxsKXNyPSEwLGJsKHhsKTtlbHNle3ZhciB0PVB0KEluKTt0IT09bnVsbCYma2wod2wsdC5zdGFydFRpbWUtZSl9fWZ1bmN0aW9uIHhsKGUsdCl7c3I9ITEsUG8mJihQbz0hMSxrcChMbyksTG89LTEpLGNpPSEwO3ZhciBuPUhlO3RyeXtmb3IoeWwodCksa3Q9UHQoSnQpO2t0IT09bnVsbCYmKCEoa3QuZXhwaXJhdGlvblRpbWU+dCl8fGUmJiFOcCgpKTspe3ZhciByPWt0LmNhbGxiYWNrO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtrdC5jYWxsYmFjaz1udWxsLEhlPWt0LnByaW9yaXR5TGV2ZWw7dmFyIG89cihrdC5leHBpcmF0aW9uVGltZTw9dCk7dD11ZS51bnN0YWJsZV9ub3coKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIj9rdC5jYWxsYmFjaz1vOmt0PT09UHQoSnQpJiZ1aShKdCkseWwodCl9ZWxzZSB1aShKdCk7a3Q9UHQoSnQpfWlmKGt0IT09bnVsbCl2YXIgYT0hMDtlbHNle3ZhciBpPVB0KEluKTtpIT09bnVsbCYma2wod2wsaS5zdGFydFRpbWUtdCksYT0hMX1yZXR1cm4gYX1maW5hbGx5e2t0PW51bGwsSGU9bixjaT0hMX19dmFyIGRpPSExLGxpPW51bGwsTG89LTEsU3A9NSxFcD0tMTtmdW5jdGlvbiBOcCgpe3JldHVybiEodWUudW5zdGFibGVfbm93KCktRXA8U3ApfWZ1bmN0aW9uIG1sKCl7aWYobGkhPT1udWxsKXt2YXIgZT11ZS51bnN0YWJsZV9ub3coKTtFcD1lO3ZhciB0PSEwO3RyeXt0PWxpKCEwLGUpfWZpbmFsbHl7dD9NbygpOihkaT0hMSxsaT1udWxsKX19ZWxzZSBkaT0hMX12YXIgTW87dHlwZW9mIHdwPT0iZnVuY3Rpb24iP01vPWZ1bmN0aW9uKCl7d3AobWwpfTp0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiPyhnbD1uZXcgTWVzc2FnZUNoYW5uZWwseHA9Z2wucG9ydDIsZ2wucG9ydDEub25tZXNzYWdlPW1sLE1vPWZ1bmN0aW9uKCl7eHAucG9zdE1lc3NhZ2UobnVsbCl9KTpNbz1mdW5jdGlvbigpe2JwKG1sLDApfTt2YXIgZ2wseHA7ZnVuY3Rpb24gYmwoZSl7bGk9ZSxkaXx8KGRpPSEwLE1vKCkpfWZ1bmN0aW9uIGtsKGUsdCl7TG89YnAoZnVuY3Rpb24oKXtlKHVlLnVuc3RhYmxlX25vdygpKX0sdCl9dWUudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7dWUudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTt1ZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00O3VlLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7dWUudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7dWUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9Mjt1ZS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9O3VlLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7c3J8fGNpfHwoc3I9ITAsYmwoeGwpKX07dWUudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpTcD0wPGU/TWF0aC5mbG9vcigxZTMvZSk6NX07dWUudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gSGV9O3VlLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIFB0KEp0KX07dWUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihlKXtzd2l0Y2goSGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PUhlfXZhciBuPUhlO0hlPXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtIZT1ufX07dWUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O3VlLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe307dWUudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49SGU7SGU9ZTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e0hlPW59fTt1ZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj11ZS51bnN0YWJsZV9ub3coKTtzd2l0Y2godHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbD8obj1uLmRlbGF5LG49dHlwZW9mIG49PSJudW1iZXIiJiYwPG4/cituOnIpOm49cixlKXtjYXNlIDE6dmFyIG89LTE7YnJlYWs7Y2FzZSAyOm89MjUwO2JyZWFrO2Nhc2UgNTpvPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0Om89MWU0O2JyZWFrO2RlZmF1bHQ6bz01ZTN9cmV0dXJuIG89bitvLGU9e2lkOlF5KyssY2FsbGJhY2s6dCxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOm4sZXhwaXJhdGlvblRpbWU6byxzb3J0SW5kZXg6LTF9LG4+cj8oZS5zb3J0SW5kZXg9bix2bChJbixlKSxQdChKdCk9PT1udWxsJiZlPT09UHQoSW4pJiYoUG8/KGtwKExvKSxMbz0tMSk6UG89ITAsa2wod2wsbi1yKSkpOihlLnNvcnRJbmRleD1vLHZsKEp0LGUpLHNyfHxjaXx8KHNyPSEwLGJsKHhsKSkpLGV9O3VlLnVuc3RhYmxlX3Nob3VsZFlpZWxkPU5wO3VlLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1IZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1IZTtIZT10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtIZT1ufX19fSk7dmFyIENwPWlyKChIRSxEcCk9PnsidXNlIHN0cmljdCI7RHAuZXhwb3J0cz1UcCgpfSk7dmFyIEltPWlyKHZ0PT57InVzZSBzdHJpY3QiO3ZhciBKeT1pZSgpLG10PUNwKCk7ZnVuY3Rpb24gXyhlKXtmb3IodmFyIHQ9Imh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifXZhciBMZj1uZXcgU2V0LG9hPXt9O2Z1bmN0aW9uIHhyKGUsdCl7cm8oZSx0KSxybyhlKyJDYXB0dXJlIix0KX1mdW5jdGlvbiBybyhlLHQpe2ZvcihvYVtlXT10LGU9MDtlPHQubGVuZ3RoO2UrKylMZi5hZGQodFtlXSl9dmFyIHluPSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSxIbD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFh5PS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8sX3A9e30sQXA9e307ZnVuY3Rpb24gWnkoZSl7cmV0dXJuIEhsLmNhbGwoQXAsZSk/ITA6SGwuY2FsbChfcCxlKT8hMTpYeS50ZXN0KGUpP0FwW2VdPSEwOihfcFtlXT0hMCwhMSl9ZnVuY3Rpb24gZTAoZSx0LG4scil7aWYobiE9PW51bGwmJm4udHlwZT09PTApcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4gcj8hMTpuIT09bnVsbD8hbi5hY2NlcHRzQm9vbGVhbnM6KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSksZSE9PSJkYXRhLSImJmUhPT0iYXJpYS0iKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB0MChlLHQsbixyKXtpZih0PT09bnVsbHx8dHlwZW9mIHQ+InUifHxlMChlLHQsbixyKSlyZXR1cm4hMDtpZihyKXJldHVybiExO2lmKG4hPT1udWxsKXN3aXRjaChuLnR5cGUpe2Nhc2UgMzpyZXR1cm4hdDtjYXNlIDQ6cmV0dXJuIHQ9PT0hMTtjYXNlIDU6cmV0dXJuIGlzTmFOKHQpO2Nhc2UgNjpyZXR1cm4gaXNOYU4odCl8fDE+dH1yZXR1cm4hMX1mdW5jdGlvbiBldChlLHQsbixyLG8sYSxpKXt0aGlzLmFjY2VwdHNCb29sZWFucz10PT09Mnx8dD09PTN8fHQ9PT00LHRoaXMuYXR0cmlidXRlTmFtZT1yLHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlPW8sdGhpcy5tdXN0VXNlUHJvcGVydHk9bix0aGlzLnByb3BlcnR5TmFtZT1lLHRoaXMudHlwZT10LHRoaXMuc2FuaXRpemVVUkw9YSx0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWl9dmFyIFdlPXt9OyJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtXZVtlXT1uZXcgZXQoZSwwLCExLGUsbnVsbCwhMSwhMSl9KTtbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtXZVt0XT1uZXcgZXQodCwxLCExLGVbMV0sbnVsbCwhMSwhMSl9KTtbImNvbnRlbnRFZGl0YWJsZSIsImRyYWdnYWJsZSIsInNwZWxsQ2hlY2siLCJ2YWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7V2VbZV09bmV3IGV0KGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dlW2VdPW5ldyBldChlLDIsITEsZSxudWxsLCExLCExKX0pOyJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7V2VbZV09bmV3IGV0KGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dlW2VdPW5ldyBldChlLDMsITAsZSxudWxsLCExLCExKX0pO1siY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaChmdW5jdGlvbihlKXtXZVtlXT1uZXcgZXQoZSw0LCExLGUsbnVsbCwhMSwhMSl9KTtbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dlW2VdPW5ldyBldChlLDYsITEsZSxudWxsLCExLCExKX0pO1sicm93U3BhbiIsInN0YXJ0Il0uZm9yRWFjaChmdW5jdGlvbihlKXtXZVtlXT1uZXcgZXQoZSw1LCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciB6dT0vW1wtOl0oW2Etel0pL2c7ZnVuY3Rpb24gJHUoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX0iYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHQiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoenUsJHUpO1dlW3RdPW5ldyBldCh0LDEsITEsZSxudWxsLCExLCExKX0pOyJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoenUsJHUpO1dlW3RdPW5ldyBldCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITEsITEpfSk7WyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoenUsJHUpO1dlW3RdPW5ldyBldCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwhMSwhMSl9KTtbInRhYkluZGV4IiwiY3Jvc3NPcmlnaW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dlW2VdPW5ldyBldChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7V2UueGxpbmtIcmVmPW5ldyBldCgieGxpbmtIcmVmIiwxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITAsITEpO1sic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1dlW2VdPW5ldyBldChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7ZnVuY3Rpb24gRnUoZSx0LG4scil7dmFyIG89V2UuaGFzT3duUHJvcGVydHkodCk/V2VbdF06bnVsbDsobyE9PW51bGw/by50eXBlIT09MDpyfHwhKDI8dC5sZW5ndGgpfHx0WzBdIT09Im8iJiZ0WzBdIT09Ik8ifHx0WzFdIT09Im4iJiZ0WzFdIT09Ik4iKSYmKHQwKHQsbixvLHIpJiYobj1udWxsKSxyfHxvPT09bnVsbD9aeSh0KSYmKG49PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsIiIrbikpOm8ubXVzdFVzZVByb3BlcnR5P2Vbby5wcm9wZXJ0eU5hbWVdPW49PT1udWxsP28udHlwZT09PTM/ITE6IiI6bjoodD1vLmF0dHJpYnV0ZU5hbWUscj1vLmF0dHJpYnV0ZU5hbWVzcGFjZSxuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KToobz1vLnR5cGUsbj1vPT09M3x8bz09PTQmJm49PT0hMD8iIjoiIituLHI/ZS5zZXRBdHRyaWJ1dGVOUyhyLHQsbik6ZS5zZXRBdHRyaWJ1dGUodCxuKSkpKX12YXIga249SnkuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQscGk9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLEZyPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLFVyPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksVXU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxHbD1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLHpmPVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksJGY9U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLFd1PVN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIiksS2w9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxZbD1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksQnU9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLFBuPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKTtTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO1N5bWJvbC5mb3IoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTt2YXIgRmY9U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIik7U3ltYm9sLmZvcigicmVhY3QubGVnYWN5X2hpZGRlbiIpO1N5bWJvbC5mb3IoInJlYWN0LmNhY2hlIik7U3ltYm9sLmZvcigicmVhY3QudHJhY2luZ19tYXJrZXIiKTt2YXIgT3A9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHpvKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9T3AmJmVbT3BdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgd2U9T2JqZWN0LmFzc2lnbixTbDtmdW5jdGlvbiBIbyhlKXtpZihTbD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7U2w9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK1NsK2V9dmFyIEVsPSExO2Z1bmN0aW9uIE5sKGUsdCl7aWYoIWV8fEVsKXJldHVybiIiO0VsPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKHUpe3ZhciByPXV9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaCh1KXtyPXV9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKHUpe3I9dX1lKCl9fWNhdGNoKHUpe2lmKHUmJnImJnR5cGVvZiB1LnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPXUuc3RhY2suc3BsaXQoYApgKSxhPXIuc3RhY2suc3BsaXQoYApgKSxpPW8ubGVuZ3RoLTEscz1hLmxlbmd0aC0xOzE8PWkmJjA8PXMmJm9baV0hPT1hW3NdOylzLS07Zm9yKDsxPD1pJiYwPD1zO2ktLSxzLS0paWYob1tpXSE9PWFbc10pe2lmKGkhPT0xfHxzIT09MSlkbyBpZihpLS0scy0tLDA+c3x8b1tpXSE9PWFbc10pe3ZhciBsPWAKYCtvW2ldLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZsLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYobD1sLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksbH13aGlsZSgxPD1pJiYwPD1zKTticmVha319fWZpbmFsbHl7RWw9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/SG8oZSk6IiJ9ZnVuY3Rpb24gbjAoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIEhvKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gSG8oIkxhenkiKTtjYXNlIDEzOnJldHVybiBIbygiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBIbygiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPU5sKGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPU5sKGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPU5sKGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBxbChlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIFVyOnJldHVybiJGcmFnbWVudCI7Y2FzZSBGcjpyZXR1cm4iUG9ydGFsIjtjYXNlIEdsOnJldHVybiJQcm9maWxlciI7Y2FzZSBVdTpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBLbDpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgWWw6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlICRmOnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgemY6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBXdTp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSBCdTpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6cWwoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgUG46dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIHFsKGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gcjAoZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gcWwodCk7Y2FzZSA4OnJldHVybiB0PT09VXU/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcW4oZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBVZihlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIG8wKGUpe3ZhciB0PVVmKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGE9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaSl7cj0iIitpLGEuY2FsbCh0aGlzLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGkpe3I9IiIraX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gZmkoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPW8wKGUpKX1mdW5jdGlvbiBXZihlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPVVmKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uIFdpKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBRbChlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gd2Uoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gUnAoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPXFuKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBCZihlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJkZ1KGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIEpsKGUsdCl7QmYoZSx0KTt2YXIgbj1xbih0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP1hsKGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZYbChlLHQudHlwZSxxbih0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBJcChlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gWGwoZSx0LG4peyh0IT09Im51bWJlciJ8fFdpKGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIEdvPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gSnIoZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitxbihuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gWmwoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKF8oOTEpKTtyZXR1cm4gd2Uoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIE1wKGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKF8oOTIpKTtpZihHbyhuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihfKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOnFuKG4pfX1mdW5jdGlvbiBqZihlLHQpe3ZhciBuPXFuKHQudmFsdWUpLHI9cW4odC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIFBwKGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIFZmKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gZXUoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9WZih0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgaGksSGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKGhpPWhpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxoaS5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9aGkuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIGFhKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIHFvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxhMD1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKHFvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EwLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSkscW9bdF09cW9bZV19KX0pO2Z1bmN0aW9uIEdmKGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fHFvLmhhc093blByb3BlcnR5KGUpJiZxb1tlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBLZihlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89R2Yobix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciBpMD13ZSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiB0dShlLHQpe2lmKHQpe2lmKGkwW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoXygxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoXyg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKF8oNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoXyg2MikpfX1mdW5jdGlvbiBudShlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgcnU9bnVsbDtmdW5jdGlvbiBqdShlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIG91PW51bGwsWHI9bnVsbCxacj1udWxsO2Z1bmN0aW9uIExwKGUpe2lmKGU9U2EoZSkpe2lmKHR5cGVvZiBvdSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihfKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PW1zKHQpLG91KGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIFlmKGUpe1hyP1pyP1pyLnB1c2goZSk6WnI9W2VdOlhyPWV9ZnVuY3Rpb24gcWYoKXtpZihYcil7dmFyIGU9WHIsdD1acjtpZihacj1Ycj1udWxsLExwKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKylMcCh0W2VdKX19ZnVuY3Rpb24gUWYoZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBKZigpe312YXIgVGw9ITE7ZnVuY3Rpb24gWGYoZSx0LG4pe2lmKFRsKXJldHVybiBlKHQsbik7VGw9ITA7dHJ5e3JldHVybiBRZihlLHQsbil9ZmluYWxseXtUbD0hMSwoWHIhPT1udWxsfHxaciE9PW51bGwpJiYoSmYoKSxxZigpKX19ZnVuY3Rpb24gaWEoZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1tcyhuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKF8oMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgYXU9ITE7aWYoeW4pdHJ5e3pyPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ciwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2F1PSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0Iix6cix6ciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLHpyLHpyKX1jYXRjaHthdT0hMX12YXIgenI7ZnVuY3Rpb24gczAoZSx0LG4scixvLGEsaSxzLGwpe3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLHUpfWNhdGNoKGQpe3RoaXMub25FcnJvcihkKX19dmFyIFFvPSExLEJpPW51bGwsamk9ITEsaXU9bnVsbCxsMD17b25FcnJvcjpmdW5jdGlvbihlKXtRbz0hMCxCaT1lfX07ZnVuY3Rpb24gdTAoZSx0LG4scixvLGEsaSxzLGwpe1FvPSExLEJpPW51bGwsczAuYXBwbHkobDAsYXJndW1lbnRzKX1mdW5jdGlvbiBjMChlLHQsbixyLG8sYSxpLHMsbCl7aWYodTAuYXBwbHkodGhpcyxhcmd1bWVudHMpLFFvKXtpZihRbyl7dmFyIHU9Qmk7UW89ITEsQmk9bnVsbH1lbHNlIHRocm93IEVycm9yKF8oMTk4KSk7aml8fChqaT0hMCxpdT11KX19ZnVuY3Rpb24gYnIoZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBaZihlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHpwKGUpe2lmKGJyKGUpIT09ZSl0aHJvdyBFcnJvcihfKDE4OCkpfWZ1bmN0aW9uIGQwKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PWJyKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKF8oMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGE9by5hbHRlcm5hdGU7aWYoYT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09YS5jaGlsZCl7Zm9yKGE9by5jaGlsZDthOyl7aWYoYT09PW4pcmV0dXJuIHpwKG8pLGU7aWYoYT09PXIpcmV0dXJuIHpwKG8pLHQ7YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IoXygxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEscz1vLmNoaWxkO3M7KXtpZihzPT09bil7aT0hMCxuPW8scj1hO2JyZWFrfWlmKHM9PT1yKXtpPSEwLHI9byxuPWE7YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWkpe2ZvcihzPWEuY2hpbGQ7czspe2lmKHM9PT1uKXtpPSEwLG49YSxyPW87YnJlYWt9aWYocz09PXIpe2k9ITAscj1hLG49bzticmVha31zPXMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihfKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoXygxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoXygxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIGVoKGUpe3JldHVybiBlPWQwKGUpLGUhPT1udWxsP3RoKGUpOm51bGx9ZnVuY3Rpb24gdGgoZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PXRoKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBuaD1tdC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLCRwPW10LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLHAwPW10LnVuc3RhYmxlX3Nob3VsZFlpZWxkLGYwPW10LnVuc3RhYmxlX3JlcXVlc3RQYWludCxrZT1tdC51bnN0YWJsZV9ub3csaDA9bXQudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsVnU9bXQudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkscmg9bXQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksVmk9bXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksbTA9bXQudW5zdGFibGVfTG93UHJpb3JpdHksb2g9bXQudW5zdGFibGVfSWRsZVByaW9yaXR5LGRzPW51bGwsdG49bnVsbDtmdW5jdGlvbiBnMChlKXtpZih0biYmdHlwZW9mIHRuLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXt0bi5vbkNvbW1pdEZpYmVyUm9vdChkcyxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIFV0PU1hdGguY2x6MzI/TWF0aC5jbHozMjp3MCx2MD1NYXRoLmxvZyx5MD1NYXRoLkxOMjtmdW5jdGlvbiB3MChlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLSh2MChlKS95MHwwKXwwfXZhciBtaT02NCxnaT00MTk0MzA0O2Z1bmN0aW9uIEtvKGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBIaShlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGE9ZS5waW5nZWRMYW5lcyxpPW4mMjY4NDM1NDU1O2lmKGkhPT0wKXt2YXIgcz1pJn5vO3MhPT0wP3I9S28ocyk6KGEmPWksYSE9PTAmJihyPUtvKGEpKSl9ZWxzZSBpPW4mfm8saSE9PTA/cj1LbyhpKTphIT09MCYmKHI9S28oYSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGE9dCYtdCxvPj1hfHxvPT09MTYmJihhJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS1VdCh0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiB4MChlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBiMChlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGE9ZS5wZW5kaW5nTGFuZXM7MDxhOyl7dmFyIGk9MzEtVXQoYSkscz0xPDxpLGw9b1tpXTtsPT09LTE/KCEocyZuKXx8cyZyKSYmKG9baV09eDAocyx0KSk6bDw9dCYmKGUuZXhwaXJlZExhbmVzfD1zKSxhJj1+c319ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIGFoKCl7dmFyIGU9bWk7cmV0dXJuIG1pPDw9MSwhKG1pJjQxOTQyNDApJiYobWk9NjQpLGV9ZnVuY3Rpb24gRGwoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gYmEoZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLVV0KHQpLGVbdF09bn1mdW5jdGlvbiBrMChlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtVXQobiksYT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fmF9fWZ1bmN0aW9uIEh1KGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLVV0KG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBuZT0wO2Z1bmN0aW9uIGloKGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIHNoLEd1LGxoLHVoLGNoLGx1PSExLHZpPVtdLFduPW51bGwsQm49bnVsbCxqbj1udWxsLHNhPW5ldyBNYXAsbGE9bmV3IE1hcCx6bj1bXSxTMD0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBGcChlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOlduPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpCbj1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0Ijpqbj1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6c2EuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6bGEuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gJG8oZSx0LG4scixvLGEpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWE/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDphLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9U2EodCksdCE9PW51bGwmJkd1KHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIEUwKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIFduPSRvKFduLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBCbj0kbyhCbixlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gam49JG8oam4sZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gc2Euc2V0KGEsJG8oc2EuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBhPW8ucG9pbnRlcklkLGxhLnNldChhLCRvKGxhLmdldChhKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBkaChlKXt2YXIgdD1jcihlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPWJyKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1aZihuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCxjaChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7bGgobil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBPaShlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49dXUoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7cnU9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLHJ1PW51bGx9ZWxzZSByZXR1cm4gdD1TYShuKSx0IT09bnVsbCYmR3UodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gVXAoZSx0LG4pe09pKGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBOMCgpe2x1PSExLFduIT09bnVsbCYmT2koV24pJiYoV249bnVsbCksQm4hPT1udWxsJiZPaShCbikmJihCbj1udWxsKSxqbiE9PW51bGwmJk9pKGpuKSYmKGpuPW51bGwpLHNhLmZvckVhY2goVXApLGxhLmZvckVhY2goVXApfWZ1bmN0aW9uIEZvKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxsdXx8KGx1PSEwLG10LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sobXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksTjApKSl9ZnVuY3Rpb24gdWEoZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gRm8obyxlKX1pZigwPHZpLmxlbmd0aCl7Rm8odmlbMF0sZSk7Zm9yKHZhciBuPTE7bjx2aS5sZW5ndGg7bisrKXt2YXIgcj12aVtuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKFduIT09bnVsbCYmRm8oV24sZSksQm4hPT1udWxsJiZGbyhCbixlKSxqbiE9PW51bGwmJkZvKGpuLGUpLHNhLmZvckVhY2godCksbGEuZm9yRWFjaCh0KSxuPTA7bjx6bi5sZW5ndGg7bisrKXI9em5bbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHpuLmxlbmd0aCYmKG49em5bMF0sbi5ibG9ja2VkT249PT1udWxsKTspZGgobiksbi5ibG9ja2VkT249PT1udWxsJiZ6bi5zaGlmdCgpfXZhciBlbz1rbi5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxHaT0hMDtmdW5jdGlvbiBUMChlLHQsbixyKXt2YXIgbz1uZSxhPWVvLnRyYW5zaXRpb247ZW8udHJhbnNpdGlvbj1udWxsO3RyeXtuZT0xLEt1KGUsdCxuLHIpfWZpbmFsbHl7bmU9byxlby50cmFuc2l0aW9uPWF9fWZ1bmN0aW9uIEQwKGUsdCxuLHIpe3ZhciBvPW5lLGE9ZW8udHJhbnNpdGlvbjtlby50cmFuc2l0aW9uPW51bGw7dHJ5e25lPTQsS3UoZSx0LG4scil9ZmluYWxseXtuZT1vLGVvLnRyYW5zaXRpb249YX19ZnVuY3Rpb24gS3UoZSx0LG4scil7aWYoR2kpe3ZhciBvPXV1KGUsdCxuLHIpO2lmKG89PT1udWxsKU1sKGUsdCxyLEtpLG4pLEZwKGUscik7ZWxzZSBpZihFMChvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihGcChlLHIpLHQmNCYmLTE8UzAuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBhPVNhKG8pO2lmKGEhPT1udWxsJiZzaChhKSxhPXV1KGUsdCxuLHIpLGE9PT1udWxsJiZNbChlLHQscixLaSxuKSxhPT09bylicmVhaztvPWF9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBNbChlLHQscixudWxsLG4pfX12YXIgS2k9bnVsbDtmdW5jdGlvbiB1dShlLHQsbixyKXtpZihLaT1udWxsLGU9anUociksZT1jcihlKSxlIT09bnVsbClpZih0PWJyKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPVpmKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4gS2k9ZSxudWxsfWZ1bmN0aW9uIHBoKGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChoMCgpKXtjYXNlIFZ1OnJldHVybiAxO2Nhc2Ugcmg6cmV0dXJuIDQ7Y2FzZSBWaTpjYXNlIG0wOnJldHVybiAxNjtjYXNlIG9oOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBGbj1udWxsLFl1PW51bGwsUmk9bnVsbDtmdW5jdGlvbiBmaCgpe2lmKFJpKXJldHVybiBSaTt2YXIgZSx0PVl1LG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiBGbj9Gbi52YWx1ZTpGbi50ZXh0Q29udGVudCxhPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBpPW4tZTtmb3Iocj0xO3I8PWkmJnRbbi1yXT09PW9bYS1yXTtyKyspO3JldHVybiBSaT1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIElpKGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIHlpKCl7cmV0dXJuITB9ZnVuY3Rpb24gV3AoKXtyZXR1cm4hMX1mdW5jdGlvbiBndChlKXtmdW5jdGlvbiB0KG4scixvLGEsaSl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9YSx0aGlzLnRhcmdldD1pLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykmJihuPWVbc10sdGhpc1tzXT1uP24oYSk6YVtzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShhLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/YS5kZWZhdWx0UHJldmVudGVkOmEucmV0dXJuVmFsdWU9PT0hMSk/eWk6V3AsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1XcCx0aGlzfXJldHVybiB3ZSh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXlpKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXlpKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnlpfSksdH12YXIgY289e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0scXU9Z3QoY28pLGthPXdlKHt9LGNvLHt2aWV3OjAsZGV0YWlsOjB9KSxDMD1ndChrYSksQ2wsX2wsVW8scHM9d2Uoe30sa2Ese3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6UXUsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09VW8mJihVbyYmZS50eXBlPT09Im1vdXNlbW92ZSI/KENsPWUuc2NyZWVuWC1Vby5zY3JlZW5YLF9sPWUuc2NyZWVuWS1Vby5zY3JlZW5ZKTpfbD1DbD0wLFVvPWUpLENsKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpfbH19KSxCcD1ndChwcyksXzA9d2Uoe30scHMse2RhdGFUcmFuc2ZlcjowfSksQTA9Z3QoXzApLE8wPXdlKHt9LGthLHtyZWxhdGVkVGFyZ2V0OjB9KSxBbD1ndChPMCksUjA9d2Uoe30sY28se2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLEkwPWd0KFIwKSxNMD13ZSh7fSxjbyx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxQMD1ndChNMCksTDA9d2Uoe30sY28se2RhdGE6MH0pLGpwPWd0KEwwKSx6MD17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sJDA9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxGMD17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIFUwKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9RjBbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiBRdSgpe3JldHVybiBVMH12YXIgVzA9d2Uoe30sa2Ese2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9ejBbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9SWkoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiPyQwW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpRdSxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9JaShlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP0lpKGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSxCMD1ndChXMCksajA9d2Uoe30scHMse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksVnA9Z3QoajApLFYwPXdlKHt9LGthLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6UXV9KSxIMD1ndChWMCksRzA9d2Uoe30sY28se3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksSzA9Z3QoRzApLFkwPXdlKHt9LHBzLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSkscTA9Z3QoWTApLFEwPVs5LDEzLDI3LDMyXSxKdT15biYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEpvPW51bGw7eW4mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihKbz1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBKMD15biYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFKbyxoaD15biYmKCFKdXx8Sm8mJjg8Sm8mJjExPj1KbyksSHA9IiAiLEdwPSExO2Z1bmN0aW9uIG1oKGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBRMC5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGdoKGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgV3I9ITE7ZnVuY3Rpb24gWDAoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGdoKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooR3A9ITAsSHApO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PUhwJiZHcD9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gWjAoZSx0KXtpZihXcilyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCFKdSYmbWgoZSx0KT8oZT1maCgpLFJpPVl1PUZuPW51bGwsV3I9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIGhoJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGV3PXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBLcChlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhZXdbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiB2aChlLHQsbixyKXtZZihyKSx0PVlpKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IHF1KCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgWG89bnVsbCxjYT1udWxsO2Z1bmN0aW9uIHR3KGUpe0NoKGUsMCl9ZnVuY3Rpb24gZnMoZSl7dmFyIHQ9VnIoZSk7aWYoV2YodCkpcmV0dXJuIGV9ZnVuY3Rpb24gbncoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIHloPSExO3luJiYoeW4/KHhpPSJvbmlucHV0ImluIGRvY3VtZW50LHhpfHwoT2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksT2wuc2V0QXR0cmlidXRlKCJvbmlucHV0IiwicmV0dXJuOyIpLHhpPXR5cGVvZiBPbC5vbmlucHV0PT0iZnVuY3Rpb24iKSx3aT14aSk6d2k9ITEseWg9d2kmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciB3aSx4aSxPbDtmdW5jdGlvbiBZcCgpe1hvJiYoWG8uZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHdoKSxjYT1Ybz1udWxsKX1mdW5jdGlvbiB3aChlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJmZzKGNhKSl7dmFyIHQ9W107dmgodCxjYSxlLGp1KGUpKSxYZih0dyx0KX19ZnVuY3Rpb24gcncoZSx0LG4pe2U9PT0iZm9jdXNpbiI/KFlwKCksWG89dCxjYT1uLFhvLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIix3aCkpOmU9PT0iZm9jdXNvdXQiJiZZcCgpfWZ1bmN0aW9uIG93KGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIGZzKGNhKX1mdW5jdGlvbiBhdyhlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBmcyh0KX1mdW5jdGlvbiBpdyhlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIGZzKHQpfWZ1bmN0aW9uIHN3KGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgQnQ9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6c3c7ZnVuY3Rpb24gZGEoZSx0KXtpZihCdChlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIUhsLmNhbGwodCxvKXx8IUJ0KGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gcXAoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFFwKGUsdCl7dmFyIG49cXAoZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49cXAobil9fWZ1bmN0aW9uIHhoKGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/eGgoZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBiaCgpe2Zvcih2YXIgZT13aW5kb3csdD1XaSgpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD1XaShlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBYdShlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gbHcoZSl7dmFyIHQ9YmgoKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJnhoKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZYdShuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/YTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmE+ciYmKG89cixyPWEsYT1vKSxvPVFwKG4sYSk7dmFyIGk9UXAobixyKTtvJiZpJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWkubm9kZXx8ZS5mb2N1c09mZnNldCE9PWkub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGE+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChpLm5vZGUsaS5vZmZzZXQpKToodC5zZXRFbmQoaS5ub2RlLGkub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciB1dz15biYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxCcj1udWxsLGN1PW51bGwsWm89bnVsbCxkdT0hMTtmdW5jdGlvbiBKcChlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7ZHV8fEJyPT1udWxsfHxCciE9PVdpKHIpfHwocj1Cciwic2VsZWN0aW9uU3RhcnQiaW4gciYmWHUocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxabyYmZGEoWm8scil8fChabz1yLHI9WWkoY3UsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IHF1KCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PUJyKSkpfWZ1bmN0aW9uIGJpKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBqcj17YW5pbWF0aW9uZW5kOmJpKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246YmkoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OmJpKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6YmkoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LFJsPXt9LGtoPXt9O3luJiYoa2g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBqci5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBqci5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBqci5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUganIudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBocyhlKXtpZihSbFtlXSlyZXR1cm4gUmxbZV07aWYoIWpyW2VdKXJldHVybiBlO3ZhciB0PWpyW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIGtoKXJldHVybiBSbFtlXT10W25dO3JldHVybiBlfXZhciBTaD1ocygiYW5pbWF0aW9uZW5kIiksRWg9aHMoImFuaW1hdGlvbml0ZXJhdGlvbiIpLE5oPWhzKCJhbmltYXRpb25zdGFydCIpLFRoPWhzKCJ0cmFuc2l0aW9uZW5kIiksRGg9bmV3IE1hcCxYcD0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gSm4oZSx0KXtEaC5zZXQoZSx0KSx4cih0LFtlXSl9Zm9yKGtpPTA7a2k8WHAubGVuZ3RoO2tpKyspU2k9WHBba2ldLFpwPVNpLnRvTG93ZXJDYXNlKCksZWY9U2lbMF0udG9VcHBlckNhc2UoKStTaS5zbGljZSgxKSxKbihacCwib24iK2VmKTt2YXIgU2ksWnAsZWYsa2k7Sm4oU2gsIm9uQW5pbWF0aW9uRW5kIik7Sm4oRWgsIm9uQW5pbWF0aW9uSXRlcmF0aW9uIik7Sm4oTmgsIm9uQW5pbWF0aW9uU3RhcnQiKTtKbigiZGJsY2xpY2siLCJvbkRvdWJsZUNsaWNrIik7Sm4oImZvY3VzaW4iLCJvbkZvY3VzIik7Sm4oImZvY3Vzb3V0Iiwib25CbHVyIik7Sm4oVGgsIm9uVHJhbnNpdGlvbkVuZCIpO3JvKCJvbk1vdXNlRW50ZXIiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSk7cm8oIm9uTW91c2VMZWF2ZSIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtybygib25Qb2ludGVyRW50ZXIiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pO3JvKCJvblBvaW50ZXJMZWF2ZSIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7eHIoIm9uQ2hhbmdlIiwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpO3hyKCJvblNlbGVjdCIsImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7eHIoIm9uQmVmb3JlSW5wdXQiLFsiY29tcG9zaXRpb25lbmQiLCJrZXlwcmVzcyIsInRleHRJbnB1dCIsInBhc3RlIl0pO3hyKCJvbkNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3hyKCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTt4cigib25Db21wb3NpdGlvblVwZGF0ZSIsImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTt2YXIgWW89ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLGN3PW5ldyBTZXQoImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQoWW8pKTtmdW5jdGlvbiB0ZihlLHQsbil7dmFyIHI9ZS50eXBlfHwidW5rbm93bi1ldmVudCI7ZS5jdXJyZW50VGFyZ2V0PW4sYzAocix0LHZvaWQgMCxlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBDaChlLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLG89ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBhPXZvaWQgMDtpZih0KWZvcih2YXIgaT1yLmxlbmd0aC0xOzA8PWk7aS0tKXt2YXIgcz1yW2ldLGw9cy5pbnN0YW5jZSx1PXMuY3VycmVudFRhcmdldDtpZihzPXMubGlzdGVuZXIsbCE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO3RmKG8scyx1KSxhPWx9ZWxzZSBmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXtpZihzPXJbaV0sbD1zLmluc3RhbmNlLHU9cy5jdXJyZW50VGFyZ2V0LHM9cy5saXN0ZW5lcixsIT09YSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7dGYobyxzLHUpLGE9bH19fWlmKGppKXRocm93IGU9aXUsamk9ITEsaXU9bnVsbCxlfWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49dFtndV07bj09PXZvaWQgMCYmKG49dFtndV09bmV3IFNldCk7dmFyIHI9ZSsiX19idWJibGUiO24uaGFzKHIpfHwoX2godCxlLDIsITEpLG4uYWRkKHIpKX1mdW5jdGlvbiBJbChlLHQsbil7dmFyIHI9MDt0JiYocnw9NCksX2gobixlLHIsdCl9dmFyIEVpPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHBhKGUpe2lmKCFlW0VpXSl7ZVtFaV09ITAsTGYuZm9yRWFjaChmdW5jdGlvbihuKXtuIT09InNlbGVjdGlvbmNoYW5nZSImJihjdy5oYXMobil8fElsKG4sITEsZSksSWwobiwhMCxlKSl9KTt2YXIgdD1lLm5vZGVUeXBlPT09OT9lOmUub3duZXJEb2N1bWVudDt0PT09bnVsbHx8dFtFaV18fCh0W0VpXT0hMCxJbCgic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIF9oKGUsdCxuLHIpe3N3aXRjaChwaCh0KSl7Y2FzZSAxOnZhciBvPVQwO2JyZWFrO2Nhc2UgNDpvPUQwO2JyZWFrO2RlZmF1bHQ6bz1LdX1uPW8uYmluZChudWxsLHQsbixlKSxvPXZvaWQgMCwhYXV8fHQhPT0idG91Y2hzdGFydCImJnQhPT0idG91Y2htb3ZlIiYmdCE9PSJ3aGVlbCJ8fChvPSEwKSxyP28hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7Y2FwdHVyZTohMCxwYXNzaXZlOm99KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTpvIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se3Bhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0aW9uIE1sKGUsdCxuLHIsbyl7dmFyIGE9cjtpZighKHQmMSkmJiEodCYyKSYmciE9PW51bGwpZTpmb3IoOzspe2lmKHI9PT1udWxsKXJldHVybjt2YXIgaT1yLnRhZztpZihpPT09M3x8aT09PTQpe3ZhciBzPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYocz09PW98fHMubm9kZVR5cGU9PT04JiZzLnBhcmVudE5vZGU9PT1vKWJyZWFrO2lmKGk9PT00KWZvcihpPXIucmV0dXJuO2khPT1udWxsOyl7dmFyIGw9aS50YWc7aWYoKGw9PT0zfHxsPT09NCkmJihsPWkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbD09PW98fGwubm9kZVR5cGU9PT04JiZsLnBhcmVudE5vZGU9PT1vKSlyZXR1cm47aT1pLnJldHVybn1mb3IoO3MhPT1udWxsOyl7aWYoaT1jcihzKSxpPT09bnVsbClyZXR1cm47aWYobD1pLnRhZyxsPT09NXx8bD09PTYpe3I9YT1pO2NvbnRpbnVlIGV9cz1zLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59WGYoZnVuY3Rpb24oKXt2YXIgdT1hLGQ9anUobiksYz1bXTtlOnt2YXIgaD1EaC5nZXQoZSk7aWYoaCE9PXZvaWQgMCl7dmFyIHY9cXUsbT1lO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZihJaShuKT09PTApYnJlYWsgZTtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOnY9QjA7YnJlYWs7Y2FzZSJmb2N1c2luIjptPSJmb2N1cyIsdj1BbDticmVhaztjYXNlImZvY3Vzb3V0IjptPSJibHVyIix2PUFsO2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOnY9QWw7YnJlYWs7Y2FzZSJjbGljayI6aWYobi5idXR0b249PT0yKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51Ijp2PUJwO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOnY9QTA7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6dj1IMDticmVhaztjYXNlIFNoOmNhc2UgRWg6Y2FzZSBOaDp2PUkwO2JyZWFrO2Nhc2UgVGg6dj1LMDticmVhaztjYXNlInNjcm9sbCI6dj1DMDticmVhaztjYXNlIndoZWVsIjp2PXEwO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UicGFzdGUiOnY9UDA7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJ1cCI6dj1WcH12YXIgdz0odCY0KSE9PTAsYj0hdyYmZT09PSJzY3JvbGwiLGc9dz9oIT09bnVsbD9oKyJDYXB0dXJlIjpudWxsOmg7dz1bXTtmb3IodmFyIGY9dSx5O2YhPT1udWxsOyl7eT1mO3ZhciBwPXkuc3RhdGVOb2RlO2lmKHkudGFnPT09NSYmcCE9PW51bGwmJih5PXAsZyE9PW51bGwmJihwPWlhKGYsZykscCE9bnVsbCYmdy5wdXNoKGZhKGYscCx5KSkpKSxiKWJyZWFrO2Y9Zi5yZXR1cm59MDx3Lmxlbmd0aCYmKGg9bmV3IHYoaCxtLG51bGwsbixkKSxjLnB1c2goe2V2ZW50OmgsbGlzdGVuZXJzOnd9KSl9fWlmKCEodCY3KSl7ZTp7aWYoaD1lPT09Im1vdXNlb3ZlciJ8fGU9PT0icG9pbnRlcm92ZXIiLHY9ZT09PSJtb3VzZW91dCJ8fGU9PT0icG9pbnRlcm91dCIsaCYmbiE9PXJ1JiYobT1uLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpJiYoY3IobSl8fG1bd25dKSlicmVhayBlO2lmKCh2fHxoKSYmKGg9ZC53aW5kb3c9PT1kP2Q6KGg9ZC5vd25lckRvY3VtZW50KT9oLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvdzp3aW5kb3csdj8obT1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50LHY9dSxtPW0/Y3IobSk6bnVsbCxtIT09bnVsbCYmKGI9YnIobSksbSE9PWJ8fG0udGFnIT09NSYmbS50YWchPT02KSYmKG09bnVsbCkpOih2PW51bGwsbT11KSx2IT09bSkpe2lmKHc9QnAscD0ib25Nb3VzZUxlYXZlIixnPSJvbk1vdXNlRW50ZXIiLGY9Im1vdXNlIiwoZT09PSJwb2ludGVyb3V0Inx8ZT09PSJwb2ludGVyb3ZlciIpJiYodz1WcCxwPSJvblBvaW50ZXJMZWF2ZSIsZz0ib25Qb2ludGVyRW50ZXIiLGY9InBvaW50ZXIiKSxiPXY9PW51bGw/aDpWcih2KSx5PW09PW51bGw/aDpWcihtKSxoPW5ldyB3KHAsZisibGVhdmUiLHYsbixkKSxoLnRhcmdldD1iLGgucmVsYXRlZFRhcmdldD15LHA9bnVsbCxjcihkKT09PXUmJih3PW5ldyB3KGcsZisiZW50ZXIiLG0sbixkKSx3LnRhcmdldD15LHcucmVsYXRlZFRhcmdldD1iLHA9dyksYj1wLHYmJm0pdDp7Zm9yKHc9dixnPW0sZj0wLHk9dzt5O3k9JHIoeSkpZisrO2Zvcih5PTAscD1nO3A7cD0kcihwKSl5Kys7Zm9yKDswPGYteTspdz0kcih3KSxmLS07Zm9yKDswPHktZjspZz0kcihnKSx5LS07Zm9yKDtmLS07KXtpZih3PT09Z3x8ZyE9PW51bGwmJnc9PT1nLmFsdGVybmF0ZSlicmVhayB0O3c9JHIodyksZz0kcihnKX13PW51bGx9ZWxzZSB3PW51bGw7diE9PW51bGwmJm5mKGMsaCx2LHcsITEpLG0hPT1udWxsJiZiIT09bnVsbCYmbmYoYyxiLG0sdywhMCl9fWU6e2lmKGg9dT9Wcih1KTp3aW5kb3csdj1oLm5vZGVOYW1lJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksdj09PSJzZWxlY3QifHx2PT09ImlucHV0IiYmaC50eXBlPT09ImZpbGUiKXZhciBFPW53O2Vsc2UgaWYoS3AoaCkpaWYoeWgpRT1pdztlbHNle0U9b3c7dmFyIFM9cnd9ZWxzZSh2PWgubm9kZU5hbWUpJiZ2LnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoaC50eXBlPT09ImNoZWNrYm94Inx8aC50eXBlPT09InJhZGlvIikmJihFPWF3KTtpZihFJiYoRT1FKGUsdSkpKXt2aChjLEUsbixkKTticmVhayBlfVMmJlMoZSxoLHUpLGU9PT0iZm9jdXNvdXQiJiYoUz1oLl93cmFwcGVyU3RhdGUpJiZTLmNvbnRyb2xsZWQmJmgudHlwZT09PSJudW1iZXIiJiZYbChoLCJudW1iZXIiLGgudmFsdWUpfXN3aXRjaChTPXU/VnIodSk6d2luZG93LGUpe2Nhc2UiZm9jdXNpbiI6KEtwKFMpfHxTLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIikmJihCcj1TLGN1PXUsWm89bnVsbCk7YnJlYWs7Y2FzZSJmb2N1c291dCI6Wm89Y3U9QnI9bnVsbDticmVhaztjYXNlIm1vdXNlZG93biI6ZHU9ITA7YnJlYWs7Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJtb3VzZXVwIjpjYXNlImRyYWdlbmQiOmR1PSExLEpwKGMsbixkKTticmVhaztjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYodXcpYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpKcChjLG4sZCl9dmFyIHg7aWYoSnUpZTp7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25zdGFydCI6dmFyIE49Im9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpOPSJvbkNvbXBvc2l0aW9uRW5kIjticmVhayBlO2Nhc2UiY29tcG9zaXRpb251cGRhdGUiOk49Im9uQ29tcG9zaXRpb25VcGRhdGUiO2JyZWFrIGV9Tj12b2lkIDB9ZWxzZSBXcj9taChlLG4pJiYoTj0ib25Db21wb3NpdGlvbkVuZCIpOmU9PT0ia2V5ZG93biImJm4ua2V5Q29kZT09PTIyOSYmKE49Im9uQ29tcG9zaXRpb25TdGFydCIpO04mJihoaCYmbi5sb2NhbGUhPT0ia28iJiYoV3J8fE4hPT0ib25Db21wb3NpdGlvblN0YXJ0Ij9OPT09Im9uQ29tcG9zaXRpb25FbmQiJiZXciYmKHg9ZmgoKSk6KEZuPWQsWXU9InZhbHVlImluIEZuP0ZuLnZhbHVlOkZuLnRleHRDb250ZW50LFdyPSEwKSksUz1ZaSh1LE4pLDA8Uy5sZW5ndGgmJihOPW5ldyBqcChOLGUsbnVsbCxuLGQpLGMucHVzaCh7ZXZlbnQ6TixsaXN0ZW5lcnM6U30pLHg/Ti5kYXRhPXg6KHg9Z2gobikseCE9PW51bGwmJihOLmRhdGE9eCkpKSksKHg9SjA/WDAoZSxuKTpaMChlLG4pKSYmKHU9WWkodSwib25CZWZvcmVJbnB1dCIpLDA8dS5sZW5ndGgmJihkPW5ldyBqcCgib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sZCksYy5wdXNoKHtldmVudDpkLGxpc3RlbmVyczp1fSksZC5kYXRhPXgpKX1DaChjLHQpfSl9ZnVuY3Rpb24gZmEoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBZaShlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixyPVtdO2UhPT1udWxsOyl7dmFyIG89ZSxhPW8uc3RhdGVOb2RlO28udGFnPT09NSYmYSE9PW51bGwmJihvPWEsYT1pYShlLG4pLGEhPW51bGwmJnIudW5zaGlmdChmYShlLGEsbykpLGE9aWEoZSx0KSxhIT1udWxsJiZyLnB1c2goZmEoZSxhLG8pKSksZT1lLnJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiAkcihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtkbyBlPWUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gbmYoZSx0LG4scixvKXtmb3IodmFyIGE9dC5fcmVhY3ROYW1lLGk9W107biE9PW51bGwmJm4hPT1yOyl7dmFyIHM9bixsPXMuYWx0ZXJuYXRlLHU9cy5zdGF0ZU5vZGU7aWYobCE9PW51bGwmJmw9PT1yKWJyZWFrO3MudGFnPT09NSYmdSE9PW51bGwmJihzPXUsbz8obD1pYShuLGEpLGwhPW51bGwmJmkudW5zaGlmdChmYShuLGwscykpKTpvfHwobD1pYShuLGEpLGwhPW51bGwmJmkucHVzaChmYShuLGwscykpKSksbj1uLnJldHVybn1pLmxlbmd0aCE9PTAmJmUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6aX0pfXZhciBkdz0vXHJcbj8vZyxwdz0vXHUwMDAwfFx1RkZGRC9nO2Z1bmN0aW9uIHJmKGUpe3JldHVybih0eXBlb2YgZT09InN0cmluZyI/ZToiIitlKS5yZXBsYWNlKGR3LGAKYCkucmVwbGFjZShwdywiIil9ZnVuY3Rpb24gTmkoZSx0LG4pe2lmKHQ9cmYodCkscmYoZSkhPT10JiZuKXRocm93IEVycm9yKF8oNDI1KSl9ZnVuY3Rpb24gcWkoKXt9dmFyIHB1PW51bGwsZnU9bnVsbDtmdW5jdGlvbiBodShlLHQpe3JldHVybiBlPT09InRleHRhcmVhInx8ZT09PSJub3NjcmlwdCJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0ic3RyaW5nInx8dHlwZW9mIHQuY2hpbGRyZW49PSJudW1iZXIifHx0eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTD09Im9iamVjdCImJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPT1udWxsJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCE9bnVsbH12YXIgbXU9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDp2b2lkIDAsZnc9dHlwZW9mIGNsZWFyVGltZW91dD09ImZ1bmN0aW9uIj9jbGVhclRpbWVvdXQ6dm9pZCAwLG9mPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2U6dm9pZCAwLGh3PXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz09ImZ1bmN0aW9uIj9xdWV1ZU1pY3JvdGFzazp0eXBlb2Ygb2Y8InUiP2Z1bmN0aW9uKGUpe3JldHVybiBvZi5yZXNvbHZlKG51bGwpLnRoZW4oZSkuY2F0Y2gobXcpfTptdTtmdW5jdGlvbiBtdyhlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWZ1bmN0aW9uIFBsKGUsdCl7dmFyIG49dCxyPTA7ZG97dmFyIG89bi5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKG4pLG8mJm8ubm9kZVR5cGU9PT04KWlmKG49by5kYXRhLG49PT0iLyQiKXtpZihyPT09MCl7ZS5yZW1vdmVDaGlsZChvKSx1YSh0KTtyZXR1cm59ci0tfWVsc2UgbiE9PSIkIiYmbiE9PSIkPyImJm4hPT0iJCEifHxyKys7bj1vfXdoaWxlKG4pO3VhKHQpfWZ1bmN0aW9uIFZuKGUpe2Zvcig7ZSE9bnVsbDtlPWUubmV4dFNpYmxpbmcpe3ZhciB0PWUubm9kZVR5cGU7aWYodD09PTF8fHQ9PT0zKWJyZWFrO2lmKHQ9PT04KXtpZih0PWUuZGF0YSx0PT09IiQifHx0PT09IiQhInx8dD09PSIkPyIpYnJlYWs7aWYodD09PSIvJCIpcmV0dXJuIG51bGx9fXJldHVybiBlfWZ1bmN0aW9uIGFmKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIkInx8bj09PSIkISJ8fG49PT0iJD8iKXtpZih0PT09MClyZXR1cm4gZTt0LS19ZWxzZSBuPT09Ii8kIiYmdCsrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHBvPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLGVuPSJfX3JlYWN0RmliZXIkIitwbyxoYT0iX19yZWFjdFByb3BzJCIrcG8sd249Il9fcmVhY3RDb250YWluZXIkIitwbyxndT0iX19yZWFjdEV2ZW50cyQiK3BvLGd3PSJfX3JlYWN0TGlzdGVuZXJzJCIrcG8sdnc9Il9fcmVhY3RIYW5kbGVzJCIrcG87ZnVuY3Rpb24gY3IoZSl7dmFyIHQ9ZVtlbl07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bd25dfHxuW2VuXSl7aWYobj10LmFsdGVybmF0ZSx0LmNoaWxkIT09bnVsbHx8biE9PW51bGwmJm4uY2hpbGQhPT1udWxsKWZvcihlPWFmKGUpO2UhPT1udWxsOyl7aWYobj1lW2VuXSlyZXR1cm4gbjtlPWFmKGUpfXJldHVybiB0fWU9bixuPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShlKXtyZXR1cm4gZT1lW2VuXXx8ZVt3bl0sIWV8fGUudGFnIT09NSYmZS50YWchPT02JiZlLnRhZyE9PTEzJiZlLnRhZyE9PTM/bnVsbDplfWZ1bmN0aW9uIFZyKGUpe2lmKGUudGFnPT09NXx8ZS50YWc9PT02KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihfKDMzKSl9ZnVuY3Rpb24gbXMoZSl7cmV0dXJuIGVbaGFdfHxudWxsfXZhciB2dT1bXSxIcj0tMTtmdW5jdGlvbiBYbihlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiBoZShlKXswPkhyfHwoZS5jdXJyZW50PXZ1W0hyXSx2dVtIcl09bnVsbCxIci0tKX1mdW5jdGlvbiBjZShlLHQpe0hyKyssdnVbSHJdPWUuY3VycmVudCxlLmN1cnJlbnQ9dH12YXIgUW49e30scWU9WG4oUW4pLGl0PVhuKCExKSxtcj1RbjtmdW5jdGlvbiBvbyhlLHQpe3ZhciBuPWUudHlwZS5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIFFuO3ZhciByPWUuc3RhdGVOb2RlO2lmKHImJnIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PXQpcmV0dXJuIHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIG89e30sYTtmb3IoYSBpbiBuKW9bYV09dFthXTtyZXR1cm4gciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PXQsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1vKSxvfWZ1bmN0aW9uIHN0KGUpe3JldHVybiBlPWUuY2hpbGRDb250ZXh0VHlwZXMsZSE9bnVsbH1mdW5jdGlvbiBRaSgpe2hlKGl0KSxoZShxZSl9ZnVuY3Rpb24gc2YoZSx0LG4pe2lmKHFlLmN1cnJlbnQhPT1Rbil0aHJvdyBFcnJvcihfKDE2OCkpO2NlKHFlLHQpLGNlKGl0LG4pfWZ1bmN0aW9uIEFoKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0PXQuY2hpbGRDb250ZXh0VHlwZXMsdHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0IT0iZnVuY3Rpb24iKXJldHVybiBuO3I9ci5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIG8gaW4gcilpZighKG8gaW4gdCkpdGhyb3cgRXJyb3IoXygxMDgscjAoZSl8fCJVbmtub3duIixvKSk7cmV0dXJuIHdlKHt9LG4scil9ZnVuY3Rpb24gSmkoZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxRbixtcj1xZS5jdXJyZW50LGNlKHFlLGUpLGNlKGl0LGl0LmN1cnJlbnQpLCEwfWZ1bmN0aW9uIGxmKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZighcil0aHJvdyBFcnJvcihfKDE2OSkpO24/KGU9QWgoZSx0LG1yKSxyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWUsaGUoaXQpLGhlKHFlKSxjZShxZSxlKSk6aGUoaXQpLGNlKGl0LG4pfXZhciBobj1udWxsLGdzPSExLExsPSExO2Z1bmN0aW9uIE9oKGUpe2huPT09bnVsbD9obj1bZV06aG4ucHVzaChlKX1mdW5jdGlvbiB5dyhlKXtncz0hMCxPaChlKX1mdW5jdGlvbiBabigpe2lmKCFMbCYmaG4hPT1udWxsKXtMbD0hMDt2YXIgZT0wLHQ9bmU7dHJ5e3ZhciBuPWhuO2ZvcihuZT0xO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO2RvIHI9cighMCk7d2hpbGUociE9PW51bGwpfWhuPW51bGwsZ3M9ITF9Y2F0Y2gobyl7dGhyb3cgaG4hPT1udWxsJiYoaG49aG4uc2xpY2UoZSsxKSksbmgoVnUsWm4pLG99ZmluYWxseXtuZT10LExsPSExfX1yZXR1cm4gbnVsbH12YXIgR3I9W10sS3I9MCxYaT1udWxsLFppPTAsU3Q9W10sRXQ9MCxncj1udWxsLG1uPTEsZ249IiI7ZnVuY3Rpb24gbHIoZSx0KXtHcltLcisrXT1aaSxHcltLcisrXT1YaSxYaT1lLFppPXR9ZnVuY3Rpb24gUmgoZSx0LG4pe1N0W0V0KytdPW1uLFN0W0V0KytdPWduLFN0W0V0KytdPWdyLGdyPWU7dmFyIHI9bW47ZT1nbjt2YXIgbz0zMi1VdChyKS0xO3ImPX4oMTw8byksbis9MTt2YXIgYT0zMi1VdCh0KStvO2lmKDMwPGEpe3ZhciBpPW8tbyU1O2E9KHImKDE8PGkpLTEpLnRvU3RyaW5nKDMyKSxyPj49aSxvLT1pLG1uPTE8PDMyLVV0KHQpK298bjw8b3xyLGduPWErZX1lbHNlIG1uPTE8PGF8bjw8b3xyLGduPWV9ZnVuY3Rpb24gWnUoZSl7ZS5yZXR1cm4hPT1udWxsJiYobHIoZSwxKSxSaChlLDEsMCkpfWZ1bmN0aW9uIGVjKGUpe2Zvcig7ZT09PVhpOylYaT1HclstLUtyXSxHcltLcl09bnVsbCxaaT1HclstLUtyXSxHcltLcl09bnVsbDtmb3IoO2U9PT1ncjspZ3I9U3RbLS1FdF0sU3RbRXRdPW51bGwsZ249U3RbLS1FdF0sU3RbRXRdPW51bGwsbW49U3RbLS1FdF0sU3RbRXRdPW51bGx9dmFyIGh0PW51bGwsZnQ9bnVsbCxtZT0hMSxGdD1udWxsO2Z1bmN0aW9uIEloKGUsdCl7dmFyIG49TnQoNSxudWxsLG51bGwsMCk7bi5lbGVtZW50VHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLHQ9ZS5kZWxldGlvbnMsdD09PW51bGw/KGUuZGVsZXRpb25zPVtuXSxlLmZsYWdzfD0xNik6dC5wdXNoKG4pfWZ1bmN0aW9uIHVmKGUsdCl7c3dpdGNoKGUudGFnKXtjYXNlIDU6dmFyIG49ZS50eXBlO3JldHVybiB0PXQubm9kZVR5cGUhPT0xfHxuLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LGh0PWUsZnQ9Vm4odC5maXJzdENoaWxkKSwhMCk6ITE7Y2FzZSA2OnJldHVybiB0PWUucGVuZGluZ1Byb3BzPT09IiJ8fHQubm9kZVR5cGUhPT0zP251bGw6dCx0IT09bnVsbD8oZS5zdGF0ZU5vZGU9dCxodD1lLGZ0PW51bGwsITApOiExO2Nhc2UgMTM6cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTg/bnVsbDp0LHQhPT1udWxsPyhuPWdyIT09bnVsbD97aWQ6bW4sb3ZlcmZsb3c6Z259Om51bGwsZS5tZW1vaXplZFN0YXRlPXtkZWh5ZHJhdGVkOnQsdHJlZUNvbnRleHQ6bixyZXRyeUxhbmU6MTA3Mzc0MTgyNH0sbj1OdCgxOCxudWxsLG51bGwsMCksbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLGUuY2hpbGQ9bixodD1lLGZ0PW51bGwsITApOiExO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHl1KGUpe3JldHVybihlLm1vZGUmMSkhPT0wJiYoZS5mbGFncyYxMjgpPT09MH1mdW5jdGlvbiB3dShlKXtpZihtZSl7dmFyIHQ9ZnQ7aWYodCl7dmFyIG49dDtpZighdWYoZSx0KSl7aWYoeXUoZSkpdGhyb3cgRXJyb3IoXyg0MTgpKTt0PVZuKG4ubmV4dFNpYmxpbmcpO3ZhciByPWh0O3QmJnVmKGUsdCk/SWgocixuKTooZS5mbGFncz1lLmZsYWdzJi00MDk3fDIsbWU9ITEsaHQ9ZSl9fWVsc2V7aWYoeXUoZSkpdGhyb3cgRXJyb3IoXyg0MTgpKTtlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MixtZT0hMSxodD1lfX19ZnVuY3Rpb24gY2YoZSl7Zm9yKGU9ZS5yZXR1cm47ZSE9PW51bGwmJmUudGFnIT09NSYmZS50YWchPT0zJiZlLnRhZyE9PTEzOyllPWUucmV0dXJuO2h0PWV9ZnVuY3Rpb24gVGkoZSl7aWYoZSE9PWh0KXJldHVybiExO2lmKCFtZSlyZXR1cm4gY2YoZSksbWU9ITAsITE7dmFyIHQ7aWYoKHQ9ZS50YWchPT0zKSYmISh0PWUudGFnIT09NSkmJih0PWUudHlwZSx0PXQhPT0iaGVhZCImJnQhPT0iYm9keSImJiFodShlLnR5cGUsZS5tZW1vaXplZFByb3BzKSksdCYmKHQ9ZnQpKXtpZih5dShlKSl0aHJvdyBNaCgpLEVycm9yKF8oNDE4KSk7Zm9yKDt0OylJaChlLHQpLHQ9Vm4odC5uZXh0U2libGluZyl9aWYoY2YoZSksZS50YWc9PT0xMyl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lIT09bnVsbD9lLmRlaHlkcmF0ZWQ6bnVsbCwhZSl0aHJvdyBFcnJvcihfKDMxNykpO2U6e2ZvcihlPWUubmV4dFNpYmxpbmcsdD0wO2U7KXtpZihlLm5vZGVUeXBlPT09OCl7dmFyIG49ZS5kYXRhO2lmKG49PT0iLyQiKXtpZih0PT09MCl7ZnQ9Vm4oZS5uZXh0U2libGluZyk7YnJlYWsgZX10LS19ZWxzZSBuIT09IiQiJiZuIT09IiQhIiYmbiE9PSIkPyJ8fHQrK31lPWUubmV4dFNpYmxpbmd9ZnQ9bnVsbH19ZWxzZSBmdD1odD9WbihlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBNaCgpe2Zvcih2YXIgZT1mdDtlOyllPVZuKGUubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIGFvKCl7ZnQ9aHQ9bnVsbCxtZT0hMX1mdW5jdGlvbiB0YyhlKXtGdD09PW51bGw/RnQ9W2VdOkZ0LnB1c2goZSl9dmFyIHd3PWtuLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIFdvKGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoXygzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihfKDE0NyxlKSk7dmFyIG89cixhPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWE/dC5yZWY6KHQ9ZnVuY3Rpb24oaSl7dmFyIHM9by5yZWZzO2k9PT1udWxsP2RlbGV0ZSBzW2FdOnNbYV09aX0sdC5fc3RyaW5nUmVmPWEsdCl9aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IEVycm9yKF8oMjg0KSk7aWYoIW4uX293bmVyKXRocm93IEVycm9yKF8oMjkwLGUpKX1yZXR1cm4gZX1mdW5jdGlvbiBEaShlLHQpe3Rocm93IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLEVycm9yKF8oMzEsZT09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmUpKX1mdW5jdGlvbiBkZihlKXt2YXIgdD1lLl9pbml0O3JldHVybiB0KGUuX3BheWxvYWQpfWZ1bmN0aW9uIFBoKGUpe2Z1bmN0aW9uIHQoZyxmKXtpZihlKXt2YXIgeT1nLmRlbGV0aW9uczt5PT09bnVsbD8oZy5kZWxldGlvbnM9W2ZdLGcuZmxhZ3N8PTE2KTp5LnB1c2goZil9fWZ1bmN0aW9uIG4oZyxmKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO2YhPT1udWxsOyl0KGcsZiksZj1mLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihnLGYpe2ZvcihnPW5ldyBNYXA7ZiE9PW51bGw7KWYua2V5IT09bnVsbD9nLnNldChmLmtleSxmKTpnLnNldChmLmluZGV4LGYpLGY9Zi5zaWJsaW5nO3JldHVybiBnfWZ1bmN0aW9uIG8oZyxmKXtyZXR1cm4gZz1ZbihnLGYpLGcuaW5kZXg9MCxnLnNpYmxpbmc9bnVsbCxnfWZ1bmN0aW9uIGEoZyxmLHkpe3JldHVybiBnLmluZGV4PXksZT8oeT1nLmFsdGVybmF0ZSx5IT09bnVsbD8oeT15LmluZGV4LHk8Zj8oZy5mbGFnc3w9MixmKTp5KTooZy5mbGFnc3w9MixmKSk6KGcuZmxhZ3N8PTEwNDg1NzYsZil9ZnVuY3Rpb24gaShnKXtyZXR1cm4gZSYmZy5hbHRlcm5hdGU9PT1udWxsJiYoZy5mbGFnc3w9MiksZ31mdW5jdGlvbiBzKGcsZix5LHApe3JldHVybiBmPT09bnVsbHx8Zi50YWchPT02PyhmPWpsKHksZy5tb2RlLHApLGYucmV0dXJuPWcsZik6KGY9byhmLHkpLGYucmV0dXJuPWcsZil9ZnVuY3Rpb24gbChnLGYseSxwKXt2YXIgRT15LnR5cGU7cmV0dXJuIEU9PT1Vcj9kKGcsZix5LnByb3BzLmNoaWxkcmVuLHAseS5rZXkpOmYhPT1udWxsJiYoZi5lbGVtZW50VHlwZT09PUV8fHR5cGVvZiBFPT0ib2JqZWN0IiYmRSE9PW51bGwmJkUuJCR0eXBlb2Y9PT1QbiYmZGYoRSk9PT1mLnR5cGUpPyhwPW8oZix5LnByb3BzKSxwLnJlZj1XbyhnLGYseSkscC5yZXR1cm49ZyxwKToocD1VaSh5LnR5cGUseS5rZXkseS5wcm9wcyxudWxsLGcubW9kZSxwKSxwLnJlZj1XbyhnLGYseSkscC5yZXR1cm49ZyxwKX1mdW5jdGlvbiB1KGcsZix5LHApe3JldHVybiBmPT09bnVsbHx8Zi50YWchPT00fHxmLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09eS5jb250YWluZXJJbmZvfHxmLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PXkuaW1wbGVtZW50YXRpb24/KGY9VmwoeSxnLm1vZGUscCksZi5yZXR1cm49ZyxmKTooZj1vKGYseS5jaGlsZHJlbnx8W10pLGYucmV0dXJuPWcsZil9ZnVuY3Rpb24gZChnLGYseSxwLEUpe3JldHVybiBmPT09bnVsbHx8Zi50YWchPT03PyhmPWhyKHksZy5tb2RlLHAsRSksZi5yZXR1cm49ZyxmKTooZj1vKGYseSksZi5yZXR1cm49ZyxmKX1mdW5jdGlvbiBjKGcsZix5KXtpZih0eXBlb2YgZj09InN0cmluZyImJmYhPT0iInx8dHlwZW9mIGY9PSJudW1iZXIiKXJldHVybiBmPWpsKCIiK2YsZy5tb2RlLHkpLGYucmV0dXJuPWcsZjtpZih0eXBlb2YgZj09Im9iamVjdCImJmYhPT1udWxsKXtzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBwaTpyZXR1cm4geT1VaShmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGcubW9kZSx5KSx5LnJlZj1XbyhnLG51bGwsZikseS5yZXR1cm49Zyx5O2Nhc2UgRnI6cmV0dXJuIGY9VmwoZixnLm1vZGUseSksZi5yZXR1cm49ZyxmO2Nhc2UgUG46dmFyIHA9Zi5faW5pdDtyZXR1cm4gYyhnLHAoZi5fcGF5bG9hZCkseSl9aWYoR28oZil8fHpvKGYpKXJldHVybiBmPWhyKGYsZy5tb2RlLHksbnVsbCksZi5yZXR1cm49ZyxmO0RpKGcsZil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaChnLGYseSxwKXt2YXIgRT1mIT09bnVsbD9mLmtleTpudWxsO2lmKHR5cGVvZiB5PT0ic3RyaW5nIiYmeSE9PSIifHx0eXBlb2YgeT09Im51bWJlciIpcmV0dXJuIEUhPT1udWxsP251bGw6cyhnLGYsIiIreSxwKTtpZih0eXBlb2YgeT09Im9iamVjdCImJnkhPT1udWxsKXtzd2l0Y2goeS4kJHR5cGVvZil7Y2FzZSBwaTpyZXR1cm4geS5rZXk9PT1FP2woZyxmLHkscCk6bnVsbDtjYXNlIEZyOnJldHVybiB5LmtleT09PUU/dShnLGYseSxwKTpudWxsO2Nhc2UgUG46cmV0dXJuIEU9eS5faW5pdCxoKGcsZixFKHkuX3BheWxvYWQpLHApfWlmKEdvKHkpfHx6byh5KSlyZXR1cm4gRSE9PW51bGw/bnVsbDpkKGcsZix5LHAsbnVsbCk7RGkoZyx5KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB2KGcsZix5LHAsRSl7aWYodHlwZW9mIHA9PSJzdHJpbmciJiZwIT09IiJ8fHR5cGVvZiBwPT0ibnVtYmVyIilyZXR1cm4gZz1nLmdldCh5KXx8bnVsbCxzKGYsZywiIitwLEUpO2lmKHR5cGVvZiBwPT0ib2JqZWN0IiYmcCE9PW51bGwpe3N3aXRjaChwLiQkdHlwZW9mKXtjYXNlIHBpOnJldHVybiBnPWcuZ2V0KHAua2V5PT09bnVsbD95OnAua2V5KXx8bnVsbCxsKGYsZyxwLEUpO2Nhc2UgRnI6cmV0dXJuIGc9Zy5nZXQocC5rZXk9PT1udWxsP3k6cC5rZXkpfHxudWxsLHUoZixnLHAsRSk7Y2FzZSBQbjp2YXIgUz1wLl9pbml0O3JldHVybiB2KGcsZix5LFMocC5fcGF5bG9hZCksRSl9aWYoR28ocCl8fHpvKHApKXJldHVybiBnPWcuZ2V0KHkpfHxudWxsLGQoZixnLHAsRSxudWxsKTtEaShmLHApfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oZyxmLHkscCl7Zm9yKHZhciBFPW51bGwsUz1udWxsLHg9ZixOPWY9MCxDPW51bGw7eCE9PW51bGwmJk48eS5sZW5ndGg7TisrKXt4LmluZGV4Pk4/KEM9eCx4PW51bGwpOkM9eC5zaWJsaW5nO3ZhciBrPWgoZyx4LHlbTl0scCk7aWYoaz09PW51bGwpe3g9PT1udWxsJiYoeD1DKTticmVha31lJiZ4JiZrLmFsdGVybmF0ZT09PW51bGwmJnQoZyx4KSxmPWEoayxmLE4pLFM9PT1udWxsP0U9azpTLnNpYmxpbmc9ayxTPWsseD1DfWlmKE49PT15Lmxlbmd0aClyZXR1cm4gbihnLHgpLG1lJiZscihnLE4pLEU7aWYoeD09PW51bGwpe2Zvcig7Tjx5Lmxlbmd0aDtOKyspeD1jKGcseVtOXSxwKSx4IT09bnVsbCYmKGY9YSh4LGYsTiksUz09PW51bGw/RT14OlMuc2libGluZz14LFM9eCk7cmV0dXJuIG1lJiZscihnLE4pLEV9Zm9yKHg9cihnLHgpO048eS5sZW5ndGg7TisrKUM9dih4LGcsTix5W05dLHApLEMhPT1udWxsJiYoZSYmQy5hbHRlcm5hdGUhPT1udWxsJiZ4LmRlbGV0ZShDLmtleT09PW51bGw/TjpDLmtleSksZj1hKEMsZixOKSxTPT09bnVsbD9FPUM6Uy5zaWJsaW5nPUMsUz1DKTtyZXR1cm4gZSYmeC5mb3JFYWNoKGZ1bmN0aW9uKEEpe3JldHVybiB0KGcsQSl9KSxtZSYmbHIoZyxOKSxFfWZ1bmN0aW9uIHcoZyxmLHkscCl7dmFyIEU9em8oeSk7aWYodHlwZW9mIEUhPSJmdW5jdGlvbiIpdGhyb3cgRXJyb3IoXygxNTApKTtpZih5PUUuY2FsbCh5KSx5PT1udWxsKXRocm93IEVycm9yKF8oMTUxKSk7Zm9yKHZhciBTPUU9bnVsbCx4PWYsTj1mPTAsQz1udWxsLGs9eS5uZXh0KCk7eCE9PW51bGwmJiFrLmRvbmU7TisrLGs9eS5uZXh0KCkpe3guaW5kZXg+Tj8oQz14LHg9bnVsbCk6Qz14LnNpYmxpbmc7dmFyIEE9aChnLHgsay52YWx1ZSxwKTtpZihBPT09bnVsbCl7eD09PW51bGwmJih4PUMpO2JyZWFrfWUmJngmJkEuYWx0ZXJuYXRlPT09bnVsbCYmdChnLHgpLGY9YShBLGYsTiksUz09PW51bGw/RT1BOlMuc2libGluZz1BLFM9QSx4PUN9aWYoay5kb25lKXJldHVybiBuKGcseCksbWUmJmxyKGcsTiksRTtpZih4PT09bnVsbCl7Zm9yKDshay5kb25lO04rKyxrPXkubmV4dCgpKWs9YyhnLGsudmFsdWUscCksayE9PW51bGwmJihmPWEoayxmLE4pLFM9PT1udWxsP0U9azpTLnNpYmxpbmc9ayxTPWspO3JldHVybiBtZSYmbHIoZyxOKSxFfWZvcih4PXIoZyx4KTshay5kb25lO04rKyxrPXkubmV4dCgpKWs9dih4LGcsTixrLnZhbHVlLHApLGshPT1udWxsJiYoZSYmay5hbHRlcm5hdGUhPT1udWxsJiZ4LmRlbGV0ZShrLmtleT09PW51bGw/TjprLmtleSksZj1hKGssZixOKSxTPT09bnVsbD9FPWs6Uy5zaWJsaW5nPWssUz1rKTtyZXR1cm4gZSYmeC5mb3JFYWNoKGZ1bmN0aW9uKFIpe3JldHVybiB0KGcsUil9KSxtZSYmbHIoZyxOKSxFfWZ1bmN0aW9uIGIoZyxmLHkscCl7aWYodHlwZW9mIHk9PSJvYmplY3QiJiZ5IT09bnVsbCYmeS50eXBlPT09VXImJnkua2V5PT09bnVsbCYmKHk9eS5wcm9wcy5jaGlsZHJlbiksdHlwZW9mIHk9PSJvYmplY3QiJiZ5IT09bnVsbCl7c3dpdGNoKHkuJCR0eXBlb2Ype2Nhc2UgcGk6ZTp7Zm9yKHZhciBFPXkua2V5LFM9ZjtTIT09bnVsbDspe2lmKFMua2V5PT09RSl7aWYoRT15LnR5cGUsRT09PVVyKXtpZihTLnRhZz09PTcpe24oZyxTLnNpYmxpbmcpLGY9byhTLHkucHJvcHMuY2hpbGRyZW4pLGYucmV0dXJuPWcsZz1mO2JyZWFrIGV9fWVsc2UgaWYoUy5lbGVtZW50VHlwZT09PUV8fHR5cGVvZiBFPT0ib2JqZWN0IiYmRSE9PW51bGwmJkUuJCR0eXBlb2Y9PT1QbiYmZGYoRSk9PT1TLnR5cGUpe24oZyxTLnNpYmxpbmcpLGY9byhTLHkucHJvcHMpLGYucmVmPVdvKGcsUyx5KSxmLnJldHVybj1nLGc9ZjticmVhayBlfW4oZyxTKTticmVha31lbHNlIHQoZyxTKTtTPVMuc2libGluZ315LnR5cGU9PT1Vcj8oZj1ocih5LnByb3BzLmNoaWxkcmVuLGcubW9kZSxwLHkua2V5KSxmLnJldHVybj1nLGc9Zik6KHA9VWkoeS50eXBlLHkua2V5LHkucHJvcHMsbnVsbCxnLm1vZGUscCkscC5yZWY9V28oZyxmLHkpLHAucmV0dXJuPWcsZz1wKX1yZXR1cm4gaShnKTtjYXNlIEZyOmU6e2ZvcihTPXkua2V5O2YhPT1udWxsOyl7aWYoZi5rZXk9PT1TKWlmKGYudGFnPT09NCYmZi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PXkuY29udGFpbmVySW5mbyYmZi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT15LmltcGxlbWVudGF0aW9uKXtuKGcsZi5zaWJsaW5nKSxmPW8oZix5LmNoaWxkcmVufHxbXSksZi5yZXR1cm49ZyxnPWY7YnJlYWsgZX1lbHNle24oZyxmKTticmVha31lbHNlIHQoZyxmKTtmPWYuc2libGluZ31mPVZsKHksZy5tb2RlLHApLGYucmV0dXJuPWcsZz1mfXJldHVybiBpKGcpO2Nhc2UgUG46cmV0dXJuIFM9eS5faW5pdCxiKGcsZixTKHkuX3BheWxvYWQpLHApfWlmKEdvKHkpKXJldHVybiBtKGcsZix5LHApO2lmKHpvKHkpKXJldHVybiB3KGcsZix5LHApO0RpKGcseSl9cmV0dXJuIHR5cGVvZiB5PT0ic3RyaW5nIiYmeSE9PSIifHx0eXBlb2YgeT09Im51bWJlciI/KHk9IiIreSxmIT09bnVsbCYmZi50YWc9PT02PyhuKGcsZi5zaWJsaW5nKSxmPW8oZix5KSxmLnJldHVybj1nLGc9Zik6KG4oZyxmKSxmPWpsKHksZy5tb2RlLHApLGYucmV0dXJuPWcsZz1mKSxpKGcpKTpuKGcsZil9cmV0dXJuIGJ9dmFyIGlvPVBoKCEwKSxMaD1QaCghMSksZXM9WG4obnVsbCksdHM9bnVsbCxZcj1udWxsLG5jPW51bGw7ZnVuY3Rpb24gcmMoKXtuYz1Zcj10cz1udWxsfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVzLmN1cnJlbnQ7aGUoZXMpLGUuX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIHh1KGUsdCxuKXtmb3IoO2UhPT1udWxsOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZ0KSE9PXQ/KGUuY2hpbGRMYW5lc3w9dCxyIT09bnVsbCYmKHIuY2hpbGRMYW5lc3w9dCkpOnIhPT1udWxsJiYoci5jaGlsZExhbmVzJnQpIT09dCYmKHIuY2hpbGRMYW5lc3w9dCksZT09PW4pYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gdG8oZSx0KXt0cz1lLG5jPVlyPW51bGwsZT1lLmRlcGVuZGVuY2llcyxlIT09bnVsbCYmZS5maXJzdENvbnRleHQhPT1udWxsJiYoZS5sYW5lcyZ0JiYoYXQ9ITApLGUuZmlyc3RDb250ZXh0PW51bGwpfWZ1bmN0aW9uIER0KGUpe3ZhciB0PWUuX2N1cnJlbnRWYWx1ZTtpZihuYyE9PWUpaWYoZT17Y29udGV4dDplLG1lbW9pemVkVmFsdWU6dCxuZXh0Om51bGx9LFlyPT09bnVsbCl7aWYodHM9PT1udWxsKXRocm93IEVycm9yKF8oMzA4KSk7WXI9ZSx0cy5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmV9fWVsc2UgWXI9WXIubmV4dD1lO3JldHVybiB0fXZhciBkcj1udWxsO2Z1bmN0aW9uIGFjKGUpe2RyPT09bnVsbD9kcj1bZV06ZHIucHVzaChlKX1mdW5jdGlvbiB6aChlLHQsbixyKXt2YXIgbz10LmludGVybGVhdmVkO3JldHVybiBvPT09bnVsbD8obi5uZXh0PW4sYWModCkpOihuLm5leHQ9by5uZXh0LG8ubmV4dD1uKSx0LmludGVybGVhdmVkPW4seG4oZSxyKX1mdW5jdGlvbiB4bihlLHQpe2UubGFuZXN8PXQ7dmFyIG49ZS5hbHRlcm5hdGU7Zm9yKG4hPT1udWxsJiYobi5sYW5lc3w9dCksbj1lLGU9ZS5yZXR1cm47ZSE9PW51bGw7KWUuY2hpbGRMYW5lc3w9dCxuPWUuYWx0ZXJuYXRlLG4hPT1udWxsJiYobi5jaGlsZExhbmVzfD10KSxuPWUsZT1lLnJldHVybjtyZXR1cm4gbi50YWc9PT0zP24uc3RhdGVOb2RlOm51bGx9dmFyIExuPSExO2Z1bmN0aW9uIGljKGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjB9LGVmZmVjdHM6bnVsbH19ZnVuY3Rpb24gJGgoZSx0KXtlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWUmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmUubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmUuc2hhcmVkLGVmZmVjdHM6ZS5lZmZlY3RzfSl9ZnVuY3Rpb24gdm4oZSx0KXtyZXR1cm57ZXZlbnRUaW1lOmUsbGFuZTp0LHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gSG4oZSx0LG4pe3ZhciByPWUudXBkYXRlUXVldWU7aWYocj09PW51bGwpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCxRJjIpe3ZhciBvPXIucGVuZGluZztyZXR1cm4gbz09PW51bGw/dC5uZXh0PXQ6KHQubmV4dD1vLm5leHQsby5uZXh0PXQpLHIucGVuZGluZz10LHhuKGUsbil9cmV0dXJuIG89ci5pbnRlcmxlYXZlZCxvPT09bnVsbD8odC5uZXh0PXQsYWMocikpOih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLmludGVybGVhdmVkPXQseG4oZSxuKX1mdW5jdGlvbiBNaShlLHQsbil7aWYodD10LnVwZGF0ZVF1ZXVlLHQhPT1udWxsJiYodD10LnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj10LmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG58PXIsdC5sYW5lcz1uLEh1KGUsbil9fWZ1bmN0aW9uIHBmKGUsdCl7dmFyIG49ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIG89bnVsbCxhPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGk9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O2E9PT1udWxsP289YT1pOmE9YS5uZXh0PWksbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO2E9PT1udWxsP289YT10OmE9YS5uZXh0PXR9ZWxzZSBvPWE9dDtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6YSxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LGUudXBkYXRlUXVldWU9bjtyZXR1cm59ZT1uLmxhc3RCYXNlVXBkYXRlLGU9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPXQ6ZS5uZXh0PXQsbi5sYXN0QmFzZVVwZGF0ZT10fWZ1bmN0aW9uIG5zKGUsdCxuLHIpe3ZhciBvPWUudXBkYXRlUXVldWU7TG49ITE7dmFyIGE9by5maXJzdEJhc2VVcGRhdGUsaT1vLmxhc3RCYXNlVXBkYXRlLHM9by5zaGFyZWQucGVuZGluZztpZihzIT09bnVsbCl7by5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBsPXMsdT1sLm5leHQ7bC5uZXh0PW51bGwsaT09PW51bGw/YT11OmkubmV4dD11LGk9bDt2YXIgZD1lLmFsdGVybmF0ZTtkIT09bnVsbCYmKGQ9ZC51cGRhdGVRdWV1ZSxzPWQubGFzdEJhc2VVcGRhdGUscyE9PWkmJihzPT09bnVsbD9kLmZpcnN0QmFzZVVwZGF0ZT11OnMubmV4dD11LGQubGFzdEJhc2VVcGRhdGU9bCkpfWlmKGEhPT1udWxsKXt2YXIgYz1vLmJhc2VTdGF0ZTtpPTAsZD11PWw9bnVsbCxzPWE7ZG97dmFyIGg9cy5sYW5lLHY9cy5ldmVudFRpbWU7aWYoKHImaCk9PT1oKXtkIT09bnVsbCYmKGQ9ZC5uZXh0PXtldmVudFRpbWU6dixsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIG09ZSx3PXM7c3dpdGNoKGg9dCx2PW4sdy50YWcpe2Nhc2UgMTppZihtPXcucGF5bG9hZCx0eXBlb2YgbT09ImZ1bmN0aW9uIil7Yz1tLmNhbGwodixjLGgpO2JyZWFrIGV9Yz1tO2JyZWFrIGU7Y2FzZSAzOm0uZmxhZ3M9bS5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihtPXcucGF5bG9hZCxoPXR5cGVvZiBtPT0iZnVuY3Rpb24iP20uY2FsbCh2LGMsaCk6bSxoPT1udWxsKWJyZWFrIGU7Yz13ZSh7fSxjLGgpO2JyZWFrIGU7Y2FzZSAyOkxuPSEwfX1zLmNhbGxiYWNrIT09bnVsbCYmcy5sYW5lIT09MCYmKGUuZmxhZ3N8PTY0LGg9by5lZmZlY3RzLGg9PT1udWxsP28uZWZmZWN0cz1bc106aC5wdXNoKHMpKX1lbHNlIHY9e2V2ZW50VGltZTp2LGxhbmU6aCx0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LGQ9PT1udWxsPyh1PWQ9dixsPWMpOmQ9ZC5uZXh0PXYsaXw9aDtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1vLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO2g9cyxzPWgubmV4dCxoLm5leHQ9bnVsbCxvLmxhc3RCYXNlVXBkYXRlPWgsby5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYoZD09PW51bGwmJihsPWMpLG8uYmFzZVN0YXRlPWwsby5maXJzdEJhc2VVcGRhdGU9dSxvLmxhc3RCYXNlVXBkYXRlPWQsdD1vLnNoYXJlZC5pbnRlcmxlYXZlZCx0IT09bnVsbCl7bz10O2RvIGl8PW8ubGFuZSxvPW8ubmV4dDt3aGlsZShvIT09dCl9ZWxzZSBhPT09bnVsbCYmKG8uc2hhcmVkLmxhbmVzPTApO3lyfD1pLGUubGFuZXM9aSxlLm1lbW9pemVkU3RhdGU9Y319ZnVuY3Rpb24gZmYoZSx0LG4pe2lmKGU9dC5lZmZlY3RzLHQuZWZmZWN0cz1udWxsLGUhPT1udWxsKWZvcih0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF0sbz1yLmNhbGxiYWNrO2lmKG8hPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBvIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKF8oMTkxLG8pKTtvLmNhbGwocil9fX12YXIgRWE9e30sbm49WG4oRWEpLG1hPVhuKEVhKSxnYT1YbihFYSk7ZnVuY3Rpb24gcHIoZSl7aWYoZT09PUVhKXRocm93IEVycm9yKF8oMTc0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gc2MoZSx0KXtzd2l0Y2goY2UoZ2EsdCksY2UobWEsZSksY2Uobm4sRWEpLGU9dC5ub2RlVHlwZSxlKXtjYXNlIDk6Y2FzZSAxMTp0PSh0PXQuZG9jdW1lbnRFbGVtZW50KT90Lm5hbWVzcGFjZVVSSTpldShudWxsLCIiKTticmVhaztkZWZhdWx0OmU9ZT09PTg/dC5wYXJlbnROb2RlOnQsdD1lLm5hbWVzcGFjZVVSSXx8bnVsbCxlPWUudGFnTmFtZSx0PWV1KHQsZSl9aGUobm4pLGNlKG5uLHQpfWZ1bmN0aW9uIHNvKCl7aGUobm4pLGhlKG1hKSxoZShnYSl9ZnVuY3Rpb24gRmgoZSl7cHIoZ2EuY3VycmVudCk7dmFyIHQ9cHIobm4uY3VycmVudCksbj1ldSh0LGUudHlwZSk7dCE9PW4mJihjZShtYSxlKSxjZShubixuKSl9ZnVuY3Rpb24gbGMoZSl7bWEuY3VycmVudD09PWUmJihoZShubiksaGUobWEpKX12YXIgdmU9WG4oMCk7ZnVuY3Rpb24gcnMoZSl7Zm9yKHZhciB0PWU7dCE9PW51bGw7KXtpZih0LnRhZz09PTEzKXt2YXIgbj10Lm1lbW9pemVkU3RhdGU7aWYobiE9PW51bGwmJihuPW4uZGVoeWRyYXRlZCxuPT09bnVsbHx8bi5kYXRhPT09IiQ/Inx8bi5kYXRhPT09IiQhIikpcmV0dXJuIHR9ZWxzZSBpZih0LnRhZz09PTE5JiZ0Lm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIhPT12b2lkIDApe2lmKHQuZmxhZ3MmMTI4KXJldHVybiB0fWVsc2UgaWYodC5jaGlsZCE9PW51bGwpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yZXR1cm4gbnVsbH12YXIgemw9W107ZnVuY3Rpb24gdWMoKXtmb3IodmFyIGU9MDtlPHpsLmxlbmd0aDtlKyspemxbZV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9bnVsbDt6bC5sZW5ndGg9MH12YXIgUGk9a24uUmVhY3RDdXJyZW50RGlzcGF0Y2hlciwkbD1rbi5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyx2cj0wLHllPW51bGwsQWU9bnVsbCxQZT1udWxsLG9zPSExLGVhPSExLHZhPTAseHc9MDtmdW5jdGlvbiBHZSgpe3Rocm93IEVycm9yKF8oMzIxKSl9ZnVuY3Rpb24gY2MoZSx0KXtpZih0PT09bnVsbClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZuPGUubGVuZ3RoO24rKylpZighQnQoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBkYyhlLHQsbixyLG8sYSl7aWYodnI9YSx5ZT10LHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbCx0LmxhbmVzPTAsUGkuY3VycmVudD1lPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlPT09bnVsbD9FdzpOdyxlPW4ocixvKSxlYSl7YT0wO2Rve2lmKGVhPSExLHZhPTAsMjU8PWEpdGhyb3cgRXJyb3IoXygzMDEpKTthKz0xLFBlPUFlPW51bGwsdC51cGRhdGVRdWV1ZT1udWxsLFBpLmN1cnJlbnQ9VHcsZT1uKHIsbyl9d2hpbGUoZWEpfWlmKFBpLmN1cnJlbnQ9YXMsdD1BZSE9PW51bGwmJkFlLm5leHQhPT1udWxsLHZyPTAsUGU9QWU9eWU9bnVsbCxvcz0hMSx0KXRocm93IEVycm9yKF8oMzAwKSk7cmV0dXJuIGV9ZnVuY3Rpb24gcGMoKXt2YXIgZT12YSE9PTA7cmV0dXJuIHZhPTAsZX1mdW5jdGlvbiBadCgpe3ZhciBlPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBQZT09PW51bGw/eWUubWVtb2l6ZWRTdGF0ZT1QZT1lOlBlPVBlLm5leHQ9ZSxQZX1mdW5jdGlvbiBDdCgpe2lmKEFlPT09bnVsbCl7dmFyIGU9eWUuYWx0ZXJuYXRlO2U9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPUFlLm5leHQ7dmFyIHQ9UGU9PT1udWxsP3llLm1lbW9pemVkU3RhdGU6UGUubmV4dDtpZih0IT09bnVsbClQZT10LEFlPWU7ZWxzZXtpZihlPT09bnVsbCl0aHJvdyBFcnJvcihfKDMxMCkpO0FlPWUsZT17bWVtb2l6ZWRTdGF0ZTpBZS5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpBZS5iYXNlU3RhdGUsYmFzZVF1ZXVlOkFlLmJhc2VRdWV1ZSxxdWV1ZTpBZS5xdWV1ZSxuZXh0Om51bGx9LFBlPT09bnVsbD95ZS5tZW1vaXplZFN0YXRlPVBlPWU6UGU9UGUubmV4dD1lfXJldHVybiBQZX1mdW5jdGlvbiB5YShlLHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnR9ZnVuY3Rpb24gRmwoZSl7dmFyIHQ9Q3QoKSxuPXQucXVldWU7aWYobj09PW51bGwpdGhyb3cgRXJyb3IoXygzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1BZSxvPXIuYmFzZVF1ZXVlLGE9bi5wZW5kaW5nO2lmKGEhPT1udWxsKXtpZihvIT09bnVsbCl7dmFyIGk9by5uZXh0O28ubmV4dD1hLm5leHQsYS5uZXh0PWl9ci5iYXNlUXVldWU9bz1hLG4ucGVuZGluZz1udWxsfWlmKG8hPT1udWxsKXthPW8ubmV4dCxyPXIuYmFzZVN0YXRlO3ZhciBzPWk9bnVsbCxsPW51bGwsdT1hO2Rve3ZhciBkPXUubGFuZTtpZigodnImZCk9PT1kKWwhPT1udWxsJiYobD1sLm5leHQ9e2xhbmU6MCxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfSkscj11Lmhhc0VhZ2VyU3RhdGU/dS5lYWdlclN0YXRlOmUocix1LmFjdGlvbik7ZWxzZXt2YXIgYz17bGFuZTpkLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9O2w9PT1udWxsPyhzPWw9YyxpPXIpOmw9bC5uZXh0PWMseWUubGFuZXN8PWQseXJ8PWR9dT11Lm5leHR9d2hpbGUodSE9PW51bGwmJnUhPT1hKTtsPT09bnVsbD9pPXI6bC5uZXh0PXMsQnQocix0Lm1lbW9pemVkU3RhdGUpfHwoYXQ9ITApLHQubWVtb2l6ZWRTdGF0ZT1yLHQuYmFzZVN0YXRlPWksdC5iYXNlUXVldWU9bCxuLmxhc3RSZW5kZXJlZFN0YXRlPXJ9aWYoZT1uLmludGVybGVhdmVkLGUhPT1udWxsKXtvPWU7ZG8gYT1vLmxhbmUseWUubGFuZXN8PWEseXJ8PWEsbz1vLm5leHQ7d2hpbGUobyE9PWUpfWVsc2Ugbz09PW51bGwmJihuLmxhbmVzPTApO3JldHVyblt0Lm1lbW9pemVkU3RhdGUsbi5kaXNwYXRjaF19ZnVuY3Rpb24gVWwoZSl7dmFyIHQ9Q3QoKSxuPXQucXVldWU7aWYobj09PW51bGwpdGhyb3cgRXJyb3IoXygzMTEpKTtuLmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1uLmRpc3BhdGNoLG89bi5wZW5kaW5nLGE9dC5tZW1vaXplZFN0YXRlO2lmKG8hPT1udWxsKXtuLnBlbmRpbmc9bnVsbDt2YXIgaT1vPW8ubmV4dDtkbyBhPWUoYSxpLmFjdGlvbiksaT1pLm5leHQ7d2hpbGUoaSE9PW8pO0J0KGEsdC5tZW1vaXplZFN0YXRlKXx8KGF0PSEwKSx0Lm1lbW9pemVkU3RhdGU9YSx0LmJhc2VRdWV1ZT09PW51bGwmJih0LmJhc2VTdGF0ZT1hKSxuLmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuW2Escl19ZnVuY3Rpb24gVWgoKXt9ZnVuY3Rpb24gV2goZSx0KXt2YXIgbj15ZSxyPUN0KCksbz10KCksYT0hQnQoci5tZW1vaXplZFN0YXRlLG8pO2lmKGEmJihyLm1lbW9pemVkU3RhdGU9byxhdD0hMCkscj1yLnF1ZXVlLGZjKFZoLmJpbmQobnVsbCxuLHIsZSksW2VdKSxyLmdldFNuYXBzaG90IT09dHx8YXx8UGUhPT1udWxsJiZQZS5tZW1vaXplZFN0YXRlLnRhZyYxKXtpZihuLmZsYWdzfD0yMDQ4LHdhKDksamguYmluZChudWxsLG4scixvLHQpLHZvaWQgMCxudWxsKSxMZT09PW51bGwpdGhyb3cgRXJyb3IoXygzNDkpKTt2ciYzMHx8Qmgobix0LG8pfXJldHVybiBvfWZ1bmN0aW9uIEJoKGUsdCxuKXtlLmZsYWdzfD0xNjM4NCxlPXtnZXRTbmFwc2hvdDp0LHZhbHVlOm59LHQ9eWUudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0seWUudXBkYXRlUXVldWU9dCx0LnN0b3Jlcz1bZV0pOihuPXQuc3RvcmVzLG49PT1udWxsP3Quc3RvcmVzPVtlXTpuLnB1c2goZSkpfWZ1bmN0aW9uIGpoKGUsdCxuLHIpe3QudmFsdWU9bix0LmdldFNuYXBzaG90PXIsSGgodCkmJkdoKGUpfWZ1bmN0aW9uIFZoKGUsdCxuKXtyZXR1cm4gbihmdW5jdGlvbigpe0hoKHQpJiZHaChlKX0pfWZ1bmN0aW9uIEhoKGUpe3ZhciB0PWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXt2YXIgbj10KCk7cmV0dXJuIUJ0KGUsbil9Y2F0Y2h7cmV0dXJuITB9fWZ1bmN0aW9uIEdoKGUpe3ZhciB0PXhuKGUsMSk7dCE9PW51bGwmJld0KHQsZSwxLC0xKX1mdW5jdGlvbiBoZihlKXt2YXIgdD1adCgpO3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGU9ZSgpKSx0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9ZSxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjp5YSxsYXN0UmVuZGVyZWRTdGF0ZTplfSx0LnF1ZXVlPWUsZT1lLmRpc3BhdGNoPVN3LmJpbmQobnVsbCx5ZSxlKSxbdC5tZW1vaXplZFN0YXRlLGVdfWZ1bmN0aW9uIHdhKGUsdCxuLHIpe3JldHVybiBlPXt0YWc6ZSxjcmVhdGU6dCxkZXN0cm95Om4sZGVwczpyLG5leHQ6bnVsbH0sdD15ZS51cGRhdGVRdWV1ZSx0PT09bnVsbD8odD17bGFzdEVmZmVjdDpudWxsLHN0b3JlczpudWxsfSx5ZS51cGRhdGVRdWV1ZT10LHQubGFzdEVmZmVjdD1lLm5leHQ9ZSk6KG49dC5sYXN0RWZmZWN0LG49PT1udWxsP3QubGFzdEVmZmVjdD1lLm5leHQ9ZToocj1uLm5leHQsbi5uZXh0PWUsZS5uZXh0PXIsdC5sYXN0RWZmZWN0PWUpKSxlfWZ1bmN0aW9uIEtoKCl7cmV0dXJuIEN0KCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBMaShlLHQsbixyKXt2YXIgbz1adCgpO3llLmZsYWdzfD1lLG8ubWVtb2l6ZWRTdGF0ZT13YSgxfHQsbix2b2lkIDAscj09PXZvaWQgMD9udWxsOnIpfWZ1bmN0aW9uIHZzKGUsdCxuLHIpe3ZhciBvPUN0KCk7cj1yPT09dm9pZCAwP251bGw6cjt2YXIgYT12b2lkIDA7aWYoQWUhPT1udWxsKXt2YXIgaT1BZS5tZW1vaXplZFN0YXRlO2lmKGE9aS5kZXN0cm95LHIhPT1udWxsJiZjYyhyLGkuZGVwcykpe28ubWVtb2l6ZWRTdGF0ZT13YSh0LG4sYSxyKTtyZXR1cm59fXllLmZsYWdzfD1lLG8ubWVtb2l6ZWRTdGF0ZT13YSgxfHQsbixhLHIpfWZ1bmN0aW9uIG1mKGUsdCl7cmV0dXJuIExpKDgzOTA2NTYsOCxlLHQpfWZ1bmN0aW9uIGZjKGUsdCl7cmV0dXJuIHZzKDIwNDgsOCxlLHQpfWZ1bmN0aW9uIFloKGUsdCl7cmV0dXJuIHZzKDQsMixlLHQpfWZ1bmN0aW9uIHFoKGUsdCl7cmV0dXJuIHZzKDQsNCxlLHQpfWZ1bmN0aW9uIFFoKGUsdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIGU9ZSgpLHQoZSksZnVuY3Rpb24oKXt0KG51bGwpfTtpZih0IT1udWxsKXJldHVybiBlPWUoKSx0LmN1cnJlbnQ9ZSxmdW5jdGlvbigpe3QuY3VycmVudD1udWxsfX1mdW5jdGlvbiBKaChlLHQsbil7cmV0dXJuIG49biE9bnVsbD9uLmNvbmNhdChbZV0pOm51bGwsdnMoNCw0LFFoLmJpbmQobnVsbCx0LGUpLG4pfWZ1bmN0aW9uIGhjKCl7fWZ1bmN0aW9uIFhoKGUsdCl7dmFyIG49Q3QoKTt0PXQ9PT12b2lkIDA/bnVsbDp0O3ZhciByPW4ubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gciE9PW51bGwmJnQhPT1udWxsJiZjYyh0LHJbMV0pP3JbMF06KG4ubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlKX1mdW5jdGlvbiBaaChlLHQpe3ZhciBuPUN0KCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmY2ModCxyWzFdKT9yWzBdOihlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gZW0oZSx0LG4pe3JldHVybiB2ciYyMT8oQnQobix0KXx8KG49YWgoKSx5ZS5sYW5lc3w9bix5cnw9bixlLmJhc2VTdGF0ZT0hMCksdCk6KGUuYmFzZVN0YXRlJiYoZS5iYXNlU3RhdGU9ITEsYXQ9ITApLGUubWVtb2l6ZWRTdGF0ZT1uKX1mdW5jdGlvbiBidyhlLHQpe3ZhciBuPW5lO25lPW4hPT0wJiY0Pm4/bjo0LGUoITApO3ZhciByPSRsLnRyYW5zaXRpb247JGwudHJhbnNpdGlvbj17fTt0cnl7ZSghMSksdCgpfWZpbmFsbHl7bmU9biwkbC50cmFuc2l0aW9uPXJ9fWZ1bmN0aW9uIHRtKCl7cmV0dXJuIEN0KCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBrdyhlLHQsbil7dmFyIHI9S24oZSk7aWYobj17bGFuZTpyLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sbm0oZSkpcm0odCxuKTtlbHNlIGlmKG49emgoZSx0LG4sciksbiE9PW51bGwpe3ZhciBvPVplKCk7V3QobixlLHIsbyksb20obix0LHIpfX1mdW5jdGlvbiBTdyhlLHQsbil7dmFyIHI9S24oZSksbz17bGFuZTpyLGFjdGlvbjpuLGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYobm0oZSkpcm0odCxvKTtlbHNle3ZhciBhPWUuYWx0ZXJuYXRlO2lmKGUubGFuZXM9PT0wJiYoYT09PW51bGx8fGEubGFuZXM9PT0wKSYmKGE9dC5sYXN0UmVuZGVyZWRSZWR1Y2VyLGEhPT1udWxsKSl0cnl7dmFyIGk9dC5sYXN0UmVuZGVyZWRTdGF0ZSxzPWEoaSxuKTtpZihvLmhhc0VhZ2VyU3RhdGU9ITAsby5lYWdlclN0YXRlPXMsQnQocyxpKSl7dmFyIGw9dC5pbnRlcmxlYXZlZDtsPT09bnVsbD8oby5uZXh0PW8sYWModCkpOihvLm5leHQ9bC5uZXh0LGwubmV4dD1vKSx0LmludGVybGVhdmVkPW87cmV0dXJufX1jYXRjaHt9ZmluYWxseXt9bj16aChlLHQsbyxyKSxuIT09bnVsbCYmKG89WmUoKSxXdChuLGUscixvKSxvbShuLHQscikpfX1mdW5jdGlvbiBubShlKXt2YXIgdD1lLmFsdGVybmF0ZTtyZXR1cm4gZT09PXllfHx0IT09bnVsbCYmdD09PXllfWZ1bmN0aW9uIHJtKGUsdCl7ZWE9b3M9ITA7dmFyIG49ZS5wZW5kaW5nO249PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9bi5uZXh0LG4ubmV4dD10KSxlLnBlbmRpbmc9dH1mdW5jdGlvbiBvbShlLHQsbil7aWYobiY0MTk0MjQwKXt2YXIgcj10LmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG58PXIsdC5sYW5lcz1uLEh1KGUsbil9fXZhciBhcz17cmVhZENvbnRleHQ6RHQsdXNlQ2FsbGJhY2s6R2UsdXNlQ29udGV4dDpHZSx1c2VFZmZlY3Q6R2UsdXNlSW1wZXJhdGl2ZUhhbmRsZTpHZSx1c2VJbnNlcnRpb25FZmZlY3Q6R2UsdXNlTGF5b3V0RWZmZWN0OkdlLHVzZU1lbW86R2UsdXNlUmVkdWNlcjpHZSx1c2VSZWY6R2UsdXNlU3RhdGU6R2UsdXNlRGVidWdWYWx1ZTpHZSx1c2VEZWZlcnJlZFZhbHVlOkdlLHVzZVRyYW5zaXRpb246R2UsdXNlTXV0YWJsZVNvdXJjZTpHZSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpHZSx1c2VJZDpHZSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LEV3PXtyZWFkQ29udGV4dDpEdCx1c2VDYWxsYmFjazpmdW5jdGlvbihlLHQpe3JldHVybiBadCgpLm1lbW9pemVkU3RhdGU9W2UsdD09PXZvaWQgMD9udWxsOnRdLGV9LHVzZUNvbnRleHQ6RHQsdXNlRWZmZWN0Om1mLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLExpKDQxOTQzMDgsNCxRaC5iaW5kKG51bGwsdCxlKSxuKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIExpKDQxOTQzMDgsNCxlLHQpfSx1c2VJbnNlcnRpb25FZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTGkoNCwyLGUsdCl9LHVzZU1lbW86ZnVuY3Rpb24oZSx0KXt2YXIgbj1adCgpO3JldHVybiB0PXQ9PT12b2lkIDA/bnVsbDp0LGU9ZSgpLG4ubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1adCgpO3JldHVybiB0PW4hPT12b2lkIDA/bih0KTp0LHIubWVtb2l6ZWRTdGF0ZT1yLmJhc2VTdGF0ZT10LGU9e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjAsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmUsbGFzdFJlbmRlcmVkU3RhdGU6dH0sci5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1rdy5iaW5kKG51bGwseWUsZSksW3IubWVtb2l6ZWRTdGF0ZSxlXX0sdXNlUmVmOmZ1bmN0aW9uKGUpe3ZhciB0PVp0KCk7cmV0dXJuIGU9e2N1cnJlbnQ6ZX0sdC5tZW1vaXplZFN0YXRlPWV9LHVzZVN0YXRlOmhmLHVzZURlYnVnVmFsdWU6aGMsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gWnQoKS5tZW1vaXplZFN0YXRlPWV9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1oZighMSksdD1lWzBdO3JldHVybiBlPWJ3LmJpbmQobnVsbCxlWzFdKSxadCgpLm1lbW9pemVkU3RhdGU9ZSxbdCxlXX0sdXNlTXV0YWJsZVNvdXJjZTpmdW5jdGlvbigpe30sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXllLG89WnQoKTtpZihtZSl7aWYobj09PXZvaWQgMCl0aHJvdyBFcnJvcihfKDQwNykpO249bigpfWVsc2V7aWYobj10KCksTGU9PT1udWxsKXRocm93IEVycm9yKF8oMzQ5KSk7dnImMzB8fEJoKHIsdCxuKX1vLm1lbW9pemVkU3RhdGU9bjt2YXIgYT17dmFsdWU6bixnZXRTbmFwc2hvdDp0fTtyZXR1cm4gby5xdWV1ZT1hLG1mKFZoLmJpbmQobnVsbCxyLGEsZSksW2VdKSxyLmZsYWdzfD0yMDQ4LHdhKDksamguYmluZChudWxsLHIsYSxuLHQpLHZvaWQgMCxudWxsKSxufSx1c2VJZDpmdW5jdGlvbigpe3ZhciBlPVp0KCksdD1MZS5pZGVudGlmaWVyUHJlZml4O2lmKG1lKXt2YXIgbj1nbixyPW1uO249KHImfigxPDwzMi1VdChyKS0xKSkudG9TdHJpbmcoMzIpK24sdD0iOiIrdCsiUiIrbixuPXZhKyssMDxuJiYodCs9IkgiK24udG9TdHJpbmcoMzIpKSx0Kz0iOiJ9ZWxzZSBuPXh3KyssdD0iOiIrdCsiciIrbi50b1N0cmluZygzMikrIjoiO3JldHVybiBlLm1lbW9pemVkU3RhdGU9dH0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxOdz17cmVhZENvbnRleHQ6RHQsdXNlQ2FsbGJhY2s6WGgsdXNlQ29udGV4dDpEdCx1c2VFZmZlY3Q6ZmMsdXNlSW1wZXJhdGl2ZUhhbmRsZTpKaCx1c2VJbnNlcnRpb25FZmZlY3Q6WWgsdXNlTGF5b3V0RWZmZWN0OnFoLHVzZU1lbW86WmgsdXNlUmVkdWNlcjpGbCx1c2VSZWY6S2gsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gRmwoeWEpfSx1c2VEZWJ1Z1ZhbHVlOmhjLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9Q3QoKTtyZXR1cm4gZW0odCxBZS5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9RmwoeWEpWzBdLHQ9Q3QoKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOlVoLHVzZVN5bmNFeHRlcm5hbFN0b3JlOldoLHVzZUlkOnRtLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sVHc9e3JlYWRDb250ZXh0OkR0LHVzZUNhbGxiYWNrOlhoLHVzZUNvbnRleHQ6RHQsdXNlRWZmZWN0OmZjLHVzZUltcGVyYXRpdmVIYW5kbGU6SmgsdXNlSW5zZXJ0aW9uRWZmZWN0OlloLHVzZUxheW91dEVmZmVjdDpxaCx1c2VNZW1vOlpoLHVzZVJlZHVjZXI6VWwsdXNlUmVmOktoLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFVsKHlhKX0sdXNlRGVidWdWYWx1ZTpoYyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PUN0KCk7cmV0dXJuIEFlPT09bnVsbD90Lm1lbW9pemVkU3RhdGU9ZTplbSh0LEFlLm1lbW9pemVkU3RhdGUsZSl9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1VbCh5YSlbMF0sdD1DdCgpLm1lbW9pemVkU3RhdGU7cmV0dXJuW2UsdF19LHVzZU11dGFibGVTb3VyY2U6VWgsdXNlU3luY0V4dGVybmFsU3RvcmU6V2gsdXNlSWQ6dG0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfTtmdW5jdGlvbiB6dChlLHQpe2lmKGUmJmUuZGVmYXVsdFByb3BzKXt0PXdlKHt9LHQpLGU9ZS5kZWZhdWx0UHJvcHM7Zm9yKHZhciBuIGluIGUpdFtuXT09PXZvaWQgMCYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9cmV0dXJuIHR9ZnVuY3Rpb24gYnUoZSx0LG4scil7dD1lLm1lbW9pemVkU3RhdGUsbj1uKHIsdCksbj1uPT1udWxsP3Q6d2Uoe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixlLmxhbmVzPT09MCYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciB5cz17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybihlPWUuX3JlYWN0SW50ZXJuYWxzKT9icihlKT09PWU6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1aZSgpLG89S24oZSksYT12bihyLG8pO2EucGF5bG9hZD10LG4hPW51bGwmJihhLmNhbGxiYWNrPW4pLHQ9SG4oZSxhLG8pLHQhPT1udWxsJiYoV3QodCxlLG8sciksTWkodCxlLG8pKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgcj1aZSgpLG89S24oZSksYT12bihyLG8pO2EudGFnPTEsYS5wYXlsb2FkPXQsbiE9bnVsbCYmKGEuY2FsbGJhY2s9biksdD1IbihlLGEsbyksdCE9PW51bGwmJihXdCh0LGUsbyxyKSxNaSh0LGUsbykpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSx0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPVplKCkscj1LbihlKSxvPXZuKG4scik7by50YWc9Mix0IT1udWxsJiYoby5jYWxsYmFjaz10KSx0PUhuKGUsbyxyKSx0IT09bnVsbCYmKFd0KHQsZSxyLG4pLE1pKHQsZSxyKSl9fTtmdW5jdGlvbiBnZihlLHQsbixyLG8sYSxpKXtyZXR1cm4gZT1lLnN0YXRlTm9kZSx0eXBlb2YgZS5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixhLGkpOnQucHJvdG90eXBlJiZ0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hZGEobixyKXx8IWRhKG8sYSk6ITB9ZnVuY3Rpb24gYW0oZSx0LG4pe3ZhciByPSExLG89UW4sYT10LmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP2E9RHQoYSk6KG89c3QodCk/bXI6cWUuY3VycmVudCxyPXQuY29udGV4dFR5cGVzLGE9KHI9ciE9bnVsbCk/b28oZSxvKTpRbiksdD1uZXcgdChuLGEpLGUubWVtb2l6ZWRTdGF0ZT10LnN0YXRlIT09bnVsbCYmdC5zdGF0ZSE9PXZvaWQgMD90LnN0YXRlOm51bGwsdC51cGRhdGVyPXlzLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9byxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWEpLHR9ZnVuY3Rpb24gdmYoZSx0LG4scil7ZT10LnN0YXRlLHR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJnlzLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIGt1KGUsdCxuLHIpe3ZhciBvPWUuc3RhdGVOb2RlO28ucHJvcHM9bixvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxvLnJlZnM9e30saWMoZSk7dmFyIGE9dC5jb250ZXh0VHlwZTt0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP28uY29udGV4dD1EdChhKTooYT1zdCh0KT9tcjpxZS5jdXJyZW50LG8uY29udGV4dD1vbyhlLGEpKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxhPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBhPT0iZnVuY3Rpb24iJiYoYnUoZSx0LGEsbiksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHQ9by5zdGF0ZSx0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PW8uc3RhdGUmJnlzLmVucXVldWVSZXBsYWNlU3RhdGUobyxvLnN0YXRlLG51bGwpLG5zKGUsbixvLHIpLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIGxvKGUsdCl7dHJ5e3ZhciBuPSIiLHI9dDtkbyBuKz1uMChyKSxyPXIucmV0dXJuO3doaWxlKHIpO3ZhciBvPW59Y2F0Y2goYSl7bz1gCkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IGArYS5tZXNzYWdlK2AKYCthLnN0YWNrfXJldHVybnt2YWx1ZTplLHNvdXJjZTp0LHN0YWNrOm8sZGlnZXN0Om51bGx9fWZ1bmN0aW9uIFdsKGUsdCxuKXtyZXR1cm57dmFsdWU6ZSxzb3VyY2U6bnVsbCxzdGFjazpuPz9udWxsLGRpZ2VzdDp0Pz9udWxsfX1mdW5jdGlvbiBTdShlLHQpe3RyeXtjb25zb2xlLmVycm9yKHQudmFsdWUpfWNhdGNoKG4pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBufSl9fXZhciBEdz10eXBlb2YgV2Vha01hcD09ImZ1bmN0aW9uIj9XZWFrTWFwOk1hcDtmdW5jdGlvbiBpbShlLHQsbil7bj12bigtMSxuKSxuLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgcj10LnZhbHVlO3JldHVybiBuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7c3N8fChzcz0hMCxJdT1yKSxTdShlLHQpfSxufWZ1bmN0aW9uIHNtKGUsdCxuKXtuPXZuKC0xLG4pLG4udGFnPTM7dmFyIHI9ZS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIG89dC52YWx1ZTtuLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcihvKX0sbi5jYWxsYmFjaz1mdW5jdGlvbigpe1N1KGUsdCl9fXZhciBhPWUuc3RhdGVOb2RlO3JldHVybiBhIT09bnVsbCYmdHlwZW9mIGEuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7U3UoZSx0KSx0eXBlb2YgciE9ImZ1bmN0aW9uIiYmKEduPT09bnVsbD9Hbj1uZXcgU2V0KFt0aGlzXSk6R24uYWRkKHRoaXMpKTt2YXIgaT10LnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2godC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6aSE9PW51bGw/aToiIn0pfSksbn1mdW5jdGlvbiB5ZihlLHQsbil7dmFyIHI9ZS5waW5nQ2FjaGU7aWYocj09PW51bGwpe3I9ZS5waW5nQ2FjaGU9bmV3IER3O3ZhciBvPW5ldyBTZXQ7ci5zZXQodCxvKX1lbHNlIG89ci5nZXQodCksbz09PXZvaWQgMCYmKG89bmV3IFNldCxyLnNldCh0LG8pKTtvLmhhcyhuKXx8KG8uYWRkKG4pLGU9V3cuYmluZChudWxsLGUsdCxuKSx0LnRoZW4oZSxlKSl9ZnVuY3Rpb24gd2YoZSl7ZG97dmFyIHQ7aWYoKHQ9ZS50YWc9PT0xMykmJih0PWUubWVtb2l6ZWRTdGF0ZSx0PXQhPT1udWxsP3QuZGVoeWRyYXRlZCE9PW51bGw6ITApLHQpcmV0dXJuIGU7ZT1lLnJldHVybn13aGlsZShlIT09bnVsbCk7cmV0dXJuIG51bGx9ZnVuY3Rpb24geGYoZSx0LG4scixvKXtyZXR1cm4gZS5tb2RlJjE/KGUuZmxhZ3N8PTY1NTM2LGUubGFuZXM9byxlKTooZT09PXQ/ZS5mbGFnc3w9NjU1MzY6KGUuZmxhZ3N8PTEyOCxuLmZsYWdzfD0xMzEwNzIsbi5mbGFncyY9LTUyODA1LG4udGFnPT09MSYmKG4uYWx0ZXJuYXRlPT09bnVsbD9uLnRhZz0xNzoodD12bigtMSwxKSx0LnRhZz0yLEhuKG4sdCwxKSkpLG4ubGFuZXN8PTEpLGUpfXZhciBDdz1rbi5SZWFjdEN1cnJlbnRPd25lcixhdD0hMTtmdW5jdGlvbiBYZShlLHQsbixyKXt0LmNoaWxkPWU9PT1udWxsP0xoKHQsbnVsbCxuLHIpOmlvKHQsZS5jaGlsZCxuLHIpfWZ1bmN0aW9uIGJmKGUsdCxuLHIsbyl7bj1uLnJlbmRlcjt2YXIgYT10LnJlZjtyZXR1cm4gdG8odCxvKSxyPWRjKGUsdCxuLHIsYSxvKSxuPXBjKCksZSE9PW51bGwmJiFhdD8odC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX5vLGJuKGUsdCxvKSk6KG1lJiZuJiZadSh0KSx0LmZsYWdzfD0xLFhlKGUsdCxyLG8pLHQuY2hpbGQpfWZ1bmN0aW9uIGtmKGUsdCxuLHIsbyl7aWYoZT09PW51bGwpe3ZhciBhPW4udHlwZTtyZXR1cm4gdHlwZW9mIGE9PSJmdW5jdGlvbiImJiFrYyhhKSYmYS5kZWZhdWx0UHJvcHM9PT12b2lkIDAmJm4uY29tcGFyZT09PW51bGwmJm4uZGVmYXVsdFByb3BzPT09dm9pZCAwPyh0LnRhZz0xNSx0LnR5cGU9YSxsbShlLHQsYSxyLG8pKTooZT1VaShuLnR5cGUsbnVsbCxyLHQsdC5tb2RlLG8pLGUucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKX1pZihhPWUuY2hpbGQsIShlLmxhbmVzJm8pKXt2YXIgaT1hLm1lbW9pemVkUHJvcHM7aWYobj1uLmNvbXBhcmUsbj1uIT09bnVsbD9uOmRhLG4oaSxyKSYmZS5yZWY9PT10LnJlZilyZXR1cm4gYm4oZSx0LG8pfXJldHVybiB0LmZsYWdzfD0xLGU9WW4oYSxyKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiBsbShlLHQsbixyLG8pe2lmKGUhPT1udWxsKXt2YXIgYT1lLm1lbW9pemVkUHJvcHM7aWYoZGEoYSxyKSYmZS5yZWY9PT10LnJlZilpZihhdD0hMSx0LnBlbmRpbmdQcm9wcz1yPWEsKGUubGFuZXMmbykhPT0wKWUuZmxhZ3MmMTMxMDcyJiYoYXQ9ITApO2Vsc2UgcmV0dXJuIHQubGFuZXM9ZS5sYW5lcyxibihlLHQsbyl9cmV0dXJuIEV1KGUsdCxuLHIsbyl9ZnVuY3Rpb24gdW0oZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89ci5jaGlsZHJlbixhPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKHIubW9kZT09PSJoaWRkZW4iKWlmKCEodC5tb2RlJjEpKXQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0sY2UoUXIscHQpLHB0fD1uO2Vsc2V7aWYoIShuJjEwNzM3NDE4MjQpKXJldHVybiBlPWEhPT1udWxsP2EuYmFzZUxhbmVzfG46bix0LmxhbmVzPXQuY2hpbGRMYW5lcz0xMDczNzQxODI0LHQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmUsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0sdC51cGRhdGVRdWV1ZT1udWxsLGNlKFFyLHB0KSxwdHw9ZSxudWxsO3QubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjAsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH0scj1hIT09bnVsbD9hLmJhc2VMYW5lczpuLGNlKFFyLHB0KSxwdHw9cn1lbHNlIGEhPT1udWxsPyhyPWEuYmFzZUxhbmVzfG4sdC5tZW1vaXplZFN0YXRlPW51bGwpOnI9bixjZShRcixwdCkscHR8PXI7cmV0dXJuIFhlKGUsdCxvLG4pLHQuY2hpbGR9ZnVuY3Rpb24gY20oZSx0KXt2YXIgbj10LnJlZjsoZT09PW51bGwmJm4hPT1udWxsfHxlIT09bnVsbCYmZS5yZWYhPT1uKSYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKX1mdW5jdGlvbiBFdShlLHQsbixyLG8pe3ZhciBhPXN0KG4pP21yOnFlLmN1cnJlbnQ7cmV0dXJuIGE9b28odCxhKSx0byh0LG8pLG49ZGMoZSx0LG4scixhLG8pLHI9cGMoKSxlIT09bnVsbCYmIWF0Pyh0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fm8sYm4oZSx0LG8pKToobWUmJnImJlp1KHQpLHQuZmxhZ3N8PTEsWGUoZSx0LG4sbyksdC5jaGlsZCl9ZnVuY3Rpb24gU2YoZSx0LG4scixvKXtpZihzdChuKSl7dmFyIGE9ITA7SmkodCl9ZWxzZSBhPSExO2lmKHRvKHQsbyksdC5zdGF0ZU5vZGU9PT1udWxsKXppKGUsdCksYW0odCxuLHIpLGt1KHQsbixyLG8pLHI9ITA7ZWxzZSBpZihlPT09bnVsbCl7dmFyIGk9dC5zdGF0ZU5vZGUscz10Lm1lbW9pemVkUHJvcHM7aS5wcm9wcz1zO3ZhciBsPWkuY29udGV4dCx1PW4uY29udGV4dFR5cGU7dHlwZW9mIHU9PSJvYmplY3QiJiZ1IT09bnVsbD91PUR0KHUpOih1PXN0KG4pP21yOnFlLmN1cnJlbnQsdT1vbyh0LHUpKTt2YXIgZD1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxjPXR5cGVvZiBkPT0iZnVuY3Rpb24ifHx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIjtjfHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KHMhPT1yfHxsIT09dSkmJnZmKHQsaSxyLHUpLExuPSExO3ZhciBoPXQubWVtb2l6ZWRTdGF0ZTtpLnN0YXRlPWgsbnModCxyLGksbyksbD10Lm1lbW9pemVkU3RhdGUscyE9PXJ8fGghPT1sfHxpdC5jdXJyZW50fHxMbj8odHlwZW9mIGQ9PSJmdW5jdGlvbiImJihidSh0LG4sZCxyKSxsPXQubWVtb2l6ZWRTdGF0ZSksKHM9TG58fGdmKHQsbixzLHIsaCxsLHUpKT8oY3x8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24ifHwodHlwZW9mIGkuY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZpLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpKToodHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9bCksaS5wcm9wcz1yLGkuc3RhdGU9bCxpLmNvbnRleHQ9dSxyPXMpOih0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpLHI9ITEpfWVsc2V7aT10LnN0YXRlTm9kZSwkaChlLHQpLHM9dC5tZW1vaXplZFByb3BzLHU9dC50eXBlPT09dC5lbGVtZW50VHlwZT9zOnp0KHQudHlwZSxzKSxpLnByb3BzPXUsYz10LnBlbmRpbmdQcm9wcyxoPWkuY29udGV4dCxsPW4uY29udGV4dFR5cGUsdHlwZW9mIGw9PSJvYmplY3QiJiZsIT09bnVsbD9sPUR0KGwpOihsPXN0KG4pP21yOnFlLmN1cnJlbnQsbD1vbyh0LGwpKTt2YXIgdj1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsoZD10eXBlb2Ygdj09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiIpfHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9ImZ1bmN0aW9uInx8KHMhPT1jfHxoIT09bCkmJnZmKHQsaSxyLGwpLExuPSExLGg9dC5tZW1vaXplZFN0YXRlLGkuc3RhdGU9aCxucyh0LHIsaSxvKTt2YXIgbT10Lm1lbW9pemVkU3RhdGU7cyE9PWN8fGghPT1tfHxpdC5jdXJyZW50fHxMbj8odHlwZW9mIHY9PSJmdW5jdGlvbiImJihidSh0LG4sdixyKSxtPXQubWVtb2l6ZWRTdGF0ZSksKHU9TG58fGdmKHQsbix1LHIsaCxtLGwpfHwhMSk/KGR8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24iJiZ0eXBlb2YgaS5jb21wb25lbnRXaWxsVXBkYXRlIT0iZnVuY3Rpb24ifHwodHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmaS5jb21wb25lbnRXaWxsVXBkYXRlKHIsbSxsKSx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZT09ImZ1bmN0aW9uIiYmaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyLG0sbCkpLHR5cGVvZiBpLmNvbXBvbmVudERpZFVwZGF0ZT09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQpLHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9MTAyNCkpOih0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmg9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmaD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHQubWVtb2l6ZWRQcm9wcz1yLHQubWVtb2l6ZWRTdGF0ZT1tKSxpLnByb3BzPXIsaS5zdGF0ZT1tLGkuY29udGV4dD1sLHI9dSk6KHR5cGVvZiBpLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmaD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTQpLHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZoPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9MTAyNCkscj0hMSl9cmV0dXJuIE51KGUsdCxuLHIsYSxvKX1mdW5jdGlvbiBOdShlLHQsbixyLG8sYSl7Y20oZSx0KTt2YXIgaT0odC5mbGFncyYxMjgpIT09MDtpZighciYmIWkpcmV0dXJuIG8mJmxmKHQsbiwhMSksYm4oZSx0LGEpO3I9dC5zdGF0ZU5vZGUsQ3cuY3VycmVudD10O3ZhciBzPWkmJnR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9ImZ1bmN0aW9uIj9udWxsOnIucmVuZGVyKCk7cmV0dXJuIHQuZmxhZ3N8PTEsZSE9PW51bGwmJmk/KHQuY2hpbGQ9aW8odCxlLmNoaWxkLG51bGwsYSksdC5jaGlsZD1pbyh0LG51bGwscyxhKSk6WGUoZSx0LHMsYSksdC5tZW1vaXplZFN0YXRlPXIuc3RhdGUsbyYmbGYodCxuLCEwKSx0LmNoaWxkfWZ1bmN0aW9uIGRtKGUpe3ZhciB0PWUuc3RhdGVOb2RlO3QucGVuZGluZ0NvbnRleHQ/c2YoZSx0LnBlbmRpbmdDb250ZXh0LHQucGVuZGluZ0NvbnRleHQhPT10LmNvbnRleHQpOnQuY29udGV4dCYmc2YoZSx0LmNvbnRleHQsITEpLHNjKGUsdC5jb250YWluZXJJbmZvKX1mdW5jdGlvbiBFZihlLHQsbixyLG8pe3JldHVybiBhbygpLHRjKG8pLHQuZmxhZ3N8PTI1NixYZShlLHQsbixyKSx0LmNoaWxkfXZhciBUdT17ZGVoeWRyYXRlZDpudWxsLHRyZWVDb250ZXh0Om51bGwscmV0cnlMYW5lOjB9O2Z1bmN0aW9uIER1KGUpe3JldHVybntiYXNlTGFuZXM6ZSxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfX1mdW5jdGlvbiBwbShlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz12ZS5jdXJyZW50LGE9ITEsaT0odC5mbGFncyYxMjgpIT09MCxzO2lmKChzPWkpfHwocz1lIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlPT09bnVsbD8hMToobyYyKSE9PTApLHM/KGE9ITAsdC5mbGFncyY9LTEyOSk6KGU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGUhPT1udWxsKSYmKG98PTEpLGNlKHZlLG8mMSksZT09PW51bGwpcmV0dXJuIHd1KHQpLGU9dC5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiYoZT1lLmRlaHlkcmF0ZWQsZSE9PW51bGwpPyh0Lm1vZGUmMT9lLmRhdGE9PT0iJCEiP3QubGFuZXM9ODp0LmxhbmVzPTEwNzM3NDE4MjQ6dC5sYW5lcz0xLG51bGwpOihpPXIuY2hpbGRyZW4sZT1yLmZhbGxiYWNrLGE/KHI9dC5tb2RlLGE9dC5jaGlsZCxpPXttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOml9LCEociYxKSYmYSE9PW51bGw/KGEuY2hpbGRMYW5lcz0wLGEucGVuZGluZ1Byb3BzPWkpOmE9YnMoaSxyLDAsbnVsbCksZT1ocihlLHIsbixudWxsKSxhLnJldHVybj10LGUucmV0dXJuPXQsYS5zaWJsaW5nPWUsdC5jaGlsZD1hLHQuY2hpbGQubWVtb2l6ZWRTdGF0ZT1EdShuKSx0Lm1lbW9pemVkU3RhdGU9VHUsZSk6bWModCxpKSk7aWYobz1lLm1lbW9pemVkU3RhdGUsbyE9PW51bGwmJihzPW8uZGVoeWRyYXRlZCxzIT09bnVsbCkpcmV0dXJuIF93KGUsdCxpLHIscyxvLG4pO2lmKGEpe2E9ci5mYWxsYmFjayxpPXQubW9kZSxvPWUuY2hpbGQscz1vLnNpYmxpbmc7dmFyIGw9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46ci5jaGlsZHJlbn07cmV0dXJuIShpJjEpJiZ0LmNoaWxkIT09bz8ocj10LmNoaWxkLHIuY2hpbGRMYW5lcz0wLHIucGVuZGluZ1Byb3BzPWwsdC5kZWxldGlvbnM9bnVsbCk6KHI9WW4obyxsKSxyLnN1YnRyZWVGbGFncz1vLnN1YnRyZWVGbGFncyYxNDY4MDA2NCkscyE9PW51bGw/YT1ZbihzLGEpOihhPWhyKGEsaSxuLG51bGwpLGEuZmxhZ3N8PTIpLGEucmV0dXJuPXQsci5yZXR1cm49dCxyLnNpYmxpbmc9YSx0LmNoaWxkPXIscj1hLGE9dC5jaGlsZCxpPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSxpPWk9PT1udWxsP0R1KG4pOntiYXNlTGFuZXM6aS5iYXNlTGFuZXN8bixjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczppLnRyYW5zaXRpb25zfSxhLm1lbW9pemVkU3RhdGU9aSxhLmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzJn5uLHQubWVtb2l6ZWRTdGF0ZT1UdSxyfXJldHVybiBhPWUuY2hpbGQsZT1hLnNpYmxpbmcscj1ZbihhLHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSksISh0Lm1vZGUmMSkmJihyLmxhbmVzPW4pLHIucmV0dXJuPXQsci5zaWJsaW5nPW51bGwsZSE9PW51bGwmJihuPXQuZGVsZXRpb25zLG49PT1udWxsPyh0LmRlbGV0aW9ucz1bZV0sdC5mbGFnc3w9MTYpOm4ucHVzaChlKSksdC5jaGlsZD1yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHJ9ZnVuY3Rpb24gbWMoZSx0KXtyZXR1cm4gdD1icyh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46dH0sZS5tb2RlLDAsbnVsbCksdC5yZXR1cm49ZSxlLmNoaWxkPXR9ZnVuY3Rpb24gQ2koZSx0LG4scil7cmV0dXJuIHIhPT1udWxsJiZ0YyhyKSxpbyh0LGUuY2hpbGQsbnVsbCxuKSxlPW1jKHQsdC5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGUuZmxhZ3N8PTIsdC5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBfdyhlLHQsbixyLG8sYSxpKXtpZihuKXJldHVybiB0LmZsYWdzJjI1Nj8odC5mbGFncyY9LTI1NyxyPVdsKEVycm9yKF8oNDIyKSkpLENpKGUsdCxpLHIpKTp0Lm1lbW9pemVkU3RhdGUhPT1udWxsPyh0LmNoaWxkPWUuY2hpbGQsdC5mbGFnc3w9MTI4LG51bGwpOihhPXIuZmFsbGJhY2ssbz10Lm1vZGUscj1icyh7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0sbywwLG51bGwpLGE9aHIoYSxvLGksbnVsbCksYS5mbGFnc3w9MixyLnJldHVybj10LGEucmV0dXJuPXQsci5zaWJsaW5nPWEsdC5jaGlsZD1yLHQubW9kZSYxJiZpbyh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkLm1lbW9pemVkU3RhdGU9RHUoaSksdC5tZW1vaXplZFN0YXRlPVR1LGEpO2lmKCEodC5tb2RlJjEpKXJldHVybiBDaShlLHQsaSxudWxsKTtpZihvLmRhdGE9PT0iJCEiKXtpZihyPW8ubmV4dFNpYmxpbmcmJm8ubmV4dFNpYmxpbmcuZGF0YXNldCxyKXZhciBzPXIuZGdzdDtyZXR1cm4gcj1zLGE9RXJyb3IoXyg0MTkpKSxyPVdsKGEscix2b2lkIDApLENpKGUsdCxpLHIpfWlmKHM9KGkmZS5jaGlsZExhbmVzKSE9PTAsYXR8fHMpe2lmKHI9TGUsciE9PW51bGwpe3N3aXRjaChpJi1pKXtjYXNlIDQ6bz0yO2JyZWFrO2Nhc2UgMTY6bz04O2JyZWFrO2Nhc2UgNjQ6Y2FzZSAxMjg6Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDE2Nzc3MjE2OmNhc2UgMzM1NTQ0MzI6Y2FzZSA2NzEwODg2NDpvPTMyO2JyZWFrO2Nhc2UgNTM2ODcwOTEyOm89MjY4NDM1NDU2O2JyZWFrO2RlZmF1bHQ6bz0wfW89byYoci5zdXNwZW5kZWRMYW5lc3xpKT8wOm8sbyE9PTAmJm8hPT1hLnJldHJ5TGFuZSYmKGEucmV0cnlMYW5lPW8seG4oZSxvKSxXdChyLGUsbywtMSkpfXJldHVybiBiYygpLHI9V2woRXJyb3IoXyg0MjEpKSksQ2koZSx0LGkscil9cmV0dXJuIG8uZGF0YT09PSIkPyI/KHQuZmxhZ3N8PTEyOCx0LmNoaWxkPWUuY2hpbGQsdD1Cdy5iaW5kKG51bGwsZSksby5fcmVhY3RSZXRyeT10LG51bGwpOihlPWEudHJlZUNvbnRleHQsZnQ9Vm4oby5uZXh0U2libGluZyksaHQ9dCxtZT0hMCxGdD1udWxsLGUhPT1udWxsJiYoU3RbRXQrK109bW4sU3RbRXQrK109Z24sU3RbRXQrK109Z3IsbW49ZS5pZCxnbj1lLm92ZXJmbG93LGdyPXQpLHQ9bWModCxyLmNoaWxkcmVuKSx0LmZsYWdzfD00MDk2LHQpfWZ1bmN0aW9uIE5mKGUsdCxuKXtlLmxhbmVzfD10O3ZhciByPWUuYWx0ZXJuYXRlO3IhPT1udWxsJiYoci5sYW5lc3w9dCkseHUoZS5yZXR1cm4sdCxuKX1mdW5jdGlvbiBCbChlLHQsbixyLG8pe3ZhciBhPWUubWVtb2l6ZWRTdGF0ZTthPT09bnVsbD9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOnQscmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6bix0YWlsTW9kZTpvfTooYS5pc0JhY2t3YXJkcz10LGEucmVuZGVyaW5nPW51bGwsYS5yZW5kZXJpbmdTdGFydFRpbWU9MCxhLmxhc3Q9cixhLnRhaWw9bixhLnRhaWxNb2RlPW8pfWZ1bmN0aW9uIGZtKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXIucmV2ZWFsT3JkZXIsYT1yLnRhaWw7aWYoWGUoZSx0LHIuY2hpbGRyZW4sbikscj12ZS5jdXJyZW50LHImMilyPXImMXwyLHQuZmxhZ3N8PTEyODtlbHNle2lmKGUhPT1udWxsJiZlLmZsYWdzJjEyOCllOmZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihlLnRhZz09PTEzKWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJk5mKGUsbix0KTtlbHNlIGlmKGUudGFnPT09MTkpTmYoZSxuLHQpO2Vsc2UgaWYoZS5jaGlsZCE9PW51bGwpe2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkO2NvbnRpbnVlfWlmKGU9PT10KWJyZWFrIGU7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybj09PXQpYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9ciY9MX1pZihjZSh2ZSxyKSwhKHQubW9kZSYxKSl0Lm1lbW9pemVkU3RhdGU9bnVsbDtlbHNlIHN3aXRjaChvKXtjYXNlImZvcndhcmRzIjpmb3Iobj10LmNoaWxkLG89bnVsbDtuIT09bnVsbDspZT1uLmFsdGVybmF0ZSxlIT09bnVsbCYmcnMoZSk9PT1udWxsJiYobz1uKSxuPW4uc2libGluZztuPW8sbj09PW51bGw/KG89dC5jaGlsZCx0LmNoaWxkPW51bGwpOihvPW4uc2libGluZyxuLnNpYmxpbmc9bnVsbCksQmwodCwhMSxvLG4sYSk7YnJlYWs7Y2FzZSJiYWNrd2FyZHMiOmZvcihuPW51bGwsbz10LmNoaWxkLHQuY2hpbGQ9bnVsbDtvIT09bnVsbDspe2lmKGU9by5hbHRlcm5hdGUsZSE9PW51bGwmJnJzKGUpPT09bnVsbCl7dC5jaGlsZD1vO2JyZWFrfWU9by5zaWJsaW5nLG8uc2libGluZz1uLG49byxvPWV9QmwodCwhMCxuLG51bGwsYSk7YnJlYWs7Y2FzZSJ0b2dldGhlciI6QmwodCwhMSxudWxsLG51bGwsdm9pZCAwKTticmVhaztkZWZhdWx0OnQubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIHppKGUsdCl7ISh0Lm1vZGUmMSkmJmUhPT1udWxsJiYoZS5hbHRlcm5hdGU9bnVsbCx0LmFsdGVybmF0ZT1udWxsLHQuZmxhZ3N8PTIpfWZ1bmN0aW9uIGJuKGUsdCxuKXtpZihlIT09bnVsbCYmKHQuZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKSx5cnw9dC5sYW5lcywhKG4mdC5jaGlsZExhbmVzKSlyZXR1cm4gbnVsbDtpZihlIT09bnVsbCYmdC5jaGlsZCE9PWUuY2hpbGQpdGhyb3cgRXJyb3IoXygxNTMpKTtpZih0LmNoaWxkIT09bnVsbCl7Zm9yKGU9dC5jaGlsZCxuPVluKGUsZS5wZW5kaW5nUHJvcHMpLHQuY2hpbGQ9bixuLnJldHVybj10O2Uuc2libGluZyE9PW51bGw7KWU9ZS5zaWJsaW5nLG49bi5zaWJsaW5nPVluKGUsZS5wZW5kaW5nUHJvcHMpLG4ucmV0dXJuPXQ7bi5zaWJsaW5nPW51bGx9cmV0dXJuIHQuY2hpbGR9ZnVuY3Rpb24gQXcoZSx0LG4pe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOmRtKHQpLGFvKCk7YnJlYWs7Y2FzZSA1OkZoKHQpO2JyZWFrO2Nhc2UgMTpzdCh0LnR5cGUpJiZKaSh0KTticmVhaztjYXNlIDQ6c2ModCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOnZhciByPXQudHlwZS5fY29udGV4dCxvPXQubWVtb2l6ZWRQcm9wcy52YWx1ZTtjZShlcyxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1vO2JyZWFrO2Nhc2UgMTM6aWYocj10Lm1lbW9pemVkU3RhdGUsciE9PW51bGwpcmV0dXJuIHIuZGVoeWRyYXRlZCE9PW51bGw/KGNlKHZlLHZlLmN1cnJlbnQmMSksdC5mbGFnc3w9MTI4LG51bGwpOm4mdC5jaGlsZC5jaGlsZExhbmVzP3BtKGUsdCxuKTooY2UodmUsdmUuY3VycmVudCYxKSxlPWJuKGUsdCxuKSxlIT09bnVsbD9lLnNpYmxpbmc6bnVsbCk7Y2UodmUsdmUuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmlmKHI9KG4mdC5jaGlsZExhbmVzKSE9PTAsZS5mbGFncyYxMjgpe2lmKHIpcmV0dXJuIGZtKGUsdCxuKTt0LmZsYWdzfD0xMjh9aWYobz10Lm1lbW9pemVkU3RhdGUsbyE9PW51bGwmJihvLnJlbmRlcmluZz1udWxsLG8udGFpbD1udWxsLG8ubGFzdEVmZmVjdD1udWxsKSxjZSh2ZSx2ZS5jdXJyZW50KSxyKWJyZWFrO3JldHVybiBudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gdC5sYW5lcz0wLHVtKGUsdCxuKX1yZXR1cm4gYm4oZSx0LG4pfXZhciBobSxDdSxtbSxnbTtobT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10LmNoaWxkO24hPT1udWxsOyl7aWYobi50YWc9PT01fHxuLnRhZz09PTYpZS5hcHBlbmRDaGlsZChuLnN0YXRlTm9kZSk7ZWxzZSBpZihuLnRhZyE9PTQmJm4uY2hpbGQhPT1udWxsKXtuLmNoaWxkLnJldHVybj1uLG49bi5jaGlsZDtjb250aW51ZX1pZihuPT09dClicmVhaztmb3IoO24uc2libGluZz09PW51bGw7KXtpZihuLnJldHVybj09PW51bGx8fG4ucmV0dXJuPT09dClyZXR1cm47bj1uLnJldHVybn1uLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nfX07Q3U9ZnVuY3Rpb24oKXt9O21tPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUubWVtb2l6ZWRQcm9wcztpZihvIT09cil7ZT10LnN0YXRlTm9kZSxwcihubi5jdXJyZW50KTt2YXIgYT1udWxsO3N3aXRjaChuKXtjYXNlImlucHV0IjpvPVFsKGUsbykscj1RbChlLHIpLGE9W107YnJlYWs7Y2FzZSJzZWxlY3QiOm89d2Uoe30sbyx7dmFsdWU6dm9pZCAwfSkscj13ZSh7fSxyLHt2YWx1ZTp2b2lkIDB9KSxhPVtdO2JyZWFrO2Nhc2UidGV4dGFyZWEiOm89WmwoZSxvKSxyPVpsKGUsciksYT1bXTticmVhaztkZWZhdWx0OnR5cGVvZiBvLm9uQ2xpY2shPSJmdW5jdGlvbiImJnR5cGVvZiByLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihlLm9uY2xpY2s9cWkpfXR1KG4scik7dmFyIGk7bj1udWxsO2Zvcih1IGluIG8paWYoIXIuaGFzT3duUHJvcGVydHkodSkmJm8uaGFzT3duUHJvcGVydHkodSkmJm9bdV0hPW51bGwpaWYodT09PSJzdHlsZSIpe3ZhciBzPW9bdV07Zm9yKGkgaW4gcylzLmhhc093blByb3BlcnR5KGkpJiYobnx8KG49e30pLG5baV09IiIpfWVsc2UgdSE9PSJkYW5nZXJvdXNseVNldElubmVySFRNTCImJnUhPT0iY2hpbGRyZW4iJiZ1IT09InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyImJnUhPT0ic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiYmdSE9PSJhdXRvRm9jdXMiJiYob2EuaGFzT3duUHJvcGVydHkodSk/YXx8KGE9W10pOihhPWF8fFtdKS5wdXNoKHUsbnVsbCkpO2Zvcih1IGluIHIpe3ZhciBsPXJbdV07aWYocz1vPy5bdV0sci5oYXNPd25Qcm9wZXJ0eSh1KSYmbCE9PXMmJihsIT1udWxsfHxzIT1udWxsKSlpZih1PT09InN0eWxlIilpZihzKXtmb3IoaSBpbiBzKSFzLmhhc093blByb3BlcnR5KGkpfHxsJiZsLmhhc093blByb3BlcnR5KGkpfHwobnx8KG49e30pLG5baV09IiIpO2ZvcihpIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShpKSYmc1tpXSE9PWxbaV0mJihufHwobj17fSksbltpXT1sW2ldKX1lbHNlIG58fChhfHwoYT1bXSksYS5wdXNoKHUsbikpLG49bDtlbHNlIHU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhsPWw/bC5fX2h0bWw6dm9pZCAwLHM9cz9zLl9faHRtbDp2b2lkIDAsbCE9bnVsbCYmcyE9PWwmJihhPWF8fFtdKS5wdXNoKHUsbCkpOnU9PT0iY2hpbGRyZW4iP3R5cGVvZiBsIT0ic3RyaW5nIiYmdHlwZW9mIGwhPSJudW1iZXIifHwoYT1hfHxbXSkucHVzaCh1LCIiK2wpOnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYob2EuaGFzT3duUHJvcGVydHkodSk/KGwhPW51bGwmJnU9PT0ib25TY3JvbGwiJiZmZSgic2Nyb2xsIixlKSxhfHxzPT09bHx8KGE9W10pKTooYT1hfHxbXSkucHVzaCh1LGwpKX1uJiYoYT1hfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciB1PWE7KHQudXBkYXRlUXVldWU9dSkmJih0LmZsYWdzfD00KX19O2dtPWZ1bmN0aW9uKGUsdCxuLHIpe24hPT1yJiYodC5mbGFnc3w9NCl9O2Z1bmN0aW9uIEJvKGUsdCl7aWYoIW1lKXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciBuPW51bGw7dCE9PW51bGw7KXQuYWx0ZXJuYXRlIT09bnVsbCYmKG49dCksdD10LnNpYmxpbmc7bj09PW51bGw/ZS50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49ZS50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP3R8fGUudGFpbD09PW51bGw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gS2UoZSl7dmFyIHQ9ZS5hbHRlcm5hdGUhPT1udWxsJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsbj0wLHI9MDtpZih0KWZvcih2YXIgbz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1vLmZsYWdzJjE0NjgwMDY0LG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7ZWxzZSBmb3Iobz1lLmNoaWxkO28hPT1udWxsOylufD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyxyfD1vLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7cmV0dXJuIGUuc3VidHJlZUZsYWdzfD1yLGUuY2hpbGRMYW5lcz1uLHR9ZnVuY3Rpb24gT3coZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzO3N3aXRjaChlYyh0KSx0LnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIEtlKHQpLG51bGw7Y2FzZSAxOnJldHVybiBzdCh0LnR5cGUpJiZRaSgpLEtlKHQpLG51bGw7Y2FzZSAzOnJldHVybiByPXQuc3RhdGVOb2RlLHNvKCksaGUoaXQpLGhlKHFlKSx1YygpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLChlPT09bnVsbHx8ZS5jaGlsZD09PW51bGwpJiYoVGkodCk/dC5mbGFnc3w9NDplPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmISh0LmZsYWdzJjI1Nil8fCh0LmZsYWdzfD0xMDI0LEZ0IT09bnVsbCYmKEx1KEZ0KSxGdD1udWxsKSkpLEN1KGUsdCksS2UodCksbnVsbDtjYXNlIDU6bGModCk7dmFyIG89cHIoZ2EuY3VycmVudCk7aWYobj10LnR5cGUsZSE9PW51bGwmJnQuc3RhdGVOb2RlIT1udWxsKW1tKGUsdCxuLHIsbyksZS5yZWYhPT10LnJlZiYmKHQuZmxhZ3N8PTUxMix0LmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZih0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoXygxNjYpKTtyZXR1cm4gS2UodCksbnVsbH1pZihlPXByKG5uLmN1cnJlbnQpLFRpKHQpKXtyPXQuc3RhdGVOb2RlLG49dC50eXBlO3ZhciBhPXQubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltlbl09dCxyW2hhXT1hLGU9KHQubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOmZlKCJjYW5jZWwiLHIpLGZlKCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpmZSgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPFlvLmxlbmd0aDtvKyspZmUoWW9bb10scik7YnJlYWs7Y2FzZSJzb3VyY2UiOmZlKCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6ZmUoImVycm9yIixyKSxmZSgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjpmZSgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0IjpScChyLGEpLGZlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWEubXVsdGlwbGV9LGZlKCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjpNcChyLGEpLGZlKCJpbnZhbGlkIixyKX10dShuLGEpLG89bnVsbDtmb3IodmFyIGkgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGkpKXt2YXIgcz1hW2ldO2k9PT0iY2hpbGRyZW4iP3R5cGVvZiBzPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09cyYmKGEuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJk5pKHIudGV4dENvbnRlbnQscyxlKSxvPVsiY2hpbGRyZW4iLHNdKTp0eXBlb2Ygcz09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIitzJiYoYS5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmTmkoci50ZXh0Q29udGVudCxzLGUpLG89WyJjaGlsZHJlbiIsIiIrc10pOm9hLmhhc093blByb3BlcnR5KGkpJiZzIT1udWxsJiZpPT09Im9uU2Nyb2xsIiYmZmUoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOmZpKHIpLElwKHIsYSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZmkociksUHAocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBhLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9cWkpfXI9byx0LnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJih0LmZsYWdzfD00KX1lbHNle2k9by5ub2RlVHlwZT09PTk/bzpvLm93bmVyRG9jdW1lbnQsZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKGU9VmYobikpLGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyhlPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsZT1lLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj9lPWkuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KGU9aS5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGk9ZSxyLm11bHRpcGxlP2kubXVsdGlwbGU9ITA6ci5zaXplJiYoaS5zaXplPXIuc2l6ZSkpKTplPWkuY3JlYXRlRWxlbWVudE5TKGUsbiksZVtlbl09dCxlW2hhXT1yLGhtKGUsdCwhMSwhMSksdC5zdGF0ZU5vZGU9ZTtlOntzd2l0Y2goaT1udShuLHIpLG4pe2Nhc2UiZGlhbG9nIjpmZSgiY2FuY2VsIixlKSxmZSgiY2xvc2UiLGUpLG89cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOmZlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKG89MDtvPFlvLmxlbmd0aDtvKyspZmUoWW9bb10sZSk7bz1yO2JyZWFrO2Nhc2Uic291cmNlIjpmZSgiZXJyb3IiLGUpLG89cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpmZSgiZXJyb3IiLGUpLGZlKCJsb2FkIixlKSxvPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjpmZSgidG9nZ2xlIixlKSxvPXI7YnJlYWs7Y2FzZSJpbnB1dCI6UnAoZSxyKSxvPVFsKGUsciksZmUoImludmFsaWQiLGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpvPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxvPXdlKHt9LHIse3ZhbHVlOnZvaWQgMH0pLGZlKCJpbnZhbGlkIixlKTticmVhaztjYXNlInRleHRhcmVhIjpNcChlLHIpLG89WmwoZSxyKSxmZSgiaW52YWxpZCIsZSk7YnJlYWs7ZGVmYXVsdDpvPXJ9dHUobixvKSxzPW87Zm9yKGEgaW4gcylpZihzLmhhc093blByb3BlcnR5KGEpKXt2YXIgbD1zW2FdO2E9PT0ic3R5bGUiP0tmKGUsbCk6YT09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGw9bD9sLl9faHRtbDp2b2lkIDAsbCE9bnVsbCYmSGYoZSxsKSk6YT09PSJjaGlsZHJlbiI/dHlwZW9mIGw9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8bCE9PSIiKSYmYWEoZSxsKTp0eXBlb2YgbD09Im51bWJlciImJmFhKGUsIiIrbCk6YSE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZhIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmEhPT0iYXV0b0ZvY3VzIiYmKG9hLmhhc093blByb3BlcnR5KGEpP2whPW51bGwmJmE9PT0ib25TY3JvbGwiJiZmZSgic2Nyb2xsIixlKTpsIT1udWxsJiZGdShlLGEsbCxpKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOmZpKGUpLElwKGUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6ZmkoZSksUHAoZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJmUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrcW4oci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0IjplLm11bHRpcGxlPSEhci5tdWx0aXBsZSxhPXIudmFsdWUsYSE9bnVsbD9KcihlLCEhci5tdWx0aXBsZSxhLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmSnIoZSwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIG8ub25DbGljaz09ImZ1bmN0aW9uIiYmKGUub25jbGljaz1xaSl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJih0LmZsYWdzfD00KX10LnJlZiE9PW51bGwmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIEtlKHQpLG51bGw7Y2FzZSA2OmlmKGUmJnQuc3RhdGVOb2RlIT1udWxsKWdtKGUsdCxlLm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJnQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihfKDE2NikpO2lmKG49cHIoZ2EuY3VycmVudCkscHIobm4uY3VycmVudCksVGkodCkpe2lmKHI9dC5zdGF0ZU5vZGUsbj10Lm1lbW9pemVkUHJvcHMscltlbl09dCwoYT1yLm5vZGVWYWx1ZSE9PW4pJiYoZT1odCxlIT09bnVsbCkpc3dpdGNoKGUudGFnKXtjYXNlIDM6Tmkoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OmUubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmTmkoci5ub2RlVmFsdWUsbiwoZS5tb2RlJjEpIT09MCl9YSYmKHQuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbZW5dPXQsdC5zdGF0ZU5vZGU9cn1yZXR1cm4gS2UodCksbnVsbDtjYXNlIDEzOmlmKGhlKHZlKSxyPXQubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihtZSYmZnQhPT1udWxsJiZ0Lm1vZGUmMSYmISh0LmZsYWdzJjEyOCkpTWgoKSxhbygpLHQuZmxhZ3N8PTk4NTYwLGE9ITE7ZWxzZSBpZihhPVRpKHQpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihlPT09bnVsbCl7aWYoIWEpdGhyb3cgRXJyb3IoXygzMTgpKTtpZihhPXQubWVtb2l6ZWRTdGF0ZSxhPWEhPT1udWxsP2EuZGVoeWRyYXRlZDpudWxsLCFhKXRocm93IEVycm9yKF8oMzE3KSk7YVtlbl09dH1lbHNlIGFvKCksISh0LmZsYWdzJjEyOCkmJih0Lm1lbW9pemVkU3RhdGU9bnVsbCksdC5mbGFnc3w9NDtLZSh0KSxhPSExfWVsc2UgRnQhPT1udWxsJiYoTHUoRnQpLEZ0PW51bGwpLGE9ITA7aWYoIWEpcmV0dXJuIHQuZmxhZ3MmNjU1MzY/dDpudWxsfXJldHVybiB0LmZsYWdzJjEyOD8odC5sYW5lcz1uLHQpOihyPXIhPT1udWxsLHIhPT0oZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYodC5jaGlsZC5mbGFnc3w9ODE5Mix0Lm1vZGUmMSYmKGU9PT1udWxsfHx2ZS5jdXJyZW50JjE/T2U9PT0wJiYoT2U9Myk6YmMoKSkpLHQudXBkYXRlUXVldWUhPT1udWxsJiYodC5mbGFnc3w9NCksS2UodCksbnVsbCk7Y2FzZSA0OnJldHVybiBzbygpLEN1KGUsdCksZT09PW51bGwmJnBhKHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLEtlKHQpLG51bGw7Y2FzZSAxMDpyZXR1cm4gb2ModC50eXBlLl9jb250ZXh0KSxLZSh0KSxudWxsO2Nhc2UgMTc6cmV0dXJuIHN0KHQudHlwZSkmJlFpKCksS2UodCksbnVsbDtjYXNlIDE5OmlmKGhlKHZlKSxhPXQubWVtb2l6ZWRTdGF0ZSxhPT09bnVsbClyZXR1cm4gS2UodCksbnVsbDtpZihyPSh0LmZsYWdzJjEyOCkhPT0wLGk9YS5yZW5kZXJpbmcsaT09PW51bGwpaWYocilCbyhhLCExKTtlbHNle2lmKE9lIT09MHx8ZSE9PW51bGwmJmUuZmxhZ3MmMTI4KWZvcihlPXQuY2hpbGQ7ZSE9PW51bGw7KXtpZihpPXJzKGUpLGkhPT1udWxsKXtmb3IodC5mbGFnc3w9MTI4LEJvKGEsITEpLHI9aS51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHQudXBkYXRlUXVldWU9cix0LmZsYWdzfD00KSx0LnN1YnRyZWVGbGFncz0wLHI9bixuPXQuY2hpbGQ7biE9PW51bGw7KWE9bixlPXIsYS5mbGFncyY9MTQ2ODAwNjYsaT1hLmFsdGVybmF0ZSxpPT09bnVsbD8oYS5jaGlsZExhbmVzPTAsYS5sYW5lcz1lLGEuY2hpbGQ9bnVsbCxhLnN1YnRyZWVGbGFncz0wLGEubWVtb2l6ZWRQcm9wcz1udWxsLGEubWVtb2l6ZWRTdGF0ZT1udWxsLGEudXBkYXRlUXVldWU9bnVsbCxhLmRlcGVuZGVuY2llcz1udWxsLGEuc3RhdGVOb2RlPW51bGwpOihhLmNoaWxkTGFuZXM9aS5jaGlsZExhbmVzLGEubGFuZXM9aS5sYW5lcyxhLmNoaWxkPWkuY2hpbGQsYS5zdWJ0cmVlRmxhZ3M9MCxhLmRlbGV0aW9ucz1udWxsLGEubWVtb2l6ZWRQcm9wcz1pLm1lbW9pemVkUHJvcHMsYS5tZW1vaXplZFN0YXRlPWkubWVtb2l6ZWRTdGF0ZSxhLnVwZGF0ZVF1ZXVlPWkudXBkYXRlUXVldWUsYS50eXBlPWkudHlwZSxlPWkuZGVwZW5kZW5jaWVzLGEuZGVwZW5kZW5jaWVzPWU9PT1udWxsP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIGNlKHZlLHZlLmN1cnJlbnQmMXwyKSx0LmNoaWxkfWU9ZS5zaWJsaW5nfWEudGFpbCE9PW51bGwmJmtlKCk+dW8mJih0LmZsYWdzfD0xMjgscj0hMCxCbyhhLCExKSx0LmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYoZT1ycyhpKSxlIT09bnVsbCl7aWYodC5mbGFnc3w9MTI4LHI9ITAsbj1lLnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYodC51cGRhdGVRdWV1ZT1uLHQuZmxhZ3N8PTQpLEJvKGEsITApLGEudGFpbD09PW51bGwmJmEudGFpbE1vZGU9PT0iaGlkZGVuIiYmIWkuYWx0ZXJuYXRlJiYhbWUpcmV0dXJuIEtlKHQpLG51bGx9ZWxzZSAyKmtlKCktYS5yZW5kZXJpbmdTdGFydFRpbWU+dW8mJm4hPT0xMDczNzQxODI0JiYodC5mbGFnc3w9MTI4LHI9ITAsQm8oYSwhMSksdC5sYW5lcz00MTk0MzA0KTthLmlzQmFja3dhcmRzPyhpLnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPWkpOihuPWEubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9aTp0LmNoaWxkPWksYS5sYXN0PWkpfXJldHVybiBhLnRhaWwhPT1udWxsPyh0PWEudGFpbCxhLnJlbmRlcmluZz10LGEudGFpbD10LnNpYmxpbmcsYS5yZW5kZXJpbmdTdGFydFRpbWU9a2UoKSx0LnNpYmxpbmc9bnVsbCxuPXZlLmN1cnJlbnQsY2UodmUscj9uJjF8MjpuJjEpLHQpOihLZSh0KSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHhjKCkscj10Lm1lbW9pemVkU3RhdGUhPT1udWxsLGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKHQuZmxhZ3N8PTgxOTIpLHImJnQubW9kZSYxP3B0JjEwNzM3NDE4MjQmJihLZSh0KSx0LnN1YnRyZWVGbGFncyY2JiYodC5mbGFnc3w9ODE5MikpOktlKHQpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKF8oMTU2LHQudGFnKSl9ZnVuY3Rpb24gUncoZSx0KXtzd2l0Y2goZWModCksdC50YWcpe2Nhc2UgMTpyZXR1cm4gc3QodC50eXBlKSYmUWkoKSxlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDM6cmV0dXJuIHNvKCksaGUoaXQpLGhlKHFlKSx1YygpLGU9dC5mbGFncyxlJjY1NTM2JiYhKGUmMTI4KT8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDU6cmV0dXJuIGxjKHQpLG51bGw7Y2FzZSAxMzppZihoZSh2ZSksZT10Lm1lbW9pemVkU3RhdGUsZSE9PW51bGwmJmUuZGVoeWRyYXRlZCE9PW51bGwpe2lmKHQuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihfKDM0MCkpO2FvKCl9cmV0dXJuIGU9dC5mbGFncyxlJjY1NTM2Pyh0LmZsYWdzPWUmLTY1NTM3fDEyOCx0KTpudWxsO2Nhc2UgMTk6cmV0dXJuIGhlKHZlKSxudWxsO2Nhc2UgNDpyZXR1cm4gc28oKSxudWxsO2Nhc2UgMTA6cmV0dXJuIG9jKHQudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHhjKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBfaT0hMSxZZT0hMSxJdz10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxMPW51bGw7ZnVuY3Rpb24gcXIoZSx0KXt2YXIgbj1lLnJlZjtpZihuIT09bnVsbClpZih0eXBlb2Ygbj09ImZ1bmN0aW9uIil0cnl7bihudWxsKX1jYXRjaChyKXt4ZShlLHQscil9ZWxzZSBuLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBfdShlLHQsbil7dHJ5e24oKX1jYXRjaChyKXt4ZShlLHQscil9fXZhciBUZj0hMTtmdW5jdGlvbiBNdyhlLHQpe2lmKHB1PUdpLGU9YmgoKSxYdShlKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUpdmFyIG49e3N0YXJ0OmUuc2VsZWN0aW9uU3RhcnQsZW5kOmUuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e249KG49ZS5vd25lckRvY3VtZW50KSYmbi5kZWZhdWx0Vmlld3x8d2luZG93O3ZhciByPW4uZ2V0U2VsZWN0aW9uJiZuLmdldFNlbGVjdGlvbigpO2lmKHImJnIucmFuZ2VDb3VudCE9PTApe249ci5hbmNob3JOb2RlO3ZhciBvPXIuYW5jaG9yT2Zmc2V0LGE9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXtuLm5vZGVUeXBlLGEubm9kZVR5cGV9Y2F0Y2h7bj1udWxsO2JyZWFrIGV9dmFyIGk9MCxzPS0xLGw9LTEsdT0wLGQ9MCxjPWUsaD1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIHY7YyE9PW58fG8hPT0wJiZjLm5vZGVUeXBlIT09M3x8KHM9aStvKSxjIT09YXx8ciE9PTAmJmMubm9kZVR5cGUhPT0zfHwobD1pK3IpLGMubm9kZVR5cGU9PT0zJiYoaSs9Yy5ub2RlVmFsdWUubGVuZ3RoKSwodj1jLmZpcnN0Q2hpbGQpIT09bnVsbDspaD1jLGM9djtmb3IoOzspe2lmKGM9PT1lKWJyZWFrIHQ7aWYoaD09PW4mJisrdT09PW8mJihzPWkpLGg9PT1hJiYrK2Q9PT1yJiYobD1pKSwodj1jLm5leHRTaWJsaW5nKSE9PW51bGwpYnJlYWs7Yz1oLGg9Yy5wYXJlbnROb2RlfWM9dn1uPXM9PT0tMXx8bD09PS0xP251bGw6e3N0YXJ0OnMsZW5kOmx9fWVsc2Ugbj1udWxsfW49bnx8e3N0YXJ0OjAsZW5kOjB9fWVsc2Ugbj1udWxsO2ZvcihmdT17Zm9jdXNlZEVsZW06ZSxzZWxlY3Rpb25SYW5nZTpufSxHaT0hMSxMPXQ7TCE9PW51bGw7KWlmKHQ9TCxlPXQuY2hpbGQsKHQuc3VidHJlZUZsYWdzJjEwMjgpIT09MCYmZSE9PW51bGwpZS5yZXR1cm49dCxMPWU7ZWxzZSBmb3IoO0whPT1udWxsOyl7dD1MO3RyeXt2YXIgbT10LmFsdGVybmF0ZTtpZih0LmZsYWdzJjEwMjQpc3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmJyZWFrO2Nhc2UgMTppZihtIT09bnVsbCl7dmFyIHc9bS5tZW1vaXplZFByb3BzLGI9bS5tZW1vaXplZFN0YXRlLGc9dC5zdGF0ZU5vZGUsZj1nLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHQuZWxlbWVudFR5cGU9PT10LnR5cGU/dzp6dCh0LnR5cGUsdyksYik7Zy5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1mfWJyZWFrO2Nhc2UgMzp2YXIgeT10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO3kubm9kZVR5cGU9PT0xP3kudGV4dENvbnRlbnQ9IiI6eS5ub2RlVHlwZT09PTkmJnkuZG9jdW1lbnRFbGVtZW50JiZ5LnJlbW92ZUNoaWxkKHkuZG9jdW1lbnRFbGVtZW50KTticmVhaztjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXygxNjMpKX19Y2F0Y2gocCl7eGUodCx0LnJldHVybixwKX1pZihlPXQuc2libGluZyxlIT09bnVsbCl7ZS5yZXR1cm49dC5yZXR1cm4sTD1lO2JyZWFrfUw9dC5yZXR1cm59cmV0dXJuIG09VGYsVGY9ITEsbX1mdW5jdGlvbiB0YShlLHQsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgbz1yPXIubmV4dDtkb3tpZigoby50YWcmZSk9PT1lKXt2YXIgYT1vLmRlc3Ryb3k7by5kZXN0cm95PXZvaWQgMCxhIT09dm9pZCAwJiZfdSh0LG4sYSl9bz1vLm5leHR9d2hpbGUobyE9PXIpfX1mdW5jdGlvbiB3cyhlLHQpe2lmKHQ9dC51cGRhdGVRdWV1ZSx0PXQhPT1udWxsP3QubGFzdEVmZmVjdDpudWxsLHQhPT1udWxsKXt2YXIgbj10PXQubmV4dDtkb3tpZigobi50YWcmZSk9PT1lKXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT10KX19ZnVuY3Rpb24gQXUoZSl7dmFyIHQ9ZS5yZWY7aWYodCE9PW51bGwpe3ZhciBuPWUuc3RhdGVOb2RlO3N3aXRjaChlLnRhZyl7Y2FzZSA1OmU9bjticmVhaztkZWZhdWx0OmU9bn10eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQuY3VycmVudD1lfX1mdW5jdGlvbiB2bShlKXt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsdm0odCkpLGUuY2hpbGQ9bnVsbCxlLmRlbGV0aW9ucz1udWxsLGUuc2libGluZz1udWxsLGUudGFnPT09NSYmKHQ9ZS5zdGF0ZU5vZGUsdCE9PW51bGwmJihkZWxldGUgdFtlbl0sZGVsZXRlIHRbaGFdLGRlbGV0ZSB0W2d1XSxkZWxldGUgdFtnd10sZGVsZXRlIHRbdnddKSksZS5zdGF0ZU5vZGU9bnVsbCxlLnJldHVybj1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnN0YXRlTm9kZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiB5bShlKXtyZXR1cm4gZS50YWc9PT01fHxlLnRhZz09PTN8fGUudGFnPT09NH1mdW5jdGlvbiBEZihlKXtlOmZvcig7Oyl7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHx5bShlLnJldHVybikpcmV0dXJuIG51bGw7ZT1lLnJldHVybn1mb3IoZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZztlLnRhZyE9PTUmJmUudGFnIT09NiYmZS50YWchPT0xODspe2lmKGUuZmxhZ3MmMnx8ZS5jaGlsZD09PW51bGx8fGUudGFnPT09NCljb250aW51ZSBlO2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkfWlmKCEoZS5mbGFncyYyKSlyZXR1cm4gZS5zdGF0ZU5vZGV9fWZ1bmN0aW9uIE91KGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0KTpuLmluc2VydEJlZm9yZShlLHQpOihuLm5vZGVUeXBlPT09OD8odD1uLnBhcmVudE5vZGUsdC5pbnNlcnRCZWZvcmUoZSxuKSk6KHQ9bix0LmFwcGVuZENoaWxkKGUpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHx0Lm9uY2xpY2shPT1udWxsfHwodC5vbmNsaWNrPXFpKSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKE91KGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspT3UoZSx0LG4pLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIFJ1KGUsdCxuKXt2YXIgcj1lLnRhZztpZihyPT09NXx8cj09PTYpZT1lLnN0YXRlTm9kZSx0P24uaW5zZXJ0QmVmb3JlKGUsdCk6bi5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYoZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IoUnUoZSx0LG4pLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylSdShlLHQsbiksZT1lLnNpYmxpbmd9dmFyIEZlPW51bGwsJHQ9ITE7ZnVuY3Rpb24gTW4oZSx0LG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KXdtKGUsdCxuKSxuPW4uc2libGluZ31mdW5jdGlvbiB3bShlLHQsbil7aWYodG4mJnR5cGVvZiB0bi5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7dG4ub25Db21taXRGaWJlclVubW91bnQoZHMsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OlllfHxxcihuLHQpO2Nhc2UgNjp2YXIgcj1GZSxvPSR0O0ZlPW51bGwsTW4oZSx0LG4pLEZlPXIsJHQ9byxGZSE9PW51bGwmJigkdD8oZT1GZSxuPW4uc3RhdGVOb2RlLGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTplLnJlbW92ZUNoaWxkKG4pKTpGZS5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6RmUhPT1udWxsJiYoJHQ/KGU9RmUsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9QbChlLnBhcmVudE5vZGUsbik6ZS5ub2RlVHlwZT09PTEmJlBsKGUsbiksdWEoZSkpOlBsKEZlLG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9RmUsbz0kdCxGZT1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCR0PSEwLE1uKGUsdCxuKSxGZT1yLCR0PW87YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFZZSYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe289cj1yLm5leHQ7ZG97dmFyIGE9byxpPWEuZGVzdHJveTthPWEudGFnLGkhPT12b2lkIDAmJihhJjJ8fGEmNCkmJl91KG4sdCxpKSxvPW8ubmV4dH13aGlsZShvIT09cil9TW4oZSx0LG4pO2JyZWFrO2Nhc2UgMTppZighWWUmJihxcihuLHQpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gocyl7eGUobix0LHMpfU1uKGUsdCxuKTticmVhaztjYXNlIDIxOk1uKGUsdCxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhZZT0ocj1ZZSl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsTW4oZSx0LG4pLFllPXIpOk1uKGUsdCxuKTticmVhaztkZWZhdWx0Ok1uKGUsdCxuKX19ZnVuY3Rpb24gQ2YoZSl7dmFyIHQ9ZS51cGRhdGVRdWV1ZTtpZih0IT09bnVsbCl7ZS51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPWUuc3RhdGVOb2RlO249PT1udWxsJiYobj1lLnN0YXRlTm9kZT1uZXcgSXcpLHQuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1qdy5iaW5kKG51bGwsZSxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihvLG8pKX0pfX1mdW5jdGlvbiBMdChlLHQpe3ZhciBuPXQuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO3RyeXt2YXIgYT1lLGk9dCxzPWk7ZTpmb3IoO3MhPT1udWxsOyl7c3dpdGNoKHMudGFnKXtjYXNlIDU6RmU9cy5zdGF0ZU5vZGUsJHQ9ITE7YnJlYWsgZTtjYXNlIDM6RmU9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywkdD0hMDticmVhayBlO2Nhc2UgNDpGZT1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCR0PSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihGZT09PW51bGwpdGhyb3cgRXJyb3IoXygxNjApKTt3bShhLGksbyksRmU9bnVsbCwkdD0hMTt2YXIgbD1vLmFsdGVybmF0ZTtsIT09bnVsbCYmKGwucmV0dXJuPW51bGwpLG8ucmV0dXJuPW51bGx9Y2F0Y2godSl7eGUobyx0LHUpfX1pZih0LnN1YnRyZWVGbGFncyYxMjg1NClmb3IodD10LmNoaWxkO3QhPT1udWxsOyl4bSh0LGUpLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIHhtKGUsdCl7dmFyIG49ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKEx0KHQsZSksWHQoZSksciY0KXt0cnl7dGEoMyxlLGUucmV0dXJuKSx3cygzLGUpfWNhdGNoKHcpe3hlKGUsZS5yZXR1cm4sdyl9dHJ5e3RhKDUsZSxlLnJldHVybil9Y2F0Y2godyl7eGUoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSAxOkx0KHQsZSksWHQoZSksciY1MTImJm4hPT1udWxsJiZxcihuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoTHQodCxlKSxYdChlKSxyJjUxMiYmbiE9PW51bGwmJnFyKG4sbi5yZXR1cm4pLGUuZmxhZ3MmMzIpe3ZhciBvPWUuc3RhdGVOb2RlO3RyeXthYShvLCIiKX1jYXRjaCh3KXt4ZShlLGUucmV0dXJuLHcpfX1pZihyJjQmJihvPWUuc3RhdGVOb2RlLG8hPW51bGwpKXt2YXIgYT1lLm1lbW9pemVkUHJvcHMsaT1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6YSxzPWUudHlwZSxsPWUudXBkYXRlUXVldWU7aWYoZS51cGRhdGVRdWV1ZT1udWxsLGwhPT1udWxsKXRyeXtzPT09ImlucHV0IiYmYS50eXBlPT09InJhZGlvIiYmYS5uYW1lIT1udWxsJiZCZihvLGEpLG51KHMsaSk7dmFyIHU9bnUocyxhKTtmb3IoaT0wO2k8bC5sZW5ndGg7aSs9Mil7dmFyIGQ9bFtpXSxjPWxbaSsxXTtkPT09InN0eWxlIj9LZihvLGMpOmQ9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0hmKG8sYyk6ZD09PSJjaGlsZHJlbiI/YWEobyxjKTpGdShvLGQsYyx1KX1zd2l0Y2gocyl7Y2FzZSJpbnB1dCI6SmwobyxhKTticmVhaztjYXNlInRleHRhcmVhIjpqZihvLGEpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgaD1vLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhYS5tdWx0aXBsZTt2YXIgdj1hLnZhbHVlO3YhPW51bGw/SnIobywhIWEubXVsdGlwbGUsdiwhMSk6aCE9PSEhYS5tdWx0aXBsZSYmKGEuZGVmYXVsdFZhbHVlIT1udWxsP0pyKG8sISFhLm11bHRpcGxlLGEuZGVmYXVsdFZhbHVlLCEwKTpKcihvLCEhYS5tdWx0aXBsZSxhLm11bHRpcGxlP1tdOiIiLCExKSl9b1toYV09YX1jYXRjaCh3KXt4ZShlLGUucmV0dXJuLHcpfX1icmVhaztjYXNlIDY6aWYoTHQodCxlKSxYdChlKSxyJjQpe2lmKGUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihfKDE2MikpO289ZS5zdGF0ZU5vZGUsYT1lLm1lbW9pemVkUHJvcHM7dHJ5e28ubm9kZVZhbHVlPWF9Y2F0Y2godyl7eGUoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSAzOmlmKEx0KHQsZSksWHQoZSksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7dWEodC5jb250YWluZXJJbmZvKX1jYXRjaCh3KXt4ZShlLGUucmV0dXJuLHcpfWJyZWFrO2Nhc2UgNDpMdCh0LGUpLFh0KGUpO2JyZWFrO2Nhc2UgMTM6THQodCxlKSxYdChlKSxvPWUuY2hpbGQsby5mbGFncyY4MTkyJiYoYT1vLm1lbW9pemVkU3RhdGUhPT1udWxsLG8uc3RhdGVOb2RlLmlzSGlkZGVuPWEsIWF8fG8uYWx0ZXJuYXRlIT09bnVsbCYmby5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fCh5Yz1rZSgpKSksciY0JiZDZihlKTticmVhaztjYXNlIDIyOmlmKGQ9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsZS5tb2RlJjE/KFllPSh1PVllKXx8ZCxMdCh0LGUpLFllPXUpOkx0KHQsZSksWHQoZSksciY4MTkyKXtpZih1PWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKGUuc3RhdGVOb2RlLmlzSGlkZGVuPXUpJiYhZCYmZS5tb2RlJjEpZm9yKEw9ZSxkPWUuY2hpbGQ7ZCE9PW51bGw7KXtmb3IoYz1MPWQ7TCE9PW51bGw7KXtzd2l0Y2goaD1MLHY9aC5jaGlsZCxoLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OnRhKDQsaCxoLnJldHVybik7YnJlYWs7Y2FzZSAxOnFyKGgsaC5yZXR1cm4pO3ZhciBtPWguc3RhdGVOb2RlO2lmKHR5cGVvZiBtLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iKXtyPWgsbj1oLnJldHVybjt0cnl7dD1yLG0ucHJvcHM9dC5tZW1vaXplZFByb3BzLG0uc3RhdGU9dC5tZW1vaXplZFN0YXRlLG0uY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaCh3KXt4ZShyLG4sdyl9fWJyZWFrO2Nhc2UgNTpxcihoLGgucmV0dXJuKTticmVhaztjYXNlIDIyOmlmKGgubWVtb2l6ZWRTdGF0ZSE9PW51bGwpe0FmKGMpO2NvbnRpbnVlfX12IT09bnVsbD8odi5yZXR1cm49aCxMPXYpOkFmKGMpfWQ9ZC5zaWJsaW5nfWU6Zm9yKGQ9bnVsbCxjPWU7Oyl7aWYoYy50YWc9PT01KXtpZihkPT09bnVsbCl7ZD1jO3RyeXtvPWMuc3RhdGVOb2RlLHU/KGE9by5zdHlsZSx0eXBlb2YgYS5zZXRQcm9wZXJ0eT09ImZ1bmN0aW9uIj9hLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmEuZGlzcGxheT0ibm9uZSIpOihzPWMuc3RhdGVOb2RlLGw9Yy5tZW1vaXplZFByb3BzLnN0eWxlLGk9bCE9bnVsbCYmbC5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP2wuZGlzcGxheTpudWxsLHMuc3R5bGUuZGlzcGxheT1HZigiZGlzcGxheSIsaSkpfWNhdGNoKHcpe3hlKGUsZS5yZXR1cm4sdyl9fX1lbHNlIGlmKGMudGFnPT09Nil7aWYoZD09PW51bGwpdHJ5e2Muc3RhdGVOb2RlLm5vZGVWYWx1ZT11PyIiOmMubWVtb2l6ZWRQcm9wc31jYXRjaCh3KXt4ZShlLGUucmV0dXJuLHcpfX1lbHNlIGlmKChjLnRhZyE9PTIyJiZjLnRhZyE9PTIzfHxjLm1lbW9pemVkU3RhdGU9PT1udWxsfHxjPT09ZSkmJmMuY2hpbGQhPT1udWxsKXtjLmNoaWxkLnJldHVybj1jLGM9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09ZSlicmVhayBlO2Zvcig7Yy5zaWJsaW5nPT09bnVsbDspe2lmKGMucmV0dXJuPT09bnVsbHx8Yy5yZXR1cm49PT1lKWJyZWFrIGU7ZD09PWMmJihkPW51bGwpLGM9Yy5yZXR1cm59ZD09PWMmJihkPW51bGwpLGMuc2libGluZy5yZXR1cm49Yy5yZXR1cm4sYz1jLnNpYmxpbmd9fWJyZWFrO2Nhc2UgMTk6THQodCxlKSxYdChlKSxyJjQmJkNmKGUpO2JyZWFrO2Nhc2UgMjE6YnJlYWs7ZGVmYXVsdDpMdCh0LGUpLFh0KGUpfX1mdW5jdGlvbiBYdChlKXt2YXIgdD1lLmZsYWdzO2lmKHQmMil7dHJ5e2U6e2Zvcih2YXIgbj1lLnJldHVybjtuIT09bnVsbDspe2lmKHltKG4pKXt2YXIgcj1uO2JyZWFrIGV9bj1uLnJldHVybn10aHJvdyBFcnJvcihfKDE2MCkpfXN3aXRjaChyLnRhZyl7Y2FzZSA1OnZhciBvPXIuc3RhdGVOb2RlO3IuZmxhZ3MmMzImJihhYShvLCIiKSxyLmZsYWdzJj0tMzMpO3ZhciBhPURmKGUpO1J1KGUsYSxvKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBpPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8scz1EZihlKTtPdShlLHMsaSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihfKDE2MSkpfX1jYXRjaChsKXt4ZShlLGUucmV0dXJuLGwpfWUuZmxhZ3MmPS0zfXQmNDA5NiYmKGUuZmxhZ3MmPS00MDk3KX1mdW5jdGlvbiBQdyhlLHQsbil7TD1lLGJtKGUsdCxuKX1mdW5jdGlvbiBibShlLHQsbil7Zm9yKHZhciByPShlLm1vZGUmMSkhPT0wO0whPT1udWxsOyl7dmFyIG89TCxhPW8uY2hpbGQ7aWYoby50YWc9PT0yMiYmcil7dmFyIGk9by5tZW1vaXplZFN0YXRlIT09bnVsbHx8X2k7aWYoIWkpe3ZhciBzPW8uYWx0ZXJuYXRlLGw9cyE9PW51bGwmJnMubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fFllO3M9X2k7dmFyIHU9WWU7aWYoX2k9aSwoWWU9bCkmJiF1KWZvcihMPW87TCE9PW51bGw7KWk9TCxsPWkuY2hpbGQsaS50YWc9PT0yMiYmaS5tZW1vaXplZFN0YXRlIT09bnVsbD9PZihvKTpsIT09bnVsbD8obC5yZXR1cm49aSxMPWwpOk9mKG8pO2Zvcig7YSE9PW51bGw7KUw9YSxibShhLHQsbiksYT1hLnNpYmxpbmc7TD1vLF9pPXMsWWU9dX1fZihlLHQsbil9ZWxzZSBvLnN1YnRyZWVGbGFncyY4NzcyJiZhIT09bnVsbD8oYS5yZXR1cm49byxMPWEpOl9mKGUsdCxuKX19ZnVuY3Rpb24gX2YoZSl7Zm9yKDtMIT09bnVsbDspe3ZhciB0PUw7aWYodC5mbGFncyY4NzcyKXt2YXIgbj10LmFsdGVybmF0ZTt0cnl7aWYodC5mbGFncyY4NzcyKXN3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpZZXx8d3MoNSx0KTticmVhaztjYXNlIDE6dmFyIHI9dC5zdGF0ZU5vZGU7aWYodC5mbGFncyY0JiYhWWUpaWYobj09PW51bGwpci5jb21wb25lbnREaWRNb3VudCgpO2Vsc2V7dmFyIG89dC5lbGVtZW50VHlwZT09PXQudHlwZT9uLm1lbW9pemVkUHJvcHM6enQodC50eXBlLG4ubWVtb2l6ZWRQcm9wcyk7ci5jb21wb25lbnREaWRVcGRhdGUobyxuLm1lbW9pemVkU3RhdGUsci5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9dmFyIGE9dC51cGRhdGVRdWV1ZTthIT09bnVsbCYmZmYodCxhLHIpO2JyZWFrO2Nhc2UgMzp2YXIgaT10LnVwZGF0ZVF1ZXVlO2lmKGkhPT1udWxsKXtpZihuPW51bGwsdC5jaGlsZCE9PW51bGwpc3dpdGNoKHQuY2hpbGQudGFnKXtjYXNlIDU6bj10LmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6bj10LmNoaWxkLnN0YXRlTm9kZX1mZih0LGksbil9YnJlYWs7Y2FzZSA1OnZhciBzPXQuc3RhdGVOb2RlO2lmKG49PT1udWxsJiZ0LmZsYWdzJjQpe249czt2YXIgbD10Lm1lbW9pemVkUHJvcHM7c3dpdGNoKHQudHlwZSl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpsLmF1dG9Gb2N1cyYmbi5mb2N1cygpO2JyZWFrO2Nhc2UiaW1nIjpsLnNyYyYmKG4uc3JjPWwuc3JjKX19YnJlYWs7Y2FzZSA2OmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6aWYodC5tZW1vaXplZFN0YXRlPT09bnVsbCl7dmFyIHU9dC5hbHRlcm5hdGU7aWYodSE9PW51bGwpe3ZhciBkPXUubWVtb2l6ZWRTdGF0ZTtpZihkIT09bnVsbCl7dmFyIGM9ZC5kZWh5ZHJhdGVkO2MhPT1udWxsJiZ1YShjKX19fWJyZWFrO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI1OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXygxNjMpKX1ZZXx8dC5mbGFncyY1MTImJkF1KHQpfWNhdGNoKGgpe3hlKHQsdC5yZXR1cm4saCl9fWlmKHQ9PT1lKXtMPW51bGw7YnJlYWt9aWYobj10LnNpYmxpbmcsbiE9PW51bGwpe24ucmV0dXJuPXQucmV0dXJuLEw9bjticmVha31MPXQucmV0dXJufX1mdW5jdGlvbiBBZihlKXtmb3IoO0whPT1udWxsOyl7dmFyIHQ9TDtpZih0PT09ZSl7TD1udWxsO2JyZWFrfXZhciBuPXQuc2libGluZztpZihuIT09bnVsbCl7bi5yZXR1cm49dC5yZXR1cm4sTD1uO2JyZWFrfUw9dC5yZXR1cm59fWZ1bmN0aW9uIE9mKGUpe2Zvcig7TCE9PW51bGw7KXt2YXIgdD1MO3RyeXtzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6dmFyIG49dC5yZXR1cm47dHJ5e3dzKDQsdCl9Y2F0Y2gobCl7eGUodCxuLGwpfWJyZWFrO2Nhc2UgMTp2YXIgcj10LnN0YXRlTm9kZTtpZih0eXBlb2Ygci5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIil7dmFyIG89dC5yZXR1cm47dHJ5e3IuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChsKXt4ZSh0LG8sbCl9fXZhciBhPXQucmV0dXJuO3RyeXtBdSh0KX1jYXRjaChsKXt4ZSh0LGEsbCl9YnJlYWs7Y2FzZSA1OnZhciBpPXQucmV0dXJuO3RyeXtBdSh0KX1jYXRjaChsKXt4ZSh0LGksbCl9fX1jYXRjaChsKXt4ZSh0LHQucmV0dXJuLGwpfWlmKHQ9PT1lKXtMPW51bGw7YnJlYWt9dmFyIHM9dC5zaWJsaW5nO2lmKHMhPT1udWxsKXtzLnJldHVybj10LnJldHVybixMPXM7YnJlYWt9TD10LnJldHVybn19dmFyIEx3PU1hdGguY2VpbCxpcz1rbi5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGdjPWtuLlJlYWN0Q3VycmVudE93bmVyLFR0PWtuLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFE9MCxMZT1udWxsLEVlPW51bGwsVWU9MCxwdD0wLFFyPVhuKDApLE9lPTAseGE9bnVsbCx5cj0wLHhzPTAsdmM9MCxuYT1udWxsLG90PW51bGwseWM9MCx1bz0xLzAsZm49bnVsbCxzcz0hMSxJdT1udWxsLEduPW51bGwsQWk9ITEsVW49bnVsbCxscz0wLHJhPTAsTXU9bnVsbCwkaT0tMSxGaT0wO2Z1bmN0aW9uIFplKCl7cmV0dXJuIFEmNj9rZSgpOiRpIT09LTE/JGk6JGk9a2UoKX1mdW5jdGlvbiBLbihlKXtyZXR1cm4gZS5tb2RlJjE/USYyJiZVZSE9PTA/VWUmLVVlOnd3LnRyYW5zaXRpb24hPT1udWxsPyhGaT09PTAmJihGaT1haCgpKSxGaSk6KGU9bmUsZSE9PTB8fChlPXdpbmRvdy5ldmVudCxlPWU9PT12b2lkIDA/MTY6cGgoZS50eXBlKSksZSk6MX1mdW5jdGlvbiBXdChlLHQsbixyKXtpZig1MDxyYSl0aHJvdyByYT0wLE11PW51bGwsRXJyb3IoXygxODUpKTtiYShlLG4sciksKCEoUSYyKXx8ZSE9PUxlKSYmKGU9PT1MZSYmKCEoUSYyKSYmKHhzfD1uKSxPZT09PTQmJiRuKGUsVWUpKSxsdChlLHIpLG49PT0xJiZRPT09MCYmISh0Lm1vZGUmMSkmJih1bz1rZSgpKzUwMCxncyYmWm4oKSkpfWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG49ZS5jYWxsYmFja05vZGU7YjAoZSx0KTt2YXIgcj1IaShlLGU9PT1MZT9VZTowKTtpZihyPT09MCluIT09bnVsbCYmJHAobiksZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MDtlbHNlIGlmKHQ9ciYtcixlLmNhbGxiYWNrUHJpb3JpdHkhPT10KXtpZihuIT1udWxsJiYkcChuKSx0PT09MSllLnRhZz09PTA/eXcoUmYuYmluZChudWxsLGUpKTpPaChSZi5iaW5kKG51bGwsZSkpLGh3KGZ1bmN0aW9uKCl7IShRJjYpJiZabigpfSksbj1udWxsO2Vsc2V7c3dpdGNoKGloKHIpKXtjYXNlIDE6bj1WdTticmVhaztjYXNlIDQ6bj1yaDticmVhaztjYXNlIDE2Om49Vmk7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1vaDticmVhaztkZWZhdWx0Om49Vml9bj1fbShuLGttLmJpbmQobnVsbCxlKSl9ZS5jYWxsYmFja1ByaW9yaXR5PXQsZS5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24ga20oZSx0KXtpZigkaT0tMSxGaT0wLFEmNil0aHJvdyBFcnJvcihfKDMyNykpO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKG5vKCkmJmUuY2FsbGJhY2tOb2RlIT09bilyZXR1cm4gbnVsbDt2YXIgcj1IaShlLGU9PT1MZT9VZTowKTtpZihyPT09MClyZXR1cm4gbnVsbDtpZihyJjMwfHxyJmUuZXhwaXJlZExhbmVzfHx0KXQ9dXMoZSxyKTtlbHNle3Q9cjt2YXIgbz1RO1F8PTI7dmFyIGE9RW0oKTsoTGUhPT1lfHxVZSE9PXQpJiYoZm49bnVsbCx1bz1rZSgpKzUwMCxmcihlLHQpKTtkbyB0cnl7RncoKTticmVha31jYXRjaChzKXtTbShlLHMpfXdoaWxlKCEwKTtyYygpLGlzLmN1cnJlbnQ9YSxRPW8sRWUhPT1udWxsP3Q9MDooTGU9bnVsbCxVZT0wLHQ9T2UpfWlmKHQhPT0wKXtpZih0PT09MiYmKG89c3UoZSksbyE9PTAmJihyPW8sdD1QdShlLG8pKSksdD09PTEpdGhyb3cgbj14YSxmcihlLDApLCRuKGUsciksbHQoZSxrZSgpKSxuO2lmKHQ9PT02KSRuKGUscik7ZWxzZXtpZihvPWUuY3VycmVudC5hbHRlcm5hdGUsIShyJjMwKSYmIXp3KG8pJiYodD11cyhlLHIpLHQ9PT0yJiYoYT1zdShlKSxhIT09MCYmKHI9YSx0PVB1KGUsYSkpKSx0PT09MSkpdGhyb3cgbj14YSxmcihlLDApLCRuKGUsciksbHQoZSxrZSgpKSxuO3N3aXRjaChlLmZpbmlzaGVkV29yaz1vLGUuZmluaXNoZWRMYW5lcz1yLHQpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoXygzNDUpKTtjYXNlIDI6dXIoZSxvdCxmbik7YnJlYWs7Y2FzZSAzOmlmKCRuKGUsciksKHImMTMwMDIzNDI0KT09PXImJih0PXljKzUwMC1rZSgpLDEwPHQpKXtpZihIaShlLDApIT09MClicmVhaztpZihvPWUuc3VzcGVuZGVkTGFuZXMsKG8mcikhPT1yKXtaZSgpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbzticmVha31lLnRpbWVvdXRIYW5kbGU9bXUodXIuYmluZChudWxsLGUsb3QsZm4pLHQpO2JyZWFrfXVyKGUsb3QsZm4pO2JyZWFrO2Nhc2UgNDppZigkbihlLHIpLChyJjQxOTQyNDApPT09cilicmVhaztmb3IodD1lLmV2ZW50VGltZXMsbz0tMTswPHI7KXt2YXIgaT0zMS1VdChyKTthPTE8PGksaT10W2ldLGk+byYmKG89aSksciY9fmF9aWYocj1vLHI9a2UoKS1yLHI9KDEyMD5yPzEyMDo0ODA+cj80ODA6MTA4MD5yPzEwODA6MTkyMD5yPzE5MjA6M2UzPnI/M2UzOjQzMjA+cj80MzIwOjE5NjAqTHcoci8xOTYwKSktciwxMDxyKXtlLnRpbWVvdXRIYW5kbGU9bXUodXIuYmluZChudWxsLGUsb3QsZm4pLHIpO2JyZWFrfXVyKGUsb3QsZm4pO2JyZWFrO2Nhc2UgNTp1cihlLG90LGZuKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKF8oMzI5KSl9fX1yZXR1cm4gbHQoZSxrZSgpKSxlLmNhbGxiYWNrTm9kZT09PW4/a20uYmluZChudWxsLGUpOm51bGx9ZnVuY3Rpb24gUHUoZSx0KXt2YXIgbj1uYTtyZXR1cm4gZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYoZnIoZSx0KS5mbGFnc3w9MjU2KSxlPXVzKGUsdCksZSE9PTImJih0PW90LG90PW4sdCE9PW51bGwmJkx1KHQpKSxlfWZ1bmN0aW9uIEx1KGUpe290PT09bnVsbD9vdD1lOm90LnB1c2guYXBwbHkob3QsZSl9ZnVuY3Rpb24gencoZSl7Zm9yKHZhciB0PWU7Oyl7aWYodC5mbGFncyYxNjM4NCl7dmFyIG49dC51cGRhdGVRdWV1ZTtpZihuIT09bnVsbCYmKG49bi5zdG9yZXMsbiE9PW51bGwpKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCFCdChhKCksbykpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9fX1pZihuPXQuY2hpbGQsdC5zdWJ0cmVlRmxhZ3MmMTYzODQmJm4hPT1udWxsKW4ucmV0dXJuPXQsdD1uO2Vsc2V7aWYodD09PWUpYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PWUpcmV0dXJuITA7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1yZXR1cm4hMH1mdW5jdGlvbiAkbihlLHQpe2Zvcih0Jj1+dmMsdCY9fnhzLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQsZT1lLmV4cGlyYXRpb25UaW1lczswPHQ7KXt2YXIgbj0zMS1VdCh0KSxyPTE8PG47ZVtuXT0tMSx0Jj1+cn19ZnVuY3Rpb24gUmYoZSl7aWYoUSY2KXRocm93IEVycm9yKF8oMzI3KSk7bm8oKTt2YXIgdD1IaShlLDApO2lmKCEodCYxKSlyZXR1cm4gbHQoZSxrZSgpKSxudWxsO3ZhciBuPXVzKGUsdCk7aWYoZS50YWchPT0wJiZuPT09Mil7dmFyIHI9c3UoZSk7ciE9PTAmJih0PXIsbj1QdShlLHIpKX1pZihuPT09MSl0aHJvdyBuPXhhLGZyKGUsMCksJG4oZSx0KSxsdChlLGtlKCkpLG47aWYobj09PTYpdGhyb3cgRXJyb3IoXygzNDUpKTtyZXR1cm4gZS5maW5pc2hlZFdvcms9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZpbmlzaGVkTGFuZXM9dCx1cihlLG90LGZuKSxsdChlLGtlKCkpLG51bGx9ZnVuY3Rpb24gd2MoZSx0KXt2YXIgbj1RO1F8PTE7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7UT1uLFE9PT0wJiYodW89a2UoKSs1MDAsZ3MmJlpuKCkpfX1mdW5jdGlvbiB3cihlKXtVbiE9PW51bGwmJlVuLnRhZz09PTAmJiEoUSY2KSYmbm8oKTt2YXIgdD1RO1F8PTE7dmFyIG49VHQudHJhbnNpdGlvbixyPW5lO3RyeXtpZihUdC50cmFuc2l0aW9uPW51bGwsbmU9MSxlKXJldHVybiBlKCl9ZmluYWxseXtuZT1yLFR0LnRyYW5zaXRpb249bixRPXQsIShRJjYpJiZabigpfX1mdW5jdGlvbiB4Yygpe3B0PVFyLmN1cnJlbnQsaGUoUXIpfWZ1bmN0aW9uIGZyKGUsdCl7ZS5maW5pc2hlZFdvcms9bnVsbCxlLmZpbmlzaGVkTGFuZXM9MDt2YXIgbj1lLnRpbWVvdXRIYW5kbGU7aWYobiE9PS0xJiYoZS50aW1lb3V0SGFuZGxlPS0xLGZ3KG4pKSxFZSE9PW51bGwpZm9yKG49RWUucmV0dXJuO24hPT1udWxsOyl7dmFyIHI9bjtzd2l0Y2goZWMociksci50YWcpe2Nhc2UgMTpyPXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyxyIT1udWxsJiZRaSgpO2JyZWFrO2Nhc2UgMzpzbygpLGhlKGl0KSxoZShxZSksdWMoKTticmVhaztjYXNlIDU6bGMocik7YnJlYWs7Y2FzZSA0OnNvKCk7YnJlYWs7Y2FzZSAxMzpoZSh2ZSk7YnJlYWs7Y2FzZSAxOTpoZSh2ZSk7YnJlYWs7Y2FzZSAxMDpvYyhyLnR5cGUuX2NvbnRleHQpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp4YygpfW49bi5yZXR1cm59aWYoTGU9ZSxFZT1lPVluKGUuY3VycmVudCxudWxsKSxVZT1wdD10LE9lPTAseGE9bnVsbCx2Yz14cz15cj0wLG90PW5hPW51bGwsZHIhPT1udWxsKXtmb3IodD0wO3Q8ZHIubGVuZ3RoO3QrKylpZihuPWRyW3RdLHI9bi5pbnRlcmxlYXZlZCxyIT09bnVsbCl7bi5pbnRlcmxlYXZlZD1udWxsO3ZhciBvPXIubmV4dCxhPW4ucGVuZGluZztpZihhIT09bnVsbCl7dmFyIGk9YS5uZXh0O2EubmV4dD1vLHIubmV4dD1pfW4ucGVuZGluZz1yfWRyPW51bGx9cmV0dXJuIGV9ZnVuY3Rpb24gU20oZSx0KXtkb3t2YXIgbj1FZTt0cnl7aWYocmMoKSxQaS5jdXJyZW50PWFzLG9zKXtmb3IodmFyIHI9eWUubWVtb2l6ZWRTdGF0ZTtyIT09bnVsbDspe3ZhciBvPXIucXVldWU7byE9PW51bGwmJihvLnBlbmRpbmc9bnVsbCkscj1yLm5leHR9b3M9ITF9aWYodnI9MCxQZT1BZT15ZT1udWxsLGVhPSExLHZhPTAsZ2MuY3VycmVudD1udWxsLG49PT1udWxsfHxuLnJldHVybj09PW51bGwpe09lPTEseGE9dCxFZT1udWxsO2JyZWFrfWU6e3ZhciBhPWUsaT1uLnJldHVybixzPW4sbD10O2lmKHQ9VWUscy5mbGFnc3w9MzI3NjgsbCE9PW51bGwmJnR5cGVvZiBsPT0ib2JqZWN0IiYmdHlwZW9mIGwudGhlbj09ImZ1bmN0aW9uIil7dmFyIHU9bCxkPXMsYz1kLnRhZztpZighKGQubW9kZSYxKSYmKGM9PT0wfHxjPT09MTF8fGM9PT0xNSkpe3ZhciBoPWQuYWx0ZXJuYXRlO2g/KGQudXBkYXRlUXVldWU9aC51cGRhdGVRdWV1ZSxkLm1lbW9pemVkU3RhdGU9aC5tZW1vaXplZFN0YXRlLGQubGFuZXM9aC5sYW5lcyk6KGQudXBkYXRlUXVldWU9bnVsbCxkLm1lbW9pemVkU3RhdGU9bnVsbCl9dmFyIHY9d2YoaSk7aWYodiE9PW51bGwpe3YuZmxhZ3MmPS0yNTcseGYodixpLHMsYSx0KSx2Lm1vZGUmMSYmeWYoYSx1LHQpLHQ9dixsPXU7dmFyIG09dC51cGRhdGVRdWV1ZTtpZihtPT09bnVsbCl7dmFyIHc9bmV3IFNldDt3LmFkZChsKSx0LnVwZGF0ZVF1ZXVlPXd9ZWxzZSBtLmFkZChsKTticmVhayBlfWVsc2V7aWYoISh0JjEpKXt5ZihhLHUsdCksYmMoKTticmVhayBlfWw9RXJyb3IoXyg0MjYpKX19ZWxzZSBpZihtZSYmcy5tb2RlJjEpe3ZhciBiPXdmKGkpO2lmKGIhPT1udWxsKXshKGIuZmxhZ3MmNjU1MzYpJiYoYi5mbGFnc3w9MjU2KSx4ZihiLGkscyxhLHQpLHRjKGxvKGwscykpO2JyZWFrIGV9fWE9bD1sbyhsLHMpLE9lIT09NCYmKE9lPTIpLG5hPT09bnVsbD9uYT1bYV06bmEucHVzaChhKSxhPWk7ZG97c3dpdGNoKGEudGFnKXtjYXNlIDM6YS5mbGFnc3w9NjU1MzYsdCY9LXQsYS5sYW5lc3w9dDt2YXIgZz1pbShhLGwsdCk7cGYoYSxnKTticmVhayBlO2Nhc2UgMTpzPWw7dmFyIGY9YS50eXBlLHk9YS5zdGF0ZU5vZGU7aWYoIShhLmZsYWdzJjEyOCkmJih0eXBlb2YgZi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I9PSJmdW5jdGlvbiJ8fHkhPT1udWxsJiZ0eXBlb2YgeS5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKEduPT09bnVsbHx8IUduLmhhcyh5KSkpKXthLmZsYWdzfD02NTUzNix0Jj0tdCxhLmxhbmVzfD10O3ZhciBwPXNtKGEscyx0KTtwZihhLHApO2JyZWFrIGV9fWE9YS5yZXR1cm59d2hpbGUoYSE9PW51bGwpfVRtKG4pfWNhdGNoKEUpe3Q9RSxFZT09PW4mJm4hPT1udWxsJiYoRWU9bj1uLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoITApfWZ1bmN0aW9uIEVtKCl7dmFyIGU9aXMuY3VycmVudDtyZXR1cm4gaXMuY3VycmVudD1hcyxlPT09bnVsbD9hczplfWZ1bmN0aW9uIGJjKCl7KE9lPT09MHx8T2U9PT0zfHxPZT09PTIpJiYoT2U9NCksTGU9PT1udWxsfHwhKHlyJjI2ODQzNTQ1NSkmJiEoeHMmMjY4NDM1NDU1KXx8JG4oTGUsVWUpfWZ1bmN0aW9uIHVzKGUsdCl7dmFyIG49UTtRfD0yO3ZhciByPUVtKCk7KExlIT09ZXx8VWUhPT10KSYmKGZuPW51bGwsZnIoZSx0KSk7ZG8gdHJ5eyR3KCk7YnJlYWt9Y2F0Y2gobyl7U20oZSxvKX13aGlsZSghMCk7aWYocmMoKSxRPW4saXMuY3VycmVudD1yLEVlIT09bnVsbCl0aHJvdyBFcnJvcihfKDI2MSkpO3JldHVybiBMZT1udWxsLFVlPTAsT2V9ZnVuY3Rpb24gJHcoKXtmb3IoO0VlIT09bnVsbDspTm0oRWUpfWZ1bmN0aW9uIEZ3KCl7Zm9yKDtFZSE9PW51bGwmJiFwMCgpOylObShFZSl9ZnVuY3Rpb24gTm0oZSl7dmFyIHQ9Q20oZS5hbHRlcm5hdGUsZSxwdCk7ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLHQ9PT1udWxsP1RtKGUpOkVlPXQsZ2MuY3VycmVudD1udWxsfWZ1bmN0aW9uIFRtKGUpe3ZhciB0PWU7ZG97dmFyIG49dC5hbHRlcm5hdGU7aWYoZT10LnJldHVybix0LmZsYWdzJjMyNzY4KXtpZihuPVJ3KG4sdCksbiE9PW51bGwpe24uZmxhZ3MmPTMyNzY3LEVlPW47cmV0dXJufWlmKGUhPT1udWxsKWUuZmxhZ3N8PTMyNzY4LGUuc3VidHJlZUZsYWdzPTAsZS5kZWxldGlvbnM9bnVsbDtlbHNle09lPTYsRWU9bnVsbDtyZXR1cm59fWVsc2UgaWYobj1PdyhuLHQscHQpLG4hPT1udWxsKXtFZT1uO3JldHVybn1pZih0PXQuc2libGluZyx0IT09bnVsbCl7RWU9dDtyZXR1cm59RWU9dD1lfXdoaWxlKHQhPT1udWxsKTtPZT09PTAmJihPZT01KX1mdW5jdGlvbiB1cihlLHQsbil7dmFyIHI9bmUsbz1UdC50cmFuc2l0aW9uO3RyeXtUdC50cmFuc2l0aW9uPW51bGwsbmU9MSxVdyhlLHQsbixyKX1maW5hbGx5e1R0LnRyYW5zaXRpb249byxuZT1yfXJldHVybiBudWxsfWZ1bmN0aW9uIFV3KGUsdCxuLHIpe2RvIG5vKCk7d2hpbGUoVW4hPT1udWxsKTtpZihRJjYpdGhyb3cgRXJyb3IoXygzMjcpKTtuPWUuZmluaXNoZWRXb3JrO3ZhciBvPWUuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLG49PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IoXygxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBhPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKGswKGUsYSksZT09PUxlJiYoRWU9TGU9bnVsbCxVZT0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fEFpfHwoQWk9ITAsX20oVmksZnVuY3Rpb24oKXtyZXR1cm4gbm8oKSxudWxsfSkpLGE9KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8YSl7YT1UdC50cmFuc2l0aW9uLFR0LnRyYW5zaXRpb249bnVsbDt2YXIgaT1uZTtuZT0xO3ZhciBzPVE7UXw9NCxnYy5jdXJyZW50PW51bGwsTXcoZSxuKSx4bShuLGUpLGx3KGZ1KSxHaT0hIXB1LGZ1PXB1PW51bGwsZS5jdXJyZW50PW4sUHcobixlLG8pLGYwKCksUT1zLG5lPWksVHQudHJhbnNpdGlvbj1hfWVsc2UgZS5jdXJyZW50PW47aWYoQWkmJihBaT0hMSxVbj1lLGxzPW8pLGE9ZS5wZW5kaW5nTGFuZXMsYT09PTAmJihHbj1udWxsKSxnMChuLnN0YXRlTm9kZSxyKSxsdChlLGtlKCkpLHQhPT1udWxsKWZvcihyPWUub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPHQubGVuZ3RoO24rKylvPXRbbl0scihvLnZhbHVlLHtjb21wb25lbnRTdGFjazpvLnN0YWNrLGRpZ2VzdDpvLmRpZ2VzdH0pO2lmKHNzKXRocm93IHNzPSExLGU9SXUsSXU9bnVsbCxlO3JldHVybiBscyYxJiZlLnRhZyE9PTAmJm5vKCksYT1lLnBlbmRpbmdMYW5lcyxhJjE/ZT09PU11P3JhKys6KHJhPTAsTXU9ZSk6cmE9MCxabigpLG51bGx9ZnVuY3Rpb24gbm8oKXtpZihVbiE9PW51bGwpe3ZhciBlPWloKGxzKSx0PVR0LnRyYW5zaXRpb24sbj1uZTt0cnl7aWYoVHQudHJhbnNpdGlvbj1udWxsLG5lPTE2PmU/MTY6ZSxVbj09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZihlPVVuLFVuPW51bGwsbHM9MCxRJjYpdGhyb3cgRXJyb3IoXygzMzEpKTt2YXIgbz1RO2ZvcihRfD00LEw9ZS5jdXJyZW50O0whPT1udWxsOyl7dmFyIGE9TCxpPWEuY2hpbGQ7aWYoTC5mbGFncyYxNil7dmFyIHM9YS5kZWxldGlvbnM7aWYocyE9PW51bGwpe2Zvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdO2ZvcihMPXU7TCE9PW51bGw7KXt2YXIgZD1MO3N3aXRjaChkLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp0YSg4LGQsYSl9dmFyIGM9ZC5jaGlsZDtpZihjIT09bnVsbCljLnJldHVybj1kLEw9YztlbHNlIGZvcig7TCE9PW51bGw7KXtkPUw7dmFyIGg9ZC5zaWJsaW5nLHY9ZC5yZXR1cm47aWYodm0oZCksZD09PXUpe0w9bnVsbDticmVha31pZihoIT09bnVsbCl7aC5yZXR1cm49dixMPWg7YnJlYWt9TD12fX19dmFyIG09YS5hbHRlcm5hdGU7aWYobSE9PW51bGwpe3ZhciB3PW0uY2hpbGQ7aWYodyE9PW51bGwpe20uY2hpbGQ9bnVsbDtkb3t2YXIgYj13LnNpYmxpbmc7dy5zaWJsaW5nPW51bGwsdz1ifXdoaWxlKHchPT1udWxsKX19TD1hfX1pZihhLnN1YnRyZWVGbGFncyYyMDY0JiZpIT09bnVsbClpLnJldHVybj1hLEw9aTtlbHNlIGU6Zm9yKDtMIT09bnVsbDspe2lmKGE9TCxhLmZsYWdzJjIwNDgpc3dpdGNoKGEudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnRhKDksYSxhLnJldHVybil9dmFyIGc9YS5zaWJsaW5nO2lmKGchPT1udWxsKXtnLnJldHVybj1hLnJldHVybixMPWc7YnJlYWsgZX1MPWEucmV0dXJufX12YXIgZj1lLmN1cnJlbnQ7Zm9yKEw9ZjtMIT09bnVsbDspe2k9TDt2YXIgeT1pLmNoaWxkO2lmKGkuc3VidHJlZUZsYWdzJjIwNjQmJnkhPT1udWxsKXkucmV0dXJuPWksTD15O2Vsc2UgZTpmb3IoaT1mO0whPT1udWxsOyl7aWYocz1MLHMuZmxhZ3MmMjA0OCl0cnl7c3dpdGNoKHMudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OndzKDkscyl9fWNhdGNoKEUpe3hlKHMscy5yZXR1cm4sRSl9aWYocz09PWkpe0w9bnVsbDticmVhayBlfXZhciBwPXMuc2libGluZztpZihwIT09bnVsbCl7cC5yZXR1cm49cy5yZXR1cm4sTD1wO2JyZWFrIGV9TD1zLnJldHVybn19aWYoUT1vLFpuKCksdG4mJnR5cGVvZiB0bi5vblBvc3RDb21taXRGaWJlclJvb3Q9PSJmdW5jdGlvbiIpdHJ5e3RuLm9uUG9zdENvbW1pdEZpYmVyUm9vdChkcyxlKX1jYXRjaHt9cj0hMH1yZXR1cm4gcn1maW5hbGx5e25lPW4sVHQudHJhbnNpdGlvbj10fX1yZXR1cm4hMX1mdW5jdGlvbiBJZihlLHQsbil7dD1sbyhuLHQpLHQ9aW0oZSx0LDEpLGU9SG4oZSx0LDEpLHQ9WmUoKSxlIT09bnVsbCYmKGJhKGUsMSx0KSxsdChlLHQpKX1mdW5jdGlvbiB4ZShlLHQsbil7aWYoZS50YWc9PT0zKUlmKGUsZSxuKTtlbHNlIGZvcig7dCE9PW51bGw7KXtpZih0LnRhZz09PTMpe0lmKHQsZSxuKTticmVha31lbHNlIGlmKHQudGFnPT09MSl7dmFyIHI9dC5zdGF0ZU5vZGU7aWYodHlwZW9mIHQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I9PSJmdW5jdGlvbiJ8fHR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoR249PT1udWxsfHwhR24uaGFzKHIpKSl7ZT1sbyhuLGUpLGU9c20odCxlLDEpLHQ9SG4odCxlLDEpLGU9WmUoKSx0IT09bnVsbCYmKGJhKHQsMSxlKSxsdCh0LGUpKTticmVha319dD10LnJldHVybn19ZnVuY3Rpb24gV3coZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO3IhPT1udWxsJiZyLmRlbGV0ZSh0KSx0PVplKCksZS5waW5nZWRMYW5lc3w9ZS5zdXNwZW5kZWRMYW5lcyZuLExlPT09ZSYmKFVlJm4pPT09biYmKE9lPT09NHx8T2U9PT0zJiYoVWUmMTMwMDIzNDI0KT09PVVlJiY1MDA+a2UoKS15Yz9mcihlLDApOnZjfD1uKSxsdChlLHQpfWZ1bmN0aW9uIERtKGUsdCl7dD09PTAmJihlLm1vZGUmMT8odD1naSxnaTw8PTEsIShnaSYxMzAwMjM0MjQpJiYoZ2k9NDE5NDMwNCkpOnQ9MSk7dmFyIG49WmUoKTtlPXhuKGUsdCksZSE9PW51bGwmJihiYShlLHQsbiksbHQoZSxuKSl9ZnVuY3Rpb24gQncoZSl7dmFyIHQ9ZS5tZW1vaXplZFN0YXRlLG49MDt0IT09bnVsbCYmKG49dC5yZXRyeUxhbmUpLERtKGUsbil9ZnVuY3Rpb24gancoZSx0KXt2YXIgbj0wO3N3aXRjaChlLnRhZyl7Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtvIT09bnVsbCYmKG49by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKF8oMzE0KSl9ciE9PW51bGwmJnIuZGVsZXRlKHQpLERtKGUsbil9dmFyIENtO0NtPWZ1bmN0aW9uKGUsdCxuKXtpZihlIT09bnVsbClpZihlLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wc3x8aXQuY3VycmVudClhdD0hMDtlbHNle2lmKCEoZS5sYW5lcyZuKSYmISh0LmZsYWdzJjEyOCkpcmV0dXJuIGF0PSExLEF3KGUsdCxuKTthdD0hIShlLmZsYWdzJjEzMTA3Mil9ZWxzZSBhdD0hMSxtZSYmdC5mbGFncyYxMDQ4NTc2JiZSaCh0LFppLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMjp2YXIgcj10LnR5cGU7emkoZSx0KSxlPXQucGVuZGluZ1Byb3BzO3ZhciBvPW9vKHQscWUuY3VycmVudCk7dG8odCxuKSxvPWRjKG51bGwsdCxyLGUsbyxuKTt2YXIgYT1wYygpO3JldHVybiB0LmZsYWdzfD0xLHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwmJnR5cGVvZiBvLnJlbmRlcj09ImZ1bmN0aW9uIiYmby4kJHR5cGVvZj09PXZvaWQgMD8odC50YWc9MSx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsc3Qocik/KGE9ITAsSmkodCkpOmE9ITEsdC5tZW1vaXplZFN0YXRlPW8uc3RhdGUhPT1udWxsJiZvLnN0YXRlIT09dm9pZCAwP28uc3RhdGU6bnVsbCxpYyh0KSxvLnVwZGF0ZXI9eXMsdC5zdGF0ZU5vZGU9byxvLl9yZWFjdEludGVybmFscz10LGt1KHQscixlLG4pLHQ9TnUobnVsbCx0LHIsITAsYSxuKSk6KHQudGFnPTAsbWUmJmEmJlp1KHQpLFhlKG51bGwsdCxvLG4pLHQ9dC5jaGlsZCksdDtjYXNlIDE2OnI9dC5lbGVtZW50VHlwZTtlOntzd2l0Y2goemkoZSx0KSxlPXQucGVuZGluZ1Byb3BzLG89ci5faW5pdCxyPW8oci5fcGF5bG9hZCksdC50eXBlPXIsbz10LnRhZz1IdyhyKSxlPXp0KHIsZSksbyl7Y2FzZSAwOnQ9RXUobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTp0PVNmKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDExOnQ9YmYobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTQ6dD1rZihudWxsLHQscix6dChyLnR5cGUsZSksbik7YnJlYWsgZX10aHJvdyBFcnJvcihfKDMwNixyLCIiKSl9cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzp6dChyLG8pLEV1KGUsdCxyLG8sbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzp6dChyLG8pLFNmKGUsdCxyLG8sbik7Y2FzZSAzOmU6e2lmKGRtKHQpLGU9PT1udWxsKXRocm93IEVycm9yKF8oMzg3KSk7cj10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRTdGF0ZSxvPWEuZWxlbWVudCwkaChlLHQpLG5zKHQscixudWxsLG4pO3ZhciBpPXQubWVtb2l6ZWRTdGF0ZTtpZihyPWkuZWxlbWVudCxhLmlzRGVoeWRyYXRlZClpZihhPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmkuY2FjaGUscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczppLnBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXMsdHJhbnNpdGlvbnM6aS50cmFuc2l0aW9uc30sdC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9YSx0Lm1lbW9pemVkU3RhdGU9YSx0LmZsYWdzJjI1Nil7bz1sbyhFcnJvcihfKDQyMykpLHQpLHQ9RWYoZSx0LHIsbixvKTticmVhayBlfWVsc2UgaWYociE9PW8pe289bG8oRXJyb3IoXyg0MjQpKSx0KSx0PUVmKGUsdCxyLG4sbyk7YnJlYWsgZX1lbHNlIGZvcihmdD1Wbih0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLGh0PXQsbWU9ITAsRnQ9bnVsbCxuPUxoKHQsbnVsbCxyLG4pLHQuY2hpbGQ9bjtuOyluLmZsYWdzPW4uZmxhZ3MmLTN8NDA5NixuPW4uc2libGluZztlbHNle2lmKGFvKCkscj09PW8pe3Q9Ym4oZSx0LG4pO2JyZWFrIGV9WGUoZSx0LHIsbil9dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gRmgodCksZT09PW51bGwmJnd1KHQpLHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsYT1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxpPW8uY2hpbGRyZW4saHUocixvKT9pPW51bGw6YSE9PW51bGwmJmh1KHIsYSkmJih0LmZsYWdzfD0zMiksY20oZSx0KSxYZShlLHQsaSxuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gZT09PW51bGwmJnd1KHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4gcG0oZSx0LG4pO2Nhc2UgNDpyZXR1cm4gc2ModCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9aW8odCxudWxsLHIsbik6WGUoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzp6dChyLG8pLGJmKGUsdCxyLG8sbik7Y2FzZSA3OnJldHVybiBYZShlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6cmV0dXJuIFhlKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuIFhlKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6ZTp7aWYocj10LnR5cGUuX2NvbnRleHQsbz10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRQcm9wcyxpPW8udmFsdWUsY2UoZXMsci5fY3VycmVudFZhbHVlKSxyLl9jdXJyZW50VmFsdWU9aSxhIT09bnVsbClpZihCdChhLnZhbHVlLGkpKXtpZihhLmNoaWxkcmVuPT09by5jaGlsZHJlbiYmIWl0LmN1cnJlbnQpe3Q9Ym4oZSx0LG4pO2JyZWFrIGV9fWVsc2UgZm9yKGE9dC5jaGlsZCxhIT09bnVsbCYmKGEucmV0dXJuPXQpO2EhPT1udWxsOyl7dmFyIHM9YS5kZXBlbmRlbmNpZXM7aWYocyE9PW51bGwpe2k9YS5jaGlsZDtmb3IodmFyIGw9cy5maXJzdENvbnRleHQ7bCE9PW51bGw7KXtpZihsLmNvbnRleHQ9PT1yKXtpZihhLnRhZz09PTEpe2w9dm4oLTEsbiYtbiksbC50YWc9Mjt2YXIgdT1hLnVwZGF0ZVF1ZXVlO2lmKHUhPT1udWxsKXt1PXUuc2hhcmVkO3ZhciBkPXUucGVuZGluZztkPT09bnVsbD9sLm5leHQ9bDoobC5uZXh0PWQubmV4dCxkLm5leHQ9bCksdS5wZW5kaW5nPWx9fWEubGFuZXN8PW4sbD1hLmFsdGVybmF0ZSxsIT09bnVsbCYmKGwubGFuZXN8PW4pLHh1KGEucmV0dXJuLG4sdCkscy5sYW5lc3w9bjticmVha31sPWwubmV4dH19ZWxzZSBpZihhLnRhZz09PTEwKWk9YS50eXBlPT09dC50eXBlP251bGw6YS5jaGlsZDtlbHNlIGlmKGEudGFnPT09MTgpe2lmKGk9YS5yZXR1cm4saT09PW51bGwpdGhyb3cgRXJyb3IoXygzNDEpKTtpLmxhbmVzfD1uLHM9aS5hbHRlcm5hdGUscyE9PW51bGwmJihzLmxhbmVzfD1uKSx4dShpLG4sdCksaT1hLnNpYmxpbmd9ZWxzZSBpPWEuY2hpbGQ7aWYoaSE9PW51bGwpaS5yZXR1cm49YTtlbHNlIGZvcihpPWE7aSE9PW51bGw7KXtpZihpPT09dCl7aT1udWxsO2JyZWFrfWlmKGE9aS5zaWJsaW5nLGEhPT1udWxsKXthLnJldHVybj1pLnJldHVybixpPWE7YnJlYWt9aT1pLnJldHVybn1hPWl9WGUoZSx0LG8uY2hpbGRyZW4sbiksdD10LmNoaWxkfXJldHVybiB0O2Nhc2UgOTpyZXR1cm4gbz10LnR5cGUscj10LnBlbmRpbmdQcm9wcy5jaGlsZHJlbix0byh0LG4pLG89RHQobykscj1yKG8pLHQuZmxhZ3N8PTEsWGUoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDE0OnJldHVybiByPXQudHlwZSxvPXp0KHIsdC5wZW5kaW5nUHJvcHMpLG89enQoci50eXBlLG8pLGtmKGUsdCxyLG8sbik7Y2FzZSAxNTpyZXR1cm4gbG0oZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzp6dChyLG8pLHppKGUsdCksdC50YWc9MSxzdChyKT8oZT0hMCxKaSh0KSk6ZT0hMSx0byh0LG4pLGFtKHQscixvKSxrdSh0LHIsbyxuKSxOdShudWxsLHQsciwhMCxlLG4pO2Nhc2UgMTk6cmV0dXJuIGZtKGUsdCxuKTtjYXNlIDIyOnJldHVybiB1bShlLHQsbil9dGhyb3cgRXJyb3IoXygxNTYsdC50YWcpKX07ZnVuY3Rpb24gX20oZSx0KXtyZXR1cm4gbmgoZSx0KX1mdW5jdGlvbiBWdyhlLHQsbixyKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBOdChlLHQsbixyKXtyZXR1cm4gbmV3IFZ3KGUsdCxuLHIpfWZ1bmN0aW9uIGtjKGUpe3JldHVybiBlPWUucHJvdG90eXBlLCEoIWV8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIEh3KGUpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBrYyhlKT8xOjA7aWYoZSE9bnVsbCl7aWYoZT1lLiQkdHlwZW9mLGU9PT1XdSlyZXR1cm4gMTE7aWYoZT09PUJ1KXJldHVybiAxNH1yZXR1cm4gMn1mdW5jdGlvbiBZbihlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBuPT09bnVsbD8obj1OdChlLnRhZyx0LGUua2V5LGUubW9kZSksbi5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLG4udHlwZT1lLnR5cGUsbi5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsbi5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT1uKToobi5wZW5kaW5nUHJvcHM9dCxuLnR5cGU9ZS50eXBlLG4uZmxhZ3M9MCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLG4uZmxhZ3M9ZS5mbGFncyYxNDY4MDA2NCxuLmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzLG4ubGFuZXM9ZS5sYW5lcyxuLmNoaWxkPWUuY2hpbGQsbi5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxuLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLG4udXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0PWUuZGVwZW5kZW5jaWVzLG4uZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSxuLnNpYmxpbmc9ZS5zaWJsaW5nLG4uaW5kZXg9ZS5pbmRleCxuLnJlZj1lLnJlZixufWZ1bmN0aW9uIFVpKGUsdCxuLHIsbyxhKXt2YXIgaT0yO2lmKHI9ZSx0eXBlb2YgZT09ImZ1bmN0aW9uIilrYyhlKSYmKGk9MSk7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpaT01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBVcjpyZXR1cm4gaHIobi5jaGlsZHJlbixvLGEsdCk7Y2FzZSBVdTppPTgsb3w9ODticmVhaztjYXNlIEdsOnJldHVybiBlPU50KDEyLG4sdCxvfDIpLGUuZWxlbWVudFR5cGU9R2wsZS5sYW5lcz1hLGU7Y2FzZSBLbDpyZXR1cm4gZT1OdCgxMyxuLHQsbyksZS5lbGVtZW50VHlwZT1LbCxlLmxhbmVzPWEsZTtjYXNlIFlsOnJldHVybiBlPU50KDE5LG4sdCxvKSxlLmVsZW1lbnRUeXBlPVlsLGUubGFuZXM9YSxlO2Nhc2UgRmY6cmV0dXJuIGJzKG4sbyxhLHQpO2RlZmF1bHQ6aWYodHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbClzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB6ZjppPTEwO2JyZWFrIGU7Y2FzZSAkZjppPTk7YnJlYWsgZTtjYXNlIFd1Omk9MTE7YnJlYWsgZTtjYXNlIEJ1Omk9MTQ7YnJlYWsgZTtjYXNlIFBuOmk9MTYscj1udWxsO2JyZWFrIGV9dGhyb3cgRXJyb3IoXygxMzAsZT09bnVsbD9lOnR5cGVvZiBlLCIiKSl9cmV0dXJuIHQ9TnQoaSxuLHQsbyksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1yLHQubGFuZXM9YSx0fWZ1bmN0aW9uIGhyKGUsdCxuLHIpe3JldHVybiBlPU50KDcsZSxyLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIGJzKGUsdCxuLHIpe3JldHVybiBlPU50KDIyLGUscix0KSxlLmVsZW1lbnRUeXBlPUZmLGUubGFuZXM9bixlLnN0YXRlTm9kZT17aXNIaWRkZW46ITF9LGV9ZnVuY3Rpb24gamwoZSx0LG4pe3JldHVybiBlPU50KDYsZSxudWxsLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIFZsKGUsdCxuKXtyZXR1cm4gdD1OdCg0LGUuY2hpbGRyZW4hPT1udWxsP2UuY2hpbGRyZW46W10sZS5rZXksdCksdC5sYW5lcz1uLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIEd3KGUsdCxuLHIsbyl7dGhpcy50YWc9dCx0aGlzLmNvbnRhaW5lckluZm89ZSx0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5jYWxsYmFja05vZGU9dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV2ZW50VGltZXM9RGwoMCksdGhpcy5leHBpcmF0aW9uVGltZXM9RGwoLTEpLHRoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9RGwoMCksdGhpcy5pZGVudGlmaWVyUHJlZml4PXIsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9byx0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1mdW5jdGlvbiBTYyhlLHQsbixyLG8sYSxpLHMsbCl7cmV0dXJuIGU9bmV3IEd3KGUsdCxuLHMsbCksdD09PTE/KHQ9MSxhPT09ITAmJih0fD04KSk6dD0wLGE9TnQoMyxudWxsLG51bGwsdCksZS5jdXJyZW50PWEsYS5zdGF0ZU5vZGU9ZSxhLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6bixjYWNoZTpudWxsLHRyYW5zaXRpb25zOm51bGwscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpudWxsfSxpYyhhKSxlfWZ1bmN0aW9uIEt3KGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6RnIsa2V5OnI9PW51bGw/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fWZ1bmN0aW9uIEFtKGUpe2lmKCFlKXJldHVybiBRbjtlPWUuX3JlYWN0SW50ZXJuYWxzO2U6e2lmKGJyKGUpIT09ZXx8ZS50YWchPT0xKXRocm93IEVycm9yKF8oMTcwKSk7dmFyIHQ9ZTtkb3tzd2l0Y2godC50YWcpe2Nhc2UgMzp0PXQuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgZTtjYXNlIDE6aWYoc3QodC50eXBlKSl7dD10LnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBlfX10PXQucmV0dXJufXdoaWxlKHQhPT1udWxsKTt0aHJvdyBFcnJvcihfKDE3MSkpfWlmKGUudGFnPT09MSl7dmFyIG49ZS50eXBlO2lmKHN0KG4pKXJldHVybiBBaChlLG4sdCl9cmV0dXJuIHR9ZnVuY3Rpb24gT20oZSx0LG4scixvLGEsaSxzLGwpe3JldHVybiBlPVNjKG4sciwhMCxlLG8sYSxpLHMsbCksZS5jb250ZXh0PUFtKG51bGwpLG49ZS5jdXJyZW50LHI9WmUoKSxvPUtuKG4pLGE9dm4ocixvKSxhLmNhbGxiYWNrPXQ/P251bGwsSG4obixhLG8pLGUuY3VycmVudC5sYW5lcz1vLGJhKGUsbyxyKSxsdChlLHIpLGV9ZnVuY3Rpb24ga3MoZSx0LG4scil7dmFyIG89dC5jdXJyZW50LGE9WmUoKSxpPUtuKG8pO3JldHVybiBuPUFtKG4pLHQuY29udGV4dD09PW51bGw/dC5jb250ZXh0PW46dC5wZW5kaW5nQ29udGV4dD1uLHQ9dm4oYSxpKSx0LnBheWxvYWQ9e2VsZW1lbnQ6ZX0scj1yPT09dm9pZCAwP251bGw6cixyIT09bnVsbCYmKHQuY2FsbGJhY2s9ciksZT1IbihvLHQsaSksZSE9PW51bGwmJihXdChlLG8saSxhKSxNaShlLG8saSkpLGl9ZnVuY3Rpb24gY3MoZSl7aWYoZT1lLmN1cnJlbnQsIWUuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGUuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBNZihlLHQpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT1uIT09MCYmbjx0P246dH19ZnVuY3Rpb24gRWMoZSx0KXtNZihlLHQpLChlPWUuYWx0ZXJuYXRlKSYmTWYoZSx0KX1mdW5jdGlvbiBZdygpe3JldHVybiBudWxsfXZhciBSbT10eXBlb2YgcmVwb3J0RXJyb3I9PSJmdW5jdGlvbiI/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX07ZnVuY3Rpb24gTmMoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9U3MucHJvdG90eXBlLnJlbmRlcj1OYy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdDtpZih0PT09bnVsbCl0aHJvdyBFcnJvcihfKDQwOSkpO2tzKGUsdCxudWxsLG51bGwpfTtTcy5wcm90b3R5cGUudW5tb3VudD1OYy5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihlIT09bnVsbCl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIHQ9ZS5jb250YWluZXJJbmZvO3dyKGZ1bmN0aW9uKCl7a3MobnVsbCxlLG51bGwsbnVsbCl9KSx0W3duXT1udWxsfX07ZnVuY3Rpb24gU3MoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9U3MucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXVoKCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjx6bi5sZW5ndGgmJnQhPT0wJiZ0PHpuW25dLnByaW9yaXR5O24rKyk7em4uc3BsaWNlKG4sMCxlKSxuPT09MCYmZGgoZSl9fTtmdW5jdGlvbiBUYyhlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09MSYmZS5ub2RlVHlwZSE9PTkmJmUubm9kZVR5cGUhPT0xMSl9ZnVuY3Rpb24gRXMoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEmJihlLm5vZGVUeXBlIT09OHx8ZS5ub2RlVmFsdWUhPT0iIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICIpKX1mdW5jdGlvbiBQZigpe31mdW5jdGlvbiBxdyhlLHQsbixyLG8pe2lmKG8pe2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgYT1yO3I9ZnVuY3Rpb24oKXt2YXIgdT1jcyhpKTthLmNhbGwodSl9fXZhciBpPU9tKHQscixlLDAsbnVsbCwhMSwhMSwiIixQZik7cmV0dXJuIGUuX3JlYWN0Um9vdENvbnRhaW5lcj1pLGVbd25dPWkuY3VycmVudCxwYShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksd3IoKSxpfWZvcig7bz1lLmxhc3RDaGlsZDspZS5yZW1vdmVDaGlsZChvKTtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIHM9cjtyPWZ1bmN0aW9uKCl7dmFyIHU9Y3MobCk7cy5jYWxsKHUpfX12YXIgbD1TYyhlLDAsITEsbnVsbCxudWxsLCExLCExLCIiLFBmKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPWwsZVt3bl09bC5jdXJyZW50LHBhKGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZTplKSx3cihmdW5jdGlvbigpe2tzKHQsbCxuLHIpfSksbH1mdW5jdGlvbiBOcyhlLHQsbixyLG8pe3ZhciBhPW4uX3JlYWN0Um9vdENvbnRhaW5lcjtpZihhKXt2YXIgaT1hO2lmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXt2YXIgcz1vO289ZnVuY3Rpb24oKXt2YXIgbD1jcyhpKTtzLmNhbGwobCl9fWtzKHQsaSxlLG8pfWVsc2UgaT1xdyhuLHQsZSxvLHIpO3JldHVybiBjcyhpKX1zaD1mdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzp2YXIgdD1lLnN0YXRlTm9kZTtpZih0LmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBuPUtvKHQucGVuZGluZ0xhbmVzKTtuIT09MCYmKEh1KHQsbnwxKSxsdCh0LGtlKCkpLCEoUSY2KSYmKHVvPWtlKCkrNTAwLFpuKCkpKX1icmVhaztjYXNlIDEzOndyKGZ1bmN0aW9uKCl7dmFyIHI9eG4oZSwxKTtpZihyIT09bnVsbCl7dmFyIG89WmUoKTtXdChyLGUsMSxvKX19KSxFYyhlLDEpfX07R3U9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9eG4oZSwxMzQyMTc3MjgpO2lmKHQhPT1udWxsKXt2YXIgbj1aZSgpO1d0KHQsZSwxMzQyMTc3Mjgsbil9RWMoZSwxMzQyMTc3MjgpfX07bGg9ZnVuY3Rpb24oZSl7aWYoZS50YWc9PT0xMyl7dmFyIHQ9S24oZSksbj14bihlLHQpO2lmKG4hPT1udWxsKXt2YXIgcj1aZSgpO1d0KG4sZSx0LHIpfUVjKGUsdCl9fTt1aD1mdW5jdGlvbigpe3JldHVybiBuZX07Y2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZTt0cnl7cmV0dXJuIG5lPWUsdCgpfWZpbmFsbHl7bmU9bn19O291PWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSJpbnB1dCI6aWYoSmwoZSxuKSx0PW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZ0IT1udWxsKXtmb3Iobj1lO24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrdCkrJ11bdHlwZT0icmFkaW8iXScpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtpZihyIT09ZSYmci5mb3JtPT09ZS5mb3JtKXt2YXIgbz1tcyhyKTtpZighbyl0aHJvdyBFcnJvcihfKDkwKSk7V2YociksSmwocixvKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOmpmKGUsbik7YnJlYWs7Y2FzZSJzZWxlY3QiOnQ9bi52YWx1ZSx0IT1udWxsJiZKcihlLCEhbi5tdWx0aXBsZSx0LCExKX19O1FmPXdjO0pmPXdyO3ZhciBRdz17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpbU2EsVnIsbXMsWWYscWYsd2NdfSxqbz17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6Y3IsYnVuZGxlVHlwZTowLHZlcnNpb246IjE4LjMuMSIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0sSnc9e2J1bmRsZVR5cGU6am8uYnVuZGxlVHlwZSx2ZXJzaW9uOmpvLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTpqby5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOmpvLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRFcnJvckhhbmRsZXI6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOmtuLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZWgoZSksZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6am8uZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFl3LGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGwscmVjb25jaWxlclZlcnNpb246IjE4LjMuMS1uZXh0LWYxMzM4ZjgwODAtMjAyNDA0MjYifTtpZih0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPCJ1IiYmKFZvPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywhVm8uaXNEaXNhYmxlZCYmVm8uc3VwcG9ydHNGaWJlcikpdHJ5e2RzPVZvLmluamVjdChKdyksdG49Vm99Y2F0Y2h7fXZhciBWbzt2dC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1Rdzt2dC5jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj0yPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtpZighVGModCkpdGhyb3cgRXJyb3IoXygyMDApKTtyZXR1cm4gS3coZSx0LG51bGwsbil9O3Z0LmNyZWF0ZVJvb3Q9ZnVuY3Rpb24oZSx0KXtpZighVGMoZSkpdGhyb3cgRXJyb3IoXygyOTkpKTt2YXIgbj0hMSxyPSIiLG89Um07cmV0dXJuIHQhPW51bGwmJih0LnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG49ITApLHQuaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKHI9dC5pZGVudGlmaWVyUHJlZml4KSx0Lm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKG89dC5vblJlY292ZXJhYmxlRXJyb3IpKSx0PVNjKGUsMSwhMSxudWxsLG51bGwsbiwhMSxyLG8pLGVbd25dPXQuY3VycmVudCxwYShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksbmV3IE5jKHQpfTt2dC5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKGUubm9kZVR5cGU9PT0xKXJldHVybiBlO3ZhciB0PWUuX3JlYWN0SW50ZXJuYWxzO2lmKHQ9PT12b2lkIDApdGhyb3cgdHlwZW9mIGUucmVuZGVyPT0iZnVuY3Rpb24iP0Vycm9yKF8oMTg4KSk6KGU9T2JqZWN0LmtleXMoZSkuam9pbigiLCIpLEVycm9yKF8oMjY4LGUpKSk7cmV0dXJuIGU9ZWgodCksZT1lPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlLGV9O3Z0LmZsdXNoU3luYz1mdW5jdGlvbihlKXtyZXR1cm4gd3IoZSl9O3Z0Lmh5ZHJhdGU9ZnVuY3Rpb24oZSx0LG4pe2lmKCFFcyh0KSl0aHJvdyBFcnJvcihfKDIwMCkpO3JldHVybiBOcyhudWxsLGUsdCwhMCxuKX07dnQuaHlkcmF0ZVJvb3Q9ZnVuY3Rpb24oZSx0LG4pe2lmKCFUYyhlKSl0aHJvdyBFcnJvcihfKDQwNSkpO3ZhciByPW4hPW51bGwmJm4uaHlkcmF0ZWRTb3VyY2VzfHxudWxsLG89ITEsYT0iIixpPVJtO2lmKG4hPW51bGwmJihuLnVuc3RhYmxlX3N0cmljdE1vZGU9PT0hMCYmKG89ITApLG4uaWRlbnRpZmllclByZWZpeCE9PXZvaWQgMCYmKGE9bi5pZGVudGlmaWVyUHJlZml4KSxuLm9uUmVjb3ZlcmFibGVFcnJvciE9PXZvaWQgMCYmKGk9bi5vblJlY292ZXJhYmxlRXJyb3IpKSx0PU9tKHQsbnVsbCxlLDEsbj8/bnVsbCxvLCExLGEsaSksZVt3bl09dC5jdXJyZW50LHBhKGUpLHIpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyluPXJbZV0sbz1uLl9nZXRWZXJzaW9uLG89byhuLl9zb3VyY2UpLHQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT09bnVsbD90Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W24sb106dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobixvKTtyZXR1cm4gbmV3IFNzKHQpfTt2dC5yZW5kZXI9ZnVuY3Rpb24oZSx0LG4pe2lmKCFFcyh0KSl0aHJvdyBFcnJvcihfKDIwMCkpO3JldHVybiBOcyhudWxsLGUsdCwhMSxuKX07dnQudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihlKXtpZighRXMoZSkpdGhyb3cgRXJyb3IoXyg0MCkpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI/KHdyKGZ1bmN0aW9uKCl7TnMobnVsbCxudWxsLGUsITEsZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW3duXT1udWxsfSl9KSwhMCk6ITF9O3Z0LnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPXdjO3Z0LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFFcyhuKSl0aHJvdyBFcnJvcihfKDIwMCkpO2lmKGU9PW51bGx8fGUuX3JlYWN0SW50ZXJuYWxzPT09dm9pZCAwKXRocm93IEVycm9yKF8oMzgpKTtyZXR1cm4gTnMoZSx0LG4sITEscil9O3Z0LnZlcnNpb249IjE4LjMuMS1uZXh0LWYxMzM4ZjgwODAtMjAyNDA0MjYifSk7dmFyIExtPWlyKChLRSxQbSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTW0oKXtpZighKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18+InUifHx0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFIT0iZnVuY3Rpb24iKSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKE1tKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX1NbSgpLFBtLmV4cG9ydHM9SW0oKX0pO3ZhciAkbT1pcihEYz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgem09TG0oKTtEYy5jcmVhdGVSb290PXptLmNyZWF0ZVJvb3QsRGMuaHlkcmF0ZVJvb3Q9em0uaHlkcmF0ZVJvb3Q7dmFyIFlFfSk7dmFyIGJ5PWxlKGllKCksMSksa3k9bGUoJG0oKSwxKTt2YXIganQ9e0RFRkFVTFQ6ImRlZmF1bHQiLExBWU9VVF9DT05GSUc6ImxheW91dENvbmZpZyIsU0VUVElOR1NfQ09ORklHOiJzZXR0aW5nc0NvbmZpZyJ9O3ZhciBGbT10eXBlb2YgcHJvY2VzczwidSImJiExLFNuPSExLENjPTMwLHJuPSJwbHVnaW5zL2Rhc2hib2FyZCIsVHM9InBsYW5uaW5nL3F1YXJ0ZXJseSI7dmFyIFY9e0xMTV9BUElfS0VZOiJMTE0gQVBJIEtleSIsTExNX1BST1ZJREVSOiJMTE0gUHJvdmlkZXIiLEJBQ0tHUk9VTkRfSU1BR0VfVVJMOiJCYWNrZ3JvdW5kIEltYWdlIFVSTCIsQkFDS0dST1VORF9JTUFHRV9NT0RFOiJCYWNrZ3JvdW5kIEltYWdlIE1vZGUiLENPTlNPTEVfTE9HR0lORzoiQ29uc29sZSBsb2dnaW5nIixEQVNIQk9BUkRfQ09NUE9ORU5UUzoiZGFzaGJvYXJkX2VsZW1lbnRzIixUQVNLX0RPTUFJTlM6ImRhc2hib2FyZF90YXNrX2RvbWFpbnMiLFBMQU5OSU5HX05PVEVfVEFHOiJUYWcgdG8gYXBwbHkgdG8gcGxhbm5pbmcgbm90ZXMifTtmdW5jdGlvbiBvbihlKXtyZXR1cm5gZGFzaGJvYXJkXyR7ZX1fY29uZmlnYH1mdW5jdGlvbiBmbyhlLHQpe2xldCBuPWUuc2V0dGluZ3M/Lltvbih0KV07aWYoIW4pcmV0dXJuW107aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbjt0cnl7cmV0dXJuIEpTT04ucGFyc2Uobil9Y2F0Y2h7cmV0dXJuW119fXZhciBVbT1be3ZhbHVlOiJjb3ZlciIsbGFiZWw6IkNvdmVyIChmaWxsIGVudGlyZSBiYWNrZ3JvdW5kKSJ9LHt2YWx1ZToiY29udGFpbiIsbGFiZWw6IkNvbnRhaW4gKGZpdCB3aXRob3V0IGNyb3BwaW5nKSJ9LHt2YWx1ZToicmVwZWF0IixsYWJlbDoiUmVwZWF0ICh0aWxlIHRoZSBpbWFnZSkifSx7dmFsdWU6InJlcGVhdC14IixsYWJlbDoiUmVwZWF0IGhvcml6b250YWxseSJ9LHt2YWx1ZToicmVwZWF0LXkiLGxhYmVsOiJSZXBlYXQgdmVydGljYWxseSJ9LHt2YWx1ZToibm8tcmVwZWF0IixsYWJlbDoiTm8gcmVwZWF0IChzaW5nbGUgY2VudGVyZWQgaW1hZ2UpIn1dLFFFPVYuREFTSEJPQVJEX0NPTVBPTkVOVFMsSkU9Vi5UQVNLX0RPTUFJTlMsWEU9Vi5QTEFOTklOR19OT1RFX1RBRyxYdz0yNCo2MCo2MCoxZTMsYW49W3t3aWRnZXRJZDoicGxhbm5pbmciLG5hbWU6IlF1YXJ0ZXJseSBQbGFubmluZyIsZGVzY3JpcHRpb246IlBsYW4gYW5kIHRyYWNrIHlvdXIgcXVhcnRlcmx5IGdvYWxzIGFuZCBwcmlvcml0aWVzIixpY29uOiJcdXsxRjRDQn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InZpY3RvcnktdmFsdWUiLG5hbWU6IlZpY3RvcnkgVmFsdWUiLGRlc2NyaXB0aW9uOiJDZWxlYnJhdGUgd2lucyBhbmQgdHJhY2sgaGlnaC12YWx1ZSB0YXNrIGNvbXBsZXRpb25zIixpY29uOiJcdXsxRjNDNn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6Im1vb2QiLG5hbWU6Ik1vb2QgVHJhY2tlciIsdmlzaWJsZVRpdGxlOiJIb3cgYXJlIHlvdSBmZWVsaW5nPyIsZGVzY3JpcHRpb246IkxvZyB5b3VyIGRhaWx5IG1vb2QgYW5kIHZpc3VhbGl6ZSB0cmVuZHMgb3ZlciB0aW1lIixpY29uOiJcdXsxRjNBRH0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjEsbWF4SG9yaXpvbnRhbFRpbGVzOjIsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6ImNhbGVuZGFyIixuYW1lOiJDYWxlbmRhciIsZGVzY3JpcHRpb246IlNlZSB1cGNvbWluZyBldmVudHMgYW5kIGFwcG9pbnRtZW50cyBhdCBhIGdsYW5jZSIsaWNvbjoiXHV7MUY0QzV9IixkZWZhdWx0R3JpZFdpZHRoU2l6ZToxLG1heEhvcml6b250YWxUaWxlczoyLG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJhZ2VuZGEiLG5hbWU6IlRhc2sgQWdlbmRhIixkZXNjcmlwdGlvbjoiVmlldyBhbmQgbWFuYWdlIHlvdXIgcHJpb3JpdGl6ZWQgdGFzayBsaXN0IixpY29uOiJcdXsxRjRDQ30iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InF1b3RlcyIsbmFtZToiSW5zcGlyYXRpb24gUXVvdGVzIixkZXNjcmlwdGlvbjoiUm90YXRpbmcgaW5zcGlyYXRpb25hbCBxdW90ZXMgdG8ga2VlcCB5b3UgbW90aXZhdGVkIixpY29uOiJcdXsxRjRBMX0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InJlY2VudC1ub3RlcyIsbmFtZToiUmV2aXNpdCBDYW5kaWRhdGUiLGRlc2NyaXB0aW9uOiJOb3RlcyB3aXRoIG9wZW4gdGFza3MgdGhhdCBoYXZlIG5vdCBoYWQgYSBuZXcgdGFzayBpbiBvdmVyIGEgd2VlayIsaWNvbjoiXHV7MUY0RER9IixkZWZhdWx0R3JpZFdpZHRoU2l6ZToxLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJxdWljay1hY3Rpb25zIixuYW1lOiJRdWljayBBY3Rpb25zIixkZXNjcmlwdGlvbjoiU2hvcnRjdXRzIGZvciB5b3VyIG1vc3QgZnJlcXVlbnRseSB1c2VkIGRhc2hib2FyZCBhY3Rpb25zIixpY29uOiJcdTI2QTEiLGRlZmF1bHRHcmlkV2lkdGhTaXplOjEsbWF4SG9yaXpvbnRhbFRpbGVzOjIsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6ImRyZWFtLXRhc2siLG5hbWU6IkRyZWFtVGFzayIsZGVzY3JpcHRpb246IkFJLXN1Z2dlc3RlZCB0YXNrcyBhbGlnbmVkIHdpdGggeW91ciBxdWFydGVybHkgYW5kIG1vbnRobHkgZ29hbHMiLGljb246Ilx1ezFGNTJFfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicGVhay1ob3VycyIsbmFtZToiUGVhayBIb3VycyIsZGVzY3JpcHRpb246IkhvdXJseSBkaXN0cmlidXRpb24gb2YgdGFzayBjcmVhdGlvbiBhbmQgY29tcGxldGlvbiBhY3Rpdml0eSIsaWNvbjoiXHUyM0YwIixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJkYXktc2tldGNoIixuYW1lOiJEYXkgU2tldGNoZXIiLGRlc2NyaXB0aW9uOiJOb3RlYm9vay1wYXBlciBkYXkgcGxhbm5lciB3aXRoIGhvdXItYnktaG91ciBlbnRyaWVzIHNhdmVkIHRvIGEgbm90ZSIsaWNvbjoiXHV7MUY1RDJ9XHVGRTBGIixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn1dO2Z1bmN0aW9uIFooZSl7bGV0IHQ9YW4uZmluZChuPT5uLndpZGdldElkPT09ZSk7cmV0dXJuIHQ/LnZpc2libGVUaXRsZXx8dD8ubmFtZXx8ZX1mdW5jdGlvbiBXbShlKXtyZXR1cm4gYW4uZmluZCh0PT50LndpZGdldElkPT09ZSl8fG51bGx9dmFyIGhvPWFuLm1hcChlPT4oe3dpZGdldElkOmUud2lkZ2V0SWQsZ3JpZFdpZHRoU2l6ZTplLmRlZmF1bHRHcmlkV2lkdGhTaXplLGdyaWRIZWlnaHRTaXplOjEsc2V0dGluZ3M6e319KSk7dmFyIEJtPSJDb25zb2xlIGxvZ2dpbmciO2Z1bmN0aW9uIERzKGUpe3JldHVybmBkYXNoYm9hcmRfJHtlfV9jb25maWdgfWZ1bmN0aW9uIF9jKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy51dWlkfWZ1bmN0aW9uIFltKGUpe3JldHVybihlLm1hdGNoKC9eKCN7MSw2fSlccysoLispJC9nbSl8fFtdKS5tYXAoKG4scik9Pih7aGVhZGluZzp7dGV4dDpuLnJlcGxhY2UoL14jezEsNn1ccysvLCIiKS50cmltKCksbGV2ZWw6KG4ubWF0Y2goL14jKy8pfHxbIiJdKVswXS5sZW5ndGh9LGluZGV4OnJ9KSl9ZnVuY3Rpb24gT2MoZSl7cmV0dXJuIGU9PW51bGw/bnVsbDplPDFlMTA/ZSoxZTM6ZX1mdW5jdGlvbiBadyhlKXtsZXQgdD1uZXcgRGF0ZShlKSxuPXQuZ2V0RGF5KCk7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKS1uKyhuPT09MD8tNjoxKSksdC5zZXRIb3VycygwLDAsMCwwKSx0fWZ1bmN0aW9uIGV4KGUsdCl7bGV0IG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpLHI9bis4NjRlNTtyZXR1cm4gZS5maWx0ZXIobz0+e2xldCBhPU9jKG8uc3RhcnRBdCk7cmV0dXJuIW8uY29tcGxldGVkQXQmJiFvLmRpc21pc3NlZEF0JiZhIT1udWxsJiZhPj1uJiZhPHJ9KX1mdW5jdGlvbiBxbShlLHQpe2xldCBuPXQuZ2V0VGltZSgpLHI9bis3Kjg2NGU1O3JldHVybiBlLmZpbHRlcihvPT57bGV0IGE9T2Moby5jb21wbGV0ZWRBdCk7cmV0dXJuIGEhPW51bGwmJmE+PW4mJmE8cn0pfWZ1bmN0aW9uIHR4KGUsdCl7cmV0dXJuIHFtKGUsdCkucmVkdWNlKChuLHIpPT5uKyhyLnZpY3RvcnlWYWx1ZXx8MCksMCl9ZnVuY3Rpb24gbngoZSx0KXtyZXR1cm5bIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCIsIlN1biJdLm1hcCgocixvKT0+e2xldCBhPW5ldyBEYXRlKHQpO2Euc2V0RGF0ZShhLmdldERhdGUoKStvKTtsZXQgaT1uZXcgRGF0ZShhKTtpLnNldERhdGUoaS5nZXREYXRlKCkrMSk7bGV0IHM9ZS5maWx0ZXIobD0+e2xldCB1PU9jKGwuY29tcGxldGVkQXQpO3JldHVybiB1IT1udWxsJiZ1Pj1hLmdldFRpbWUoKSYmdTxpLmdldFRpbWUoKX0pO3JldHVybntkYXk6cixkYXRlOmEudG9JU09TdHJpbmcoKSx2YWx1ZTpzLnJlZHVjZSgobCx1KT0+bCsodS52aWN0b3J5VmFsdWV8fDApLDApLHRhc2tDb3VudDpzLmxlbmd0aH19KX1mdW5jdGlvbiBqbShlKXtsZXQgdD1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbj0oZS0xKSozO3JldHVyblt0W25dLHRbbisxXSx0W24rMl1dfXZhciBOYT1udWxsO2FzeW5jIGZ1bmN0aW9uIFFtKCl7aWYoTmEhPT1udWxsKXJldHVybiBOYTt0cnl7TmE9YXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvc2V0dGluZ3MiKSkuanNvbigpfWNhdGNoe05hPXt9fXJldHVybiBOYX1hc3luYyBmdW5jdGlvbiByeChlLHQpe2xldCBuPWF3YWl0IFFtKCk7bltlXT10O3RyeXthd2FpdCBmZXRjaCgiL2FwaS9zZXR0aW5ncyIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtrZXk6ZSx2YWx1ZTp0fSl9KX1jYXRjaChyKXtjb25zb2xlLndhcm4oIltkZXYtYXBwXSBmYWlsZWQgdG8gcGVyc2lzdCBzZXR0aW5nIixlLHIpfX1hc3luYyBmdW5jdGlvbiBWbSgpe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvdGFza3MiKSkuanNvbigpfWNhdGNoe3JldHVybltdfX1hc3luYyBmdW5jdGlvbiBveChlLHQpe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvdGFza3M/ZnJvbT0ke2V9JnRvPSR7dH1gKSkuanNvbigpfWNhdGNoe3JldHVybltdfX1hc3luYyBmdW5jdGlvbiBIbShlKXt0cnl7bGV0IHQ9ZT9gL2FwaS9tb29kcz9mcm9tPSR7ZX1gOiIvYXBpL21vb2RzIjtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2godCkpLmpzb24oKX1jYXRjaHtyZXR1cm5bXX19dmFyIEFjPXsiZG9tYWluLXdvcmstdXVpZCI6W3t1dWlkOiJub3RlLXdvcmstMSIsbmFtZToiUTEgR29hbCBSZXZpZXcifSx7dXVpZDoibm90ZS13b3JrLTIiLG5hbWU6IlN0YW5kLXVwIE5vdGVzIn0se3V1aWQ6Im5vdGUtd29yay0zIixuYW1lOiJGZWF0dXJlIEltcGxlbWVudGF0aW9uIn0se3V1aWQ6Im5vdGUtd29yay00IixuYW1lOiJEZXNpZ24gRmVlZGJhY2sifSx7dXVpZDoibm90ZS13b3JrLTUiLG5hbWU6IkJ1ZGdldCBUcmFja2VyIn0se3V1aWQ6Im5vdGUtd29yay02IixuYW1lOiJPZmZsaW5lIFRlc3RpbmcifSx7dXVpZDoibm90ZS13b3JrLTciLG5hbWU6IlNwcmludCBSZXRybyJ9LHt1dWlkOiJub3RlLXdvcmstOCIsbmFtZToiQVBJIExheWVyIFJlc2VhcmNoIn0se3V1aWQ6Im5vdGUtd29yay05IixuYW1lOiJJbnRlZ3JhdGlvbiBUZXN0cyJ9LHt1dWlkOiJub3RlLXdvcmstMTAiLG5hbWU6IlB1bGwgUmVxdWVzdCBRdWV1ZSJ9LHt1dWlkOiJub3RlLXdvcmstMTEiLG5hbWU6IlNldHRpbmdzIE1vZHVsZSBUZXN0cyJ9LHt1dWlkOiJub3RlLXdvcmstMTIiLG5hbWU6IkNTUyBDbGVhbnVwIn0se3V1aWQ6Im5vdGUtd29yay0xMyIsbmFtZToiRGFzaGJvYXJkIE1lbW9yeSBMZWFrIn0se3V1aWQ6Im5vdGUtd29yay0xNCIsbmFtZToiQ2xpZW50IEZlZWRiYWNrIn0se3V1aWQ6Im5vdGUtd29yay0xNSIsbmFtZToiQVBJIEVycm9yIEhhbmRsaW5nIn0se3V1aWQ6Im5vdGUtd29yay0xNiIsbmFtZToiQXV0aCBUb2tlbiBSZWZyZXNoIn0se3V1aWQ6Im5vdGUtd29yay0xNyIsbmFtZToiREIgUXVlcnkgUGVyZm9ybWFuY2UifV0sImRvbWFpbi1wZXJzb25hbC11dWlkIjpbe3V1aWQ6Im5vdGUtcGVyc29uYWwtMSIsbmFtZToiTmV0d29ya2luZyBPdXRyZWFjaCJ9LHt1dWlkOiJub3RlLXBlcnNvbmFsLTIiLG5hbWU6IkZpdG5lc3MgTG9nIn0se3V1aWQ6Im5vdGUtcGVyc29uYWwtMyIsbmFtZToiU29jaWFsIFJlbWluZGVycyJ9LHt1dWlkOiJub3RlLXBlcnNvbmFsLTQiLG5hbWU6IkVudGVydGFpbm1lbnQifSx7dXVpZDoibm90ZS1wZXJzb25hbC01IixuYW1lOiJTaG9wcGluZyBMaXN0In0se3V1aWQ6Im5vdGUtcGVyc29uYWwtNiIsbmFtZToiSGVhbHRoIEFwcG9pbnRtZW50cyJ9LHt1dWlkOiJub3RlLXBlcnNvbmFsLTciLG5hbWU6IlJlYWRpbmcgTGlzdCJ9LHt1dWlkOiJub3RlLXBlcnNvbmFsLTgiLG5hbWU6IkhvYmJpZXMifSx7dXVpZDoibm90ZS1wZXJzb25hbC05IixuYW1lOiJUcmlwIFBsYW5uaW5nIn0se3V1aWQ6Im5vdGUtcGVyc29uYWwtMTAiLG5hbWU6IkhvbWUgT2ZmaWNlIn1dLCJkb21haW4tc2lkZS11dWlkIjpbe3V1aWQ6Im5vdGUtc2lkZS0xIixuYW1lOiJCbG9nIFBvc3QgSWRlYXMifSx7dXVpZDoibm90ZS1zaWRlLTIiLG5hbWU6IlNpZGUgUHJvamVjdCBSRUFETUUifSx7dXVpZDoibm90ZS1zaWRlLTMiLG5hbWU6IkNJIFBpcGVsaW5lIFNldHVwIn1dfSxheD1be25hbWU6IldvcmsiLHV1aWQ6ImRvbWFpbi13b3JrLXV1aWQiLG5vdGVzOkFjWyJkb21haW4td29yay11dWlkIl19LHtuYW1lOiJQZXJzb25hbCIsdXVpZDoiZG9tYWluLXBlcnNvbmFsLXV1aWQiLG5vdGVzOkFjWyJkb21haW4tcGVyc29uYWwtdXVpZCJdfSx7bmFtZToiU2lkZSBQcm9qZWN0cyIsdXVpZDoiZG9tYWluLXNpZGUtdXVpZCIsbm90ZXM6QWNbImRvbWFpbi1zaWRlLXV1aWQiXX1dO2FzeW5jIGZ1bmN0aW9uIEdtKGUpe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9YCkpLmpzb24oKX1jYXRjaHtyZXR1cm4gbnVsbH19YXN5bmMgZnVuY3Rpb24gS20oZSl7dHJ5e2xldCBuPWF3YWl0IFJjKCkuZ2V0Tm90ZUNvbnRlbnQoZSk7cmV0dXJuIFltKG58fCIiKX1jYXRjaHtyZXR1cm5bXX19dmFyIG1vPW51bGw7ZnVuY3Rpb24gUmMoKXtpZihtbylyZXR1cm4gbW87bGV0IGU9dD0+e2xldCBuPS9eaHR0cHM6XC9cL3d3d1wuYW1wbGVub3RlXC5jb21cL25vdGVzKD86JHxbLz9dLiopLy50ZXN0KHQpO3JldHVybiBuP2NvbnNvbGUubG9nKCJbZGV2LWFwcF0gbmF2aWdhdGUiLHQpOmNvbnNvbGUud2FybigiW2Rldi1hcHBdIG5hdmlnYXRlIHJlamVjdGVkIGludmFsaWQgVVJMIix0KSxufTtyZXR1cm4gbW89e3NldHRpbmdzOnt9LGFzeW5jIGluaXQoKXtsZXQgdD1hd2FpdCBRbSgpO2lmKHRbQm1dfHwodFtCbV09InRydWUiKSx0eXBlb2YgdC5kYXNoYm9hcmRfZWxlbWVudHM9PSJzdHJpbmciKXRyeXt0LmRhc2hib2FyZF9lbGVtZW50cz1KU09OLnBhcnNlKHQuZGFzaGJvYXJkX2VsZW1lbnRzKX1jYXRjaHt0LmRhc2hib2FyZF9lbGVtZW50cz1udWxsfWZvcihsZXQgeSBvZltEcygidmljdG9yeS12YWx1ZSIpLERzKCJjYWxlbmRhciIpLERzKCJtb29kIiksRHMoInF1b3RlcyIpXSlpZih0eXBlb2YgdFt5XT09InN0cmluZyIpdHJ5e3RbeV09SlNPTi5wYXJzZSh0W3ldKX1jYXRjaHt0W3ldPW51bGx9bGV0IG49bmV3IERhdGUscj1adyhuKSxvPWF3YWl0IFZtKCksYT1hd2FpdCBIbSgpLGk9TWF0aC5jZWlsKChuLmdldE1vbnRoKCkrMSkvMykscz1gUSR7aX0gJHtuLmdldEZ1bGxZZWFyKCl9YCxsPWk9PT00PzE6aSsxLHU9aT09PTQ/bi5nZXRGdWxsWWVhcigpKzE6bi5nZXRGdWxsWWVhcigpLGQ9YFEke2x9ICR7dX1gLFtjLGhdPWF3YWl0IFByb21pc2UuYWxsKFtHbShgJHtzfSBQbGFuYCksR20oYCR7ZH0gUGxhbmApXSksW3YsbV09YXdhaXQgUHJvbWlzZS5hbGwoW2M/LnV1aWQ/S20oYy51dWlkKTpQcm9taXNlLnJlc29sdmUoW10pLGg/LnV1aWQ/S20oaC51dWlkKTpQcm9taXNlLnJlc29sdmUoW10pXSksdz1qbShpKSxiPWptKGwpLGc9dy5ldmVyeSh5PT52LnNvbWUocD0+cC5oZWFkaW5nPy50ZXh0Py50cmltKCkudG9Mb3dlckNhc2UoKT09PXkudG9Mb3dlckNhc2UoKSkpLGY9Yi5ldmVyeSh5PT5tLnNvbWUocD0+cC5oZWFkaW5nPy50ZXh0Py50cmltKCkudG9Mb3dlckNhc2UoKT09PXkudG9Mb3dlckNhc2UoKSkpO3JldHVybiBtby5zZXR0aW5ncz10LHt0YXNrczpvLHRvZGF5VGFza3M6ZXgobyxuKSxjb21wbGV0ZWRUaGlzV2VlazpxbShvLHIpLHdlZWtseVZpY3RvcnlWYWx1ZTp0eChvLHIpLGRhaWx5VmljdG9yeVZhbHVlczpueChvLHIpLG1vb2RSYXRpbmdzOmEscXVhcnRlcmx5UGxhbnM6e2N1cnJlbnQ6e3llYXI6bi5nZXRGdWxsWWVhcigpLHF1YXJ0ZXI6aSxsYWJlbDpzLG5vdGVVVUlEOmM/LnV1aWQ/P251bGwsaGFzQWxsTW9udGhseURldGFpbHM6Z30sbmV4dDp7eWVhcjp1LHF1YXJ0ZXI6bCxsYWJlbDpkLG5vdGVVVUlEOmg/LnV1aWQ/P251bGwsaGFzQWxsTW9udGhseURldGFpbHM6Zn19LGN1cnJlbnREYXRlOm4udG9JU09TdHJpbmcoKSxzZXR0aW5nczp0LHRhc2tEb21haW5zOlt7bmFtZToiV29yayIsdXVpZDoiZG9tYWluLXdvcmstdXVpZCJ9LHtuYW1lOiJQZXJzb25hbCIsdXVpZDoiZG9tYWluLXBlcnNvbmFsLXV1aWQifSx7bmFtZToiU2lkZSBQcm9qZWN0cyIsdXVpZDoiZG9tYWluLXNpZGUtdXVpZCJ9XSxhY3RpdmVUYXNrRG9tYWluOiJkb21haW4td29yay11dWlkIn19LGFzeW5jIGNvbmZpZ3VyZSgpe3JldHVybiBudWxsfSxhc3luYyBnZXRNb29kUmF0aW5ncyh0KXtyZXR1cm4gSG0odCl9LGFzeW5jIGdldENvbXBsZXRlZFRhc2tzKHQsbil7cmV0dXJuIG94KHQsbil9LGFzeW5jIGdldFRhc2tEb21haW5zKCl7cmV0dXJuIGF4fSxhc3luYyBnZXRUYXNrRG9tYWluVGFza3ModCl7bGV0IG49dD9gL2FwaS90YXNrcz9kb21haW49JHtlbmNvZGVVUklDb21wb25lbnQodCl9YDoiL2FwaS90YXNrcyI7cmV0dXJuIGF3YWl0KGF3YWl0IGZldGNoKG4pKS5qc29uKCl9LGFzeW5jIGdldE5vdGVUYXNrcyh0LG4pe3JldHVybihhd2FpdCBWbSgpKS5maWx0ZXIobz0+by5ub3RlVVVJRD09PXQmJm8uY29tcGxldGVkQXQ9PW51bGwmJm8uZGlzbWlzc2VkQXQ9PW51bGwpfSxuYXZpZ2F0ZSh0KXtyZXR1cm4gZSh0KX0sYXN5bmMgc2V0U2V0dGluZyh0LG4pe2xldCByPW49PW51bGw/IiI6U3RyaW5nKG4pO21vLnNldHRpbmdzW3RdPXIsYXdhaXQgcngodCxyKX0sYXN5bmMgcmVjb3JkTW9vZFJhdGluZyh0KXtyZXR1cm4hMH0sYXN5bmMgZ2V0Tm90ZUNvbnRlbnQodCl7bGV0IG49X2ModCk7dHJ5e3JldHVybihhd2FpdChhd2FpdCBmZXRjaChgL2FwaS9ub3RlLWNvbnRlbnQ/dXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudChuKX1gKSkuanNvbigpKS5jb250ZW50Pz8iIn1jYXRjaHtyZXR1cm4iIn19LGFzeW5jIGdldE5vdGVTZWN0aW9ucyh0KXtsZXQgbj1hd2FpdCB0aGlzLmdldE5vdGVDb250ZW50KHQpO3JldHVybiBZbShuKX0sYXN5bmMgZmluZE5vdGUodD17fSl7dHJ5e2xldCBuPXQudXVpZD9gdXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudCh0LnV1aWQpfWA6YG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodC5uYW1lKX1gLG89YXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kPyR7bn1gKSkuanNvbigpO3JldHVybiBvPy51dWlkP286bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19LGFzeW5jIGZpbHRlck5vdGVzKHQ9e30pe2lmKHQucXVlcnkpdHJ5e2xldCByPWF3YWl0KGF3YWl0IGZldGNoKGAvYXBpL25vdGUtZmluZD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHQucXVlcnkpfWApKS5qc29uKCk7cmV0dXJuIHI/LnV1aWQ/W3JdOltdfWNhdGNoe3JldHVybltdfXJldHVybltdfSxhc3luYyBjcmVhdGVOb3RlKHQsbj1bXSl7dHJ5e3JldHVybihhd2FpdChhd2FpdCBmZXRjaCgiL2FwaS9ub3RlLWNyZWF0ZSIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtuYW1lOnQsdGFnczpufSl9KSkuanNvbigpKS51dWlkfWNhdGNoe3JldHVybiBudWxsfX0sYXN5bmMgcmVwbGFjZU5vdGVDb250ZW50KHQsbixyPXt9KXtsZXQgbz1fYyh0KTt0cnl7bGV0IGE9e3V1aWQ6byxjb250ZW50Om59O3JldHVybiByLnNlY3Rpb24mJihhLnNlY3Rpb249ci5zZWN0aW9uKSwoYXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvbm90ZS1jb250ZW50Iix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoYSl9KSkuanNvbigpKS5va3x8ITF9Y2F0Y2h7cmV0dXJuITF9fSxhc3luYyBpbnNlcnROb3RlQ29udGVudCh0LG4scj17fSl7bGV0IG89X2ModCk7dHJ5e2F3YWl0IGZldGNoKCIvYXBpL25vdGUtYXBwZW5kIix7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3V1aWQ6byxjb250ZW50Om4sYXRFbmQ6ISFyLmF0RW5kfSl9KX1jYXRjaHt9fSxhc3luYyBhdHRhY2hOb3RlTWVkaWEodCxuKXt0cnl7cmV0dXJuKGF3YWl0KGF3YWl0IGZldGNoKCIvYXBpL2F0dGFjaC1tZWRpYSIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtkYXRhVVJMOm59KX0pKS5qc29uKCkpLnVybHx8bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19fSxtb312YXIgRz1sZShpZSgpLDEpO3ZhciBUYT1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0saXg9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxJYz1jbGFzc3tjb25zdHJ1Y3Rvcih7aW5kZXg6dCxzaG9ydDpuLGZ1bGw6cixwbGFuOm8sY3VycmVudDphfSl7dGhpcy5pbmRleD10LHRoaXMuc2hvcnQ9bix0aGlzLmZ1bGw9cix0aGlzLnBsYW49byx0aGlzLmN1cnJlbnQ9YX19O2Z1bmN0aW9uIE1jKCl7bGV0IGU9bmV3IERhdGUsdD1lLmdldEZ1bGxZZWFyKCksbj1lLmdldE1vbnRoKCkscj1NYXRoLmZsb29yKG4vMykrMTtyZXR1cm57eWVhcjp0LHF1YXJ0ZXI6cixsYWJlbDpgUSR7cn0gJHt0fWB9fWZ1bmN0aW9uIEptKGUsdCl7bGV0IG49KGUucXVhcnRlci0xKSozLHI9bmV3IERhdGUoKS5nZXRNb250aCgpLG89W107Zm9yKGxldCBhPTA7YTw2O2ErKyl7bGV0IGk9KG4rYSklMTI7by5wdXNoKG5ldyBJYyh7aW5kZXg6aSxzaG9ydDppeFtpXSxmdWxsOlRhW2ldLHBsYW46YTwzP2U6dCxjdXJyZW50Omk9PT1yfSkpfXJldHVybiBvfWZ1bmN0aW9uIENzKCl7bGV0IGU9bmV3IERhdGUsdD1lLmdldERheSgpLG47cmV0dXJuIHQ9PT02P249Mjp0PT09MD9uPTE6bj0xLXQsbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKStuKX1mdW5jdGlvbiBfcyhlKXtyZXR1cm5gV2VlayBvZiAke1RhW2UuZ2V0TW9udGgoKV19ICR7ZS5nZXREYXRlKCl9YH1mdW5jdGlvbiBnbyhlLHQpe2xldCBuPXQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKSxyPW5ldyBSZWdFeHAoYChefFxcbikoI3sxLDZ9KVxccyske259XFxzKlxcbmAsImkiKSxvPWUubWF0Y2gocik7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9by5pbmRleCtvWzBdLmxlbmd0aCxpPWUuc3Vic3RyaW5nKGEpLHM9aS5tYXRjaCgvXG4jezEsNn1ccy8pO3JldHVybihzP2kuc3Vic3RyaW5nKDAscy5pbmRleCk6aSkudHJpbSgpfWZ1bmN0aW9uIFBjKGUpe3JldHVybmAKIyMjICR7ZX0KLSBGb2N1czoKLSBLZXkgbW92ZToKYH1mdW5jdGlvbiBMYyhlKXtyZXR1cm5gCiMjIyAke2V9Ci0gUHJpbWFyeSBmb2N1czoKLSBLZXkgdGFza3M6Ci0gQ29tbWl0bWVudHM6CmB9dmFyIGJlPSJ0b3AiLFJlPSJib3R0b20iLE5lPSJyaWdodCIsU2U9ImxlZnQiLEFzPSJhdXRvIixlcj1bYmUsUmUsTmUsU2VdLEVuPSJzdGFydCIsa3I9ImVuZCIsWG09ImNsaXBwaW5nUGFyZW50cyIsT3M9InZpZXdwb3J0Iix2bz0icG9wcGVyIixabT0icmVmZXJlbmNlIix6Yz1lci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQoW3QrIi0iK0VuLHQrIi0iK2tyXSl9LFtdKSxScz1bXS5jb25jYXQoZXIsW0FzXSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KFt0LHQrIi0iK0VuLHQrIi0iK2tyXSl9LFtdKSxzeD0iYmVmb3JlUmVhZCIsbHg9InJlYWQiLHV4PSJhZnRlclJlYWQiLGN4PSJiZWZvcmVNYWluIixkeD0ibWFpbiIscHg9ImFmdGVyTWFpbiIsZng9ImJlZm9yZVdyaXRlIixoeD0id3JpdGUiLG14PSJhZnRlcldyaXRlIixlZz1bc3gsbHgsdXgsY3gsZHgscHgsZngsaHgsbXhdO2Z1bmN0aW9uIHplKGUpe3JldHVybiBlPyhlLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTpudWxsfWZ1bmN0aW9uIGdlKGUpe2lmKGU9PW51bGwpcmV0dXJuIHdpbmRvdztpZihlLnRvU3RyaW5nKCkhPT0iW29iamVjdCBXaW5kb3ddIil7dmFyIHQ9ZS5vd25lckRvY3VtZW50O3JldHVybiB0JiZ0LmRlZmF1bHRWaWV3fHx3aW5kb3d9cmV0dXJuIGV9ZnVuY3Rpb24gX3QoZSl7dmFyIHQ9Z2UoZSkuRWxlbWVudDtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBFbGVtZW50fWZ1bmN0aW9uIEllKGUpe3ZhciB0PWdlKGUpLkhUTUxFbGVtZW50O3JldHVybiBlIGluc3RhbmNlb2YgdHx8ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fWZ1bmN0aW9uIHlvKGUpe2lmKHR5cGVvZiBTaGFkb3dSb290PiJ1IilyZXR1cm4hMTt2YXIgdD1nZShlKS5TaGFkb3dSb290O3JldHVybiBlIGluc3RhbmNlb2YgdHx8ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R9ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9ZS5zdGF0ZTtPYmplY3Qua2V5cyh0LmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXQuc3R5bGVzW25dfHx7fSxvPXQuYXR0cmlidXRlc1tuXXx8e30sYT10LmVsZW1lbnRzW25dOyFJZShhKXx8IXplKGEpfHwoT2JqZWN0LmFzc2lnbihhLnN0eWxlLHIpLE9iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9b1tpXTtzPT09ITE/YS5yZW1vdmVBdHRyaWJ1dGUoaSk6YS5zZXRBdHRyaWJ1dGUoaSxzPT09ITA/IiI6cyl9KSl9KX1mdW5jdGlvbiB2eChlKXt2YXIgdD1lLnN0YXRlLG49e3BvcHBlcjp7cG9zaXRpb246dC5vcHRpb25zLnN0cmF0ZWd5LGxlZnQ6IjAiLHRvcDoiMCIsbWFyZ2luOiIwIn0sYXJyb3c6e3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9LHJlZmVyZW5jZTp7fX07cmV0dXJuIE9iamVjdC5hc3NpZ24odC5lbGVtZW50cy5wb3BwZXIuc3R5bGUsbi5wb3BwZXIpLHQuc3R5bGVzPW4sdC5lbGVtZW50cy5hcnJvdyYmT2JqZWN0LmFzc2lnbih0LmVsZW1lbnRzLmFycm93LnN0eWxlLG4uYXJyb3cpLGZ1bmN0aW9uKCl7T2JqZWN0LmtleXModC5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz10LmVsZW1lbnRzW3JdLGE9dC5hdHRyaWJ1dGVzW3JdfHx7fSxpPU9iamVjdC5rZXlzKHQuc3R5bGVzLmhhc093blByb3BlcnR5KHIpP3Quc3R5bGVzW3JdOm5bcl0pLHM9aS5yZWR1Y2UoZnVuY3Rpb24obCx1KXtyZXR1cm4gbFt1XT0iIixsfSx7fSk7IUllKG8pfHwhemUobyl8fChPYmplY3QuYXNzaWduKG8uc3R5bGUscyksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihsKXtvLnJlbW92ZUF0dHJpYnV0ZShsKX0pKX0pfX12YXIgRGE9e25hbWU6ImFwcGx5U3R5bGVzIixlbmFibGVkOiEwLHBoYXNlOiJ3cml0ZSIsZm46Z3gsZWZmZWN0OnZ4LHJlcXVpcmVzOlsiY29tcHV0ZVN0eWxlcyJdfTtmdW5jdGlvbiAkZShlKXtyZXR1cm4gZS5zcGxpdCgiLSIpWzBdfXZhciBWdD1NYXRoLm1heCxTcj1NYXRoLm1pbixObj1NYXRoLnJvdW5kO2Z1bmN0aW9uIHdvKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7cmV0dXJuIGUhPW51bGwmJmUuYnJhbmRzJiZBcnJheS5pc0FycmF5KGUuYnJhbmRzKT9lLmJyYW5kcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnJhbmQrIi8iK3QudmVyc2lvbn0pLmpvaW4oIiAiKTpuYXZpZ2F0b3IudXNlckFnZW50fWZ1bmN0aW9uIENhKCl7cmV0dXJuIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3Qod28oKSl9ZnVuY3Rpb24gQXQoZSx0LG4pe3Q9PT12b2lkIDAmJih0PSExKSxuPT09dm9pZCAwJiYobj0hMSk7dmFyIHI9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPTEsYT0xO3QmJkllKGUpJiYobz1lLm9mZnNldFdpZHRoPjAmJk5uKHIud2lkdGgpL2Uub2Zmc2V0V2lkdGh8fDEsYT1lLm9mZnNldEhlaWdodD4wJiZObihyLmhlaWdodCkvZS5vZmZzZXRIZWlnaHR8fDEpO3ZhciBpPV90KGUpP2dlKGUpOndpbmRvdyxzPWkudmlzdWFsVmlld3BvcnQsbD0hQ2EoKSYmbix1PShyLmxlZnQrKGwmJnM/cy5vZmZzZXRMZWZ0OjApKS9vLGQ9KHIudG9wKyhsJiZzP3Mub2Zmc2V0VG9wOjApKS9hLGM9ci53aWR0aC9vLGg9ci5oZWlnaHQvYTtyZXR1cm57d2lkdGg6YyxoZWlnaHQ6aCx0b3A6ZCxyaWdodDp1K2MsYm90dG9tOmQraCxsZWZ0OnUseDp1LHk6ZH19ZnVuY3Rpb24gRXIoZSl7dmFyIHQ9QXQoZSksbj1lLm9mZnNldFdpZHRoLHI9ZS5vZmZzZXRIZWlnaHQ7cmV0dXJuIE1hdGguYWJzKHQud2lkdGgtbik8PTEmJihuPXQud2lkdGgpLE1hdGguYWJzKHQuaGVpZ2h0LXIpPD0xJiYocj10LmhlaWdodCkse3g6ZS5vZmZzZXRMZWZ0LHk6ZS5vZmZzZXRUb3Asd2lkdGg6bixoZWlnaHQ6cn19ZnVuY3Rpb24gX2EoZSx0KXt2YXIgbj10LmdldFJvb3ROb2RlJiZ0LmdldFJvb3ROb2RlKCk7aWYoZS5jb250YWlucyh0KSlyZXR1cm4hMDtpZihuJiZ5byhuKSl7dmFyIHI9dDtkb3tpZihyJiZlLmlzU2FtZU5vZGUocikpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV8fHIuaG9zdH13aGlsZShyKX1yZXR1cm4hMX1mdW5jdGlvbiB0dChlKXtyZXR1cm4gZ2UoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiAkYyhlKXtyZXR1cm5bInRhYmxlIiwidGQiLCJ0aCJdLmluZGV4T2YoemUoZSkpPj0wfWZ1bmN0aW9uIEJlKGUpe3JldHVybigoX3QoZSk/ZS5vd25lckRvY3VtZW50OmUuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBUbihlKXtyZXR1cm4gemUoZSk9PT0iaHRtbCI/ZTplLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHwoeW8oZSk/ZS5ob3N0Om51bGwpfHxCZShlKX1mdW5jdGlvbiB0ZyhlKXtyZXR1cm4hSWUoZSl8fHR0KGUpLnBvc2l0aW9uPT09ImZpeGVkIj9udWxsOmUub2Zmc2V0UGFyZW50fWZ1bmN0aW9uIHl4KGUpe3ZhciB0PS9maXJlZm94L2kudGVzdCh3bygpKSxuPS9UcmlkZW50L2kudGVzdCh3bygpKTtpZihuJiZJZShlKSl7dmFyIHI9dHQoZSk7aWYoci5wb3NpdGlvbj09PSJmaXhlZCIpcmV0dXJuIG51bGx9dmFyIG89VG4oZSk7Zm9yKHlvKG8pJiYobz1vLmhvc3QpO0llKG8pJiZbImh0bWwiLCJib2R5Il0uaW5kZXhPZih6ZShvKSk8MDspe3ZhciBhPXR0KG8pO2lmKGEudHJhbnNmb3JtIT09Im5vbmUifHxhLnBlcnNwZWN0aXZlIT09Im5vbmUifHxhLmNvbnRhaW49PT0icGFpbnQifHxbInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIl0uaW5kZXhPZihhLndpbGxDaGFuZ2UpIT09LTF8fHQmJmEud2lsbENoYW5nZT09PSJmaWx0ZXIifHx0JiZhLmZpbHRlciYmYS5maWx0ZXIhPT0ibm9uZSIpcmV0dXJuIG87bz1vLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSHQoZSl7Zm9yKHZhciB0PWdlKGUpLG49dGcoZSk7biYmJGMobikmJnR0KG4pLnBvc2l0aW9uPT09InN0YXRpYyI7KW49dGcobik7cmV0dXJuIG4mJih6ZShuKT09PSJodG1sInx8emUobik9PT0iYm9keSImJnR0KG4pLnBvc2l0aW9uPT09InN0YXRpYyIpP3Q6bnx8eXgoZSl8fHR9ZnVuY3Rpb24gTnIoZSl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGUpPj0wPyJ4IjoieSJ9ZnVuY3Rpb24gVHIoZSx0LG4pe3JldHVybiBWdChlLFNyKHQsbikpfWZ1bmN0aW9uIG5nKGUsdCxuKXt2YXIgcj1UcihlLHQsbik7cmV0dXJuIHI+bj9uOnJ9ZnVuY3Rpb24gQWEoKXtyZXR1cm57dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9fWZ1bmN0aW9uIE9hKGUpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LEFhKCksZSl9ZnVuY3Rpb24gUmEoZSx0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4gbltyXT1lLG59LHt9KX12YXIgd3g9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD10eXBlb2YgdD09ImZ1bmN0aW9uIj90KE9iamVjdC5hc3NpZ24oe30sbi5yZWN0cyx7cGxhY2VtZW50Om4ucGxhY2VtZW50fSkpOnQsT2EodHlwZW9mIHQhPSJudW1iZXIiP3Q6UmEodCxlcikpfTtmdW5jdGlvbiB4eChlKXt2YXIgdCxuPWUuc3RhdGUscj1lLm5hbWUsbz1lLm9wdGlvbnMsYT1uLmVsZW1lbnRzLmFycm93LGk9bi5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMscz0kZShuLnBsYWNlbWVudCksbD1OcihzKSx1PVtTZSxOZV0uaW5kZXhPZihzKT49MCxkPXU/ImhlaWdodCI6IndpZHRoIjtpZighKCFhfHwhaSkpe3ZhciBjPXd4KG8ucGFkZGluZyxuKSxoPUVyKGEpLHY9bD09PSJ5Ij9iZTpTZSxtPWw9PT0ieSI/UmU6TmUsdz1uLnJlY3RzLnJlZmVyZW5jZVtkXStuLnJlY3RzLnJlZmVyZW5jZVtsXS1pW2xdLW4ucmVjdHMucG9wcGVyW2RdLGI9aVtsXS1uLnJlY3RzLnJlZmVyZW5jZVtsXSxnPUh0KGEpLGY9Zz9sPT09InkiP2cuY2xpZW50SGVpZ2h0fHwwOmcuY2xpZW50V2lkdGh8fDA6MCx5PXcvMi1iLzIscD1jW3ZdLEU9Zi1oW2RdLWNbbV0sUz1mLzItaFtkXS8yK3kseD1UcihwLFMsRSksTj1sO24ubW9kaWZpZXJzRGF0YVtyXT0odD17fSx0W05dPXgsdC5jZW50ZXJPZmZzZXQ9eC1TLHQpfX1mdW5jdGlvbiBieChlKXt2YXIgdD1lLnN0YXRlLG49ZS5vcHRpb25zLHI9bi5lbGVtZW50LG89cj09PXZvaWQgMD8iW2RhdGEtcG9wcGVyLWFycm93XSI6cjtvIT1udWxsJiYodHlwZW9mIG89PSJzdHJpbmciJiYobz10LmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKG8pLCFvKXx8X2EodC5lbGVtZW50cy5wb3BwZXIsbykmJih0LmVsZW1lbnRzLmFycm93PW8pKX12YXIgcmc9e25hbWU6ImFycm93IixlbmFibGVkOiEwLHBoYXNlOiJtYWluIixmbjp4eCxlZmZlY3Q6YngscmVxdWlyZXM6WyJwb3BwZXJPZmZzZXRzIl0scmVxdWlyZXNJZkV4aXN0czpbInByZXZlbnRPdmVyZmxvdyJdfTtmdW5jdGlvbiBPdChlKXtyZXR1cm4gZS5zcGxpdCgiLSIpWzFdfXZhciBreD17dG9wOiJhdXRvIixyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIixsZWZ0OiJhdXRvIn07ZnVuY3Rpb24gU3goZSx0KXt2YXIgbj1lLngscj1lLnksbz10LmRldmljZVBpeGVsUmF0aW98fDE7cmV0dXJue3g6Tm4obipvKS9vfHwwLHk6Tm4ocipvKS9vfHwwfX1mdW5jdGlvbiBvZyhlKXt2YXIgdCxuPWUucG9wcGVyLHI9ZS5wb3BwZXJSZWN0LG89ZS5wbGFjZW1lbnQsYT1lLnZhcmlhdGlvbixpPWUub2Zmc2V0cyxzPWUucG9zaXRpb24sbD1lLmdwdUFjY2VsZXJhdGlvbix1PWUuYWRhcHRpdmUsZD1lLnJvdW5kT2Zmc2V0cyxjPWUuaXNGaXhlZCxoPWkueCx2PWg9PT12b2lkIDA/MDpoLG09aS55LHc9bT09PXZvaWQgMD8wOm0sYj10eXBlb2YgZD09ImZ1bmN0aW9uIj9kKHt4OnYseTp3fSk6e3g6dix5Ond9O3Y9Yi54LHc9Yi55O3ZhciBnPWkuaGFzT3duUHJvcGVydHkoIngiKSxmPWkuaGFzT3duUHJvcGVydHkoInkiKSx5PVNlLHA9YmUsRT13aW5kb3c7aWYodSl7dmFyIFM9SHQobikseD0iY2xpZW50SGVpZ2h0IixOPSJjbGllbnRXaWR0aCI7aWYoUz09PWdlKG4pJiYoUz1CZShuKSx0dChTKS5wb3NpdGlvbiE9PSJzdGF0aWMiJiZzPT09ImFic29sdXRlIiYmKHg9InNjcm9sbEhlaWdodCIsTj0ic2Nyb2xsV2lkdGgiKSksUz1TLG89PT1iZXx8KG89PT1TZXx8bz09PU5lKSYmYT09PWtyKXtwPVJlO3ZhciBDPWMmJlM9PT1FJiZFLnZpc3VhbFZpZXdwb3J0P0UudmlzdWFsVmlld3BvcnQuaGVpZ2h0OlNbeF07dy09Qy1yLmhlaWdodCx3Kj1sPzE6LTF9aWYobz09PVNlfHwobz09PWJlfHxvPT09UmUpJiZhPT09a3Ipe3k9TmU7dmFyIGs9YyYmUz09PUUmJkUudmlzdWFsVmlld3BvcnQ/RS52aXN1YWxWaWV3cG9ydC53aWR0aDpTW05dO3YtPWstci53aWR0aCx2Kj1sPzE6LTF9fXZhciBBPU9iamVjdC5hc3NpZ24oe3Bvc2l0aW9uOnN9LHUmJmt4KSxSPWQ9PT0hMD9TeCh7eDp2LHk6d30sZ2UobikpOnt4OnYseTp3fTtpZih2PVIueCx3PVIueSxsKXt2YXIgVDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxBLChUPXt9LFRbcF09Zj8iMCI6IiIsVFt5XT1nPyIwIjoiIixULnRyYW5zZm9ybT0oRS5kZXZpY2VQaXhlbFJhdGlvfHwxKTw9MT8idHJhbnNsYXRlKCIrdisicHgsICIrdysicHgpIjoidHJhbnNsYXRlM2QoIit2KyJweCwgIit3KyJweCwgMCkiLFQpKX1yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxBLCh0PXt9LHRbcF09Zj93KyJweCI6IiIsdFt5XT1nP3YrInB4IjoiIix0LnRyYW5zZm9ybT0iIix0KSl9ZnVuY3Rpb24gRXgoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPW4uZ3B1QWNjZWxlcmF0aW9uLG89cj09PXZvaWQgMD8hMDpyLGE9bi5hZGFwdGl2ZSxpPWE9PT12b2lkIDA/ITA6YSxzPW4ucm91bmRPZmZzZXRzLGw9cz09PXZvaWQgMD8hMDpzLHU9e3BsYWNlbWVudDokZSh0LnBsYWNlbWVudCksdmFyaWF0aW9uOk90KHQucGxhY2VtZW50KSxwb3BwZXI6dC5lbGVtZW50cy5wb3BwZXIscG9wcGVyUmVjdDp0LnJlY3RzLnBvcHBlcixncHVBY2NlbGVyYXRpb246byxpc0ZpeGVkOnQub3B0aW9ucy5zdHJhdGVneT09PSJmaXhlZCJ9O3QubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzIT1udWxsJiYodC5zdHlsZXMucG9wcGVyPU9iamVjdC5hc3NpZ24oe30sdC5zdHlsZXMucG9wcGVyLG9nKE9iamVjdC5hc3NpZ24oe30sdSx7b2Zmc2V0czp0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxwb3NpdGlvbjp0Lm9wdGlvbnMuc3RyYXRlZ3ksYWRhcHRpdmU6aSxyb3VuZE9mZnNldHM6bH0pKSkpLHQubW9kaWZpZXJzRGF0YS5hcnJvdyE9bnVsbCYmKHQuc3R5bGVzLmFycm93PU9iamVjdC5hc3NpZ24oe30sdC5zdHlsZXMuYXJyb3csb2coT2JqZWN0LmFzc2lnbih7fSx1LHtvZmZzZXRzOnQubW9kaWZpZXJzRGF0YS5hcnJvdyxwb3NpdGlvbjoiYWJzb2x1dGUiLGFkYXB0aXZlOiExLHJvdW5kT2Zmc2V0czpsfSkpKSksdC5hdHRyaWJ1dGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LHQuYXR0cmlidXRlcy5wb3BwZXIseyJkYXRhLXBvcHBlci1wbGFjZW1lbnQiOnQucGxhY2VtZW50fSl9dmFyIGFnPXtuYW1lOiJjb21wdXRlU3R5bGVzIixlbmFibGVkOiEwLHBoYXNlOiJiZWZvcmVXcml0ZSIsZm46RXgsZGF0YTp7fX07dmFyIElzPXtwYXNzaXZlOiEwfTtmdW5jdGlvbiBOeChlKXt2YXIgdD1lLnN0YXRlLG49ZS5pbnN0YW5jZSxyPWUub3B0aW9ucyxvPXIuc2Nyb2xsLGE9bz09PXZvaWQgMD8hMDpvLGk9ci5yZXNpemUscz1pPT09dm9pZCAwPyEwOmksbD1nZSh0LmVsZW1lbnRzLnBvcHBlciksdT1bXS5jb25jYXQodC5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSx0LnNjcm9sbFBhcmVudHMucG9wcGVyKTtyZXR1cm4gYSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixuLnVwZGF0ZSxJcyl9KSxzJiZsLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbi51cGRhdGUsSXMpLGZ1bmN0aW9uKCl7YSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixuLnVwZGF0ZSxJcyl9KSxzJiZsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbi51cGRhdGUsSXMpfX12YXIgaWc9e25hbWU6ImV2ZW50TGlzdGVuZXJzIixlbmFibGVkOiEwLHBoYXNlOiJ3cml0ZSIsZm46ZnVuY3Rpb24oKXt9LGVmZmVjdDpOeCxkYXRhOnt9fTt2YXIgVHg9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn07ZnVuY3Rpb24geG8oZSl7cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csZnVuY3Rpb24odCl7cmV0dXJuIFR4W3RdfSl9dmFyIER4PXtzdGFydDoiZW5kIixlbmQ6InN0YXJ0In07ZnVuY3Rpb24gTXMoZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csZnVuY3Rpb24odCl7cmV0dXJuIER4W3RdfSl9ZnVuY3Rpb24gRHIoZSl7dmFyIHQ9Z2UoZSksbj10LnBhZ2VYT2Zmc2V0LHI9dC5wYWdlWU9mZnNldDtyZXR1cm57c2Nyb2xsTGVmdDpuLHNjcm9sbFRvcDpyfX1mdW5jdGlvbiBDcihlKXtyZXR1cm4gQXQoQmUoZSkpLmxlZnQrRHIoZSkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBGYyhlLHQpe3ZhciBuPWdlKGUpLHI9QmUoZSksbz1uLnZpc3VhbFZpZXdwb3J0LGE9ci5jbGllbnRXaWR0aCxpPXIuY2xpZW50SGVpZ2h0LHM9MCxsPTA7aWYobyl7YT1vLndpZHRoLGk9by5oZWlnaHQ7dmFyIHU9Q2EoKTsodXx8IXUmJnQ9PT0iZml4ZWQiKSYmKHM9by5vZmZzZXRMZWZ0LGw9by5vZmZzZXRUb3ApfXJldHVybnt3aWR0aDphLGhlaWdodDppLHg6cytDcihlKSx5Omx9fWZ1bmN0aW9uIFVjKGUpe3ZhciB0LG49QmUoZSkscj1EcihlKSxvPSh0PWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOnQuYm9keSxhPVZ0KG4uc2Nyb2xsV2lkdGgsbi5jbGllbnRXaWR0aCxvP28uc2Nyb2xsV2lkdGg6MCxvP28uY2xpZW50V2lkdGg6MCksaT1WdChuLnNjcm9sbEhlaWdodCxuLmNsaWVudEhlaWdodCxvP28uc2Nyb2xsSGVpZ2h0OjAsbz9vLmNsaWVudEhlaWdodDowKSxzPS1yLnNjcm9sbExlZnQrQ3IoZSksbD0tci5zY3JvbGxUb3A7cmV0dXJuIHR0KG98fG4pLmRpcmVjdGlvbj09PSJydGwiJiYocys9VnQobi5jbGllbnRXaWR0aCxvP28uY2xpZW50V2lkdGg6MCktYSkse3dpZHRoOmEsaGVpZ2h0OmkseDpzLHk6bH19ZnVuY3Rpb24gX3IoZSl7dmFyIHQ9dHQoZSksbj10Lm92ZXJmbG93LHI9dC5vdmVyZmxvd1gsbz10Lm92ZXJmbG93WTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3QobitvK3IpfWZ1bmN0aW9uIFBzKGUpe3JldHVyblsiaHRtbCIsImJvZHkiLCIjZG9jdW1lbnQiXS5pbmRleE9mKHplKGUpKT49MD9lLm93bmVyRG9jdW1lbnQuYm9keTpJZShlKSYmX3IoZSk/ZTpQcyhUbihlKSl9ZnVuY3Rpb24gdHIoZSx0KXt2YXIgbjt0PT09dm9pZCAwJiYodD1bXSk7dmFyIHI9UHMoZSksbz1yPT09KChuPWUub3duZXJEb2N1bWVudCk9PW51bGw/dm9pZCAwOm4uYm9keSksYT1nZShyKSxpPW8/W2FdLmNvbmNhdChhLnZpc3VhbFZpZXdwb3J0fHxbXSxfcihyKT9yOltdKTpyLHM9dC5jb25jYXQoaSk7cmV0dXJuIG8/czpzLmNvbmNhdCh0cihUbihpKSkpfWZ1bmN0aW9uIGJvKGUpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUse2xlZnQ6ZS54LHRvcDplLnkscmlnaHQ6ZS54K2Uud2lkdGgsYm90dG9tOmUueStlLmhlaWdodH0pfWZ1bmN0aW9uIEN4KGUsdCl7dmFyIG49QXQoZSwhMSx0PT09ImZpeGVkIik7cmV0dXJuIG4udG9wPW4udG9wK2UuY2xpZW50VG9wLG4ubGVmdD1uLmxlZnQrZS5jbGllbnRMZWZ0LG4uYm90dG9tPW4udG9wK2UuY2xpZW50SGVpZ2h0LG4ucmlnaHQ9bi5sZWZ0K2UuY2xpZW50V2lkdGgsbi53aWR0aD1lLmNsaWVudFdpZHRoLG4uaGVpZ2h0PWUuY2xpZW50SGVpZ2h0LG4ueD1uLmxlZnQsbi55PW4udG9wLG59ZnVuY3Rpb24gc2coZSx0LG4pe3JldHVybiB0PT09T3M/Ym8oRmMoZSxuKSk6X3QodCk/Q3godCxuKTpibyhVYyhCZShlKSkpfWZ1bmN0aW9uIF94KGUpe3ZhciB0PXRyKFRuKGUpKSxuPVsiYWJzb2x1dGUiLCJmaXhlZCJdLmluZGV4T2YodHQoZSkucG9zaXRpb24pPj0wLHI9biYmSWUoZSk/SHQoZSk6ZTtyZXR1cm4gX3Qocik/dC5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIF90KG8pJiZfYShvLHIpJiZ6ZShvKSE9PSJib2R5In0pOltdfWZ1bmN0aW9uIFdjKGUsdCxuLHIpe3ZhciBvPXQ9PT0iY2xpcHBpbmdQYXJlbnRzIj9feChlKTpbXS5jb25jYXQodCksYT1bXS5jb25jYXQobyxbbl0pLGk9YVswXSxzPWEucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGQ9c2coZSx1LHIpO3JldHVybiBsLnRvcD1WdChkLnRvcCxsLnRvcCksbC5yaWdodD1TcihkLnJpZ2h0LGwucmlnaHQpLGwuYm90dG9tPVNyKGQuYm90dG9tLGwuYm90dG9tKSxsLmxlZnQ9VnQoZC5sZWZ0LGwubGVmdCksbH0sc2coZSxpLHIpKTtyZXR1cm4gcy53aWR0aD1zLnJpZ2h0LXMubGVmdCxzLmhlaWdodD1zLmJvdHRvbS1zLnRvcCxzLng9cy5sZWZ0LHMueT1zLnRvcCxzfWZ1bmN0aW9uIElhKGUpe3ZhciB0PWUucmVmZXJlbmNlLG49ZS5lbGVtZW50LHI9ZS5wbGFjZW1lbnQsbz1yPyRlKHIpOm51bGwsYT1yP090KHIpOm51bGwsaT10LngrdC53aWR0aC8yLW4ud2lkdGgvMixzPXQueSt0LmhlaWdodC8yLW4uaGVpZ2h0LzIsbDtzd2l0Y2gobyl7Y2FzZSBiZTpsPXt4OmkseTp0Lnktbi5oZWlnaHR9O2JyZWFrO2Nhc2UgUmU6bD17eDppLHk6dC55K3QuaGVpZ2h0fTticmVhaztjYXNlIE5lOmw9e3g6dC54K3Qud2lkdGgseTpzfTticmVhaztjYXNlIFNlOmw9e3g6dC54LW4ud2lkdGgseTpzfTticmVhaztkZWZhdWx0Omw9e3g6dC54LHk6dC55fX12YXIgdT1vP05yKG8pOm51bGw7aWYodSE9bnVsbCl7dmFyIGQ9dT09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiO3N3aXRjaChhKXtjYXNlIEVuOmxbdV09bFt1XS0odFtkXS8yLW5bZF0vMik7YnJlYWs7Y2FzZSBrcjpsW3VdPWxbdV0rKHRbZF0vMi1uW2RdLzIpO2JyZWFrO2RlZmF1bHQ6fX1yZXR1cm4gbH1mdW5jdGlvbiBHdChlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTt2YXIgbj10LHI9bi5wbGFjZW1lbnQsbz1yPT09dm9pZCAwP2UucGxhY2VtZW50OnIsYT1uLnN0cmF0ZWd5LGk9YT09PXZvaWQgMD9lLnN0cmF0ZWd5OmEscz1uLmJvdW5kYXJ5LGw9cz09PXZvaWQgMD9YbTpzLHU9bi5yb290Qm91bmRhcnksZD11PT09dm9pZCAwP09zOnUsYz1uLmVsZW1lbnRDb250ZXh0LGg9Yz09PXZvaWQgMD92bzpjLHY9bi5hbHRCb3VuZGFyeSxtPXY9PT12b2lkIDA/ITE6dix3PW4ucGFkZGluZyxiPXc9PT12b2lkIDA/MDp3LGc9T2EodHlwZW9mIGIhPSJudW1iZXIiP2I6UmEoYixlcikpLGY9aD09PXZvP1ptOnZvLHk9ZS5yZWN0cy5wb3BwZXIscD1lLmVsZW1lbnRzW20/ZjpoXSxFPVdjKF90KHApP3A6cC5jb250ZXh0RWxlbWVudHx8QmUoZS5lbGVtZW50cy5wb3BwZXIpLGwsZCxpKSxTPUF0KGUuZWxlbWVudHMucmVmZXJlbmNlKSx4PUlhKHtyZWZlcmVuY2U6UyxlbGVtZW50Onksc3RyYXRlZ3k6ImFic29sdXRlIixwbGFjZW1lbnQ6b30pLE49Ym8oT2JqZWN0LmFzc2lnbih7fSx5LHgpKSxDPWg9PT12bz9OOlMsaz17dG9wOkUudG9wLUMudG9wK2cudG9wLGJvdHRvbTpDLmJvdHRvbS1FLmJvdHRvbStnLmJvdHRvbSxsZWZ0OkUubGVmdC1DLmxlZnQrZy5sZWZ0LHJpZ2h0OkMucmlnaHQtRS5yaWdodCtnLnJpZ2h0fSxBPWUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7aWYoaD09PXZvJiZBKXt2YXIgUj1BW29dO09iamVjdC5rZXlzKGspLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFA9W05lLFJlXS5pbmRleE9mKFQpPj0wPzE6LTEsVT1bYmUsUmVdLmluZGV4T2YoVCk+PTA/InkiOiJ4IjtrW1RdKz1SW1VdKlB9KX1yZXR1cm4ga31mdW5jdGlvbiBCYyhlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTt2YXIgbj10LHI9bi5wbGFjZW1lbnQsbz1uLmJvdW5kYXJ5LGE9bi5yb290Qm91bmRhcnksaT1uLnBhZGRpbmcscz1uLmZsaXBWYXJpYXRpb25zLGw9bi5hbGxvd2VkQXV0b1BsYWNlbWVudHMsdT1sPT09dm9pZCAwP1JzOmwsZD1PdChyKSxjPWQ/cz96Yzp6Yy5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIE90KG0pPT09ZH0pOmVyLGg9Yy5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIHUuaW5kZXhPZihtKT49MH0pO2gubGVuZ3RoPT09MCYmKGg9Yyk7dmFyIHY9aC5yZWR1Y2UoZnVuY3Rpb24obSx3KXtyZXR1cm4gbVt3XT1HdChlLHtwbGFjZW1lbnQ6dyxib3VuZGFyeTpvLHJvb3RCb3VuZGFyeTphLHBhZGRpbmc6aX0pWyRlKHcpXSxtfSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHYpLnNvcnQoZnVuY3Rpb24obSx3KXtyZXR1cm4gdlttXS12W3ddfSl9ZnVuY3Rpb24gQXgoZSl7aWYoJGUoZSk9PT1BcylyZXR1cm5bXTt2YXIgdD14byhlKTtyZXR1cm5bTXMoZSksdCxNcyh0KV19ZnVuY3Rpb24gT3goZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPWUubmFtZTtpZighdC5tb2RpZmllcnNEYXRhW3JdLl9za2lwKXtmb3IodmFyIG89bi5tYWluQXhpcyxhPW89PT12b2lkIDA/ITA6byxpPW4uYWx0QXhpcyxzPWk9PT12b2lkIDA/ITA6aSxsPW4uZmFsbGJhY2tQbGFjZW1lbnRzLHU9bi5wYWRkaW5nLGQ9bi5ib3VuZGFyeSxjPW4ucm9vdEJvdW5kYXJ5LGg9bi5hbHRCb3VuZGFyeSx2PW4uZmxpcFZhcmlhdGlvbnMsbT12PT09dm9pZCAwPyEwOnYsdz1uLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxiPXQub3B0aW9ucy5wbGFjZW1lbnQsZz0kZShiKSxmPWc9PT1iLHk9bHx8KGZ8fCFtP1t4byhiKV06QXgoYikpLHA9W2JdLmNvbmNhdCh5KS5yZWR1Y2UoZnVuY3Rpb24oYWUscGUpe3JldHVybiBhZS5jb25jYXQoJGUocGUpPT09QXM/QmModCx7cGxhY2VtZW50OnBlLGJvdW5kYXJ5OmQscm9vdEJvdW5kYXJ5OmMscGFkZGluZzp1LGZsaXBWYXJpYXRpb25zOm0sYWxsb3dlZEF1dG9QbGFjZW1lbnRzOnd9KTpwZSl9LFtdKSxFPXQucmVjdHMucmVmZXJlbmNlLFM9dC5yZWN0cy5wb3BwZXIseD1uZXcgTWFwLE49ITAsQz1wWzBdLGs9MDtrPHAubGVuZ3RoO2srKyl7dmFyIEE9cFtrXSxSPSRlKEEpLFQ9T3QoQSk9PT1FbixQPVtiZSxSZV0uaW5kZXhPZihSKT49MCxVPVA/IndpZHRoIjoiaGVpZ2h0IixGPUd0KHQse3BsYWNlbWVudDpBLGJvdW5kYXJ5OmQscm9vdEJvdW5kYXJ5OmMsYWx0Qm91bmRhcnk6aCxwYWRkaW5nOnV9KSxXPVA/VD9OZTpTZTpUP1JlOmJlO0VbVV0+U1tVXSYmKFc9eG8oVykpO3ZhciBZPXhvKFcpLHNlPVtdO2lmKGEmJnNlLnB1c2goRltSXTw9MCkscyYmc2UucHVzaChGW1ddPD0wLEZbWV08PTApLHNlLmV2ZXJ5KGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWV9KSl7Qz1BLE49ITE7YnJlYWt9eC5zZXQoQSxzZSl9aWYoTilmb3IodmFyIERlPW0/MzoxLENlPWZ1bmN0aW9uKHBlKXt2YXIgTWU9cC5maW5kKGZ1bmN0aW9uKEgpe3ZhciBfZT14LmdldChIKTtpZihfZSlyZXR1cm4gX2Uuc2xpY2UoMCxwZSkuZXZlcnkoZnVuY3Rpb24oSXQpe3JldHVybiBJdH0pfSk7aWYoTWUpcmV0dXJuIEM9TWUsImJyZWFrIn0sQj1EZTtCPjA7Qi0tKXt2YXIgej1DZShCKTtpZih6PT09ImJyZWFrIilicmVha310LnBsYWNlbWVudCE9PUMmJih0Lm1vZGlmaWVyc0RhdGFbcl0uX3NraXA9ITAsdC5wbGFjZW1lbnQ9Qyx0LnJlc2V0PSEwKX19dmFyIGxnPXtuYW1lOiJmbGlwIixlbmFibGVkOiEwLHBoYXNlOiJtYWluIixmbjpPeCxyZXF1aXJlc0lmRXhpc3RzOlsib2Zmc2V0Il0sZGF0YTp7X3NraXA6ITF9fTtmdW5jdGlvbiB1ZyhlLHQsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPXt4OjAseTowfSkse3RvcDplLnRvcC10LmhlaWdodC1uLnkscmlnaHQ6ZS5yaWdodC10LndpZHRoK24ueCxib3R0b206ZS5ib3R0b20tdC5oZWlnaHQrbi55LGxlZnQ6ZS5sZWZ0LXQud2lkdGgtbi54fX1mdW5jdGlvbiBjZyhlKXtyZXR1cm5bYmUsTmUsUmUsU2VdLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0+PTB9KX1mdW5jdGlvbiBSeChlKXt2YXIgdD1lLnN0YXRlLG49ZS5uYW1lLHI9dC5yZWN0cy5yZWZlcmVuY2Usbz10LnJlY3RzLnBvcHBlcixhPXQubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3csaT1HdCh0LHtlbGVtZW50Q29udGV4dDoicmVmZXJlbmNlIn0pLHM9R3QodCx7YWx0Qm91bmRhcnk6ITB9KSxsPXVnKGksciksdT11ZyhzLG8sYSksZD1jZyhsKSxjPWNnKHUpO3QubW9kaWZpZXJzRGF0YVtuXT17cmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOmwscG9wcGVyRXNjYXBlT2Zmc2V0czp1LGlzUmVmZXJlbmNlSGlkZGVuOmQsaGFzUG9wcGVyRXNjYXBlZDpjfSx0LmF0dHJpYnV0ZXMucG9wcGVyPU9iamVjdC5hc3NpZ24oe30sdC5hdHRyaWJ1dGVzLnBvcHBlcix7ImRhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4iOmQsImRhdGEtcG9wcGVyLWVzY2FwZWQiOmN9KX12YXIgZGc9e25hbWU6ImhpZGUiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLHJlcXVpcmVzSWZFeGlzdHM6WyJwcmV2ZW50T3ZlcmZsb3ciXSxmbjpSeH07ZnVuY3Rpb24gSXgoZSx0LG4pe3ZhciByPSRlKGUpLG89W1NlLGJlXS5pbmRleE9mKHIpPj0wPy0xOjEsYT10eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKE9iamVjdC5hc3NpZ24oe30sdCx7cGxhY2VtZW50OmV9KSk6bixpPWFbMF0scz1hWzFdO3JldHVybiBpPWl8fDAscz0oc3x8MCkqbyxbU2UsTmVdLmluZGV4T2Yocik+PTA/e3g6cyx5Oml9Ont4OmkseTpzfX1mdW5jdGlvbiBNeChlKXt2YXIgdD1lLnN0YXRlLG49ZS5vcHRpb25zLHI9ZS5uYW1lLG89bi5vZmZzZXQsYT1vPT09dm9pZCAwP1swLDBdOm8saT1Scy5yZWR1Y2UoZnVuY3Rpb24oZCxjKXtyZXR1cm4gZFtjXT1JeChjLHQucmVjdHMsYSksZH0se30pLHM9aVt0LnBsYWNlbWVudF0sbD1zLngsdT1zLnk7dC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMhPW51bGwmJih0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54Kz1sLHQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkrPXUpLHQubW9kaWZpZXJzRGF0YVtyXT1pfXZhciBwZz17bmFtZToib2Zmc2V0IixlbmFibGVkOiEwLHBoYXNlOiJtYWluIixyZXF1aXJlczpbInBvcHBlck9mZnNldHMiXSxmbjpNeH07ZnVuY3Rpb24gUHgoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUubmFtZTt0Lm1vZGlmaWVyc0RhdGFbbl09SWEoe3JlZmVyZW5jZTp0LnJlY3RzLnJlZmVyZW5jZSxlbGVtZW50OnQucmVjdHMucG9wcGVyLHN0cmF0ZWd5OiJhYnNvbHV0ZSIscGxhY2VtZW50OnQucGxhY2VtZW50fSl9dmFyIGZnPXtuYW1lOiJwb3BwZXJPZmZzZXRzIixlbmFibGVkOiEwLHBoYXNlOiJyZWFkIixmbjpQeCxkYXRhOnt9fTtmdW5jdGlvbiBqYyhlKXtyZXR1cm4gZT09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIEx4KGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1lLm5hbWUsbz1uLm1haW5BeGlzLGE9bz09PXZvaWQgMD8hMDpvLGk9bi5hbHRBeGlzLHM9aT09PXZvaWQgMD8hMTppLGw9bi5ib3VuZGFyeSx1PW4ucm9vdEJvdW5kYXJ5LGQ9bi5hbHRCb3VuZGFyeSxjPW4ucGFkZGluZyxoPW4udGV0aGVyLHY9aD09PXZvaWQgMD8hMDpoLG09bi50ZXRoZXJPZmZzZXQsdz1tPT09dm9pZCAwPzA6bSxiPUd0KHQse2JvdW5kYXJ5Omwscm9vdEJvdW5kYXJ5OnUscGFkZGluZzpjLGFsdEJvdW5kYXJ5OmR9KSxnPSRlKHQucGxhY2VtZW50KSxmPU90KHQucGxhY2VtZW50KSx5PSFmLHA9TnIoZyksRT1qYyhwKSxTPXQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLHg9dC5yZWN0cy5yZWZlcmVuY2UsTj10LnJlY3RzLnBvcHBlcixDPXR5cGVvZiB3PT0iZnVuY3Rpb24iP3coT2JqZWN0LmFzc2lnbih7fSx0LnJlY3RzLHtwbGFjZW1lbnQ6dC5wbGFjZW1lbnR9KSk6dyxrPXR5cGVvZiBDPT0ibnVtYmVyIj97bWFpbkF4aXM6QyxhbHRBeGlzOkN9Ok9iamVjdC5hc3NpZ24oe21haW5BeGlzOjAsYWx0QXhpczowfSxDKSxBPXQubW9kaWZpZXJzRGF0YS5vZmZzZXQ/dC5tb2RpZmllcnNEYXRhLm9mZnNldFt0LnBsYWNlbWVudF06bnVsbCxSPXt4OjAseTowfTtpZihTKXtpZihhKXt2YXIgVCxQPXA9PT0ieSI/YmU6U2UsVT1wPT09InkiP1JlOk5lLEY9cD09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLFc9U1twXSxZPVcrYltQXSxzZT1XLWJbVV0sRGU9dj8tTltGXS8yOjAsQ2U9Zj09PUVuP3hbRl06TltGXSxCPWY9PT1Fbj8tTltGXToteFtGXSx6PXQuZWxlbWVudHMuYXJyb3csYWU9diYmej9Fcih6KTp7d2lkdGg6MCxoZWlnaHQ6MH0scGU9dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0/dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0ucGFkZGluZzpBYSgpLE1lPXBlW1BdLEg9cGVbVV0sX2U9VHIoMCx4W0ZdLGFlW0ZdKSxJdD15P3hbRl0vMi1EZS1fZS1NZS1rLm1haW5BeGlzOkNlLV9lLU1lLWsubWFpbkF4aXMsTXQ9eT8teFtGXS8yK0RlK19lK0gray5tYWluQXhpczpCK19lK0gray5tYWluQXhpcyxJcj10LmVsZW1lbnRzLmFycm93JiZIdCh0LmVsZW1lbnRzLmFycm93KSxLYT1Jcj9wPT09InkiP0lyLmNsaWVudFRvcHx8MDpJci5jbGllbnRMZWZ0fHwwOjAsQ289KFQ9QT8uW3BdKSE9bnVsbD9UOjAsWWE9VytJdC1Dby1LYSxxYT1XK010LUNvLF9vPVRyKHY/U3IoWSxZYSk6WSxXLHY/VnQoc2UscWEpOnNlKTtTW3BdPV9vLFJbcF09X28tV31pZihzKXt2YXIgQW8sUWE9cD09PSJ4Ij9iZTpTZSxKYT1wPT09IngiP1JlOk5lLHBuPVNbRV0sUm49RT09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLE9vPXBuK2JbUWFdLG9yPXBuLWJbSmFdLFJvPVtiZSxTZV0uaW5kZXhPZihnKSE9PS0xLFhhPShBbz1BPy5bRV0pIT1udWxsP0FvOjAsWmE9Um8/T286cG4teFtSbl0tTltSbl0tWGEray5hbHRBeGlzLGVpPVJvP3BuK3hbUm5dK05bUm5dLVhhLWsuYWx0QXhpczpvcix0aT12JiZSbz9uZyhaYSxwbixlaSk6VHIodj9aYTpPbyxwbix2P2VpOm9yKTtTW0VdPXRpLFJbRV09dGktcG59dC5tb2RpZmllcnNEYXRhW3JdPVJ9fXZhciBoZz17bmFtZToicHJldmVudE92ZXJmbG93IixlbmFibGVkOiEwLHBoYXNlOiJtYWluIixmbjpMeCxyZXF1aXJlc0lmRXhpc3RzOlsib2Zmc2V0Il19O2Z1bmN0aW9uIFZjKGUpe3JldHVybntzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9fWZ1bmN0aW9uIEhjKGUpe3JldHVybiBlPT09Z2UoZSl8fCFJZShlKT9EcihlKTpWYyhlKX1mdW5jdGlvbiB6eChlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49Tm4odC53aWR0aCkvZS5vZmZzZXRXaWR0aHx8MSxyPU5uKHQuaGVpZ2h0KS9lLm9mZnNldEhlaWdodHx8MTtyZXR1cm4gbiE9PTF8fHIhPT0xfWZ1bmN0aW9uIEdjKGUsdCxuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIHI9SWUodCksbz1JZSh0KSYmengodCksYT1CZSh0KSxpPUF0KGUsbyxuKSxzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9LGw9e3g6MCx5OjB9O3JldHVybihyfHwhciYmIW4pJiYoKHplKHQpIT09ImJvZHkifHxfcihhKSkmJihzPUhjKHQpKSxJZSh0KT8obD1BdCh0LCEwKSxsLngrPXQuY2xpZW50TGVmdCxsLnkrPXQuY2xpZW50VG9wKTphJiYobC54PUNyKGEpKSkse3g6aS5sZWZ0K3Muc2Nyb2xsTGVmdC1sLngseTppLnRvcCtzLnNjcm9sbFRvcC1sLnksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fWZ1bmN0aW9uICR4KGUpe3ZhciB0PW5ldyBNYXAsbj1uZXcgU2V0LHI9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Quc2V0KGEubmFtZSxhKX0pO2Z1bmN0aW9uIG8oYSl7bi5hZGQoYS5uYW1lKTt2YXIgaT1bXS5jb25jYXQoYS5yZXF1aXJlc3x8W10sYS5yZXF1aXJlc0lmRXhpc3RzfHxbXSk7aS5mb3JFYWNoKGZ1bmN0aW9uKHMpe2lmKCFuLmhhcyhzKSl7dmFyIGw9dC5nZXQocyk7bCYmbyhsKX19KSxyLnB1c2goYSl9cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihhKXtuLmhhcyhhLm5hbWUpfHxvKGEpfSkscn1mdW5jdGlvbiBLYyhlKXt2YXIgdD0keChlKTtyZXR1cm4gZWcucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG4uY29uY2F0KHQuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiBvLnBoYXNlPT09cn0pKX0sW10pfWZ1bmN0aW9uIFljKGUpe3ZhciB0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fHwodD1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dD12b2lkIDAsbihlKCkpfSl9KSksdH19ZnVuY3Rpb24gcWMoZSl7dmFyIHQ9ZS5yZWR1Y2UoZnVuY3Rpb24obixyKXt2YXIgbz1uW3IubmFtZV07cmV0dXJuIG5bci5uYW1lXT1vP09iamVjdC5hc3NpZ24oe30sbyxyLHtvcHRpb25zOk9iamVjdC5hc3NpZ24oe30sby5vcHRpb25zLHIub3B0aW9ucyksZGF0YTpPYmplY3QuYXNzaWduKHt9LG8uZGF0YSxyLmRhdGEpfSk6cixufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdFtuXX0pfXZhciBtZz17cGxhY2VtZW50OiJib3R0b20iLG1vZGlmaWVyczpbXSxzdHJhdGVneToiYWJzb2x1dGUifTtmdW5jdGlvbiBnZygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiF0LnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIShyJiZ0eXBlb2Ygci5nZXRCb3VuZGluZ0NsaWVudFJlY3Q9PSJmdW5jdGlvbiIpfSl9ZnVuY3Rpb24gdmcoZSl7ZT09PXZvaWQgMCYmKGU9e30pO3ZhciB0PWUsbj10LmRlZmF1bHRNb2RpZmllcnMscj1uPT09dm9pZCAwP1tdOm4sbz10LmRlZmF1bHRPcHRpb25zLGE9bz09PXZvaWQgMD9tZzpvO3JldHVybiBmdW5jdGlvbihzLGwsdSl7dT09PXZvaWQgMCYmKHU9YSk7dmFyIGQ9e3BsYWNlbWVudDoiYm90dG9tIixvcmRlcmVkTW9kaWZpZXJzOltdLG9wdGlvbnM6T2JqZWN0LmFzc2lnbih7fSxtZyxhKSxtb2RpZmllcnNEYXRhOnt9LGVsZW1lbnRzOntyZWZlcmVuY2U6cyxwb3BwZXI6bH0sYXR0cmlidXRlczp7fSxzdHlsZXM6e319LGM9W10saD0hMSx2PXtzdGF0ZTpkLHNldE9wdGlvbnM6ZnVuY3Rpb24oZyl7dmFyIGY9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZyhkLm9wdGlvbnMpOmc7dygpLGQub3B0aW9ucz1PYmplY3QuYXNzaWduKHt9LGEsZC5vcHRpb25zLGYpLGQuc2Nyb2xsUGFyZW50cz17cmVmZXJlbmNlOl90KHMpP3RyKHMpOnMuY29udGV4dEVsZW1lbnQ/dHIocy5jb250ZXh0RWxlbWVudCk6W10scG9wcGVyOnRyKGwpfTt2YXIgeT1LYyhxYyhbXS5jb25jYXQocixkLm9wdGlvbnMubW9kaWZpZXJzKSkpO3JldHVybiBkLm9yZGVyZWRNb2RpZmllcnM9eS5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZW5hYmxlZH0pLG0oKSx2LnVwZGF0ZSgpfSxmb3JjZVVwZGF0ZTpmdW5jdGlvbigpe2lmKCFoKXt2YXIgZz1kLmVsZW1lbnRzLGY9Zy5yZWZlcmVuY2UseT1nLnBvcHBlcjtpZihnZyhmLHkpKXtkLnJlY3RzPXtyZWZlcmVuY2U6R2MoZixIdCh5KSxkLm9wdGlvbnMuc3RyYXRlZ3k9PT0iZml4ZWQiKSxwb3BwZXI6RXIoeSl9LGQucmVzZXQ9ITEsZC5wbGFjZW1lbnQ9ZC5vcHRpb25zLnBsYWNlbWVudCxkLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbihrKXtyZXR1cm4gZC5tb2RpZmllcnNEYXRhW2submFtZV09T2JqZWN0LmFzc2lnbih7fSxrLmRhdGEpfSk7Zm9yKHZhciBwPTA7cDxkLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoO3ArKyl7aWYoZC5yZXNldD09PSEwKXtkLnJlc2V0PSExLHA9LTE7Y29udGludWV9dmFyIEU9ZC5vcmRlcmVkTW9kaWZpZXJzW3BdLFM9RS5mbix4PUUub3B0aW9ucyxOPXg9PT12b2lkIDA/e306eCxDPUUubmFtZTt0eXBlb2YgUz09ImZ1bmN0aW9uIiYmKGQ9Uyh7c3RhdGU6ZCxvcHRpb25zOk4sbmFtZTpDLGluc3RhbmNlOnZ9KXx8ZCl9fX19LHVwZGF0ZTpZYyhmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihiKXt2LmZvcmNlVXBkYXRlKCksYihkKX0pfSksZGVzdHJveTpmdW5jdGlvbigpe3coKSxoPSEwfX07aWYoIWdnKHMsbCkpcmV0dXJuIHY7di5zZXRPcHRpb25zKHUpLnRoZW4oZnVuY3Rpb24oYil7IWgmJnUub25GaXJzdFVwZGF0ZSYmdS5vbkZpcnN0VXBkYXRlKGIpfSk7ZnVuY3Rpb24gbSgpe2Qub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBnPWIubmFtZSxmPWIub3B0aW9ucyx5PWY9PT12b2lkIDA/e306ZixwPWIuZWZmZWN0O2lmKHR5cGVvZiBwPT0iZnVuY3Rpb24iKXt2YXIgRT1wKHtzdGF0ZTpkLG5hbWU6ZyxpbnN0YW5jZTp2LG9wdGlvbnM6eX0pLFM9ZnVuY3Rpb24oKXt9O2MucHVzaChFfHxTKX19KX1mdW5jdGlvbiB3KCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3JldHVybiBiKCl9KSxjPVtdfXJldHVybiB2fX12YXIgRng9W2lnLGZnLGFnLERhLHBnLGxnLGhnLHJnLGRnXSxRYz12Zyh7ZGVmYXVsdE1vZGlmaWVyczpGeH0pO3ZhciBVeD0idGlwcHktYm94IixEZz0idGlwcHktY29udGVudCIsV3g9InRpcHB5LWJhY2tkcm9wIixDZz0idGlwcHktYXJyb3ciLF9nPSJ0aXBweS1zdmctYXJyb3ciLEFyPXtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9LEFnPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmJvZHl9O2Z1bmN0aW9uIEpjKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lW3RdO3JldHVybiByPz8oQXJyYXkuaXNBcnJheShuKT9uW3RdOm4pfXJldHVybiBlfWZ1bmN0aW9uIHJkKGUsdCl7dmFyIG49e30udG9TdHJpbmcuY2FsbChlKTtyZXR1cm4gbi5pbmRleE9mKCJbb2JqZWN0Iik9PT0wJiZuLmluZGV4T2YodCsiXSIpPi0xfWZ1bmN0aW9uIE9nKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2UuYXBwbHkodm9pZCAwLHQpOmV9ZnVuY3Rpb24geWcoZSx0KXtpZih0PT09MClyZXR1cm4gZTt2YXIgbjtyZXR1cm4gZnVuY3Rpb24ocil7Y2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChmdW5jdGlvbigpe2Uocil9LHQpfX1mdW5jdGlvbiBCeChlKXtyZXR1cm4gZS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pfWZ1bmN0aW9uIGtvKGUpe3JldHVybltdLmNvbmNhdChlKX1mdW5jdGlvbiB3ZyhlLHQpe2UuaW5kZXhPZih0KT09PS0xJiZlLnB1c2godCl9ZnVuY3Rpb24gangoZSl7cmV0dXJuIGUuZmlsdGVyKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuaW5kZXhPZih0KT09PW59KX1mdW5jdGlvbiBWeChlKXtyZXR1cm4gZS5zcGxpdCgiLSIpWzBdfWZ1bmN0aW9uIHpzKGUpe3JldHVybltdLnNsaWNlLmNhbGwoZSl9ZnVuY3Rpb24geGcoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiBlW25dIT09dm9pZCAwJiYodFtuXT1lW25dKSx0fSx7fSl9ZnVuY3Rpb24gTWEoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9ZnVuY3Rpb24gJHMoZSl7cmV0dXJuWyJFbGVtZW50IiwiRnJhZ21lbnQiXS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiByZChlLHQpfSl9ZnVuY3Rpb24gSHgoZSl7cmV0dXJuIHJkKGUsIk5vZGVMaXN0Iil9ZnVuY3Rpb24gR3goZSl7cmV0dXJuIHJkKGUsIk1vdXNlRXZlbnQiKX1mdW5jdGlvbiBLeChlKXtyZXR1cm4hIShlJiZlLl90aXBweSYmZS5fdGlwcHkucmVmZXJlbmNlPT09ZSl9ZnVuY3Rpb24gWXgoZSl7cmV0dXJuICRzKGUpP1tlXTpIeChlKT96cyhlKTpBcnJheS5pc0FycmF5KGUpP2U6enMoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKSl9ZnVuY3Rpb24gWGMoZSx0KXtlLmZvckVhY2goZnVuY3Rpb24obil7biYmKG4uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPXQrIm1zIil9KX1mdW5jdGlvbiBiZyhlLHQpe2UuZm9yRWFjaChmdW5jdGlvbihuKXtuJiZuLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsdCl9KX1mdW5jdGlvbiBxeChlKXt2YXIgdCxuPWtvKGUpLHI9blswXTtyZXR1cm4gciE9bnVsbCYmKHQ9ci5vd25lckRvY3VtZW50KSE9bnVsbCYmdC5ib2R5P3Iub3duZXJEb2N1bWVudDpkb2N1bWVudH1mdW5jdGlvbiBReChlLHQpe3ZhciBuPXQuY2xpZW50WCxyPXQuY2xpZW50WTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihvKXt2YXIgYT1vLnBvcHBlclJlY3QsaT1vLnBvcHBlclN0YXRlLHM9by5wcm9wcyxsPXMuaW50ZXJhY3RpdmVCb3JkZXIsdT1WeChpLnBsYWNlbWVudCksZD1pLm1vZGlmaWVyc0RhdGEub2Zmc2V0O2lmKCFkKXJldHVybiEwO3ZhciBjPXU9PT0iYm90dG9tIj9kLnRvcC55OjAsaD11PT09InRvcCI/ZC5ib3R0b20ueTowLHY9dT09PSJyaWdodCI/ZC5sZWZ0Lng6MCxtPXU9PT0ibGVmdCI/ZC5yaWdodC54OjAsdz1hLnRvcC1yK2M+bCxiPXItYS5ib3R0b20taD5sLGc9YS5sZWZ0LW4rdj5sLGY9bi1hLnJpZ2h0LW0+bDtyZXR1cm4gd3x8Ynx8Z3x8Zn0pfWZ1bmN0aW9uIFpjKGUsdCxuKXt2YXIgcj10KyJFdmVudExpc3RlbmVyIjtbInRyYW5zaXRpb25lbmQiLCJ3ZWJraXRUcmFuc2l0aW9uRW5kIl0uZm9yRWFjaChmdW5jdGlvbihvKXtlW3JdKG8sbil9KX1mdW5jdGlvbiBrZyhlLHQpe2Zvcih2YXIgbj10O247KXt2YXIgcjtpZihlLmNvbnRhaW5zKG4pKXJldHVybiEwO249bi5nZXRSb290Tm9kZT09bnVsbHx8KHI9bi5nZXRSb290Tm9kZSgpKT09bnVsbD92b2lkIDA6ci5ob3N0fXJldHVybiExfXZhciBzbj17aXNUb3VjaDohMX0sU2c9MDtmdW5jdGlvbiBKeCgpe3NuLmlzVG91Y2h8fChzbi5pc1RvdWNoPSEwLHdpbmRvdy5wZXJmb3JtYW5jZSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixSZykpfWZ1bmN0aW9uIFJnKCl7dmFyIGU9cGVyZm9ybWFuY2Uubm93KCk7ZS1TZzwyMCYmKHNuLmlzVG91Y2g9ITEsZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixSZykpLFNnPWV9ZnVuY3Rpb24gWHgoKXt2YXIgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKEt4KGUpKXt2YXIgdD1lLl90aXBweTtlLmJsdXImJiF0LnN0YXRlLmlzVmlzaWJsZSYmZS5ibHVyKCl9fWZ1bmN0aW9uIFp4KCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsSngsQXIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixYeCl9dmFyIGViPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLHRiPWViPyEhd2luZG93Lm1zQ3J5cHRvOiExO3ZhciBuYj17YW5pbWF0ZUZpbGw6ITEsZm9sbG93Q3Vyc29yOiExLGlubGluZVBvc2l0aW9uaW5nOiExLHN0aWNreTohMX0scmI9e2FsbG93SFRNTDohMSxhbmltYXRpb246ImZhZGUiLGFycm93OiEwLGNvbnRlbnQ6IiIsaW5lcnRpYTohMSxtYXhXaWR0aDozNTAscm9sZToidG9vbHRpcCIsdGhlbWU6IiIsekluZGV4Ojk5OTl9LEt0PU9iamVjdC5hc3NpZ24oe2FwcGVuZFRvOkFnLGFyaWE6e2NvbnRlbnQ6ImF1dG8iLGV4cGFuZGVkOiJhdXRvIn0sZGVsYXk6MCxkdXJhdGlvbjpbMzAwLDI1MF0sZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDpudWxsLGhpZGVPbkNsaWNrOiEwLGlnbm9yZUF0dHJpYnV0ZXM6ITEsaW50ZXJhY3RpdmU6ITEsaW50ZXJhY3RpdmVCb3JkZXI6MixpbnRlcmFjdGl2ZURlYm91bmNlOjAsbW92ZVRyYW5zaXRpb246IiIsb2Zmc2V0OlswLDEwXSxvbkFmdGVyVXBkYXRlOmZ1bmN0aW9uKCl7fSxvbkJlZm9yZVVwZGF0ZTpmdW5jdGlvbigpe30sb25DcmVhdGU6ZnVuY3Rpb24oKXt9LG9uRGVzdHJveTpmdW5jdGlvbigpe30sb25IaWRkZW46ZnVuY3Rpb24oKXt9LG9uSGlkZTpmdW5jdGlvbigpe30sb25Nb3VudDpmdW5jdGlvbigpe30sb25TaG93OmZ1bmN0aW9uKCl7fSxvblNob3duOmZ1bmN0aW9uKCl7fSxvblRyaWdnZXI6ZnVuY3Rpb24oKXt9LG9uVW50cmlnZ2VyOmZ1bmN0aW9uKCl7fSxvbkNsaWNrT3V0c2lkZTpmdW5jdGlvbigpe30scGxhY2VtZW50OiJ0b3AiLHBsdWdpbnM6W10scG9wcGVyT3B0aW9uczp7fSxyZW5kZXI6bnVsbCxzaG93T25DcmVhdGU6ITEsdG91Y2g6ITAsdHJpZ2dlcjoibW91c2VlbnRlciBmb2N1cyIsdHJpZ2dlclRhcmdldDpudWxsfSxuYixyYiksb2I9T2JqZWN0LmtleXMoS3QpLGFiPWZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaChmdW5jdGlvbihyKXtLdFtyXT10W3JdfSl9O2Z1bmN0aW9uIElnKGUpe3ZhciB0PWUucGx1Z2luc3x8W10sbj10LnJlZHVjZShmdW5jdGlvbihyLG8pe3ZhciBhPW8ubmFtZSxpPW8uZGVmYXVsdFZhbHVlO2lmKGEpe3ZhciBzO3JbYV09ZVthXSE9PXZvaWQgMD9lW2FdOihzPUt0W2FdKSE9bnVsbD9zOml9cmV0dXJuIHJ9LHt9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLG4pfWZ1bmN0aW9uIGliKGUsdCl7dmFyIG49dD9PYmplY3Qua2V5cyhJZyhPYmplY3QuYXNzaWduKHt9LEt0LHtwbHVnaW5zOnR9KSkpOm9iLHI9bi5yZWR1Y2UoZnVuY3Rpb24obyxhKXt2YXIgaT0oZS5nZXRBdHRyaWJ1dGUoImRhdGEtdGlwcHktIithKXx8IiIpLnRyaW0oKTtpZighaSlyZXR1cm4gbztpZihhPT09ImNvbnRlbnQiKW9bYV09aTtlbHNlIHRyeXtvW2FdPUpTT04ucGFyc2UoaSl9Y2F0Y2h7b1thXT1pfXJldHVybiBvfSx7fSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRWcoZSx0KXt2YXIgbj1PYmplY3QuYXNzaWduKHt9LHQse2NvbnRlbnQ6T2codC5jb250ZW50LFtlXSl9LHQuaWdub3JlQXR0cmlidXRlcz97fTppYihlLHQucGx1Z2lucykpO3JldHVybiBuLmFyaWE9T2JqZWN0LmFzc2lnbih7fSxLdC5hcmlhLG4uYXJpYSksbi5hcmlhPXtleHBhbmRlZDpuLmFyaWEuZXhwYW5kZWQ9PT0iYXV0byI/dC5pbnRlcmFjdGl2ZTpuLmFyaWEuZXhwYW5kZWQsY29udGVudDpuLmFyaWEuY29udGVudD09PSJhdXRvIj90LmludGVyYWN0aXZlP251bGw6ImRlc2NyaWJlZGJ5IjpuLmFyaWEuY29udGVudH0sbn12YXIgc2I9ZnVuY3Rpb24oKXtyZXR1cm4iaW5uZXJIVE1MIn07ZnVuY3Rpb24gdGQoZSx0KXtlW3NiKCldPXR9ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TWEoKTtyZXR1cm4gZT09PSEwP3QuY2xhc3NOYW1lPUNnOih0LmNsYXNzTmFtZT1fZywkcyhlKT90LmFwcGVuZENoaWxkKGUpOnRkKHQsZSkpLHR9ZnVuY3Rpb24gVGcoZSx0KXskcyh0LmNvbnRlbnQpPyh0ZChlLCIiKSxlLmFwcGVuZENoaWxkKHQuY29udGVudCkpOnR5cGVvZiB0LmNvbnRlbnQhPSJmdW5jdGlvbiImJih0LmFsbG93SFRNTD90ZChlLHQuY29udGVudCk6ZS50ZXh0Q29udGVudD10LmNvbnRlbnQpfWZ1bmN0aW9uIG5kKGUpe3ZhciB0PWUuZmlyc3RFbGVtZW50Q2hpbGQsbj16cyh0LmNoaWxkcmVuKTtyZXR1cm57Ym94OnQsY29udGVudDpuLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIuY2xhc3NMaXN0LmNvbnRhaW5zKERnKX0pLGFycm93Om4uZmluZChmdW5jdGlvbihyKXtyZXR1cm4gci5jbGFzc0xpc3QuY29udGFpbnMoQ2cpfHxyLmNsYXNzTGlzdC5jb250YWlucyhfZyl9KSxiYWNrZHJvcDpuLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIuY2xhc3NMaXN0LmNvbnRhaW5zKFd4KX0pfX1mdW5jdGlvbiBNZyhlKXt2YXIgdD1NYSgpLG49TWEoKTtuLmNsYXNzTmFtZT1VeCxuLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsImhpZGRlbiIpLG4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIik7dmFyIHI9TWEoKTtyLmNsYXNzTmFtZT1EZyxyLnNldEF0dHJpYnV0ZSgiZGF0YS1zdGF0ZSIsImhpZGRlbiIpLFRnKHIsZS5wcm9wcyksdC5hcHBlbmRDaGlsZChuKSxuLmFwcGVuZENoaWxkKHIpLG8oZS5wcm9wcyxlLnByb3BzKTtmdW5jdGlvbiBvKGEsaSl7dmFyIHM9bmQodCksbD1zLmJveCx1PXMuY29udGVudCxkPXMuYXJyb3c7aS50aGVtZT9sLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsaS50aGVtZSk6bC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtdGhlbWUiKSx0eXBlb2YgaS5hbmltYXRpb249PSJzdHJpbmciP2wuc2V0QXR0cmlidXRlKCJkYXRhLWFuaW1hdGlvbiIsaS5hbmltYXRpb24pOmwucmVtb3ZlQXR0cmlidXRlKCJkYXRhLWFuaW1hdGlvbiIpLGkuaW5lcnRpYT9sLnNldEF0dHJpYnV0ZSgiZGF0YS1pbmVydGlhIiwiIik6bC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtaW5lcnRpYSIpLGwuc3R5bGUubWF4V2lkdGg9dHlwZW9mIGkubWF4V2lkdGg9PSJudW1iZXIiP2kubWF4V2lkdGgrInB4IjppLm1heFdpZHRoLGkucm9sZT9sLnNldEF0dHJpYnV0ZSgicm9sZSIsaS5yb2xlKTpsLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLChhLmNvbnRlbnQhPT1pLmNvbnRlbnR8fGEuYWxsb3dIVE1MIT09aS5hbGxvd0hUTUwpJiZUZyh1LGUucHJvcHMpLGkuYXJyb3c/ZD9hLmFycm93IT09aS5hcnJvdyYmKGwucmVtb3ZlQ2hpbGQoZCksbC5hcHBlbmRDaGlsZChOZyhpLmFycm93KSkpOmwuYXBwZW5kQ2hpbGQoTmcoaS5hcnJvdykpOmQmJmwucmVtb3ZlQ2hpbGQoZCl9cmV0dXJue3BvcHBlcjp0LG9uVXBkYXRlOm99fU1nLiQkdGlwcHk9ITA7dmFyIGxiPTEsTHM9W10sZWQ9W107ZnVuY3Rpb24gdWIoZSx0KXt2YXIgbj1FZyhlLE9iamVjdC5hc3NpZ24oe30sS3QsSWcoeGcodCkpKSkscixvLGEsaT0hMSxzPSExLGw9ITEsdT0hMSxkLGMsaCx2PVtdLG09eWcoWWEsbi5pbnRlcmFjdGl2ZURlYm91bmNlKSx3LGI9bGIrKyxnPW51bGwsZj1qeChuLnBsdWdpbnMpLHk9e2lzRW5hYmxlZDohMCxpc1Zpc2libGU6ITEsaXNEZXN0cm95ZWQ6ITEsaXNNb3VudGVkOiExLGlzU2hvd246ITF9LHA9e2lkOmIscmVmZXJlbmNlOmUscG9wcGVyOk1hKCkscG9wcGVySW5zdGFuY2U6Zyxwcm9wczpuLHN0YXRlOnkscGx1Z2luczpmLGNsZWFyRGVsYXlUaW1lb3V0czpaYSxzZXRQcm9wczplaSxzZXRDb250ZW50OnRpLHNob3c6U3ksaGlkZTpFeSxoaWRlV2l0aEludGVyYWN0aXZpdHk6TnksZW5hYmxlOlJvLGRpc2FibGU6WGEsdW5tb3VudDpUeSxkZXN0cm95OkR5fTtpZighbi5yZW5kZXIpcmV0dXJuIHA7dmFyIEU9bi5yZW5kZXIocCksUz1FLnBvcHBlcix4PUUub25VcGRhdGU7Uy5zZXRBdHRyaWJ1dGUoImRhdGEtdGlwcHktcm9vdCIsIiIpLFMuaWQ9InRpcHB5LSIrcC5pZCxwLnBvcHBlcj1TLGUuX3RpcHB5PXAsUy5fdGlwcHk9cDt2YXIgTj1mLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5mbihwKX0pLEM9ZS5oYXNBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKTtyZXR1cm4gSXIoKSxEZSgpLFcoKSxZKCJvbkNyZWF0ZSIsW3BdKSxuLnNob3dPbkNyZWF0ZSYmT28oKSxTLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cC5wcm9wcy5pbnRlcmFjdGl2ZSYmcC5zdGF0ZS5pc1Zpc2libGUmJnAuY2xlYXJEZWxheVRpbWVvdXRzKCl9KSxTLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cC5wcm9wcy5pbnRlcmFjdGl2ZSYmcC5wcm9wcy50cmlnZ2VyLmluZGV4T2YoIm1vdXNlZW50ZXIiKT49MCYmUCgpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbSl9KSxwO2Z1bmN0aW9uIGsoKXt2YXIgRD1wLnByb3BzLnRvdWNoO3JldHVybiBBcnJheS5pc0FycmF5KEQpP0Q6W0QsMF19ZnVuY3Rpb24gQSgpe3JldHVybiBrKClbMF09PT0iaG9sZCJ9ZnVuY3Rpb24gUigpe3ZhciBEO3JldHVybiEhKChEPXAucHJvcHMucmVuZGVyKSE9bnVsbCYmRC4kJHRpcHB5KX1mdW5jdGlvbiBUKCl7cmV0dXJuIHd8fGV9ZnVuY3Rpb24gUCgpe3ZhciBEPVQoKS5wYXJlbnROb2RlO3JldHVybiBEP3F4KEQpOmRvY3VtZW50fWZ1bmN0aW9uIFUoKXtyZXR1cm4gbmQoUyl9ZnVuY3Rpb24gRihEKXtyZXR1cm4gcC5zdGF0ZS5pc01vdW50ZWQmJiFwLnN0YXRlLmlzVmlzaWJsZXx8c24uaXNUb3VjaHx8ZCYmZC50eXBlPT09ImZvY3VzIj8wOkpjKHAucHJvcHMuZGVsYXksRD8wOjEsS3QuZGVsYXkpfWZ1bmN0aW9uIFcoRCl7RD09PXZvaWQgMCYmKEQ9ITEpLFMuc3R5bGUucG9pbnRlckV2ZW50cz1wLnByb3BzLmludGVyYWN0aXZlJiYhRD8iIjoibm9uZSIsUy5zdHlsZS56SW5kZXg9IiIrcC5wcm9wcy56SW5kZXh9ZnVuY3Rpb24gWShELCQsail7aWYoaj09PXZvaWQgMCYmKGo9ITApLE4uZm9yRWFjaChmdW5jdGlvbihxKXtxW0RdJiZxW0RdLmFwcGx5KHEsJCl9KSxqKXt2YXIgdGU7KHRlPXAucHJvcHMpW0RdLmFwcGx5KHRlLCQpfX1mdW5jdGlvbiBzZSgpe3ZhciBEPXAucHJvcHMuYXJpYTtpZihELmNvbnRlbnQpe3ZhciAkPSJhcmlhLSIrRC5jb250ZW50LGo9Uy5pZCx0ZT1rbyhwLnByb3BzLnRyaWdnZXJUYXJnZXR8fGUpO3RlLmZvckVhY2goZnVuY3Rpb24ocSl7dmFyIFFlPXEuZ2V0QXR0cmlidXRlKCQpO2lmKHAuc3RhdGUuaXNWaXNpYmxlKXEuc2V0QXR0cmlidXRlKCQsUWU/UWUrIiAiK2o6aik7ZWxzZXt2YXIgYnQ9UWUmJlFlLnJlcGxhY2UoaiwiIikudHJpbSgpO2J0P3Euc2V0QXR0cmlidXRlKCQsYnQpOnEucmVtb3ZlQXR0cmlidXRlKCQpfX0pfX1mdW5jdGlvbiBEZSgpe2lmKCEoQ3x8IXAucHJvcHMuYXJpYS5leHBhbmRlZCkpe3ZhciBEPWtvKHAucHJvcHMudHJpZ2dlclRhcmdldHx8ZSk7RC5mb3JFYWNoKGZ1bmN0aW9uKCQpe3AucHJvcHMuaW50ZXJhY3RpdmU/JC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLHAuc3RhdGUuaXNWaXNpYmxlJiYkPT09VCgpPyJ0cnVlIjoiZmFsc2UiKTokLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSl9fWZ1bmN0aW9uIENlKCl7UCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbSksTHM9THMuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBEIT09bX0pfWZ1bmN0aW9uIEIoRCl7aWYoIShzbi5pc1RvdWNoJiYobHx8RC50eXBlPT09Im1vdXNlZG93biIpKSl7dmFyICQ9RC5jb21wb3NlZFBhdGgmJkQuY29tcG9zZWRQYXRoKClbMF18fEQudGFyZ2V0O2lmKCEocC5wcm9wcy5pbnRlcmFjdGl2ZSYma2coUywkKSkpe2lmKGtvKHAucHJvcHMudHJpZ2dlclRhcmdldHx8ZSkuc29tZShmdW5jdGlvbihqKXtyZXR1cm4ga2coaiwkKX0pKXtpZihzbi5pc1RvdWNofHxwLnN0YXRlLmlzVmlzaWJsZSYmcC5wcm9wcy50cmlnZ2VyLmluZGV4T2YoImNsaWNrIik+PTApcmV0dXJufWVsc2UgWSgib25DbGlja091dHNpZGUiLFtwLERdKTtwLnByb3BzLmhpZGVPbkNsaWNrPT09ITAmJihwLmNsZWFyRGVsYXlUaW1lb3V0cygpLHAuaGlkZSgpLHM9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3M9ITF9KSxwLnN0YXRlLmlzTW91bnRlZHx8TWUoKSl9fX1mdW5jdGlvbiB6KCl7bD0hMH1mdW5jdGlvbiBhZSgpe2w9ITF9ZnVuY3Rpb24gcGUoKXt2YXIgRD1QKCk7RC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEIsITApLEQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLEIsQXIpLEQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsYWUsQXIpLEQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix6LEFyKX1mdW5jdGlvbiBNZSgpe3ZhciBEPVAoKTtELnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQiwhMCksRC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsQixBciksRC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixhZSxBciksRC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHosQXIpfWZ1bmN0aW9uIEgoRCwkKXtJdChELGZ1bmN0aW9uKCl7IXAuc3RhdGUuaXNWaXNpYmxlJiZTLnBhcmVudE5vZGUmJlMucGFyZW50Tm9kZS5jb250YWlucyhTKSYmJCgpfSl9ZnVuY3Rpb24gX2UoRCwkKXtJdChELCQpfWZ1bmN0aW9uIEl0KEQsJCl7dmFyIGo9VSgpLmJveDtmdW5jdGlvbiB0ZShxKXtxLnRhcmdldD09PWomJihaYyhqLCJyZW1vdmUiLHRlKSwkKCkpfWlmKEQ9PT0wKXJldHVybiAkKCk7WmMoaiwicmVtb3ZlIixjKSxaYyhqLCJhZGQiLHRlKSxjPXRlfWZ1bmN0aW9uIE10KEQsJCxqKXtqPT09dm9pZCAwJiYoaj0hMSk7dmFyIHRlPWtvKHAucHJvcHMudHJpZ2dlclRhcmdldHx8ZSk7dGUuZm9yRWFjaChmdW5jdGlvbihxKXtxLmFkZEV2ZW50TGlzdGVuZXIoRCwkLGopLHYucHVzaCh7bm9kZTpxLGV2ZW50VHlwZTpELGhhbmRsZXI6JCxvcHRpb25zOmp9KX0pfWZ1bmN0aW9uIElyKCl7QSgpJiYoTXQoInRvdWNoc3RhcnQiLENvLHtwYXNzaXZlOiEwfSksTXQoInRvdWNoZW5kIixxYSx7cGFzc2l2ZTohMH0pKSxCeChwLnByb3BzLnRyaWdnZXIpLmZvckVhY2goZnVuY3Rpb24oRCl7aWYoRCE9PSJtYW51YWwiKXN3aXRjaChNdChELENvKSxEKXtjYXNlIm1vdXNlZW50ZXIiOk10KCJtb3VzZWxlYXZlIixxYSk7YnJlYWs7Y2FzZSJmb2N1cyI6TXQodGI/ImZvY3Vzb3V0IjoiYmx1ciIsX28pO2JyZWFrO2Nhc2UiZm9jdXNpbiI6TXQoImZvY3Vzb3V0Iixfbyk7YnJlYWt9fSl9ZnVuY3Rpb24gS2EoKXt2LmZvckVhY2goZnVuY3Rpb24oRCl7dmFyICQ9RC5ub2RlLGo9RC5ldmVudFR5cGUsdGU9RC5oYW5kbGVyLHE9RC5vcHRpb25zOyQucmVtb3ZlRXZlbnRMaXN0ZW5lcihqLHRlLHEpfSksdj1bXX1mdW5jdGlvbiBDbyhEKXt2YXIgJCxqPSExO2lmKCEoIXAuc3RhdGUuaXNFbmFibGVkfHxBbyhEKXx8cykpe3ZhciB0ZT0oKCQ9ZCk9PW51bGw/dm9pZCAwOiQudHlwZSk9PT0iZm9jdXMiO2Q9RCx3PUQuY3VycmVudFRhcmdldCxEZSgpLCFwLnN0YXRlLmlzVmlzaWJsZSYmR3goRCkmJkxzLmZvckVhY2goZnVuY3Rpb24ocSl7cmV0dXJuIHEoRCl9KSxELnR5cGU9PT0iY2xpY2siJiYocC5wcm9wcy50cmlnZ2VyLmluZGV4T2YoIm1vdXNlZW50ZXIiKTwwfHxpKSYmcC5wcm9wcy5oaWRlT25DbGljayE9PSExJiZwLnN0YXRlLmlzVmlzaWJsZT9qPSEwOk9vKEQpLEQudHlwZT09PSJjbGljayImJihpPSFqKSxqJiYhdGUmJm9yKEQpfX1mdW5jdGlvbiBZYShEKXt2YXIgJD1ELnRhcmdldCxqPVQoKS5jb250YWlucygkKXx8Uy5jb250YWlucygkKTtpZighKEQudHlwZT09PSJtb3VzZW1vdmUiJiZqKSl7dmFyIHRlPVJuKCkuY29uY2F0KFMpLm1hcChmdW5jdGlvbihxKXt2YXIgUWUsYnQ9cS5fdGlwcHksTXI9KFFlPWJ0LnBvcHBlckluc3RhbmNlKT09bnVsbD92b2lkIDA6UWUuc3RhdGU7cmV0dXJuIE1yP3twb3BwZXJSZWN0OnEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscG9wcGVyU3RhdGU6TXIscHJvcHM6bn06bnVsbH0pLmZpbHRlcihCb29sZWFuKTtReCh0ZSxEKSYmKENlKCksb3IoRCkpfX1mdW5jdGlvbiBxYShEKXt2YXIgJD1BbyhEKXx8cC5wcm9wcy50cmlnZ2VyLmluZGV4T2YoImNsaWNrIik+PTAmJmk7aWYoISQpe2lmKHAucHJvcHMuaW50ZXJhY3RpdmUpe3AuaGlkZVdpdGhJbnRlcmFjdGl2aXR5KEQpO3JldHVybn1vcihEKX19ZnVuY3Rpb24gX28oRCl7cC5wcm9wcy50cmlnZ2VyLmluZGV4T2YoImZvY3VzaW4iKTwwJiZELnRhcmdldCE9PVQoKXx8cC5wcm9wcy5pbnRlcmFjdGl2ZSYmRC5yZWxhdGVkVGFyZ2V0JiZTLmNvbnRhaW5zKEQucmVsYXRlZFRhcmdldCl8fG9yKEQpfWZ1bmN0aW9uIEFvKEQpe3JldHVybiBzbi5pc1RvdWNoP0EoKSE9PUQudHlwZS5pbmRleE9mKCJ0b3VjaCIpPj0wOiExfWZ1bmN0aW9uIFFhKCl7SmEoKTt2YXIgRD1wLnByb3BzLCQ9RC5wb3BwZXJPcHRpb25zLGo9RC5wbGFjZW1lbnQsdGU9RC5vZmZzZXQscT1ELmdldFJlZmVyZW5jZUNsaWVudFJlY3QsUWU9RC5tb3ZlVHJhbnNpdGlvbixidD1SKCk/bmQoUykuYXJyb3c6bnVsbCxNcj1xP3tnZXRCb3VuZGluZ0NsaWVudFJlY3Q6cSxjb250ZXh0RWxlbWVudDpxLmNvbnRleHRFbGVtZW50fHxUKCl9OmUsbnA9e25hbWU6IiQkdGlwcHkiLGVuYWJsZWQ6ITAscGhhc2U6ImJlZm9yZVdyaXRlIixyZXF1aXJlczpbImNvbXB1dGVTdHlsZXMiXSxmbjpmdW5jdGlvbihuaSl7dmFyIFByPW5pLnN0YXRlO2lmKFIoKSl7dmFyIEN5PVUoKSxsbD1DeS5ib3g7WyJwbGFjZW1lbnQiLCJyZWZlcmVuY2UtaGlkZGVuIiwiZXNjYXBlZCJdLmZvckVhY2goZnVuY3Rpb24ocmkpe3JpPT09InBsYWNlbWVudCI/bGwuc2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlbWVudCIsUHIucGxhY2VtZW50KTpQci5hdHRyaWJ1dGVzLnBvcHBlclsiZGF0YS1wb3BwZXItIityaV0/bGwuc2V0QXR0cmlidXRlKCJkYXRhLSIrcmksIiIpOmxsLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS0iK3JpKX0pLFByLmF0dHJpYnV0ZXMucG9wcGVyPXt9fX19LGFyPVt7bmFtZToib2Zmc2V0IixvcHRpb25zOntvZmZzZXQ6dGV9fSx7bmFtZToicHJldmVudE92ZXJmbG93IixvcHRpb25zOntwYWRkaW5nOnt0b3A6Mixib3R0b206MixsZWZ0OjUscmlnaHQ6NX19fSx7bmFtZToiZmxpcCIsb3B0aW9uczp7cGFkZGluZzo1fX0se25hbWU6ImNvbXB1dGVTdHlsZXMiLG9wdGlvbnM6e2FkYXB0aXZlOiFRZX19LG5wXTtSKCkmJmJ0JiZhci5wdXNoKHtuYW1lOiJhcnJvdyIsb3B0aW9uczp7ZWxlbWVudDpidCxwYWRkaW5nOjN9fSksYXIucHVzaC5hcHBseShhciwkPy5tb2RpZmllcnN8fFtdKSxwLnBvcHBlckluc3RhbmNlPVFjKE1yLFMsT2JqZWN0LmFzc2lnbih7fSwkLHtwbGFjZW1lbnQ6aixvbkZpcnN0VXBkYXRlOmgsbW9kaWZpZXJzOmFyfSkpfWZ1bmN0aW9uIEphKCl7cC5wb3BwZXJJbnN0YW5jZSYmKHAucG9wcGVySW5zdGFuY2UuZGVzdHJveSgpLHAucG9wcGVySW5zdGFuY2U9bnVsbCl9ZnVuY3Rpb24gcG4oKXt2YXIgRD1wLnByb3BzLmFwcGVuZFRvLCQsaj1UKCk7cC5wcm9wcy5pbnRlcmFjdGl2ZSYmRD09PUFnfHxEPT09InBhcmVudCI/JD1qLnBhcmVudE5vZGU6JD1PZyhELFtqXSksJC5jb250YWlucyhTKXx8JC5hcHBlbmRDaGlsZChTKSxwLnN0YXRlLmlzTW91bnRlZD0hMCxRYSgpfWZ1bmN0aW9uIFJuKCl7cmV0dXJuIHpzKFMucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtdGlwcHktcm9vdF0iKSl9ZnVuY3Rpb24gT28oRCl7cC5jbGVhckRlbGF5VGltZW91dHMoKSxEJiZZKCJvblRyaWdnZXIiLFtwLERdKSxwZSgpO3ZhciAkPUYoITApLGo9aygpLHRlPWpbMF0scT1qWzFdO3NuLmlzVG91Y2gmJnRlPT09ImhvbGQiJiZxJiYoJD1xKSwkP3I9c2V0VGltZW91dChmdW5jdGlvbigpe3Auc2hvdygpfSwkKTpwLnNob3coKX1mdW5jdGlvbiBvcihEKXtpZihwLmNsZWFyRGVsYXlUaW1lb3V0cygpLFkoIm9uVW50cmlnZ2VyIixbcCxEXSksIXAuc3RhdGUuaXNWaXNpYmxlKXtNZSgpO3JldHVybn1pZighKHAucHJvcHMudHJpZ2dlci5pbmRleE9mKCJtb3VzZWVudGVyIik+PTAmJnAucHJvcHMudHJpZ2dlci5pbmRleE9mKCJjbGljayIpPj0wJiZbIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiXS5pbmRleE9mKEQudHlwZSk+PTAmJmkpKXt2YXIgJD1GKCExKTskP289c2V0VGltZW91dChmdW5jdGlvbigpe3Auc3RhdGUuaXNWaXNpYmxlJiZwLmhpZGUoKX0sJCk6YT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtwLmhpZGUoKX0pfX1mdW5jdGlvbiBSbygpe3Auc3RhdGUuaXNFbmFibGVkPSEwfWZ1bmN0aW9uIFhhKCl7cC5oaWRlKCkscC5zdGF0ZS5pc0VuYWJsZWQ9ITF9ZnVuY3Rpb24gWmEoKXtjbGVhclRpbWVvdXQociksY2xlYXJUaW1lb3V0KG8pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpfWZ1bmN0aW9uIGVpKEQpe2lmKCFwLnN0YXRlLmlzRGVzdHJveWVkKXtZKCJvbkJlZm9yZVVwZGF0ZSIsW3AsRF0pLEthKCk7dmFyICQ9cC5wcm9wcyxqPUVnKGUsT2JqZWN0LmFzc2lnbih7fSwkLHhnKEQpLHtpZ25vcmVBdHRyaWJ1dGVzOiEwfSkpO3AucHJvcHM9aixJcigpLCQuaW50ZXJhY3RpdmVEZWJvdW5jZSE9PWouaW50ZXJhY3RpdmVEZWJvdW5jZSYmKENlKCksbT15ZyhZYSxqLmludGVyYWN0aXZlRGVib3VuY2UpKSwkLnRyaWdnZXJUYXJnZXQmJiFqLnRyaWdnZXJUYXJnZXQ/a28oJC50cmlnZ2VyVGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXt0ZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKX0pOmoudHJpZ2dlclRhcmdldCYmZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiKSxEZSgpLFcoKSx4JiZ4KCQsaikscC5wb3BwZXJJbnN0YW5jZSYmKFFhKCksUm4oKS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGUuX3RpcHB5LnBvcHBlckluc3RhbmNlLmZvcmNlVXBkYXRlKX0pKSxZKCJvbkFmdGVyVXBkYXRlIixbcCxEXSl9fWZ1bmN0aW9uIHRpKEQpe3Auc2V0UHJvcHMoe2NvbnRlbnQ6RH0pfWZ1bmN0aW9uIFN5KCl7dmFyIEQ9cC5zdGF0ZS5pc1Zpc2libGUsJD1wLnN0YXRlLmlzRGVzdHJveWVkLGo9IXAuc3RhdGUuaXNFbmFibGVkLHRlPXNuLmlzVG91Y2gmJiFwLnByb3BzLnRvdWNoLHE9SmMocC5wcm9wcy5kdXJhdGlvbiwwLEt0LmR1cmF0aW9uKTtpZighKER8fCR8fGp8fHRlKSYmIVQoKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJihZKCJvblNob3ciLFtwXSwhMSkscC5wcm9wcy5vblNob3cocCkhPT0hMSkpe2lmKHAuc3RhdGUuaXNWaXNpYmxlPSEwLFIoKSYmKFMuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLFcoKSxwZSgpLHAuc3RhdGUuaXNNb3VudGVkfHwoUy5zdHlsZS50cmFuc2l0aW9uPSJub25lIiksUigpKXt2YXIgUWU9VSgpLGJ0PVFlLmJveCxNcj1RZS5jb250ZW50O1hjKFtidCxNcl0sMCl9aD1mdW5jdGlvbigpe3ZhciBhcjtpZighKCFwLnN0YXRlLmlzVmlzaWJsZXx8dSkpe2lmKHU9ITAsUy5vZmZzZXRIZWlnaHQsUy5zdHlsZS50cmFuc2l0aW9uPXAucHJvcHMubW92ZVRyYW5zaXRpb24sUigpJiZwLnByb3BzLmFuaW1hdGlvbil7dmFyIHNsPVUoKSxuaT1zbC5ib3gsUHI9c2wuY29udGVudDtYYyhbbmksUHJdLHEpLGJnKFtuaSxQcl0sInZpc2libGUiKX1zZSgpLERlKCksd2coZWQscCksKGFyPXAucG9wcGVySW5zdGFuY2UpPT1udWxsfHxhci5mb3JjZVVwZGF0ZSgpLFkoIm9uTW91bnQiLFtwXSkscC5wcm9wcy5hbmltYXRpb24mJlIoKSYmX2UocSxmdW5jdGlvbigpe3Auc3RhdGUuaXNTaG93bj0hMCxZKCJvblNob3duIixbcF0pfSl9fSxwbigpfX1mdW5jdGlvbiBFeSgpe3ZhciBEPSFwLnN0YXRlLmlzVmlzaWJsZSwkPXAuc3RhdGUuaXNEZXN0cm95ZWQsaj0hcC5zdGF0ZS5pc0VuYWJsZWQsdGU9SmMocC5wcm9wcy5kdXJhdGlvbiwxLEt0LmR1cmF0aW9uKTtpZighKER8fCR8fGopJiYoWSgib25IaWRlIixbcF0sITEpLHAucHJvcHMub25IaWRlKHApIT09ITEpKXtpZihwLnN0YXRlLmlzVmlzaWJsZT0hMSxwLnN0YXRlLmlzU2hvd249ITEsdT0hMSxpPSExLFIoKSYmKFMuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksQ2UoKSxNZSgpLFcoITApLFIoKSl7dmFyIHE9VSgpLFFlPXEuYm94LGJ0PXEuY29udGVudDtwLnByb3BzLmFuaW1hdGlvbiYmKFhjKFtRZSxidF0sdGUpLGJnKFtRZSxidF0sImhpZGRlbiIpKX1zZSgpLERlKCkscC5wcm9wcy5hbmltYXRpb24/UigpJiZIKHRlLHAudW5tb3VudCk6cC51bm1vdW50KCl9fWZ1bmN0aW9uIE55KEQpe1AoKS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLG0pLHdnKExzLG0pLG0oRCl9ZnVuY3Rpb24gVHkoKXtwLnN0YXRlLmlzVmlzaWJsZSYmcC5oaWRlKCkscC5zdGF0ZS5pc01vdW50ZWQmJihKYSgpLFJuKCkuZm9yRWFjaChmdW5jdGlvbihEKXtELl90aXBweS51bm1vdW50KCl9KSxTLnBhcmVudE5vZGUmJlMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChTKSxlZD1lZC5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIEQhPT1wfSkscC5zdGF0ZS5pc01vdW50ZWQ9ITEsWSgib25IaWRkZW4iLFtwXSkpfWZ1bmN0aW9uIER5KCl7cC5zdGF0ZS5pc0Rlc3Ryb3llZHx8KHAuY2xlYXJEZWxheVRpbWVvdXRzKCkscC51bm1vdW50KCksS2EoKSxkZWxldGUgZS5fdGlwcHkscC5zdGF0ZS5pc0Rlc3Ryb3llZD0hMCxZKCJvbkRlc3Ryb3kiLFtwXSkpfX1mdW5jdGlvbiBQYShlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTt2YXIgbj1LdC5wbHVnaW5zLmNvbmNhdCh0LnBsdWdpbnN8fFtdKTtaeCgpO3ZhciByPU9iamVjdC5hc3NpZ24oe30sdCx7cGx1Z2luczpufSksbz1ZeChlKTtpZigwKXZhciBhLGk7dmFyIHM9by5yZWR1Y2UoZnVuY3Rpb24obCx1KXt2YXIgZD11JiZ1Yih1LHIpO3JldHVybiBkJiZsLnB1c2goZCksbH0sW10pO3JldHVybiAkcyhlKT9zWzBdOnN9UGEuZGVmYXVsdFByb3BzPUt0O1BhLnNldERlZmF1bHRQcm9wcz1hYjtQYS5jdXJyZW50SW5wdXQ9c247dmFyIFhDPU9iamVjdC5hc3NpZ24oe30sRGEse2VmZmVjdDpmdW5jdGlvbih0KXt2YXIgbj10LnN0YXRlLHI9e3BvcHBlcjp7cG9zaXRpb246bi5vcHRpb25zLnN0cmF0ZWd5LGxlZnQ6IjAiLHRvcDoiMCIsbWFyZ2luOiIwIn0sYXJyb3c6e3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9LHJlZmVyZW5jZTp7fX07T2JqZWN0LmFzc2lnbihuLmVsZW1lbnRzLnBvcHBlci5zdHlsZSxyLnBvcHBlciksbi5zdHlsZXM9cixuLmVsZW1lbnRzLmFycm93JiZPYmplY3QuYXNzaWduKG4uZWxlbWVudHMuYXJyb3cuc3R5bGUsci5hcnJvdyl9fSk7UGEuc2V0RGVmYXVsdFByb3BzKHtyZW5kZXI6TWd9KTt2YXIgTGE9UGE7dmFyIHV0PWxlKGllKCksMSk7dmFyIFBnPXt0aGVtZToiZGFzaGJvYXJkIixkdXJhdGlvbjpbMTIwLDgwXSxhcnJvdzohMCxvZmZzZXQ6WzAsOF19O2Z1bmN0aW9uIG9kKHtjb250ZW50OmUscGxhY2VtZW50OnQsaW50ZXJhY3RpdmU6bixjaGlsZHJlbjpyLC4uLm99KXtsZXQgYT0oMCx1dC51c2VSZWYpKG51bGwpLGk9KDAsdXQudXNlUmVmKShudWxsKTtyZXR1cm4oMCx1dC51c2VFZmZlY3QpKCgpPT57aWYoYS5jdXJyZW50KXJldHVybiBpLmN1cnJlbnQ9TGEoYS5jdXJyZW50LHsuLi5QZyxjb250ZW50OmV8fCIiLHBsYWNlbWVudDp0fHwidG9wIixpbnRlcmFjdGl2ZTpufHwhMSxhbGxvd0hUTUw6ITAsLi4ub30pLCgpPT57aS5jdXJyZW50Py5kZXN0cm95KCksaS5jdXJyZW50PW51bGx9fSxbXSksKDAsdXQudXNlRWZmZWN0KSgoKT0+e2kuY3VycmVudCYmZSE9bnVsbCYmaS5jdXJyZW50LnNldENvbnRlbnQoZSl9LFtlXSksKDAsdXQuY3JlYXRlRWxlbWVudCkoInNwYW4iLHtyZWY6YSxzdHlsZTp7ZGlzcGxheToiaW5saW5lIn19LHIpfWZ1bmN0aW9uIHphKGU9e30pe2xldCB0PSgwLHV0LnVzZVJlZikobnVsbCksbj0oMCx1dC51c2VSZWYpKHt3aWR0aDowLGhlaWdodDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSkscj0oMCx1dC51c2VSZWYpKG51bGwpLG89KDAsdXQudXNlUmVmKShlLmhpZGVEZWxheXx8MzAwKSxhPSgwLHV0LnVzZVJlZikobnVsbCk7ZnVuY3Rpb24gaSgpe3IuY3VycmVudCYmKGNsZWFyVGltZW91dChyLmN1cnJlbnQpLHIuY3VycmVudD1udWxsKX1mdW5jdGlvbiBzKGQsYyl7aSgpLGMhPT12b2lkIDAmJihhLmN1cnJlbnQ9Yyksci5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntyLmN1cnJlbnQ9bnVsbCx0LmN1cnJlbnQ/LmhpZGUoKSxhLmN1cnJlbnQmJmEuY3VycmVudCgpfSxkPz9vLmN1cnJlbnQpfSgwLHV0LnVzZUVmZmVjdCkoKCk9Pnt0LmN1cnJlbnQ9TGEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksey4uLlBnLGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6KCk9Pm4uY3VycmVudCx0cmlnZ2VyOiJtYW51YWwiLGhpZGVPbkNsaWNrOiExLGFsbG93SFRNTDohMCxpbnRlcmFjdGl2ZTohIWUuaW50ZXJhY3RpdmUscGxhY2VtZW50OmUucGxhY2VtZW50fHwidG9wIixhcHBlbmRUbzooKT0+ZG9jdW1lbnQuYm9keSwuLi5lfSk7bGV0IGQsYztpZihlLmludGVyYWN0aXZlKXtsZXQgaD10LmN1cnJlbnQucG9wcGVyO2Q9KCk9PmkoKSxjPSgpPT5zKCksaC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixkKSxoLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLGMpfXJldHVybigpPT57aWYoZS5pbnRlcmFjdGl2ZSYmdC5jdXJyZW50KXtsZXQgaD10LmN1cnJlbnQucG9wcGVyO2QmJmgucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsZCksYyYmaC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixjKX1pKCksdC5jdXJyZW50Py5kZXN0cm95KCksdC5jdXJyZW50PW51bGx9fSxbXSk7ZnVuY3Rpb24gbChkLGMsaCx2KXtpKCk7bGV0IG09dC5jdXJyZW50O2lmKCFtKXJldHVybjtuLmN1cnJlbnQ9e3dpZHRoOjAsaGVpZ2h0OjAsdG9wOmgscmlnaHQ6Yyxib3R0b206aCxsZWZ0OmN9LG0uc2V0Q29udGVudChkKTtsZXQgdz12fHx7fSxiPXcucGxhY2VtZW50fHxtLnByb3BzLnBsYWNlbWVudDtiIT09bS5wcm9wcy5wbGFjZW1lbnQmJm0uc2V0UHJvcHMoe3BsYWNlbWVudDpifSk7bGV0IGc9bS5wb3BwZXIuZmlyc3RFbGVtZW50Q2hpbGQ7ZyYmZy5jbGFzc0xpc3QudG9nZ2xlKCJiZWxvdy1jaGFydCIsISF3LmJlbG93Q2hhcnQpLG0uc3RhdGUuaXNWaXNpYmxlP20ucG9wcGVySW5zdGFuY2U/LnVwZGF0ZSgpOm0uc2hvdygpfWZ1bmN0aW9uIHUoKXtpKCksdC5jdXJyZW50Py5oaWRlKCl9cmV0dXJue3Nob3c6bCxoaWRlOnUsc2NoZWR1bGVIaWRlOnMsY2FuY2VsU2NoZWR1bGVkSGlkZTppfX12YXIgbnI9bGUoaWUoKSk7dmFyIGFkPSExO2Z1bmN0aW9uIGlkKGUpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpe2FkPWU7cmV0dXJufWxldCB0PVN0cmluZyhlfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7YWQ9WyJ0cnVlIiwieWVzIiwiMSIsIm9uIiwiZW5hYmxlZCJdLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIE8oLi4uZSl7YWQmJmNvbnNvbGUubG9nKC4uLmUpfWZ1bmN0aW9uIG50KGUpe2lmKCFlKXJldHVybiBuZXcgRGF0ZTtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZSk7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYvXlxkezR9LVxkezJ9LVxkezJ9JC8udGVzdChlKSl7bGV0W24scixvXT1lLnNwbGl0KCItIikubWFwKE51bWJlcik7cmV0dXJuIG5ldyBEYXRlKG4sci0xLG8pfWxldCB0PW5ldyBEYXRlKGUpO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP25ldyBEYXRlOnR9ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9bnQoZSksbj10LmdldEZ1bGxZZWFyKCkscj1TdHJpbmcodC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsIjAiKSxvPVN0cmluZyh0LmdldERhdGUoKSkucGFkU3RhcnQoMiwiMCIpO3JldHVybmAke259LSR7cn0tJHtvfWB9ZnVuY3Rpb24gUnQoZSl7bGV0IHQ9bnQoZSksbj10LmdldERheSgpLHI9bj09PTA/LTY6MS1uLG89bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKStyKTtyZXR1cm4gby5zZXRIb3VycygwLDAsMCwwKSxvfWZ1bmN0aW9uIEZzKGUpe2xldCB0PVJ0KGUpLG49bmV3IERhdGUodCk7cmV0dXJuIG4uc2V0RGF0ZShuLmdldERhdGUoKSs2KSxuLnNldEhvdXJzKDIzLDU5LDU5LDk5OSksbn1mdW5jdGlvbiBMZyhlKXtsZXQgdD1SdChlKSxuPVtdO2ZvcihsZXQgcj0wO3I8NztyKyspe2xldCBvPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkrciksYT1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpK3IrMSk7bi5wdXNoKHtmcm9tOk1hdGguZmxvb3Ioby5nZXRUaW1lKCkvMWUzKSx0bzpNYXRoLmZsb29yKGEuZ2V0VGltZSgpLzFlMyksZGF0ZUtleTpjdChvKX0pfXJldHVybntib3VuZGFyaWVzOm4sd2Vla1N0YXJ0S2V5OmN0KHQpfX1mdW5jdGlvbiB6ZyhlKXtsZXQgdD1SdChlKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOjd9LChuLHIpPT57bGV0IG89bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKStyKTtyZXR1cm57ZGF5Om8udG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToic2hvcnQifSksZGF0ZTpvLnRvSVNPU3RyaW5nKCksZGF0ZUtleTpjdChvKX19KX1mdW5jdGlvbiBzZCgpe2xldCBlPW5ldyBEYXRlLHQ9UnQoZSk7cmV0dXJuIGUuZ2V0VGltZSgpLXQuZ2V0VGltZSgpPDMqMjQqNjAqNjAqMWUzfWZ1bmN0aW9uICRnKGUpe3JldHVybiBudChlKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHt3ZWVrZGF5OiJzaG9ydCIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSl9YXN5bmMgZnVuY3Rpb24gRmcoZSx0KXtsZXQgbj1uZXcgRGF0ZSxyPVJ0KG4pLG89RnMobiksYT1lLnNldHRpbmdzW1YuVEFTS19ET01BSU5TXSxpPXt9O3RyeXtpPWE/SlNPTi5wYXJzZShhKTp7fX1jYXRjaHtpPXt9fWkuc2VsZWN0ZWREb21haW5VdWlkPXQsYXdhaXQgZS5zZXRTZXR0aW5nKFYuVEFTS19ET01BSU5TLEpTT04uc3RyaW5naWZ5KGkpKTtsZXQgcz1hd2FpdCBkYihlLHQpO3JldHVybnt0YXNrczpzLHRvZGF5VGFza3M6cGIocyxuKSxjb21wbGV0ZWRUaGlzV2VlazpHZyhzLHIsbyksd2Vla2x5VmljdG9yeVZhbHVlOmZiKHMscixvKSxkYWlseVZpY3RvcnlWYWx1ZXM6aGIocyxyKSxhY3RpdmVUYXNrRG9tYWluOnR9fWFzeW5jIGZ1bmN0aW9uIFVnKGUpe2xldCB0PWF3YWl0IGUuZ2V0VGFza0RvbWFpbnMoKSxuPWUuc2V0dGluZ3NbVi5UQVNLX0RPTUFJTlNdLHI9e307dHJ5e3I9bj9KU09OLnBhcnNlKG4pOnt9fWNhdGNoe3I9e319cmV0dXJuIHIuZG9tYWlucz10Lm1hcChhPT4oe25hbWU6YS5uYW1lLHV1aWQ6YS51dWlkfSkpLHIubGFzdFJldHJpZXZlZD1EYXRlLm5vdygpLHIuc2VsZWN0ZWREb21haW5VdWlkJiZyLmRvbWFpbnMuc29tZShhPT5hLnV1aWQ9PT1yLnNlbGVjdGVkRG9tYWluVXVpZCl8fChyLnNlbGVjdGVkRG9tYWluVXVpZD1jYihyLmRvbWFpbnMpKSxhd2FpdCBlLnNldFNldHRpbmcoVi5UQVNLX0RPTUFJTlMsSlNPTi5zdHJpbmdpZnkocikpLHtkb21haW5zOnIuZG9tYWlucyxhY3RpdmVUYXNrRG9tYWluOnIuc2VsZWN0ZWREb21haW5VdWlkfX1hc3luYyBmdW5jdGlvbiBXZyhlLHQpe2xldHtsYWJlbDpuLHllYXI6cixxdWFydGVyOm99PXQsYT1gJHtufSBQbGFuYCxpPWUuc2V0dGluZ3NbVi5QTEFOTklOR19OT1RFX1RBR118fFRzLHM9W3JuLGldLHU9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5OmF9KSkuZmluZChoPT5oLm5hbWU9PT1hKTtpZih1KXJldHVybiBhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7dS51dWlkfWApLHt1dWlkOnUudXVpZCxleGlzdGVkOiEwfTtsZXQgZD11ZChuLG8pLGM9YXdhaXQgZS5jcmVhdGVOb3RlKGEscyk7cmV0dXJuIGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6Y30sZCksYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke2N9YCkse3V1aWQ6YyxleGlzdGVkOiExfX1hc3luYyBmdW5jdGlvbiBCZyhlLHQpe2xldCBuPWUuc2V0dGluZ3NbVi5MTE1fQVBJX0tFWV0scj1lLnNldHRpbmdzW1YuTExNX1BST1ZJREVSXXx8Im9wZW5haSI7aWYoIW4pcmV0dXJuW107bGV0IG89dD9gQmFzZWQgb24gdGhlc2UgcXVhcnRlcmx5IGdvYWxzLCBnZW5lcmF0ZSAyIHNob3J0IGluc3BpcmF0aW9uYWwgcXVvdGVzICgxLTIgc2VudGVuY2VzIGVhY2gpIHRoYXQgbW90aXZhdGUgcHJvZ3Jlc3MgdG93YXJkIHRoZXNlIGdvYWxzLiBSZXR1cm4gYXMgSlNPTiBhcnJheSBbe3RleHQsIGF1dGhvcn1dLiBHb2FsczogJHt0LnN1YnN0cmluZygwLDUwMCl9YDoiR2VuZXJhdGUgMiBzaG9ydCBpbnNwaXJhdGlvbmFsIHF1b3RlcyBhYm91dCBwcm9kdWN0aXZpdHkgYW5kIHBlcnNvbmFsIGdyb3d0aC4gUmV0dXJuIGFzIEpTT04gYXJyYXkgW3t0ZXh0LCBhdXRob3J9XS4iLGE9cj09PSJhbnRocm9waWMiPyJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIjoiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jaGF0L2NvbXBsZXRpb25zIixpPXI9PT0iYW50aHJvcGljIj97IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ4LWFwaS1rZXkiOm4sImFudGhyb3BpYy12ZXJzaW9uIjoiMjAyMy0wNi0wMSJ9OnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsQXV0aG9yaXphdGlvbjpgQmVhcmVyICR7bn1gfSxzPXI9PT0iYW50aHJvcGljIj97bW9kZWw6ImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCIsbWF4X3Rva2VuczozMDAsbWVzc2FnZXM6W3tyb2xlOiJ1c2VyIixjb250ZW50Om99XX06e21vZGVsOiJncHQtNG8tbWluaSIsbWVzc2FnZXM6W3tyb2xlOiJ1c2VyIixjb250ZW50Om99XSxtYXhfdG9rZW5zOjMwMH07dHJ5e2xldCB1PWF3YWl0KGF3YWl0IGZldGNoKGEse21ldGhvZDoiUE9TVCIsaGVhZGVyczppLGJvZHk6SlNPTi5zdHJpbmdpZnkocyl9KSkuanNvbigpLGQ9cj09PSJhbnRocm9waWMiP3U/LmNvbnRlbnQ/LlswXT8udGV4dDp1Py5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LmNvbnRlbnQ7cmV0dXJuIEpTT04ucGFyc2UoZCl9Y2F0Y2gobCl7cmV0dXJuIE8oIlF1b3RlIGZldGNoIGVycm9yOiIsbCksW3t0ZXh0OiJXaGF0IGdldHMgbWVhc3VyZWQgZ2V0cyBtYW5hZ2VkLiIsYXV0aG9yOiJQZXRlciBEcnVja2VyIn0se3RleHQ6IlNtYWxsIGRhaWx5IGltcHJvdmVtZW50cyBsZWFkIHRvIHN0dW5uaW5nIHJlc3VsdHMuIixhdXRob3I6IlJvYmluIFNoYXJtYSJ9XX19YXN5bmMgZnVuY3Rpb24gbGQoZSx0LG4pe2lmKCF0KXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCByPWF3YWl0IGUuZ2V0Tm90ZVNlY3Rpb25zKHt1dWlkOnR9KTtPKGBbZ2V0TW9udGhseVBsYW5Db250ZW50XSBub3RlVVVJRD0ke3R9IG1vbnRoTmFtZT0iJHtufSIgc2VjdGlvbnM6YCxyPy5tYXAocz0+cy5oZWFkaW5nPy50ZXh0KSk7bGV0IG89ci5maW5kKHM9PnMuaGVhZGluZyYmcy5oZWFkaW5nLnRleHQmJnMuaGVhZGluZy50ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKTtpZihPKCJbZ2V0TW9udGhseVBsYW5Db250ZW50XSBtb250aFNlY3Rpb24gZm91bmQ6IiwhIW8pLCFvKXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCBhPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0pLGk9Z28oYSxuKTtyZXR1cm4gTyhgW2dldE1vbnRobHlQbGFuQ29udGVudF0gZXh0cmFjdGVkIGNvbnRlbnQgbGVuZ3RoOiAke2k/Lmxlbmd0aD8/MH1gKSx7Zm91bmQ6ITAsY29udGVudDppfHwiIn19YXN5bmMgZnVuY3Rpb24gamcoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPWUuc2V0dGluZ3NbVi5QTEFOTklOR19OT1RFX1RBR118fFRzLGw9W3JuLHNdLGQ9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkuZmluZCh2PT52Lm5hbWU9PT1pKSxjO2lmKGQpYz1kLnV1aWQsYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDpjfSxQYyhuKSx7YXRFbmQ6ITB9KTtlbHNle2xldCB2PXVkKHIsYSk7Yz1hd2FpdCBlLmNyZWF0ZU5vdGUoaSxsKSxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOmN9LHYpfWxldCBoPWF3YWl0IEhnKGUsYyxuKTtyZXR1cm57bm90ZVVVSUQ6Yyxjb250ZW50OmgsY3JlYXRlZDohZH19YXN5bmMgZnVuY3Rpb24gVmcoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPWUuc2V0dGluZ3NbVi5QTEFOTklOR19OT1RFX1RBR118fFRzLGw9W3JuLHNdLGQ9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkuZmluZCh2PT52Lm5hbWU9PT1pKSxjO2lmKGQpYz1kLnV1aWQsKGF3YWl0IGxkKGUsYyxuKSkuZm91bmR8fGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6Y30sTGMobikse2F0RW5kOiEwfSk7ZWxzZXtsZXQgdj11ZChyLGEpO2M9YXdhaXQgZS5jcmVhdGVOb3RlKGksbCksYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDpjfSx2KSxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOmN9LExjKG4pLHthdEVuZDohMH0pfWxldCBoPWF3YWl0IEhnKGUsYyxuKTtyZXR1cm57bm90ZVVVSUQ6Yyxjb250ZW50Omh9fWFzeW5jIGZ1bmN0aW9uIEhnKGUsdCxuLHthdHRlbXB0czpyPTMsZGVsYXlNczpvPTUwMH09e30pe2ZvcihsZXQgYT0wO2E8cjthKyspe2E+MCYmYXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLG8pKTtsZXQgaT1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnR9KSxzPWdvKGksbik7aWYocylyZXR1cm4gc31yZXR1cm4gUGMobikuc3BsaXQoYApgKS5maWx0ZXIoYT0+YSYmIWEuc3RhcnRzV2l0aCgiIyIpKS5qb2luKGAKYCl9ZnVuY3Rpb24gY2IoZSl7aWYoIWV8fGUubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgdD1lLmZpbmQobj0+bi5uYW1lPT09IldvcmsiKTtyZXR1cm4gdD90LnV1aWQ6ZVswXS51dWlkfWFzeW5jIGZ1bmN0aW9uIGRiKGUsdCl7aWYoIXQpcmV0dXJuW107dHJ5e2xldCBuPWF3YWl0IGUuZ2V0VGFza0RvbWFpblRhc2tzKHQpO3JldHVybiBBcnJheS5pc0FycmF5KG4pP246W119Y2F0Y2gobil7cmV0dXJuIE8oYFtfZmV0Y2hUYXNrc0ZvckRvbWFpbl0gZ2V0VGFza0RvbWFpblRhc2tzIGZhaWxlZCBmb3IgZG9tYWluICR7dH06YCxuKSxbXX19ZnVuY3Rpb24gcGIoZSx0KXtsZXQgbj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCkscj1uKzg2NGU1O3JldHVybiBlLmZpbHRlcihvPT4hby5jb21wbGV0ZWRBdCYmIW8uZGlzbWlzc2VkQXQmJll0KG8uc3RhcnRBdCkmJll0KG8uc3RhcnRBdCk+PW4mJll0KG8uc3RhcnRBdCk8cikuc29ydCgobyxhKT0+KFl0KG8uc3RhcnRBdCl8fDApLShZdChhLnN0YXJ0QXQpfHwwKSl9ZnVuY3Rpb24gR2coZSx0LG4pe2xldCByPXQuZ2V0VGltZSgpLG89bi5nZXRUaW1lKCk7cmV0dXJuIGUuZmlsdGVyKGE9Pll0KGEuY29tcGxldGVkQXQpJiZZdChhLmNvbXBsZXRlZEF0KT49ciYmWXQoYS5jb21wbGV0ZWRBdCk8PW8pfWZ1bmN0aW9uIGZiKGUsdCxuKXtyZXR1cm4gR2coZSx0LG4pLnJlZHVjZSgocixvKT0+cisoby52aWN0b3J5VmFsdWV8fDApLDApfWZ1bmN0aW9uIGhiKGUsdCl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDo3fSwocixvKT0+e2xldCBhPW5ldyBEYXRlKHQpO2Euc2V0RGF0ZShhLmdldERhdGUoKStvKTtsZXQgaT1uZXcgRGF0ZShhKTtpLnNldERhdGUoaS5nZXREYXRlKCkrMSk7bGV0IHM9ZS5maWx0ZXIobD0+WXQobC5jb21wbGV0ZWRBdCkmJll0KGwuY29tcGxldGVkQXQpPj1hLmdldFRpbWUoKSYmWXQobC5jb21wbGV0ZWRBdCk8aS5nZXRUaW1lKCkpO3JldHVybntkYXk6WyJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiLCJTdW4iXVtvXSxkYXRlOmEudG9JU09TdHJpbmcoKSx2YWx1ZTpzLnJlZHVjZSgobCx1KT0+bCsodS52aWN0b3J5VmFsdWV8fDApLDApLHRhc2tDb3VudDpzLmxlbmd0aH19KX1mdW5jdGlvbiBZdChlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil7bGV0IHQ9TnVtYmVyKGUpO3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCk/dDwxZTEwP3QqMWUzOnQ6bnVsbH1yZXR1cm4gZTwxZTEwP2UqMWUzOmV9ZnVuY3Rpb24gdWQoZSx0KXtsZXQgcj17MTpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIl0sMjpbIkFwcmlsIiwiTWF5IiwiSnVuZSJdLDM6WyJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIl0sNDpbIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19W3RdfHxbIk1vbnRoIDEiLCJNb250aCAyIiwiTW9udGggMyJdO3JldHVybmBRdWFydGVybHkgUGxhbiBcdTIwMTQgJHtlfQoKIyBRdWFydGVyIFRoZW1lCltPbmUgc2VudGVuY2UgZGVzY3JpYmluZyB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHF1YXJ0ZXIuXQoKIyMgU3VjY2VzcyBMb29rcyBMaWtlCjEuIFsgXSBbVG9wIG91dGNvbWVdCjIuIFsgXSBbVG9wIG91dGNvbWVdCjMuIFsgXSBbVG9wIG91dGNvbWVdCgojIFByb2plY3RzCgojIyBbUHJvamVjdCAxXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAyXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAzXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIE5vdCBUaGlzIFF1YXJ0ZXIKLSBbIF0gW0xvd2VyLXByaW9yaXR5IHByb2plY3RdCi0gWyBdIFtDb21taXRtZW50IHRvIGRlY2xpbmVdCi0gWyBdIFtBcmVhIHRvIGludGVudGlvbmFsbHkgaWdub3JlXQoKIyBNb250aC1ieS1Nb250aCBCcmVha2Rvd24KCiMjICR7clswXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsxXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsyXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMgV2Vla2x5IFBsYW5uaW5nIFByb21wdApXaGljaCBwcm9qZWN0cyBuZWVkIHRpbWUgb24gbXkgY2FsZW5kYXIgdGhpcyB3ZWVrPwoKIyBRdWFydGVybHkgUmV2aWV3Ci0gRmluaXNoZWQ6Ci0gUHJvZ3Jlc3MgbWFkZToKLSBMZXNzb25zIGxlYXJuZWQ6Ci0gQ2FycnkgZm9yd2FyZDpgfWFzeW5jIGZ1bmN0aW9uIGNkKGUsdCxuKXtyZXR1cm4gYXdhaXQgbGQoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIEtnKGUsdCxuKXtyZXR1cm4gYXdhaXQgamcoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIFlnKGUsdCxuKXtyZXR1cm4gYXdhaXQgVmcoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIHFnKGUsdCl7bGV0IG49YXdhaXQgV2coZSx0KTtyZXR1cm4gU24mJm4/LnV1aWQ/ey4uLm4sZGV2RWRpdDohMCxub3RlVVVJRDpuLnV1aWR9Om59YXN5bmMgZnVuY3Rpb24gVXMoZSx0KXtyZXR1cm4gU24/e2RldkVkaXQ6ITAsbm90ZVVVSUQ6dH06YXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3R9YCl9YXN5bmMgZnVuY3Rpb24gUWcoZSx0KXtyZXR1cm4gYXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDp0fSl9YXN5bmMgZnVuY3Rpb24gSmcoZSx0LG4scil7cmV0dXJuIGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHt1dWlkOnR9LG4scil9ZnVuY3Rpb24gZGQoe2FwcDplLG5vdGVVVUlEOnQsb25CYWNrOm59KXtsZXQgcj1uci5jcmVhdGVFbGVtZW50LFtvLGFdPSgwLG5yLnVzZVN0YXRlKSgiIiksW2ksc109KDAsbnIudXNlU3RhdGUpKCEwKSxbbCx1XT0oMCxuci51c2VTdGF0ZSkoITEpOygwLG5yLnVzZUVmZmVjdCkoKCk9PntsZXQgYz0hMTtyZXR1cm4gUWcoZSx0KS50aGVuKGg9PntjfHwoYShofHwiIikscyghMSkpfSksKCk9PntjPSEwfX0sW3QsZV0pO2xldCBkPWFzeW5jKCk9Pnt1KCEwKSxhd2FpdCBKZyhlLHQsbyksdSghMSl9O3JldHVybiBpP3IoImRpdiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItbG9hZGluZyJ9LCJMb2FkaW5nIG5vdGVcdTIwMjYiKTpyKCJkaXYiLHtjbGFzc05hbWU6Im5vdGUtZWRpdG9yIn0scigiZGl2Iix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci10b29sYmFyIn0scigiYnV0dG9uIix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci1idG4gbm90ZS1lZGl0b3ItYnRuLS1iYWNrIixvbkNsaWNrOm59LCJcdTIxOTAgQmFjayIpLHIoImJ1dHRvbiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItYnRuIG5vdGUtZWRpdG9yLWJ0bi0tc2F2ZSIsb25DbGljazpkLGRpc2FibGVkOmx9LGw/IlNhdmluZ1x1MjAyNiI6IlNhdmUiKSkscigidGV4dGFyZWEiLHtjbGFzc05hbWU6Im5vdGUtZWRpdG9yLXRleHRhcmVhIix2YWx1ZTpvLG9uQ2hhbmdlOmM9PmEoYy50YXJnZXQudmFsdWUpfSkpfXZhciB5dD1sZShpZSgpKTtmdW5jdGlvbiBtZCgpe3JldHVybnthc3luYzohMSxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxob29rczpudWxsLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2lsZW50OiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbH19dmFyIFJyPW1kKCk7ZnVuY3Rpb24gcnYoZSl7UnI9ZX12YXIgVWE9e2V4ZWM6KCk9Pm51bGx9O2Z1bmN0aW9uIGVlKGUsdD0iIil7bGV0IG49dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5zb3VyY2Uscj17cmVwbGFjZToobyxhKT0+e2xldCBpPXR5cGVvZiBhPT0ic3RyaW5nIj9hOmEuc291cmNlO3JldHVybiBpPWkucmVwbGFjZShydC5jYXJldCwiJDEiKSxuPW4ucmVwbGFjZShvLGkpLHJ9LGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKG4sdCl9O3JldHVybiByfXZhciBydD17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDplPT5uZXcgUmVnRXhwKGBeKCB7MCwzfSR7ZX0pKCg/OlsJIF1bXlxcbl0qKT8oPzpcXG58JCkpYCksbmV4dEJ1bGxldFJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSxoclJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxmZW5jZXNCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlxgXGBcYHx+fn4pYCksaGVhZGluZ0JlZ2luUmVnZXg6ZT0+bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZS0xKX19I2ApLGh0bWxCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fTwoPzpbYS16XS4qPnwhLS0pYCwiaSIpfSxtYj0vXig/OlsgXHRdKig/OlxufCQpKSsvLGdiPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sdmI9L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxXYT0vXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyx5Yj0vXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxnZD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxvdj0vXig/IWJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWx8dGFibGUpKCg/Oi58XG4oPyFccyo/XG58YnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLGF2PWVlKG92KS5yZXBsYWNlKC9idWxsL2csZ2QpLnJlcGxhY2UoL2Jsb2NrQ29kZS9nLC8oPzogezR9fCB7MCwzfVx0KS8pLnJlcGxhY2UoL2ZlbmNlcy9nLC8gezAsM30oPzpgezMsfXx+ezMsfSkvKS5yZXBsYWNlKC9ibG9ja3F1b3RlL2csLyB7MCwzfT4vKS5yZXBsYWNlKC9oZWFkaW5nL2csLyB7MCwzfSN7MSw2fS8pLnJlcGxhY2UoL2h0bWwvZywvIHswLDN9PFteXG4+XSs+XG4vKS5yZXBsYWNlKC9cfHRhYmxlL2csIiIpLmdldFJlZ2V4KCksd2I9ZWUob3YpLnJlcGxhY2UoL2J1bGwvZyxnZCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksdmQ9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8seGI9L15bXlxuXSsvLHlkPS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLGJiPWVlKC9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcblsgXHRdKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuWyBcdF0qKT98ICpcblsgXHRdKikodGl0bGUpKT8gKig/OlxuK3wkKS8pLnJlcGxhY2UoImxhYmVsIix5ZCkucmVwbGFjZSgidGl0bGUiLC8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvKS5nZXRSZWdleCgpLGtiPWVlKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2csZ2QpLmdldFJlZ2V4KCksR3M9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLHdkPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8sU2I9ZWUoIl4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcblsgCV0qKStcXG58JCkpIiwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLHdkKS5yZXBsYWNlKCJ0YWciLEdzKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLGl2PWVlKHZkKS5yZXBsYWNlKCJociIsV2EpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsR3MpLmdldFJlZ2V4KCksRWI9ZWUoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8pLnJlcGxhY2UoInBhcmFncmFwaCIsaXYpLmdldFJlZ2V4KCkseGQ9e2Jsb2NrcXVvdGU6RWIsY29kZTpnYixkZWY6YmIsZmVuY2VzOnZiLGhlYWRpbmc6eWIsaHI6V2EsaHRtbDpTYixsaGVhZGluZzphdixsaXN0OmtiLG5ld2xpbmU6bWIscGFyYWdyYXBoOml2LHRhYmxlOlVhLHRleHQ6eGJ9LFhnPWVlKCJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSIpLnJlcGxhY2UoImhyIixXYSkucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIig/OiB7NH18IHswLDN9CSlbXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEdzKS5nZXRSZWdleCgpLE5iPXsuLi54ZCxsaGVhZGluZzp3Yix0YWJsZTpYZyxwYXJhZ3JhcGg6ZWUodmQpLnJlcGxhY2UoImhyIixXYSkucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixYZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEdzKS5nZXRSZWdleCgpfSxUYj17Li4ueGQsaHRtbDplZShgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50Iix3ZCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6VWEsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6ZWUodmQpLnJlcGxhY2UoImhyIixXYSkucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLGF2KS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikucmVwbGFjZSgifHRhZyIsIiIpLmdldFJlZ2V4KCl9LERiPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxDYj0vXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLHN2PS9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLF9iPS9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLEtzPS9bXHB7UH1ccHtTfV0vdSxiZD0vW1xzXHB7UH1ccHtTfV0vdSxsdj0vW15cc1xwe1B9XHB7U31dL3UsQWI9ZWUoL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csYmQpLmdldFJlZ2V4KCksdXY9Lyg/IX4pW1xwe1B9XHB7U31dL3UsT2I9Lyg/IX4pW1xzXHB7UH1ccHtTfV0vdSxSYj0vKD86W15cc1xwe1B9XHB7U31dfH4pL3UsSWI9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyxjdj0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8sTWI9ZWUoY3YsInUiKS5yZXBsYWNlKC9wdW5jdC9nLEtzKS5nZXRSZWdleCgpLFBiPWVlKGN2LCJ1IikucmVwbGFjZSgvcHVuY3QvZyx1dikuZ2V0UmVnZXgoKSxkdj0iXlteXypdKj9fX1teXypdKj9cXCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXFwqKXB1bmN0KFxcKispKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShcXCorKSg/IVxcKikoPz1wdW5jdFNwYWNlfCQpfCg/IVxcKilwdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXFwqKykoPyFcXCopKD89cHVuY3QpfCg/IVxcKilwdW5jdChcXCorKSg/IVxcKikoPz1wdW5jdCl8bm90UHVuY3RTcGFjZShcXCorKSg/PW5vdFB1bmN0U3BhY2UpIixMYj1lZShkdiwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csbHYpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxiZCkucmVwbGFjZSgvcHVuY3QvZyxLcykuZ2V0UmVnZXgoKSx6Yj1lZShkdiwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csUmIpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxPYikucmVwbGFjZSgvcHVuY3QvZyx1dikuZ2V0UmVnZXgoKSwkYj1lZSgiXlteXypdKj9cXCpcXCpbXl8qXSo/X1teXypdKj8oPz1cXCpcXCopfFteX10rKD89W15fXSl8KD8hXylwdW5jdChfKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKF8rKSg/IV8pKD89cHVuY3RTcGFjZXwkKXwoPyFfKXB1bmN0U3BhY2UoXyspKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXyspKD8hXykoPz1wdW5jdCl8KD8hXylwdW5jdChfKykoPyFfKSg/PXB1bmN0KSIsImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLGx2KS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csYmQpLnJlcGxhY2UoL3B1bmN0L2csS3MpLmdldFJlZ2V4KCksRmI9ZWUoL1xcKHB1bmN0KS8sImd1IikucmVwbGFjZSgvcHVuY3QvZyxLcykuZ2V0UmVnZXgoKSxVYj1lZSgvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksV2I9ZWUod2QpLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCksQmI9ZWUoIl5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IikucmVwbGFjZSgiY29tbWVudCIsV2IpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksanM9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8samI9ZWUoL14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzooPzpbIFx0XSooPzpcblsgXHRdKik/KSh0aXRsZSkpP1xzKlwpLykucmVwbGFjZSgibGFiZWwiLGpzKS5yZXBsYWNlKCJocmVmIiwvPCg/OlxcLnxbXlxuPD5cXF0pKz58W14gXHRcblx4MDAtXHgxZl0qLykucmVwbGFjZSgidGl0bGUiLC8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8pLmdldFJlZ2V4KCkscHY9ZWUoL14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLykucmVwbGFjZSgibGFiZWwiLGpzKS5yZXBsYWNlKCJyZWYiLHlkKS5nZXRSZWdleCgpLGZ2PWVlKC9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vKS5yZXBsYWNlKCJyZWYiLHlkKS5nZXRSZWdleCgpLFZiPWVlKCJyZWZsaW5rfG5vbGluayg/IVxcKCkiLCJnIikucmVwbGFjZSgicmVmbGluayIscHYpLnJlcGxhY2UoIm5vbGluayIsZnYpLmdldFJlZ2V4KCksa2Q9e19iYWNrcGVkYWw6VWEsYW55UHVuY3R1YXRpb246RmIsYXV0b2xpbms6VWIsYmxvY2tTa2lwOkliLGJyOnN2LGNvZGU6Q2IsZGVsOlVhLGVtU3Ryb25nTERlbGltOk1iLGVtU3Ryb25nUkRlbGltQXN0OkxiLGVtU3Ryb25nUkRlbGltVW5kOiRiLGVzY2FwZTpEYixsaW5rOmpiLG5vbGluazpmdixwdW5jdHVhdGlvbjpBYixyZWZsaW5rOnB2LHJlZmxpbmtTZWFyY2g6VmIsdGFnOkJiLHRleHQ6X2IsdXJsOlVhfSxIYj17Li4ua2QsbGluazplZSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsanMpLmdldFJlZ2V4KCkscmVmbGluazplZSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsanMpLmdldFJlZ2V4KCl9LHBkPXsuLi5rZCxlbVN0cm9uZ1JEZWxpbUFzdDp6YixlbVN0cm9uZ0xEZWxpbTpQYix1cmw6ZWUoL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLCJpIikucmVwbGFjZSgiZW1haWwiLC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKCg/OlxcLnxbXlxcXSkqPyg/OlxcLnxbXlxzflxcXSkpXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LEdiPXsuLi5wZCxicjplZShzdikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6ZWUocGQudGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9LFdzPXtub3JtYWw6eGQsZ2ZtOk5iLHBlZGFudGljOlRifSwkYT17bm9ybWFsOmtkLGdmbTpwZCxicmVha3M6R2IscGVkYW50aWM6SGJ9LEtiPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxaZz1lPT5LYltlXTtmdW5jdGlvbiBsbihlLHQpe2lmKHQpe2lmKHJ0LmVzY2FwZVRlc3QudGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKHJ0LmVzY2FwZVJlcGxhY2UsWmcpfWVsc2UgaWYocnQuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoZSkpcmV0dXJuIGUucmVwbGFjZShydC5lc2NhcGVSZXBsYWNlTm9FbmNvZGUsWmcpO3JldHVybiBlfWZ1bmN0aW9uIGV2KGUpe3RyeXtlPWVuY29kZVVSSShlKS5yZXBsYWNlKHJ0LnBlcmNlbnREZWNvZGUsIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZX1mdW5jdGlvbiB0dihlLHQpe2xldCBuPWUucmVwbGFjZShydC5maW5kUGlwZSwoYSxpLHMpPT57bGV0IGw9ITEsdT1pO2Zvcig7LS11Pj0wJiZzW3VdPT09IlxcIjspbD0hbDtyZXR1cm4gbD8ifCI6IiB8In0pLHI9bi5zcGxpdChydC5zcGxpdFBpcGUpLG89MDtpZihyWzBdLnRyaW0oKXx8ci5zaGlmdCgpLHIubGVuZ3RoPjAmJiFyLmF0KC0xKT8udHJpbSgpJiZyLnBvcCgpLHQpaWYoci5sZW5ndGg+dClyLnNwbGljZSh0KTtlbHNlIGZvcig7ci5sZW5ndGg8dDspci5wdXNoKCIiKTtmb3IoO288ci5sZW5ndGg7bysrKXJbb109cltvXS50cmltKCkucmVwbGFjZShydC5zbGFzaFBpcGUsInwiKTtyZXR1cm4gcn1mdW5jdGlvbiBGYShlLHQsbil7bGV0IHI9ZS5sZW5ndGg7aWYocj09PTApcmV0dXJuIiI7bGV0IG89MDtmb3IoO288cjspe2xldCBhPWUuY2hhckF0KHItby0xKTtpZihhPT09dCYmIW4pbysrO2Vsc2UgaWYoYSE9PXQmJm4pbysrO2Vsc2UgYnJlYWt9cmV0dXJuIGUuc2xpY2UoMCxyLW8pfWZ1bmN0aW9uIFliKGUsdCl7aWYoZS5pbmRleE9mKHRbMV0pPT09LTEpcmV0dXJuLTE7bGV0IG49MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09IlxcIilyKys7ZWxzZSBpZihlW3JdPT09dFswXSluKys7ZWxzZSBpZihlW3JdPT09dFsxXSYmKG4tLSxuPDApKXJldHVybiByO3JldHVybiBuPjA/LTI6LTF9ZnVuY3Rpb24gbnYoZSx0LG4scixvKXtsZXQgYT10LmhyZWYsaT10LnRpdGxlfHxudWxsLHM9ZVsxXS5yZXBsYWNlKG8ub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsIiQxIik7ci5zdGF0ZS5pbkxpbms9ITA7bGV0IGw9e3R5cGU6ZVswXS5jaGFyQXQoMCk9PT0iISI/ImltYWdlIjoibGluayIscmF3Om4saHJlZjphLHRpdGxlOmksdGV4dDpzLHRva2VuczpyLmlubGluZVRva2VucyhzKX07cmV0dXJuIHIuc3RhdGUuaW5MaW5rPSExLGx9ZnVuY3Rpb24gcWIoZSx0LG4pe2xldCByPWUubWF0Y2gobi5vdGhlci5pbmRlbnRDb2RlQ29tcGVuc2F0aW9uKTtpZihyPT09bnVsbClyZXR1cm4gdDtsZXQgbz1yWzFdO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKGE9PntsZXQgaT1hLm1hdGNoKG4ub3RoZXIuYmVnaW5uaW5nU3BhY2UpO2lmKGk9PT1udWxsKXJldHVybiBhO2xldFtzXT1pO3JldHVybiBzLmxlbmd0aD49by5sZW5ndGg/YS5zbGljZShvLmxlbmd0aCk6YX0pLmpvaW4oYApgKX12YXIgVnM9Y2xhc3N7b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8UnJ9c3BhY2UoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYodCYmdFswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzp0WzBdfX1jb2RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpO2lmKHQpe2xldCBuPXRbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmNvZGVSZW1vdmVJbmRlbnQsIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6dFswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP246RmEobixgCmApfX19ZmVuY2VzKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoZSk7aWYodCl7bGV0IG49dFswXSxyPXFiKG4sdFszXXx8IiIsdGhpcy5ydWxlcyk7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuLGxhbmc6dFsyXT90WzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnRbMl0sdGV4dDpyfX19aGVhZGluZyhlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnRyaW0oKTtpZih0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ0hhc2gudGVzdChuKSl7bGV0IHI9RmEobiwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFyfHx0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ1NwYWNlQ2hhci50ZXN0KHIpKSYmKG49ci50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDp0WzFdLmxlbmd0aCx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19aHIoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhyIixyYXc6RmEodFswXSxgCmApfX1ibG9ja3F1b3RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHQpe2xldCBuPUZhKHRbMF0sYApgKS5zcGxpdChgCmApLHI9IiIsbz0iIixhPVtdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBpPSExLHM9W10sbDtmb3IobD0wO2w8bi5sZW5ndGg7bCsrKWlmKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVN0YXJ0LnRlc3QobltsXSkpcy5wdXNoKG5bbF0pLGk9ITA7ZWxzZSBpZighaSlzLnB1c2gobltsXSk7ZWxzZSBicmVhaztuPW4uc2xpY2UobCk7bGV0IHU9cy5qb2luKGAKYCksZD11LnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZSxgCiAgICAkMWApLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTIsIiIpO3I9cj9gJHtyfQoke3V9YDp1LG89bz9gJHtvfQoke2R9YDpkO2xldCBjPXRoaXMubGV4ZXIuc3RhdGUudG9wO2lmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSEwLHRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZCxhLCEwKSx0aGlzLmxleGVyLnN0YXRlLnRvcD1jLG4ubGVuZ3RoPT09MClicmVhaztsZXQgaD1hLmF0KC0xKTtpZihoPy50eXBlPT09ImNvZGUiKWJyZWFrO2lmKGg/LnR5cGU9PT0iYmxvY2txdW90ZSIpe2xldCB2PWgsbT12LnJhdytgCmArbi5qb2luKGAKYCksdz10aGlzLmJsb2NrcXVvdGUobSk7YVthLmxlbmd0aC0xXT13LHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC12LnJhdy5sZW5ndGgpK3cucmF3LG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC12LnRleHQubGVuZ3RoKSt3LnRleHQ7YnJlYWt9ZWxzZSBpZihoPy50eXBlPT09Imxpc3QiKXtsZXQgdj1oLG09di5yYXcrYApgK24uam9pbihgCmApLHc9dGhpcy5saXN0KG0pO2FbYS5sZW5ndGgtMV09dyxyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtaC5yYXcubGVuZ3RoKSt3LnJhdyxvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtdi5yYXcubGVuZ3RoKSt3LnJhdyxuPW0uc3Vic3RyaW5nKGEuYXQoLTEpLnJhdy5sZW5ndGgpLnNwbGl0KGAKYCk7Y29udGludWV9fXJldHVybnt0eXBlOiJibG9ja3F1b3RlIixyYXc6cix0b2tlbnM6YSx0ZXh0Om99fX1saXN0KGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHQpe2xldCBuPXRbMV0udHJpbSgpLHI9bi5sZW5ndGg+MSxvPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpyLHN0YXJ0OnI/K24uc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O249cj9gXFxkezEsOX1cXCR7bi5zbGljZSgtMSl9YDpgXFwke259YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihuPXI/bjoiWyorLV0iKTtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLmxpc3RJdGVtUmVnZXgobiksaT0hMTtmb3IoO2U7KXtsZXQgbD0hMSx1PSIiLGQ9IiI7aWYoISh0PWEuZXhlYyhlKSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChlKSlicmVhazt1PXRbMF0sZT1lLnN1YnN0cmluZyh1Lmxlbmd0aCk7bGV0IGM9dFsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFicyxnPT4iICIucmVwZWF0KDMqZy5sZW5ndGgpKSxoPWUuc3BsaXQoYApgLDEpWzBdLHY9IWMudHJpbSgpLG09MDtpZih0aGlzLm9wdGlvbnMucGVkYW50aWM/KG09MixkPWMudHJpbVN0YXJ0KCkpOnY/bT10WzFdLmxlbmd0aCsxOihtPXRbMl0uc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSxtPW0+ND8xOm0sZD1jLnNsaWNlKG0pLG0rPXRbMV0ubGVuZ3RoKSx2JiZ0aGlzLnJ1bGVzLm90aGVyLmJsYW5rTGluZS50ZXN0KGgpJiYodSs9aCtgCmAsZT1lLnN1YnN0cmluZyhoLmxlbmd0aCsxKSxsPSEwKSwhbCl7bGV0IGc9dGhpcy5ydWxlcy5vdGhlci5uZXh0QnVsbGV0UmVnZXgobSksZj10aGlzLnJ1bGVzLm90aGVyLmhyUmVnZXgobSkseT10aGlzLnJ1bGVzLm90aGVyLmZlbmNlc0JlZ2luUmVnZXgobSkscD10aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KG0pLEU9dGhpcy5ydWxlcy5vdGhlci5odG1sQmVnaW5SZWdleChtKTtmb3IoO2U7KXtsZXQgUz1lLnNwbGl0KGAKYCwxKVswXSx4O2lmKGg9Uyx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGg9aC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VOZXN0aW5nLCIgICIpLHg9aCk6eD1oLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIikseS50ZXN0KGgpfHxwLnRlc3QoaCl8fEUudGVzdChoKXx8Zy50ZXN0KGgpfHxmLnRlc3QoaCkpYnJlYWs7aWYoeC5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpPj1tfHwhaC50cmltKCkpZCs9YApgK3guc2xpY2UobSk7ZWxzZXtpZih2fHxjLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIikuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKT49NHx8eS50ZXN0KGMpfHxwLnRlc3QoYyl8fGYudGVzdChjKSlicmVhaztkKz1gCmAraH0hdiYmIWgudHJpbSgpJiYodj0hMCksdSs9UytgCmAsZT1lLnN1YnN0cmluZyhTLmxlbmd0aCsxKSxjPXguc2xpY2UobSl9fW8ubG9vc2V8fChpP28ubG9vc2U9ITA6dGhpcy5ydWxlcy5vdGhlci5kb3VibGVCbGFua0xpbmUudGVzdCh1KSYmKGk9ITApKTtsZXQgdz1udWxsLGI7dGhpcy5vcHRpb25zLmdmbSYmKHc9dGhpcy5ydWxlcy5vdGhlci5saXN0SXNUYXNrLmV4ZWMoZCksdyYmKGI9d1swXSE9PSJbIF0gIixkPWQucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywiIikpKSxvLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OnUsdGFzazohIXcsY2hlY2tlZDpiLGxvb3NlOiExLHRleHQ6ZCx0b2tlbnM6W119KSxvLnJhdys9dX1sZXQgcz1vLml0ZW1zLmF0KC0xKTtpZihzKXMucmF3PXMucmF3LnRyaW1FbmQoKSxzLnRleHQ9cy50ZXh0LnRyaW1FbmQoKTtlbHNlIHJldHVybjtvLnJhdz1vLnJhdy50cmltRW5kKCk7Zm9yKGxldCBsPTA7bDxvLml0ZW1zLmxlbmd0aDtsKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsby5pdGVtc1tsXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhvLml0ZW1zW2xdLnRleHQsW10pLCFvLmxvb3NlKXtsZXQgdT1vLml0ZW1zW2xdLnRva2Vucy5maWx0ZXIoYz0+Yy50eXBlPT09InNwYWNlIiksZD11Lmxlbmd0aD4wJiZ1LnNvbWUoYz0+dGhpcy5ydWxlcy5vdGhlci5hbnlMaW5lLnRlc3QoYy5yYXcpKTtvLmxvb3NlPWR9aWYoby5sb29zZSlmb3IobGV0IGw9MDtsPG8uaXRlbXMubGVuZ3RoO2wrKylvLml0ZW1zW2xdLmxvb3NlPSEwO3JldHVybiBvfX1odG1sKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzp0WzBdLHByZTp0WzFdPT09InByZSJ8fHRbMV09PT0ic2NyaXB0Inx8dFsxXT09PSJzdHlsZSIsdGV4dDp0WzBdfX1kZWYoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsIiAiKSxyPXRbMl0/dFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuaHJlZkJyYWNrZXRzLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6IiIsbz10WzNdP3RbM10uc3Vic3RyaW5nKDEsdFszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTp0WzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpuLHJhdzp0WzBdLGhyZWY6cix0aXRsZTpvfX19dGFibGUoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCF0fHwhdGhpcy5ydWxlcy5vdGhlci50YWJsZURlbGltaXRlci50ZXN0KHRbMl0pKXJldHVybjtsZXQgbj10dih0WzFdKSxyPXRbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DaGFycywiIikuc3BsaXQoInwiKSxvPXRbM10/LnRyaW0oKT90WzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSwiIikuc3BsaXQoYApgKTpbXSxhPXt0eXBlOiJ0YWJsZSIscmF3OnRbMF0saGVhZGVyOltdLGFsaWduOltdLHJvd3M6W119O2lmKG4ubGVuZ3RoPT09ci5sZW5ndGgpe2ZvcihsZXQgaSBvZiByKXRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnblJpZ2h0LnRlc3QoaSk/YS5hbGlnbi5wdXNoKCJyaWdodCIpOnRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNlbnRlci50ZXN0KGkpP2EuYWxpZ24ucHVzaCgiY2VudGVyIik6dGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduTGVmdC50ZXN0KGkpP2EuYWxpZ24ucHVzaCgibGVmdCIpOmEuYWxpZ24ucHVzaChudWxsKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylhLmhlYWRlci5wdXNoKHt0ZXh0Om5baV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5baV0pLGhlYWRlcjohMCxhbGlnbjphLmFsaWduW2ldfSk7Zm9yKGxldCBpIG9mIG8pYS5yb3dzLnB1c2godHYoaSxhLmhlYWRlci5sZW5ndGgpLm1hcCgocyxsKT0+KHt0ZXh0OnMsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHMpLGhlYWRlcjohMSxhbGlnbjphLmFsaWduW2xdfSkpKTtyZXR1cm4gYX19bGhlYWRpbmcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOnRbMl0uY2hhckF0KDApPT09Ij0iPzE6Mix0ZXh0OnRbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX1wYXJhZ3JhcGgoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLmNoYXJBdCh0WzFdLmxlbmd0aC0xKT09PWAKYD90WzFdLnNsaWNlKDAsLTEpOnRbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OnRbMF0sdGV4dDpuLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuKX19fXRleHQoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMoZSk7aWYodClyZXR1cm57dHlwZToidGV4dCIscmF3OnRbMF0sdGV4dDp0WzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzBdKX19ZXNjYXBlKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OnRbMF0sdGV4dDp0WzFdfX10YWcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYodClyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBVGFnLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuZW5kQVRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJnRoaXMucnVsZXMub3RoZXIuc3RhcnRQcmVTY3JpcHRUYWcudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZFByZVNjcmlwdFRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZToiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dFswXX19bGluayhlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMoZSk7aWYodCl7bGV0IG49dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KG4pKXtpZighdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKSlyZXR1cm47bGV0IGE9RmEobi5zbGljZSgwLC0xKSwiXFwiKTtpZigobi5sZW5ndGgtYS5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2xldCBhPVliKHRbMl0sIigpIik7aWYoYT09PS0yKXJldHVybjtpZihhPi0xKXtsZXQgcz0odFswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrdFsxXS5sZW5ndGgrYTt0WzJdPXRbMl0uc3Vic3RyaW5nKDAsYSksdFswXT10WzBdLnN1YnN0cmluZygwLHMpLnRyaW0oKSx0WzNdPSIifX1sZXQgcj10WzJdLG89IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLnBlZGFudGljSHJlZlRpdGxlLmV4ZWMocik7YSYmKHI9YVsxXSxvPWFbM10pfWVsc2Ugbz10WzNdP3RbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIHI9ci50cmltKCksdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KHIpJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKT9yPXIuc2xpY2UoMSk6cj1yLnNsaWNlKDEsLTEpKSxudih0LHtocmVmOnImJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKSx0aXRsZTpvJiZvLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIil9LHRbMF0sdGhpcy5sZXhlcix0aGlzLnJ1bGVzKX19cmVmbGluayhlLHQpe2xldCBuO2lmKChuPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhlKSl8fChuPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGUpKSl7bGV0IHI9KG5bMl18fG5bMV0pLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCIgIiksbz10W3IudG9Mb3dlckNhc2UoKV07aWYoIW8pe2xldCBhPW5bMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6YSx0ZXh0OmF9fXJldHVybiBudihuLG8sblswXSx0aGlzLmxleGVyLHRoaXMucnVsZXMpfX1lbVN0cm9uZyhlLHQsbj0iIil7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhlKTtpZighcnx8clszXSYmbi5tYXRjaCh0aGlzLnJ1bGVzLm90aGVyLnVuaWNvZGVBbHBoYU51bWVyaWMpKXJldHVybjtpZighKHJbMV18fHJbMl18fCIiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBhPVsuLi5yWzBdXS5sZW5ndGgtMSxpLHMsbD1hLHU9MCxkPXJbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGQubGFzdEluZGV4PTAsdD10LnNsaWNlKC0xKmUubGVuZ3RoK2EpOyhyPWQuZXhlYyh0KSkhPW51bGw7KXtpZihpPXJbMV18fHJbMl18fHJbM118fHJbNF18fHJbNV18fHJbNl0sIWkpY29udGludWU7aWYocz1bLi4uaV0ubGVuZ3RoLHJbM118fHJbNF0pe2wrPXM7Y29udGludWV9ZWxzZSBpZigocls1XXx8cls2XSkmJmElMyYmISgoYStzKSUzKSl7dSs9cztjb250aW51ZX1pZihsLT1zLGw+MCljb250aW51ZTtzPU1hdGgubWluKHMscytsK3UpO2xldCBjPVsuLi5yWzBdXVswXS5sZW5ndGgsaD1lLnNsaWNlKDAsYStyLmluZGV4K2Mrcyk7aWYoTWF0aC5taW4oYSxzKSUyKXtsZXQgbT1oLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmgsdGV4dDptLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhtKX19bGV0IHY9aC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6aCx0ZXh0OnYsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHYpfX19fWNvZGVzcGFuKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwiICIpLHI9dGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdChuKSxvPXRoaXMucnVsZXMub3RoZXIuc3RhcnRpbmdTcGFjZUNoYXIudGVzdChuKSYmdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChuKTtyZXR1cm4gciYmbyYmKG49bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKSkse3R5cGU6ImNvZGVzcGFuIixyYXc6dFswXSx0ZXh0Om59fX1icihlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImJyIixyYXc6dFswXX19ZGVsKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImRlbCIscmF3OnRbMF0sdGV4dDp0WzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh0WzJdKX19YXV0b2xpbmsoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZih0KXtsZXQgbixyO3JldHVybiB0WzJdPT09IkAiPyhuPXRbMV0scj0ibWFpbHRvOiIrbik6KG49dFsxXSxyPW4pLHt0eXBlOiJsaW5rIixyYXc6dFswXSx0ZXh0Om4saHJlZjpyLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19dXJsKGUpe2xldCB0O2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCBuLHI7aWYodFsyXT09PSJAIiluPXRbMF0scj0ibWFpbHRvOiIrbjtlbHNle2xldCBvO2RvIG89dFswXSx0WzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyh0WzBdKT8uWzBdPz8iIjt3aGlsZShvIT09dFswXSk7bj10WzBdLHRbMV09PT0id3d3LiI/cj0iaHR0cDovLyIrdFswXTpyPXRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzp0WzBdLHRleHQ6bixocmVmOnIsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3Om4sdGV4dDpufV19fX1pbmxpbmVUZXh0KGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhlKTtpZih0KXtsZXQgbj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSxlc2NhcGVkOm59fX19LERuPWNsYXNzIGZke3Rva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz10fHxScix0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBWcyx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCBuPXtvdGhlcjpydCxibG9jazpXcy5ub3JtYWwsaW5saW5lOiRhLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhuLmJsb2NrPVdzLnBlZGFudGljLG4uaW5saW5lPSRhLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYobi5ibG9jaz1Xcy5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9uLmlubGluZT0kYS5icmVha3M6bi5pbmxpbmU9JGEuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1ufXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6V3MsaW5saW5lOiRhfX1zdGF0aWMgbGV4KHQsbil7cmV0dXJuIG5ldyBmZChuKS5sZXgodCl9c3RhdGljIGxleElubGluZSh0LG4pe3JldHVybiBuZXcgZmQobikuaW5saW5lVG9rZW5zKHQpfWxleCh0KXt0PXQucmVwbGFjZShydC5jYXJyaWFnZVJldHVybixgCmApLHRoaXMuYmxvY2tUb2tlbnModCx0aGlzLnRva2Vucyk7Zm9yKGxldCBuPTA7bjx0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDtuKyspe2xldCByPXRoaXMuaW5saW5lUXVldWVbbl07dGhpcy5pbmxpbmVUb2tlbnMoci5zcmMsci50b2tlbnMpfXJldHVybiB0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKHQsbj1bXSxyPSExKXtmb3IodGhpcy5vcHRpb25zLnBlZGFudGljJiYodD10LnJlcGxhY2UocnQudGFiQ2hhckdsb2JhbCwiICAgICIpLnJlcGxhY2UocnQuc3BhY2VMaW5lLCIiKSk7dDspe2xldCBvO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5ibG9jaz8uc29tZShpPT4obz1pLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pLCEwKTohMSkpY29udGludWU7aWYobz10aGlzLnRva2VuaXplci5zcGFjZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpO2xldCBpPW4uYXQoLTEpO28ucmF3Lmxlbmd0aD09PTEmJmkhPT12b2lkIDA/aS5yYXcrPWAKYDpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5jb2RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCk7bGV0IGk9bi5hdCgtMSk7aT8udHlwZT09PSJwYXJhZ3JhcGgifHxpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5mZW5jZXModCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5oZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIuaHIodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIubGlzdCh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmh0bWwodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5kZWYodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InBhcmFncmFwaCJ8fGk/LnR5cGU9PT0idGV4dCI/KGkucmF3Kz1gCmArby5yYXcsaS50ZXh0Kz1gCmArby5yYXcsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPWkudGV4dCk6dGhpcy50b2tlbnMubGlua3Nbby50YWddfHwodGhpcy50b2tlbnMubGlua3Nbby50YWddPXtocmVmOm8uaHJlZix0aXRsZTpvLnRpdGxlfSk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci50YWJsZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWxldCBhPXQ7aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0QmxvY2spe2xldCBpPTEvMCxzPXQuc2xpY2UoMSksbDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2godT0+e2w9dS5jYWxsKHtsZXhlcjp0aGlzfSxzKSx0eXBlb2YgbD09Im51bWJlciImJmw+PTAmJihpPU1hdGgubWluKGksbCkpfSksaTwxLzAmJmk+PTAmJihhPXQuc3Vic3RyaW5nKDAsaSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihvPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChhKSkpe2xldCBpPW4uYXQoLTEpO3ImJmk/LnR5cGU9PT0icGFyYWdyYXBoIj8oaS5yYXcrPWAKYCtvLnJhdyxpLnRleHQrPWAKYCtvLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobykscj1hLmxlbmd0aCE9PXQubGVuZ3RoLHQ9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLnRleHQodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1pLnRleHQpOm4ucHVzaChvKTtjb250aW51ZX1pZih0KXtsZXQgaT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGkpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGkpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsbn1pbmxpbmUodCxuPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6dCx0b2tlbnM6bn0pLG59aW5saW5lVG9rZW5zKHQsbj1bXSl7bGV0IHI9dCxvPW51bGw7aWYodGhpcy50b2tlbnMubGlua3Mpe2xldCBzPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihzLmxlbmd0aD4wKWZvcig7KG89dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhyKSkhPW51bGw7KXMuaW5jbHVkZXMob1swXS5zbGljZShvWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYocj1yLnNsaWNlKDAsby5pbmRleCkrIlsiKyJhIi5yZXBlYXQob1swXS5sZW5ndGgtMikrIl0iK3Iuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsobz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyIrKyIrci5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoOyhvPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyJbIisiYSIucmVwZWF0KG9bMF0ubGVuZ3RoLTIpKyJdIityLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtsZXQgYT0hMSxpPSIiO2Zvcig7dDspe2F8fChpPSIiKSxhPSExO2xldCBzO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5pbmxpbmU/LnNvbWUodT0+KHM9dS5jYWxsKHtsZXhlcjp0aGlzfSx0LG4pKT8odD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKSwhMCk6ITEpKWNvbnRpbnVlO2lmKHM9dGhpcy50b2tlbml6ZXIuZXNjYXBlKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIudGFnKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vucy5saW5rcykpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKTtsZXQgdT1uLmF0KC0xKTtzLnR5cGU9PT0idGV4dCImJnU/LnR5cGU9PT0idGV4dCI/KHUucmF3Kz1zLnJhdyx1LnRleHQrPXMudGV4dCk6bi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcodCxyLGkpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKSxuLnB1c2gocyk7Y29udGludWV9aWYocz10aGlzLnRva2VuaXplci5icih0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHM9dGhpcy50b2tlbml6ZXIudXJsKHQpKSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1sZXQgbD10O2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydElubGluZSl7bGV0IHU9MS8wLGQ9dC5zbGljZSgxKSxjO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goaD0+e2M9aC5jYWxsKHtsZXhlcjp0aGlzfSxkKSx0eXBlb2YgYz09Im51bWJlciImJmM+PTAmJih1PU1hdGgubWluKHUsYykpfSksdTwxLzAmJnU+PTAmJihsPXQuc3Vic3RyaW5nKDAsdSsxKSl9aWYocz10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGwpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCkscy5yYXcuc2xpY2UoLTEpIT09Il8iJiYoaT1zLnJhdy5zbGljZSgtMSkpLGE9ITA7bGV0IHU9bi5hdCgtMSk7dT8udHlwZT09PSJ0ZXh0Ij8odS5yYXcrPXMucmF3LHUudGV4dCs9cy50ZXh0KTpuLnB1c2gocyk7Y29udGludWV9aWYodCl7bGV0IHU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIit0LmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcih1KTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcih1KX19cmV0dXJuIG59fSxIcz1jbGFzc3tvcHRpb25zO3BhcnNlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8UnJ9c3BhY2UoZSl7cmV0dXJuIiJ9Y29kZSh7dGV4dDplLGxhbmc6dCxlc2NhcGVkOm59KXtsZXQgcj0odHx8IiIpLm1hdGNoKHJ0Lm5vdFNwYWNlU3RhcnQpPy5bMF0sbz1lLnJlcGxhY2UocnQuZW5kaW5nTmV3bGluZSwiIikrYApgO3JldHVybiByPyc8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS0nK2xuKHIpKyciPicrKG4/bzpsbihvLCEwKSkrYDwvY29kZT48L3ByZT4KYDoiPHByZT48Y29kZT4iKyhuP286bG4obywhMCkpK2A8L2NvZGU+PC9wcmU+CmB9YmxvY2txdW90ZSh7dG9rZW5zOmV9KXtyZXR1cm5gPGJsb2NrcXVvdGU+CiR7dGhpcy5wYXJzZXIucGFyc2UoZSl9PC9ibG9ja3F1b3RlPgpgfWh0bWwoe3RleHQ6ZX0pe3JldHVybiBlfWhlYWRpbmcoe3Rva2VuczplLGRlcHRoOnR9KXtyZXR1cm5gPGgke3R9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9oJHt0fT4KYH1ocihlKXtyZXR1cm5gPGhyPgpgfWxpc3QoZSl7bGV0IHQ9ZS5vcmRlcmVkLG49ZS5zdGFydCxyPSIiO2ZvcihsZXQgaT0wO2k8ZS5pdGVtcy5sZW5ndGg7aSsrKXtsZXQgcz1lLml0ZW1zW2ldO3IrPXRoaXMubGlzdGl0ZW0ocyl9bGV0IG89dD8ib2wiOiJ1bCIsYT10JiZuIT09MT8nIHN0YXJ0PSInK24rJyInOiIiO3JldHVybiI8IitvK2ErYD4KYCtyKyI8LyIrbytgPgpgfWxpc3RpdGVtKGUpe2xldCB0PSIiO2lmKGUudGFzayl7bGV0IG49dGhpcy5jaGVja2JveCh7Y2hlY2tlZDohIWUuY2hlY2tlZH0pO2UubG9vc2U/ZS50b2tlbnNbMF0/LnR5cGU9PT0icGFyYWdyYXBoIj8oZS50b2tlbnNbMF0udGV4dD1uKyIgIitlLnRva2Vuc1swXS50ZXh0LGUudG9rZW5zWzBdLnRva2VucyYmZS50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiZlLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZT09PSJ0ZXh0IiYmKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PW4rIiAiK2xuKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSxlLnRva2Vuc1swXS50b2tlbnNbMF0uZXNjYXBlZD0hMCkpOmUudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHJhdzpuKyIgIix0ZXh0Om4rIiAiLGVzY2FwZWQ6ITB9KTp0Kz1uKyIgIn1yZXR1cm4gdCs9dGhpcy5wYXJzZXIucGFyc2UoZS50b2tlbnMsISFlLmxvb3NlKSxgPGxpPiR7dH08L2xpPgpgfWNoZWNrYm94KHtjaGVja2VkOmV9KXtyZXR1cm4iPGlucHV0ICIrKGU/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94Ij4nfXBhcmFncmFwaCh7dG9rZW5zOmV9KXtyZXR1cm5gPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L3A+CmB9dGFibGUoZSl7bGV0IHQ9IiIsbj0iIjtmb3IobGV0IG89MDtvPGUuaGVhZGVyLmxlbmd0aDtvKyspbis9dGhpcy50YWJsZWNlbGwoZS5oZWFkZXJbb10pO3QrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pO2xldCByPSIiO2ZvcihsZXQgbz0wO288ZS5yb3dzLmxlbmd0aDtvKyspe2xldCBhPWUucm93c1tvXTtuPSIiO2ZvcihsZXQgaT0wO2k8YS5sZW5ndGg7aSsrKW4rPXRoaXMudGFibGVjZWxsKGFbaV0pO3IrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pfXJldHVybiByJiYocj1gPHRib2R5PiR7cn08L3Rib2R5PmApLGA8dGFibGU+Cjx0aGVhZD4KYCt0K2A8L3RoZWFkPgpgK3IrYDwvdGFibGU+CmB9dGFibGVyb3coe3RleHQ6ZX0pe3JldHVybmA8dHI+CiR7ZX08L3RyPgpgfXRhYmxlY2VsbChlKXtsZXQgdD10aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyksbj1lLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGUuYWxpZ24/YDwke259IGFsaWduPSIke2UuYWxpZ259Ij5gOmA8JHtufT5gKSt0K2A8LyR7bn0+CmB9c3Ryb25nKHt0b2tlbnM6ZX0pe3JldHVybmA8c3Ryb25nPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9zdHJvbmc+YH1lbSh7dG9rZW5zOmV9KXtyZXR1cm5gPGVtPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9lbT5gfWNvZGVzcGFuKHt0ZXh0OmV9KXtyZXR1cm5gPGNvZGU+JHtsbihlLCEwKX08L2NvZGU+YH1icihlKXtyZXR1cm4iPGJyPiJ9ZGVsKHt0b2tlbnM6ZX0pe3JldHVybmA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9kZWw+YH1saW5rKHtocmVmOmUsdGl0bGU6dCx0b2tlbnM6bn0pe2xldCByPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4pLG89ZXYoZSk7aWYobz09PW51bGwpcmV0dXJuIHI7ZT1vO2xldCBhPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYoYSs9JyB0aXRsZT0iJytsbih0KSsnIicpLGErPSI+IityKyI8L2E+IixhfWltYWdlKHtocmVmOmUsdGl0bGU6dCx0ZXh0Om4sdG9rZW5zOnJ9KXtyJiYobj10aGlzLnBhcnNlci5wYXJzZUlubGluZShyLHRoaXMucGFyc2VyLnRleHRSZW5kZXJlcikpO2xldCBvPWV2KGUpO2lmKG89PT1udWxsKXJldHVybiBsbihuKTtlPW87bGV0IGE9YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7bn0iYDtyZXR1cm4gdCYmKGErPWAgdGl0bGU9IiR7bG4odCl9ImApLGErPSI+IixhfXRleHQoZSl7cmV0dXJuInRva2VucyJpbiBlJiZlLnRva2Vucz90aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyk6ImVzY2FwZWQiaW4gZSYmZS5lc2NhcGVkP2UudGV4dDpsbihlLnRleHQpfX0sU2Q9Y2xhc3N7c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuIiIrZX1pbWFnZSh7dGV4dDplfSl7cmV0dXJuIiIrZX1icigpe3JldHVybiIifX0sQ249Y2xhc3MgaGR7b3B0aW9ucztyZW5kZXJlcjt0ZXh0UmVuZGVyZXI7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fFJyLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBIcyx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IFNkfXN0YXRpYyBwYXJzZSh0LG4pe3JldHVybiBuZXcgaGQobikucGFyc2UodCl9c3RhdGljIHBhcnNlSW5saW5lKHQsbil7cmV0dXJuIG5ldyBoZChuKS5wYXJzZUlubGluZSh0KX1wYXJzZSh0LG49ITApe2xldCByPSIiO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgYT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LlthLnR5cGVdKXtsZXQgcz1hLGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW3MudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHMpO2lmKGwhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMocy50eXBlKSl7cis9bHx8IiI7Y29udGludWV9fWxldCBpPWE7c3dpdGNoKGkudHlwZSl7Y2FzZSJzcGFjZSI6e3IrPXRoaXMucmVuZGVyZXIuc3BhY2UoaSk7Y29udGludWV9Y2FzZSJociI6e3IrPXRoaXMucmVuZGVyZXIuaHIoaSk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7cis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKGkpO2NvbnRpbnVlfWNhc2UiY29kZSI6e3IrPXRoaXMucmVuZGVyZXIuY29kZShpKTtjb250aW51ZX1jYXNlInRhYmxlIjp7cis9dGhpcy5yZW5kZXJlci50YWJsZShpKTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntyKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoaSk7Y29udGludWV9Y2FzZSJsaXN0Ijp7cis9dGhpcy5yZW5kZXJlci5saXN0KGkpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e3IrPXRoaXMucmVuZGVyZXIuaHRtbChpKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e3IrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKGkpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBzPWksbD10aGlzLnJlbmRlcmVyLnRleHQocyk7Zm9yKDtvKzE8dC5sZW5ndGgmJnRbbysxXS50eXBlPT09InRleHQiOylzPXRbKytvXSxsKz1gCmArdGhpcy5yZW5kZXJlci50ZXh0KHMpO24/cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoe3R5cGU6InBhcmFncmFwaCIscmF3OmwsdGV4dDpsLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpsLHRleHQ6bCxlc2NhcGVkOiEwfV19KTpyKz1sO2NvbnRpbnVlfWRlZmF1bHQ6e2xldCBzPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHMpLCIiO3Rocm93IG5ldyBFcnJvcihzKX19fXJldHVybiByfXBhcnNlSW5saW5lKHQsbj10aGlzLnJlbmRlcmVyKXtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IHM9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGEpO2lmKHMhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhhLnR5cGUpKXtyKz1zfHwiIjtjb250aW51ZX19bGV0IGk9YTtzd2l0Y2goaS50eXBlKXtjYXNlImVzY2FwZSI6e3IrPW4udGV4dChpKTticmVha31jYXNlImh0bWwiOntyKz1uLmh0bWwoaSk7YnJlYWt9Y2FzZSJsaW5rIjp7cis9bi5saW5rKGkpO2JyZWFrfWNhc2UiaW1hZ2UiOntyKz1uLmltYWdlKGkpO2JyZWFrfWNhc2Uic3Ryb25nIjp7cis9bi5zdHJvbmcoaSk7YnJlYWt9Y2FzZSJlbSI6e3IrPW4uZW0oaSk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e3IrPW4uY29kZXNwYW4oaSk7YnJlYWt9Y2FzZSJiciI6e3IrPW4uYnIoaSk7YnJlYWt9Y2FzZSJkZWwiOntyKz1uLmRlbChpKTticmVha31jYXNlInRleHQiOntyKz1uLnRleHQoaSk7YnJlYWt9ZGVmYXVsdDp7bGV0IHM9J1Rva2VuIHdpdGggIicraS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IocyksIiI7dGhyb3cgbmV3IEVycm9yKHMpfX19cmV0dXJuIHJ9fSxCcz1jbGFzc3tvcHRpb25zO2Jsb2NrO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxScn1zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIiwicHJvY2Vzc0FsbFRva2VucyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfXByb2Nlc3NBbGxUb2tlbnMoZSl7cmV0dXJuIGV9cHJvdmlkZUxleGVyKCl7cmV0dXJuIHRoaXMuYmxvY2s/RG4ubGV4OkRuLmxleElubGluZX1wcm92aWRlUGFyc2VyKCl7cmV0dXJuIHRoaXMuYmxvY2s/Q24ucGFyc2U6Q24ucGFyc2VJbmxpbmV9fSxRYj1jbGFzc3tkZWZhdWx0cz1tZCgpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMucGFyc2VNYXJrZG93bighMCk7cGFyc2VJbmxpbmU9dGhpcy5wYXJzZU1hcmtkb3duKCExKTtQYXJzZXI9Q247UmVuZGVyZXI9SHM7VGV4dFJlbmRlcmVyPVNkO0xleGVyPURuO1Rva2VuaXplcj1WcztIb29rcz1Ccztjb25zdHJ1Y3RvciguLi5lKXt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsdCl7bGV0IG49W107Zm9yKGxldCByIG9mIGUpc3dpdGNoKG49bi5jb25jYXQodC5jYWxsKHRoaXMscikpLHIudHlwZSl7Y2FzZSJ0YWJsZSI6e2xldCBvPXI7Zm9yKGxldCBhIG9mIG8uaGVhZGVyKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGEudG9rZW5zLHQpKTtmb3IobGV0IGEgb2Ygby5yb3dzKWZvcihsZXQgaSBvZiBhKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGkudG9rZW5zLHQpKTticmVha31jYXNlImxpc3QiOntsZXQgbz1yO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8uaXRlbXMsdCkpO2JyZWFrfWRlZmF1bHQ6e2xldCBvPXI7dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zPy5jaGlsZFRva2Vucz8uW28udHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW28udHlwZV0uZm9yRWFjaChhPT57bGV0IGk9b1thXS5mbGF0KDEvMCk7bj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaSx0KSl9KTpvLnRva2VucyYmKG49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8udG9rZW5zLHQpKSl9fXJldHVybiBufXVzZSguLi5lKXtsZXQgdD10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiBlLmZvckVhY2gobj0+e2xldCByPXsuLi5ufTtpZihyLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fHIuYXN5bmN8fCExLG4uZXh0ZW5zaW9ucyYmKG4uZXh0ZW5zaW9ucy5mb3JFYWNoKG89PntpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZigicmVuZGVyZXIiaW4gbyl7bGV0IGE9dC5yZW5kZXJlcnNbby5uYW1lXTthP3QucmVuZGVyZXJzW28ubmFtZV09ZnVuY3Rpb24oLi4uaSl7bGV0IHM9by5yZW5kZXJlci5hcHBseSh0aGlzLGkpO3JldHVybiBzPT09ITEmJihzPWEuYXBwbHkodGhpcyxpKSksc306dC5yZW5kZXJlcnNbby5uYW1lXT1vLnJlbmRlcmVyfWlmKCJ0b2tlbml6ZXIiaW4gbyl7aWYoIW8ubGV2ZWx8fG8ubGV2ZWwhPT0iYmxvY2siJiZvLmxldmVsIT09ImlubGluZSIpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7bGV0IGE9dFtvLmxldmVsXTthP2EudW5zaGlmdChvLnRva2VuaXplcik6dFtvLmxldmVsXT1bby50b2tlbml6ZXJdLG8uc3RhcnQmJihvLmxldmVsPT09ImJsb2NrIj90LnN0YXJ0QmxvY2s/dC5zdGFydEJsb2NrLnB1c2goby5zdGFydCk6dC5zdGFydEJsb2NrPVtvLnN0YXJ0XTpvLmxldmVsPT09ImlubGluZSImJih0LnN0YXJ0SW5saW5lP3Quc3RhcnRJbmxpbmUucHVzaChvLnN0YXJ0KTp0LnN0YXJ0SW5saW5lPVtvLnN0YXJ0XSkpfSJjaGlsZFRva2VucyJpbiBvJiZvLmNoaWxkVG9rZW5zJiYodC5jaGlsZFRva2Vuc1tvLm5hbWVdPW8uY2hpbGRUb2tlbnMpfSksci5leHRlbnNpb25zPXQpLG4ucmVuZGVyZXIpe2xldCBvPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBIcyh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi5yZW5kZXJlcil7aWYoIShhIGluIG8pKXRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgJyR7YX0nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicGFyc2VyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4ucmVuZGVyZXJbaV0sbD1vW2ldO29baV09KC4uLnUpPT57bGV0IGQ9cy5hcHBseShvLHUpO3JldHVybiBkPT09ITEmJihkPWwuYXBwbHkobyx1KSksZHx8IiJ9fXIucmVuZGVyZXI9b31pZihuLnRva2VuaXplcil7bGV0IG89dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBWcyh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi50b2tlbml6ZXIpe2lmKCEoYSBpbiBvKSl0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHthfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJydWxlcyIsImxleGVyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4udG9rZW5pemVyW2ldLGw9b1tpXTtvW2ldPSguLi51KT0+e2xldCBkPXMuYXBwbHkobyx1KTtyZXR1cm4gZD09PSExJiYoZD1sLmFwcGx5KG8sdSkpLGR9fXIudG9rZW5pemVyPW99aWYobi5ob29rcyl7bGV0IG89dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IEJzO2ZvcihsZXQgYSBpbiBuLmhvb2tzKXtpZighKGEgaW4gbykpdGhyb3cgbmV3IEVycm9yKGBob29rICcke2F9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsImJsb2NrIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4uaG9va3NbaV0sbD1vW2ldO0JzLnBhc3NUaHJvdWdoSG9va3MuaGFzKGEpP29baV09dT0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmNhbGwobyx1KSkudGhlbihjPT5sLmNhbGwobyxjKSk7bGV0IGQ9cy5jYWxsKG8sdSk7cmV0dXJuIGwuY2FsbChvLGQpfTpvW2ldPSguLi51KT0+e2xldCBkPXMuYXBwbHkobyx1KTtyZXR1cm4gZD09PSExJiYoZD1sLmFwcGx5KG8sdSkpLGR9fXIuaG9va3M9b31pZihuLndhbGtUb2tlbnMpe2xldCBvPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxhPW4ud2Fsa1Rva2VucztyLndhbGtUb2tlbnM9ZnVuY3Rpb24oaSl7bGV0IHM9W107cmV0dXJuIHMucHVzaChhLmNhbGwodGhpcyxpKSksbyYmKHM9cy5jb25jYXQoby5jYWxsKHRoaXMsaSkpKSxzfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLnJ9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSx0KXtyZXR1cm4gRG4ubGV4KGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUsdCl7cmV0dXJuIENuLnBhcnNlKGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VNYXJrZG93bihlKXtyZXR1cm4obixyKT0+e2xldCBvPXsuLi5yfSxhPXsuLi50aGlzLmRlZmF1bHRzLC4uLm99LGk9dGhpcy5vbkVycm9yKCEhYS5zaWxlbnQsISFhLmFzeW5jKTtpZih0aGlzLmRlZmF1bHRzLmFzeW5jPT09ITAmJm8uYXN5bmM9PT0hMSlyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFJlbW92ZSBhc3luYzogZmFsc2UgZnJvbSB0aGUgcGFyc2Ugb3B0aW9ucyBvYmplY3QgdG8gcmV0dXJuIGEgUHJvbWlzZS4iKSk7aWYodHlwZW9mIG4+InUifHxuPT09bnVsbClyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBpKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKyIsIHN0cmluZyBleHBlY3RlZCIpKTthLmhvb2tzJiYoYS5ob29rcy5vcHRpb25zPWEsYS5ob29rcy5ibG9jaz1lKTtsZXQgcz1hLmhvb2tzP2EuaG9va3MucHJvdmlkZUxleGVyKCk6ZT9Ebi5sZXg6RG4ubGV4SW5saW5lLGw9YS5ob29rcz9hLmhvb2tzLnByb3ZpZGVQYXJzZXIoKTplP0NuLnBhcnNlOkNuLnBhcnNlSW5saW5lO2lmKGEuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShhLmhvb2tzP2EuaG9va3MucHJlcHJvY2VzcyhuKTpuKS50aGVuKHU9PnModSxhKSkudGhlbih1PT5hLmhvb2tzP2EuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KTp1KS50aGVuKHU9PmEud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnModSxhLndhbGtUb2tlbnMpKS50aGVuKCgpPT51KTp1KS50aGVuKHU9PmwodSxhKSkudGhlbih1PT5hLmhvb2tzP2EuaG9va3MucG9zdHByb2Nlc3ModSk6dSkuY2F0Y2goaSk7dHJ5e2EuaG9va3MmJihuPWEuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IHU9cyhuLGEpO2EuaG9va3MmJih1PWEuaG9va3MucHJvY2Vzc0FsbFRva2Vucyh1KSksYS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnModSxhLndhbGtUb2tlbnMpO2xldCBkPWwodSxhKTtyZXR1cm4gYS5ob29rcyYmKGQ9YS5ob29rcy5wb3N0cHJvY2VzcyhkKSksZH1jYXRjaCh1KXtyZXR1cm4gaSh1KX19fW9uRXJyb3IoZSx0KXtyZXR1cm4gbj0+e2lmKG4ubWVzc2FnZSs9YApQbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLGUpe2xldCByPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK2xuKG4ubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIHQ/UHJvbWlzZS5yZXNvbHZlKHIpOnJ9aWYodClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7dGhyb3cgbn19fSxPcj1uZXcgUWI7ZnVuY3Rpb24gSihlLHQpe3JldHVybiBPci5wYXJzZShlLHQpfUoub3B0aW9ucz1KLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9yLnNldE9wdGlvbnMoZSksSi5kZWZhdWx0cz1Pci5kZWZhdWx0cyxydihKLmRlZmF1bHRzKSxKfTtKLmdldERlZmF1bHRzPW1kO0ouZGVmYXVsdHM9UnI7Si51c2U9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIE9yLnVzZSguLi5lKSxKLmRlZmF1bHRzPU9yLmRlZmF1bHRzLHJ2KEouZGVmYXVsdHMpLEp9O0oud2Fsa1Rva2Vucz1mdW5jdGlvbihlLHQpe3JldHVybiBPci53YWxrVG9rZW5zKGUsdCl9O0oucGFyc2VJbmxpbmU9T3IucGFyc2VJbmxpbmU7Si5QYXJzZXI9Q247Si5wYXJzZXI9Q24ucGFyc2U7Si5SZW5kZXJlcj1IcztKLlRleHRSZW5kZXJlcj1TZDtKLkxleGVyPURuO0oubGV4ZXI9RG4ubGV4O0ouVG9rZW5pemVyPVZzO0ouSG9va3M9QnM7Si5wYXJzZT1KO3ZhciB5Mj1KLm9wdGlvbnMsdzI9Si5zZXRPcHRpb25zLHgyPUoudXNlLGIyPUoud2Fsa1Rva2VucyxrMj1KLnBhcnNlSW5saW5lO3ZhciBTMj1Dbi5wYXJzZSxFMj1Ebi5sZXg7Si51c2Uoe2JyZWFrczohMCxnZm06ITAscmVuZGVyZXI6e2xpbmsoe2hyZWY6ZSx0aXRsZTp0LHRleHQ6bn0pe2xldCByPXQ/YCB0aXRsZT0iJHt0fSJgOiIiO3JldHVybmA8YSBocmVmPSIke2V9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiR7cn0+JHtufTwvYT5gfX19KTtmdW5jdGlvbiBTbyhlKXtyZXR1cm4gZT9KLnBhcnNlSW5saW5lKGUpOiIifWZ1bmN0aW9uIEVkKGUpe3JldHVybiBlP0oucGFyc2UoZSk6IiJ9dmFyIHZ2PWxlKGllKCkpO3ZhciByZT1sZShpZSgpKSxKYj0yZTMsTmQ9ImRhc2hib2FyZDp3aWRnZXQtZHJhZy1yZWFkeSIsaHY9MjIwO2Z1bmN0aW9uIFhiKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRWxlbWVudD8hIWUuY2xvc2VzdCgiYnV0dG9uLCBhLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3JvbGU9J2J1dHRvbiddIik6ITF9ZnVuY3Rpb24gWmIoZSx0LG4pe2lmKCFBcnJheS5pc0FycmF5KGUpfHwhdHx8IW58fHQ9PT1uKXJldHVybiBlO2xldCByPWUuZmluZEluZGV4KGw9Pmw/LndpZGdldElkPT09dCksbz1lLmZpbmRJbmRleChsPT5sPy53aWRnZXRJZD09PW4pO2lmKHI8MHx8bzwwfHxyPT09bylyZXR1cm4gZTtsZXQgYT1bLi4uZV0sW2ldPWEuc3BsaWNlKHIsMSkscz1yPG8/by0xOm87cmV0dXJuIGEuc3BsaWNlKHMsMCxpKSxhfWZ1bmN0aW9uIGVrKCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4gbmV3IE1hcDtsZXQgZT1uZXcgTWFwO3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKS5mb3JFYWNoKG49PntsZXQgcj1uLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKTtyJiZlLnNldChyLG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfSksZX1mdW5jdGlvbiB0ayhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIE1hcCl8fGUuc2l6ZT09PTB8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBuPVtdO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXNoYm9hcmQtZ3JpZCAuZ3JpZC1jZWxsW2RhdGEtd2lkZ2V0LWlkXSIpLmZvckVhY2gobz0+e2xldCBhPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpO2lmKCFhfHxhPT09dClyZXR1cm47bGV0IGk9ZS5nZXQoYSk7aWYoIWkpcmV0dXJuO2xldCBzPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1pLmxlZnQtcy5sZWZ0LHU9aS50b3Atcy50b3A7TWF0aC5hYnMobCk8MSYmTWF0aC5hYnModSk8MXx8KG8uc3R5bGUudHJhbnNpdGlvbj0ibm9uZSIsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLGAke2x9cHhgKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsYCR7dX1weGApLG4ucHVzaChvKSl9KSxuLmxlbmd0aCE9PTAmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLmZvckVhY2gobz0+e28uc3R5bGUudHJhbnNpdGlvbj1gdHJhbnNmb3JtICR7aHZ9bXMgZWFzZWAsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLCIwcHgiKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsIjBweCIpfSksd2luZG93LnNldFRpbWVvdXQoKCk9PntuLmZvckVhY2gobz0+by5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpKX0saHYrNDApfSl9ZnVuY3Rpb24gbXYoZSl7cmV0dXJuKGV8fFtdKS5tYXAodD0+dD8ud2lkZ2V0SWQpLmZpbHRlcihCb29sZWFuKS5qb2luKCJ8Iil9ZnVuY3Rpb24gZ3YoZSx0KXtsZXRbbixyXT0oMCxyZS51c2VTdGF0ZSkobnVsbCksW28sYV09KDAscmUudXNlU3RhdGUpKGUpLGk9KDAscmUudXNlUmVmKShlKSxzPSgwLHJlLnVzZVJlZikobnVsbCk7KDAscmUudXNlRWZmZWN0KSgoKT0+e258fGEoZSl9LFtlLG5dKSwoMCxyZS51c2VFZmZlY3QpKCgpPT57aS5jdXJyZW50PW99LFtvXSksKDAscmUudXNlTGF5b3V0RWZmZWN0KSgoKT0+e2xldCB1PXMuY3VycmVudDshbnx8IXV8fChzLmN1cnJlbnQ9bnVsbCx0ayh1LG4pKX0sW28sbl0pLCgwLHJlLnVzZUVmZmVjdCkoKCk9PntsZXQgdT1kPT57bGV0IGM9ZD8uZGV0YWlsPy53aWRnZXRJZDtjJiYocihjKSxhKGg9PkFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoP2g6ZSkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTmQsdSksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKE5kLHUpfSxbZV0pO2xldCBsPSgwLHJlLnVzZUNhbGxiYWNrKSgoKT0+e2lmKCFuKXJldHVybjtsZXQgdT1tdihlKSxkPW12KGkuY3VycmVudCk7cihudWxsKSxkJiZ1IT09ZCYmdChpLmN1cnJlbnQubWFwKGM9PmMud2lkZ2V0SWQpKX0sW2Usbix0XSk7cmV0dXJuKDAscmUudXNlRWZmZWN0KSgoKT0+e2lmKCFuKXJldHVybjtsZXQgdT1oPT57aWYoKGguYnV0dG9ucyYxKSE9PTEpe2woKTtyZXR1cm59bGV0IHc9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChoLmNsaWVudFgsaC5jbGllbnRZKT8uY2xvc2VzdD8uKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKT8uZ2V0QXR0cmlidXRlPy4oImRhdGEtd2lkZ2V0LWlkIik7aWYoIXd8fHc9PT1uKXJldHVybjtsZXQgYj1laygpO2EoZz0+e2xldCBmPVpiKGcsbix3KTtyZXR1cm4gZiE9PWcmJihzLmN1cnJlbnQ9YiksZn0pfSxkPSgpPT5sKCksYz0oKT0+bCgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix1KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGMpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixjKX19LFtuLGxdKSx7ZHJhZ2dpbmdXaWRnZXRJZDpuLGRpc3BsYXllZENvbXBvbmVudHM6b319ZnVuY3Rpb24gVGQoe2NvbmZpZ3VyYWJsZTplLGhlYWRlckFjdGlvbnM6dCxpY29uOm4sb25Db25maWd1cmU6cixzdWJ0aXRsZTpvLHRpdGxlOmEsd2lkZ2V0SWQ6aX0pe2xldCBzPSgwLHJlLnVzZVJlZikobnVsbCksbD0oMCxyZS51c2VSZWYpKG51bGwpLHU9KDAscmUudXNlUmVmKSghMSksZD0oMCxyZS51c2VNZW1vKSgoKT0+KHt3aWRnZXRJZDppfSksW2ldKTtyZXR1cm4oMCxyZS51c2VFZmZlY3QpKCgpPT57bGV0IGM9cy5jdXJyZW50O2lmKCFjKXJldHVybjtsZXQgaD0oKT0+e2wuY3VycmVudCE9bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQobC5jdXJyZW50KSxsLmN1cnJlbnQ9bnVsbCl9LHY9Yj0+e2MuY2xhc3NMaXN0LnRvZ2dsZSgid2lkZ2V0LWhlYWRpbmctYmFyLS1kcmFnLXJlYWR5IiwhIWIpfSxtPWI9PntiLmJ1dHRvbj09PTAmJihYYihiLnRhcmdldCl8fCh1LmN1cnJlbnQ9ITEsdighMSksaCgpLGwuY3VycmVudD13aW5kb3cuc2V0VGltZW91dCgoKT0+e3UuY3VycmVudD0hMCx2KCEwKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoTmQse2RldGFpbDpkfSkpfSxKYikpKX0sdz0oKT0+e2goKSx1LmN1cnJlbnQ9ITEsdighMSl9O3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHcpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix3KSwoKT0+e2goKSx2KCExKSxjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIix3KX19LFtkXSksKDAscmUuY3JlYXRlRWxlbWVudCkoImRpdiIse3JlZjpzLGNsYXNzTmFtZToid2lkZ2V0LWhlYWRlciB3aWRnZXQtaGVhZGluZy1iYXIifSwoMCxyZS5jcmVhdGVFbGVtZW50KSgic3BhbiIse2NsYXNzTmFtZToid2lkZ2V0LWljb24ifSxuKSwoMCxyZS5jcmVhdGVFbGVtZW50KSgiaDMiLHtjbGFzc05hbWU6IndpZGdldC10aXRsZSJ9LCgwLHJlLmNyZWF0ZUVsZW1lbnQpKCJzcGFuIix7Y2xhc3NOYW1lOiJ3aWRnZXQtdGl0bGVfX2xhYmVsIn0sYSksbz8oMCxyZS5jcmVhdGVFbGVtZW50KSgic3BhbiIse2NsYXNzTmFtZToid2lkZ2V0LXRpdGxlX19zdWJ0aXRsZSJ9LG8pOm51bGwpLHR8fG51bGwsZT8oMCxyZS5jcmVhdGVFbGVtZW50KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtY29uZmlndXJlIixvbkNsaWNrOnJ9LCJcdTI2OTkgQ29uZmlndXJlIik6bnVsbCl9ZnVuY3Rpb24gWCh7YXBwOmUsY2hpbGRyZW46dCxjb25maWd1cmFibGU6bixncmlkSGVpZ2h0U2l6ZTpyLGdyaWRXaWR0aFNpemU6byxoZWFkZXJBY3Rpb25zOmEsaWNvbjppLG9uQ29uZmlndXJlOnMsc3VidGl0bGU6bCx0aXRsZTp1LHdpZGdldElkOmR9KXtsZXQgYz12di5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQsaD1hc3luYygpPT57cz9zKCk6ZSYmYXdhaXQgZS5jb25maWd1cmUoZCkmJndpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sdj1OdW1iZXIobyk+MD9OdW1iZXIobyk6MSxtPU51bWJlcihyKT4wP051bWJlcihyKToxLHc9YGhvcml6b250YWwtJHt2fS1jZWxsIHZlcnRpY2FsLSR7bX0tY2VsbGA7cmV0dXJuIGMoImRpdiIse2NsYXNzTmFtZTpgd2lkZ2V0IHdpZGdldC0ke2R9ICR7d31gfSxjKFRkLHtjb25maWd1cmFibGU6bixoZWFkZXJBY3Rpb25zOmEsaWNvbjppLHN1YnRpdGxlOmwsdGl0bGU6dSx3aWRnZXRJZDpkLG9uQ29uZmlndXJlOmh9KSxjKCJkaXYiLHtjbGFzc05hbWU6IndpZGdldC1ib2R5In0sdCkpfWFzeW5jIGZ1bmN0aW9uIG5rKGUsdCl7cmV0dXJuIHQubm90ZVVVSUQ/YXdhaXQgVXMoZSx0Lm5vdGVVVUlEKTphd2FpdCBxZyhlLHQpfWFzeW5jIGZ1bmN0aW9uIHl2KGUsdCx7YWN0aXZlVGFiOm4sc2V0QWN0aXZlVGFiOnIsc2V0TW9udGhMb2FkaW5nOm8sc2V0TW9udGhDb250ZW50OmF9KXtpZihuPT09dC5pbmRleCl7cihudWxsKSxhKG51bGwpO3JldHVybn1yKHQuaW5kZXgpLG8oITApLGEobnVsbCk7bGV0IGk9dC5wbGFuLm5vdGVVVUlEO3RyeXtpZighaSlhKHtmb3VuZDohMSxwbGFuOnQucGxhbixtb250aE5hbWU6dC5mdWxsLHllYXI6dC5wbGFuLnllYXJ9KTtlbHNle2xldCBzPWF3YWl0IGNkKGUsaSx0LmZ1bGwpO08oYFtQbGFubmluZ10gUmF3IG1hcmtkb3duIGZvciAke3QuZnVsbH06YCxzPy5jb250ZW50KSxhKHsuLi5zLHBsYW46dC5wbGFuLG1vbnRoTmFtZTp0LmZ1bGwseWVhcjp0LnBsYW4ueWVhcn0pfX1jYXRjaHthKHtmb3VuZDohMSxwbGFuOnQucGxhbixtb250aE5hbWU6dC5mdWxsLHllYXI6dC5wbGFuLnllYXJ9KX1maW5hbGx5e28oITEpfX1hc3luYyBmdW5jdGlvbiByayhlLHQse3NldE1vbnRoTG9hZGluZzpuLHNldE1vbnRoQ29udGVudDpyfSl7aWYodCl7bighMCk7dHJ5e2xldCBvPWF3YWl0IEtnKGUsdC5wbGFuLHQubW9udGhOYW1lKTtpZihvJiZvLm5vdGVVVUlEKXJldHVybiByKGE9Pih7Li4uYSxmb3VuZDohMCxjb250ZW50Om8uY29udGVudHx8IiJ9KSksYXdhaXQgVXMoZSxvLm5vdGVVVUlEKX1jYXRjaHt9ZmluYWxseXtuKCExKX19fWFzeW5jIGZ1bmN0aW9uIG9rKGUsdCxuLHIsbyl7cighMCk7dHJ5e2xldCBhPWF3YWl0IFlnKGUsdCxuKTtpZihhPy5ub3RlVVVJRClyZXR1cm4gbyh7Zm91bmQ6ITAsY29udGVudDphLmNvbnRlbnR8fCIifSksYXdhaXQgVXMoZSxhLm5vdGVVVUlEKX1jYXRjaHt9ZmluYWxseXtyKCExKX19ZnVuY3Rpb24gYWsoZSx0LG4pe2xldCByPSEhdC5ub3RlVVVJRCxvPSEhdC5oYXNBbGxNb250aGx5RGV0YWlscyxhPSJxdWFydGVyLWNhcmQiKyhyPyIgcXVhcnRlci1jYXJkLS1oYXMtcGxhbiI6IiIpLGk9bz8iXHUyNzA1IjoiXHV7MUY2QTd9IixzPW8/IkFsbCAzIG1vbnRocyBpbiB0aGlzIHF1YXJ0ZXIgaGF2ZSBiZWVuIHBsYW5uZWQuIjoiTW9udGhseSBkZXRhaWxzIGFyZSBtaXNzaW5nIGZvciBvbmUgb3IgbW9yZSBtb250aHMgXHUyMDE0IHRoaXMgcGxhbiBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuIjtyZXR1cm4gZSgiZGl2Iix7a2V5OnQubGFiZWwsY2xhc3NOYW1lOmEsb25DbGljazpufSxlKCJzcGFuIix7Y2xhc3NOYW1lOiJxdWFydGVyLWxhYmVsIn0sdC5sYWJlbCksZSgiZGl2Iix7Y2xhc3NOYW1lOiJxdWFydGVyLXN0YXR1cy1yb3cifSxlKCJzcGFuIix7Y2xhc3NOYW1lOiJxdWFydGVyLXN0YXR1cyJ9LHI/Ilx1ezFGNEREfSBPcGVuIFBsYW4iOiIrIENyZWF0ZSBQbGFuIikscj9lKG9kLHtjb250ZW50OnMscGxhY2VtZW50OiJib3R0b20ifSxlKCJzcGFuIix7Y2xhc3NOYW1lOiJxdWFydGVyLXBsYW4taW5kaWNhdG9yIixvbkNsaWNrOmw9Pmwuc3RvcFByb3BhZ2F0aW9uKCl9LGkpKTpudWxsKSl9ZnVuY3Rpb24gaWsoZSx0LG4scil7cmV0dXJuIHQ/ZSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWxvYWRpbmcifSwiTG9hZGluZ1x1MjAyNiIpOm4/bi5mb3VuZD9lKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQifSxlKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtaGVhZGVyIn0sbi5tb250aE5hbWUpLGUoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudC10ZXh0IixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOkVkKG4uY29udGVudCl8fCI8cD4oRW1wdHkgc2VjdGlvbik8L3A+In19KSk6ZSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWVtcHR5In0sZSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjcmVhdGUtbW9udGgtcGxhbi1saW5rIixvbkNsaWNrOnJ9LGBDcmVhdGUgYSBwbGFuIGZvciAke24ubW9udGhOYW1lfSAke24ueWVhcn1gKSk6bnVsbH1mdW5jdGlvbiBzayhlLHQsbixyLG8sYSl7cmV0dXJuIHI/ZSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1zZWN0aW9uIn0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1sb2FkaW5nIn0sIkxvYWRpbmdcdTIwMjYiKSk6bz8uZm91bmQ/ZSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWFyZWEifSxlKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQifSxlKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtaGVhZGVyIn0sdCksZSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LXRleHQiLGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6RWQoby5jb250ZW50KXx8IjxwPihFbXB0eSBzZWN0aW9uKTwvcD4ifX0pKSk6ZSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1zZWN0aW9uIn0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1oZWFkZXIifSwiV2Vla2x5IFBsYW4iKSxlKCJidXR0b24iLHtjbGFzc05hbWU6ImNyZWF0ZS13ZWVrLXBsYW4tbGluayIsb25DbGljazphfSxgQ3JlYXRlIGEgd2Vla2x5IHBsYW4gZm9yICR7dH0sICR7bn1gKSl9ZnVuY3Rpb24gRGQoe2FwcDplLGdyaWRIZWlnaHRTaXplOnQ9MSxxdWFydGVybHlQbGFuczpufSl7bGV0IHI9eXQuY3JlYXRlRWxlbWVudCxbbyxhXT0oMCx5dC51c2VTdGF0ZSkobnVsbCksW2ksc109KDAseXQudXNlU3RhdGUpKG51bGwpLFtsLHVdPSgwLHl0LnVzZVN0YXRlKSghMSksW2QsY109KDAseXQudXNlU3RhdGUpKG51bGwpLFtoLHZdPSgwLHl0LnVzZVN0YXRlKSghMSksW20sd109KDAseXQudXNlU3RhdGUpKCExKSxbYixnXT0oMCx5dC51c2VTdGF0ZSkobnVsbCksZj10Pj0yO2lmKGImJlNuKXJldHVybiByKFgse3RpdGxlOlooInBsYW5uaW5nIiksaWNvbjoiXHV7MUY0Q0J9Iix3aWRnZXRJZDoicGxhbm5pbmcifSxyKGRkLHthcHA6ZSxub3RlVVVJRDpiLG9uQmFjazooKT0+ZyhudWxsKX0pKTtpZighbj8uY3VycmVudHx8IW4/Lm5leHQpcmV0dXJuIHIoWCx7dGl0bGU6WigicGxhbm5pbmciKSxpY29uOiJcdXsxRjRDQn0iLHdpZGdldElkOiJwbGFubmluZyJ9LHIoInAiLHtjbGFzc05hbWU6InBsYW5uaW5nLWVtcHR5In0sIkxvYWRpbmcgcXVhcnRlcmx5IHBsYW5zXHUyMDI2IikpO2xldCB5PUptKG4uY3VycmVudCxuLm5leHQpLHA9e2FjdGl2ZVRhYjpvLHNldEFjdGl2ZVRhYjphLHNldE1vbnRoTG9hZGluZzp1LHNldE1vbnRoQ29udGVudDpzfSxFPXtzZXRNb250aExvYWRpbmc6dSxzZXRNb250aENvbnRlbnQ6c30sUz1DPT57Qz8uZGV2RWRpdCYmQy5ub3RlVVVJRCYmZyhDLm5vdGVVVUlEKX0seD1DcygpLE49X3MoeCk7cmV0dXJuKDAseXQudXNlRWZmZWN0KSgoKT0+e2lmKG0pcmV0dXJuO2xldCBDPXkuZmluZChrPT5rLmN1cnJlbnQpO0MmJih3KCEwKSx5dihlLEMscCkpfSxbbV0pLCgwLHl0LnVzZUVmZmVjdCkoKCk9PntpZighZilyZXR1cm47bGV0IEM9bi5jdXJyZW50Py5ub3RlVVVJRDtDJiYodighMCksY2QoZSxDLE4pLnRoZW4oaz0+e08oYFtQbGFubmluZ10gV2Vla2x5IHNlY3Rpb24gIiR7Tn0iOmAsayksYyhrKX0pLmNhdGNoKCgpPT5jKHtmb3VuZDohMSxjb250ZW50Om51bGx9KSkuZmluYWxseSgoKT0+dighMSkpKX0sW2Ysbi5jdXJyZW50Py5ub3RlVVVJRCxOXSkscihYLHt0aXRsZTpaKCJwbGFubmluZyIpLGljb246Ilx1ezFGNENCfSIsd2lkZ2V0SWQ6InBsYW5uaW5nIn0scigiZGl2Iix7Y2xhc3NOYW1lOiJwbGFubmluZy1xdWFydGVycyJ9LFtuLmN1cnJlbnQsbi5uZXh0XS5tYXAoQz0+YWsocixDLGFzeW5jKCk9PntsZXQgaz1hd2FpdCBuayhlLEMpO1Moayl9KSkpLHIoImRpdiIse2NsYXNzTmFtZToibW9udGgtdGFicyJ9LHkubWFwKEM9PnIoImJ1dHRvbiIse2tleTpDLmluZGV4LGNsYXNzTmFtZToibW9udGgtdGFiIisoQy5pbmRleD09PW8/IiBhY3RpdmUiOiIiKSxvbkNsaWNrOigpPT55dihlLEMscCl9LEMuc2hvcnQpKSksbyE9PW51bGw/cigiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWFyZWEifSxpayhyLGwsaSxhc3luYygpPT57bGV0IEM9YXdhaXQgcmsoZSxpLEUpO1MoQyl9KSk6bnVsbCxmP3NrKHIsTixuLmN1cnJlbnQueWVhcixoLGQsYXN5bmMoKT0+e2xldCBDPWF3YWl0IG9rKGUsbi5jdXJyZW50LE4sdixjKTtTKEMpfSk6bnVsbCl9dmFyIF9uPWxlKGllKCkpO3ZhciBsaz0vXFsoW15cXV0rKVxdXFtcXj8oXGQrKVxdL2csd3Y9L1xzKlxbXF4/KFxkKylcXVsuOl1ccyovLHVrPS9eIVxbKFteXF1dKilcXVwoKFteKV0rKVwpLyxjaz0vXlxbKFteXF1dKilcXVwoKFteKV0qKVwpLyxkaz0vXC4obXA0fHdlYm18b2dnKShcP3wkKS9pLGJ2PS8oPzp5b3V0dWJlXC5jb21cL3dhdGNoXD92PXx5b3V0dVwuYmVcLykoW2EtekEtWjAtOV8tXSspLyxrdj0vdmltZW9cLmNvbVwvKFxkKykvO2Z1bmN0aW9uIHBrKGUpe3JldHVybiBkay50ZXN0KGUpfHxidi50ZXN0KGUpfHxrdi50ZXN0KGUpfWZ1bmN0aW9uIEJhKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpLnJlcGxhY2UoLycvZywiJiMzOTsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiBDZChlKXtyZXR1cm4gZS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBmayhlLHQpe2xldCBuPWUubWF0Y2godWspO2lmKG4pe2xldCBvPW5bMl07cGsobyk/dC52aWRlb3MucHVzaCh7YWx0Om5bMV0sdXJsOm99KTp0LmltYWdlcy5wdXNoKHthbHQ6blsxXSx1cmw6b30pO3JldHVybn1sZXQgcj1lLm1hdGNoKGNrKTtpZihyKXshdC5kZXNjcmlwdGlvbiYmIXQudXJsPyh0LmRlc2NyaXB0aW9uPXJbMV18fCIiLHQudXJsPXJbMl18fCIiKTp0LnRleHQucHVzaChlKTtyZXR1cm59ZSYmdC50ZXh0LnB1c2goZSl9ZnVuY3Rpb24gaGsoZSl7bGV0IHQ9ZS5tYXRjaCh3dik7aWYoIXQpcmV0dXJue2Zvb3Rub3Rlczp7fSxjbGVhbmVkTWFya2Rvd246ZX07bGV0IG49ZS5zdWJzdHJpbmcoMCx0LmluZGV4KS50cmltRW5kKCkscj1lLnN1YnN0cmluZyh0LmluZGV4KSxvPXt9LGE9bmV3IFJlZ0V4cCh3di5zb3VyY2UsImciKSxpPW51bGwscz0wLGw7Zm9yKDsobD1hLmV4ZWMocikpIT09bnVsbDspaSE9PW51bGwmJihvW2ldPXh2KHIuc3Vic3RyaW5nKHMsbC5pbmRleCkpKSxpPWxbMV0scz1sLmluZGV4K2xbMF0ubGVuZ3RoO3JldHVybiBpIT09bnVsbCYmKG9baV09eHYoci5zdWJzdHJpbmcocykpKSx7Zm9vdG5vdGVzOm8sY2xlYW5lZE1hcmtkb3duOm59fWZ1bmN0aW9uIHh2KGUpe2xldCB0PXtkZXNjcmlwdGlvbjoiIix1cmw6IiIsaW1hZ2VzOltdLHZpZGVvczpbXSx0ZXh0OltdfTtmb3IobGV0IG4gb2YgZS5zcGxpdChgCmApKXtsZXQgcj1uLnRyaW0oKTtyJiZmayhyLHQpfXJldHVybiB0fWZ1bmN0aW9uIG1rKGUpe2xldCB0PVtdO3JldHVybiBlLmltYWdlcy5sZW5ndGgmJnQucHVzaCh7Y2xzOiJpbWFnZSIsdGl0bGU6IkNvbnRhaW5zIGltYWdlIixzeW1ib2w6Ilx1ezFGNUJDfSJ9KSxlLnZpZGVvcy5sZW5ndGgmJnQucHVzaCh7Y2xzOiJ2aWRlbyIsdGl0bGU6IkNvbnRhaW5zIHZpZGVvIixzeW1ib2w6Ilx1ezFGM0FDfSJ9KSwhZS5pbWFnZXMubGVuZ3RoJiYhZS52aWRlb3MubGVuZ3RoJiYoZS51cmw/dC5wdXNoKHtjbHM6InVybCIsdGl0bGU6IkNvbnRhaW5zIGxpbmsiLHN5bWJvbDoiXHV7MUY1MTd9In0pOihlLmRlc2NyaXB0aW9ufHxlLnRleHQubGVuZ3RoKSYmdC5wdXNoKHtjbHM6InRleHQiLHRpdGxlOiJDb250YWlucyBkZXRhaWxzIixzeW1ib2w6Ilx1ezFGNEREfSJ9KSksdH1mdW5jdGlvbiBnayhlKXtsZXQgdD1bJzxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAiPiddO2UudXJsJiZ0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtdXJsIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2Ii8+PHBvbHlsaW5lIHBvaW50cz0iMTUgMyAyMSAzIDIxIDkiLz48bGluZSB4MT0iMTAiIHkxPSIxNCIgeDI9IjIxIiB5Mj0iMyIvPjwvc3ZnPjxhIGhyZWY9IiR7QmEoZS51cmwpfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+JHtDZChlLnVybCl9PC9hPjwvZGl2PmApLGUuZGVzY3JpcHRpb24mJnQucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC10ZXh0Ij4ke0NkKGUuZGVzY3JpcHRpb24pfTwvZGl2PmApO2ZvcihsZXQgbiBvZiBlLnRleHQpdC5wdXNoKGA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLXRleHQiPiR7Q2Qobil9PC9kaXY+YCk7Zm9yKGxldCBuIG9mIGUuaW1hZ2VzKXQucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC1tZWRpYSI+PGltZyBzcmM9IiR7QmEobi51cmwpfSIgYWx0PSIke0JhKG4uYWx0KX0iIGxvYWRpbmc9ImxhenkiLz48L2Rpdj5gKTtmb3IobGV0IG4gb2YgZS52aWRlb3Mpe2xldCByPW4udXJsLm1hdGNoKGJ2KSxvPW4udXJsLm1hdGNoKGt2KTtyP3QucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC1tZWRpYSI+PGlmcmFtZSBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7clsxXX0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+PC9kaXY+YCk6bz90LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjxpZnJhbWUgc3JjPSJodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJHtvWzFdfSIgZnJhbWVib3JkZXI9IjAiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT48L2Rpdj5gKTp0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjx2aWRlbyBzcmM9IiR7QmEobi51cmwpfSIgY29udHJvbHM+PC92aWRlbz48L2Rpdj5gKX1yZXR1cm4gdC5wdXNoKCc8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLWFjdGlvbnMiPjxidXR0b24gY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtY2xvc2UiIHR5cGU9ImJ1dHRvbiI+Q0xPU0U8L2J1dHRvbj48L2Rpdj4nKSx0LnB1c2goIjwvZGl2PiIpLHQuam9pbigiIil9ZnVuY3Rpb24gdmsoZSx0KXtsZXQgbj1tayh0KSxyPWVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7dXJsOnQudXJsLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb24sdGV4dDp0LnRleHQsaW1hZ2VzOnQuaW1hZ2VzLHZpZGVvczp0LnZpZGVvc30pKSxvPXQudXJsfHwiIyIsYT1uLm1hcChpPT5gPHNwYW4gY2xhc3M9InJpY2gtZm9vdG5vdGUtaW5kaWNhdG9yIHJpY2gtZm9vdG5vdGUtaW5kaWNhdG9yLS0ke2kuY2xzfSIgdGl0bGU9IiR7aS50aXRsZX0iPiR7aS5zeW1ib2x9PC9zcGFuPmApLmpvaW4oIiIpO3JldHVybmA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXdyYXAiPjxhIGNsYXNzPSJyaWNoLWZvb3Rub3RlLWxpbmsiIGhyZWY9IiR7QmEobyl9IiBkYXRhLXJpY2gtZm9vdG5vdGU9IiR7cn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPiR7ZX08L2E+YCthKyI8L2Rpdj4ifWZ1bmN0aW9uIGphKGUpe2lmKCFlKXJldHVybiIiO2xldHtmb290bm90ZXM6dCxjbGVhbmVkTWFya2Rvd246bn09aGsoZSk7aWYoT2JqZWN0LmtleXModCkubGVuZ3RoPT09MClyZXR1cm4gU28oZSk7bGV0IHI9W10sbz1uLnJlcGxhY2UobGssKGkscyxsKT0+e2lmKCF0W2xdKXJldHVybiBpO2xldCB1PXIubGVuZ3RoO3JldHVybiByLnB1c2goe3RleHQ6cyxmbklkOmx9KSxgPCEtLUZOUkVGOiR7dX0tLT5gfSksYT1TbyhvKTtyZXR1cm4gYT1hLnJlcGxhY2UoLzwhLS1GTlJFRjooXGQrKS0tPi9nLChpLHMpPT57bGV0e3RleHQ6bCxmbklkOnV9PXJbcGFyc2VJbnQocyldLGQ9dFt1XTtpZighZClyZXR1cm4gbDtsZXQgYz1TbyhsKTtyZXR1cm4gdmsoYyxkKX0pLGF9ZnVuY3Rpb24gWXMoZSl7aWYoIWUpcmV0dXJuO2xldCB0PWUucXVlcnlTZWxlY3RvckFsbCgiLnJpY2gtZm9vdG5vdGUtbGlua1tkYXRhLXJpY2gtZm9vdG5vdGVdIik7Zm9yKGxldCBuIG9mIHQpe2lmKG4uX3RpcHB5UmljaEZvb3Rub3RlKWNvbnRpbnVlO2xldCByO3RyeXtyPUpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KG4uZGF0YXNldC5yaWNoRm9vdG5vdGUpKX1jYXRjaHtjb250aW51ZX1pZighISEoci5kZXNjcmlwdGlvbnx8ci50ZXh0Py5sZW5ndGh8fHIuaW1hZ2VzPy5sZW5ndGh8fHIudmlkZW9zPy5sZW5ndGgpKWNvbnRpbnVlO2xldCBhPWdrKHIpLGk9TGEobix7Y29udGVudDphLGFsbG93SFRNTDohMCxpbnRlcmFjdGl2ZTohMCx0cmlnZ2VyOiJtYW51YWwiLHBsYWNlbWVudDoiYm90dG9tLXN0YXJ0Iix0aGVtZToicmljaC1mb290bm90ZSIsbWF4V2lkdGg6NDIwLGFycm93OiEwLGR1cmF0aW9uOlsxNTAsMTAwXSxhcHBlbmRUbzooKT0+ZG9jdW1lbnQuYm9keSxvblNob3duKCl7bGV0IHM9aS5wb3BwZXIucXVlcnlTZWxlY3RvcigiLnJpY2gtZm9vdG5vdGUtcG9wdXAtY2xvc2UiKTtzJiZzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+aS5oaWRlKCkse29uY2U6ITB9KX19KTtuLl90aXBweVJpY2hGb290bm90ZT1pLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHM9PntpZihpLnN0YXRlLmlzVmlzaWJsZSl7aS5oaWRlKCk7cmV0dXJufXMucHJldmVudERlZmF1bHQoKSxzLnN0b3BQcm9wYWdhdGlvbigpLGkuc2hvdygpfSl9fXZhciBxcz0zO2Z1bmN0aW9uIF9kKHthcHA6ZSxjdXJyZW50RGF0ZTp0LHNlbGVjdGVkRGF0ZTpuLHRhc2tzOnJ9KXtsZXQgbz1fbi5jcmVhdGVFbGVtZW50LFthLGldPSgwLF9uLnVzZVN0YXRlKSgwKSxzPSgwLF9uLnVzZVJlZikobnVsbCksbD15ayh0fHxuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpLHU9T2JqZWN0LmtleXMocnx8e30pLnNvcnQoKSxkPW4mJiF1LmluY2x1ZGVzKG4pP1suLi51LG5dLnNvcnQoKTp1LGM9TWF0aC5tYXgoMSxNYXRoLmNlaWwoZC5sZW5ndGgvcXMpKTsoMCxfbi51c2VFZmZlY3QpKCgpPT57aWYoIW4pcmV0dXJuO2xldCB4PWQuaW5kZXhPZihuKTt4Pj0wJiZpKE1hdGguZmxvb3IoeC9xcykpfSxbbl0pLCgwLF9uLnVzZUVmZmVjdCkoKCk9PntZcyhzLmN1cnJlbnQpfSk7bGV0IGg9TWF0aC5taW4oYSxjLTEpLHY9ZC5zbGljZShoKnFzLChoKzEpKnFzKSxtPXg9PnguaW1wb3J0YW50JiZ4LnVyZ2VudD8icHJpb3JpdHktY3JpdGljYWwiOnguaW1wb3J0YW50PyJwcmlvcml0eS1pbXBvcnRhbnQiOngudXJnZW50PyJwcmlvcml0eS11cmdlbnQiOiJwcmlvcml0eS1ub3JtYWwiLHc9eD0+eD94IGluc3RhbmNlb2YgRGF0ZT94LmdldFRpbWUoKTp0eXBlb2YgeD09Im51bWJlciI/eDwxZTEwP3gqMWUzOng6bnVsbDpudWxsLGI9eD0+e2xldCBOPXcoeCk7cmV0dXJuIE4/bmV3IERhdGUoTikudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQifSk6IiJ9LGc9eD0+eC5ub3RlVVVJRHx8eC5ub3RlVXVpZHx8eC5ub3RlPy51dWlkfHxudWxsLGY9eD0+eC5ub3RlTmFtZXx8eC5ub3RlVGl0bGV8fHgubm90ZT8ubmFtZXx8Ik9wZW4gbm90ZSIseT1hc3luYyB4PT57bGV0IE49Zyh4KTshTnx8IXgudXVpZHx8YXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke059P2hpZ2hsaWdodFRhc2tVVUlEPSR7eC51dWlkfWApfSxwPWFzeW5jKHgsTik9PntOLnN0b3BQcm9wYWdhdGlvbigpO2xldCBDPWcoeCk7QyYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke0N9YCl9LEU9eD0+bmV3IERhdGUoYCR7eH1UMDA6MDA6MDBgKS50b0xvY2FsZURhdGVTdHJpbmcoW10se3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyJ9KSxTPWM+MT9vKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1wYWdpbmF0aW9uIn0sbygiYnV0dG9uIix7Y2xhc3NOYW1lOiJhZ2VuZGEtcGFnZS1hcnJvdyIsb25DbGljazooKT0+aSh4PT5NYXRoLm1heCgwLHgtMSkpLGRpc2FibGVkOmg9PT0wfSwiXHUyNUMwIiksbygic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLXBhZ2UtaW5kaWNhdG9yIn0sYCR7aCsxfSAvICR7Y31gKSxvKCJidXR0b24iLHtjbGFzc05hbWU6ImFnZW5kYS1wYWdlLWFycm93IixvbkNsaWNrOigpPT5pKHg9Pk1hdGgubWluKGMtMSx4KzEpKSxkaXNhYmxlZDpoPj1jLTF9LCJcdTI1QjYiKSk6bnVsbDtyZXR1cm4gbyhYLHt0aXRsZTpaKCJhZ2VuZGEiKSxpY29uOiJcdXsxRjRDQn0iLHdpZGdldElkOiJhZ2VuZGEiLGhlYWRlckFjdGlvbnM6U30sbygiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtbGlzdCIscmVmOnN9LHYubWFwKHg9PntsZXQgTj1yW3hdfHxbXSxDPXg9PT1sO3JldHVybiBvKCJzZWN0aW9uIix7a2V5OngsY2xhc3NOYW1lOiJhZ2VuZGEtZGF5In0sbygiaDQiLHtjbGFzc05hbWU6ImFnZW5kYS1kYXRlLWxhYmVsIn0sRSh4KSksTi5sZW5ndGg9PT0wP28oInAiLHtjbGFzc05hbWU6ImFnZW5kYS1lbXB0eS1kYXkifSxDPyJObyB0YXNrcyBzY2hlZHVsZWQgZm9yIHRvZGF5IjoiTm8gdGFza3Mgc2NoZWR1bGVkIik6Ti5tYXAoaz0+bygiZGl2Iix7a2V5OmsudXVpZCxjbGFzc05hbWU6ImFnZW5kYS1pdGVtIGFnZW5kYS10YXNrLXJvdyIsb25DbGljazpBPT57QS50YXJnZXQuY2xvc2VzdCgiYSIpfHx5KGspfX0sbygiZGl2Iix7Y2xhc3NOYW1lOmBhZ2VuZGEtaW5kaWNhdG9yICR7bShrKX1gfSksbygiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtY29udGVudCJ9LG8oInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS10aW1lIix0aXRsZTpgJHtrLnN0YXJ0QXQ/IlN0YXJ0IjoiRGVhZGxpbmUifSB0aW1lIGZvciB0YXNrYH0sYihrLnN0YXJ0QXR8fGsuZGVhZGxpbmUpKSxvKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtdGV4dCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpqYShrLmNvbnRlbnQpfHwiVW50aXRsZWQgdGFzayJ9fSksZyhrKT9vKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToiYWdlbmRhLW5vdGUtbGluayIsb25DbGljazpBPT5wKGssQSl9LGYoaykpOm51bGwpLHcoay5lbmRBdCkmJncoay5zdGFydEF0KSYmdyhrLmVuZEF0KT53KGsuc3RhcnRBdCk/bygic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLWR1cmF0aW9uIn0sTWF0aC5yb3VuZCgodyhrLmVuZEF0KS13KGsuc3RhcnRBdCkpLzZlNCkrIm0iKTpudWxsKSkpfSkpKX1mdW5jdGlvbiB5ayhlKXtsZXQgdD1uZXcgRGF0ZShlKSxuPXQuZ2V0RnVsbFllYXIoKSxyPVN0cmluZyh0LmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwiMCIpLG89U3RyaW5nKHQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCIwIik7cmV0dXJuYCR7bn0tJHtyfS0ke299YH12YXIgT249bGUoaWUoKSk7dmFyIFN2PWxlKGllKCkpO2Z1bmN0aW9uIEFuKHt0aXRsZTplLG9uU3VibWl0OnQsb25DYW5jZWw6bixzdWJtaXRMYWJlbDpyPSJTdWJtaXQiLGNoaWxkcmVuOm99KXtsZXQgYT1Tdi5jcmVhdGVFbGVtZW50O3JldHVybiBhKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1vdmVybGF5IixvbkNsaWNrOnM9PntzLnRhcmdldD09PXMuY3VycmVudFRhcmdldCYmbigpfX0sYSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtY29udGFpbmVyIn0sZT9hKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1oZWFkZXIifSxhKCJoMyIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLXRpdGxlIn0sZSkpOm51bGwsYSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYm9keSJ9LG8pLGEoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWFjdGlvbnMifSxhKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1idG4gY29uZmlnLXBvcHVwLWJ0bi0tY2FuY2VsIixvbkNsaWNrOm59LCJDYW5jZWwiKSxhKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1idG4gY29uZmlnLXBvcHVwLWJ0bi0tc3VibWl0IixvbkNsaWNrOnR9LHIpKSkpfWZ1bmN0aW9uIEFkKHthcHA6ZSxjb21wbGV0ZWRUYXNrc0J5RGF0ZTp0LGN1cnJlbnREYXRlOm4sZ3JpZEhlaWdodFNpemU6cixncmlkV2lkdGhTaXplOm8sb25EYXRlU2VsZWN0OmEsb3BlblRhc2tzOmksc2VsZWN0ZWREYXRlOnN9KXtsZXQgbD1Pbi5jcmVhdGVFbGVtZW50LHU9bmV3IERhdGUobiksW2QsY109KDAsT24udXNlU3RhdGUpKG5ldyBEYXRlKHUuZ2V0RnVsbFllYXIoKSx1LmdldE1vbnRoKCksMSkpLHY9Zm8oZSwiY2FsZW5kYXIiKVswXT09PSIxIj8iMSI6IjAiLFttLHddPSgwLE9uLnVzZVN0YXRlKSghMSksW2IsZ109KDAsT24udXNlU3RhdGUpKHYpLFtmLHldPSgwLE9uLnVzZVN0YXRlKSh2KSxwPWI9PT0iMSI/MTowOygwLE9uLnVzZUVmZmVjdCkoKCk9PntnKHYpLHkodil9LFt2XSk7bGV0IEU9YXN5bmMoKT0+e2F3YWl0IGUuc2V0U2V0dGluZyhvbigiY2FsZW5kYXIiKSxKU09OLnN0cmluZ2lmeShbZl0pKSxnKGYpLHcoITEpfSxTPSgpPT57eShiKSx3KCExKX0seD1uZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksZC5nZXRNb250aCgpKzEsMCkuZ2V0RGF0ZSgpLE49KG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSxkLmdldE1vbnRoKCksMSkuZ2V0RGF5KCktcCs3KSU3LEM9cD09PTE/WyJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiLCJTdSJdOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxrPXt9LEE9ZC5nZXRGdWxsWWVhcigpLFI9ZC5nZXRNb250aCgpLFQ9YCR7QX0tJHtTdHJpbmcoUisxKS5wYWRTdGFydCgyLCIwIil9LWA7W2ksdF0uZm9yRWFjaChCPT57T2JqZWN0LmtleXMoQnx8e30pLmZvckVhY2goej0+e2lmKHouc3RhcnRzV2l0aChUKSl7bGV0IGFlPXBhcnNlSW50KHouc3Vic3RyaW5nKDgpLDEwKTtrW2FlXT0oa1thZV18fDApKyhCW3pdPy5sZW5ndGh8fDApfX0pfSk7bGV0IFA9KCk9PmMobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLGQuZ2V0TW9udGgoKS0xLDEpKSxVPSgpPT5jKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSxkLmdldE1vbnRoKCkrMSwxKSksRj1kLnRvTG9jYWxlU3RyaW5nKCJkZWZhdWx0Iix7bW9udGg6ImxvbmciLHllYXI6Im51bWVyaWMifSksVz1CPT5CPT09dS5nZXREYXRlKCkmJmQuZ2V0TW9udGgoKT09PXUuZ2V0TW9udGgoKSYmZC5nZXRGdWxsWWVhcigpPT09dS5nZXRGdWxsWWVhcigpLFk9Qj0+e2xldCB6PWQuZ2V0RnVsbFllYXIoKSxhZT1TdHJpbmcoZC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsIjAiKSxwZT1TdHJpbmcoQikucGFkU3RhcnQoMiwiMCIpO3JldHVybmAke3p9LSR7YWV9LSR7cGV9YH0sc2U9Qj0+cyYmWShCKT09PXMsRGU9Qj0+e2lmKGEpe2xldCB6PVkoQik7YSh6PT09cz9udWxsOnopfX0sQ2U9W107Zm9yKGxldCBCPTA7QjxOO0IrKylDZS5wdXNoKGwoImRpdiIse2tleToiZW1wdHktIitCLGNsYXNzTmFtZToiY2FsLWNlbGwgZW1wdHkifSkpO2ZvcihsZXQgQj0xO0I8PXg7QisrKXtsZXQgej1rW0JdfHwwLGFlPXo9PT0wPyJub25lIjp6PD0yPyIjODZlZmFjIjp6PD01PyIjZmJiZjI0IjoiI2Y4NzE3MSIscGU9ImNhbC1jZWxsIjtXKEIpJiYocGUrPSIgdG9kYXkiKSxzZShCKSYmKHBlKz0iIHNlbGVjdGVkIiksQ2UucHVzaChsKCJkaXYiLHtrZXk6QixjbGFzc05hbWU6cGUsb25DbGljazooKT0+RGUoQil9LGwoInNwYW4iLHtjbGFzc05hbWU6ImNhbC1kYXkifSxCKSxhZSE9PSJub25lIj9sKCJzcGFuIix7Y2xhc3NOYW1lOiJjYWwtZG90IixzdHlsZTp7YmFja2dyb3VuZENvbG9yOmFlfX0pOm51bGwpKX1yZXR1cm4gbChYLHtjb25maWd1cmFibGU6ITAsZ3JpZEhlaWdodFNpemU6cixncmlkV2lkdGhTaXplOm8saWNvbjoiXHV7MUY0QzV9Iix0aXRsZTpaKCJjYWxlbmRhciIpLHdpZGdldElkOiJjYWxlbmRhciIsb25Db25maWd1cmU6KCk9PncoITApfSxtP2woQW4se3RpdGxlOiJDb25maWd1cmUgQ2FsZW5kYXIiLG9uU3VibWl0OkUsb25DYW5jZWw6U30sbCgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQifSxsKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCJ9LCJXZWVrIHN0YXJ0cyBvbiIpLFtbIjAiLCJTdW5kYXkiXSxbIjEiLCJNb25kYXkiXV0ubWFwKChbQix6XSk9PmwoImxhYmVsIix7a2V5OkJ9LGwoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6ImNhbC13ZWVrLXN0YXJ0Iix2YWx1ZTpCLGNoZWNrZWQ6Zj09PUIsb25DaGFuZ2U6KCk9PnkoQil9KSx6KSkpKTpudWxsLGwoImRpdiIse2NsYXNzTmFtZToiY2FsLW5hdiJ9LGwoImJ1dHRvbiIse29uQ2xpY2s6UCxjbGFzc05hbWU6ImNhbC1hcnJvdyJ9LCJcdTI1QzAiKSxsKCJzcGFuIix7Y2xhc3NOYW1lOiJjYWwtbW9udGgifSxGKSxsKCJidXR0b24iLHtvbkNsaWNrOlUsY2xhc3NOYW1lOiJjYWwtYXJyb3cifSwiXHUyNUI2IikpLGwoImRpdiIse2NsYXNzTmFtZToiY2FsLWdyaWQifSxDLm1hcChCPT5sKCJkaXYiLHtrZXk6QixjbGFzc05hbWU6ImNhbC1oZWFkZXIifSxCKSksLi4uQ2UpKX12YXIgd3Q9bGUoaWUoKSk7ZnVuY3Rpb24gVHYoZSl7cmV0dXJuIGFuLmZpbmQodD0+dC53aWRnZXRJZD09PWUpfWZ1bmN0aW9uIHdrKGUpe2xldCB0PWFuLm1hcChhPT5hLndpZGdldElkKSxyPShBcnJheS5pc0FycmF5KGUpP2U6W10pLm1hcChhPT5hLndpZGdldElkKS5maWx0ZXIoYT0+dC5pbmNsdWRlcyhhKSksbz10LmZpbHRlcihhPT4hci5pbmNsdWRlcyhhKSk7cmV0dXJue3JlbmRlcmVkSWRzOnIsaGlkZGVuSWRzOm99fWZ1bmN0aW9uIEV2KGUpe2xldCB0PXt9O3JldHVybiBhbi5mb3JFYWNoKHI9Pnt0W3Iud2lkZ2V0SWRdPXtncmlkV2lkdGhTaXplOnIuZGVmYXVsdEdyaWRXaWR0aFNpemV8fDEsZ3JpZEhlaWdodFNpemU6MX19KSwoQXJyYXkuaXNBcnJheShlKT9lOltdKS5mb3JFYWNoKHI9Pnt0W3Iud2lkZ2V0SWRdJiYodFtyLndpZGdldElkXT17Z3JpZFdpZHRoU2l6ZTpyLmdyaWRXaWR0aFNpemV8fHRbci53aWRnZXRJZF0uZ3JpZFdpZHRoU2l6ZSxncmlkSGVpZ2h0U2l6ZTpyLmdyaWRIZWlnaHRTaXplfHwxfSl9KSx0fWZ1bmN0aW9uIHhrKGUsdCxuLHIpe2xldCBvPVsuLi5lLC4uLnRdLGE9by5pbmRleE9mKG4pO2lmKHI9PT0idXAiJiZhPT09MHx8cj09PSJkb3duIiYmYT09PW8ubGVuZ3RoLTEpcmV0dXJuIG51bGw7bGV0IGk9Wy4uLm9dLHM9cj09PSJ1cCI/YS0xOmErMTtyZXR1cm5baVthXSxpW3NdXT1baVtzXSxpW2FdXSx7cmVuZGVyZWRJZHM6aS5zbGljZSgwLGUubGVuZ3RoKSxoaWRkZW5JZHM6aS5zbGljZShlLmxlbmd0aCl9fWZ1bmN0aW9uIGJrKGUsdCxuLHIpe2xldCBvPWUuZmlsdGVyKGk9PmkhPT1uKSxhPXQuZmlsdGVyKGk9PmkhPT1uKTtyZXR1cm4gZS5pbmNsdWRlcyhyKT9vLnNwbGljZShvLmluZGV4T2YociksMCxuKTphLnNwbGljZShhLmluZGV4T2YociksMCxuKSx7cmVuZGVyZWRJZHM6byxoaWRkZW5JZHM6YX19ZnVuY3Rpb24ga2soZSx0LG4scil7bGV0IG89ZS5maWx0ZXIoaT0+aSE9PW4pLGE9dC5maWx0ZXIoaT0+aSE9PW4pO3JldHVybihyPT09InJlbmRlcmVkIj9vOmEpLnB1c2gobikse3JlbmRlcmVkSWRzOm8saGlkZGVuSWRzOmF9fWZ1bmN0aW9uIFNrKGUsdCxuKXtsZXQgcj1Udih0KTtpZighcilyZXR1cm4gbnVsbDtsZXQgbz1bLi4ubi5yZW5kZXJlZElkcywuLi5uLmhpZGRlbklkc10sYT1vLmluZGV4T2YodCk7cmV0dXJuIGUoImRpdiIse2tleTp0LGNsYXNzTmFtZTpbImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbSIsbi5kcmFnZ2luZ0lkPT09dD8iZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLS1kcmFnZ2luZyI6IiIsbi5kcmFnT3ZlcklkPT09dD8iZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLS1kcmFnLW92ZXIiOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLGRyYWdnYWJsZTohMCxvbkRyYWdTdGFydDppPT5uLm9uRHJhZ1N0YXJ0KGksdCksb25EcmFnRW5kOm4ub25EcmFnRW5kLG9uRHJhZ092ZXI6aT0+bi5vbkRyYWdPdmVySXRlbShpLHQpLG9uRHJvcDppPT5uLm9uRHJvcE9uSXRlbShpLHQpfSxlKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0taGFuZGxlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sIlx1MjgzRiIpLGUoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1pY29uIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sci5pY29uKSxlKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1pbmZvIn0sZSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLW5hbWUifSxyLm5hbWUpLHIuZGVzY3JpcHRpb24mJmUoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1kZXNjcmlwdGlvbiJ9LHIuZGVzY3JpcHRpb24pKSxlKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1hY3Rpb25zIn0sZSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWFycm93LWJ1dHRvbiIsdHlwZToiYnV0dG9uIixkaXNhYmxlZDphPT09MCx0aXRsZToiTW92ZSB1cCIsImFyaWEtbGFiZWwiOmBNb3ZlICR7ci5uYW1lfSB1cGAsb25DbGljazppPT57aS5zdG9wUHJvcGFnYXRpb24oKSxuLm9uTW92ZSh0LCJ1cCIpfX0sIlx1MjE5MSIpLGUoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1hcnJvdy1idXR0b24iLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6YT09PW8ubGVuZ3RoLTEsdGl0bGU6Ik1vdmUgZG93biIsImFyaWEtbGFiZWwiOmBNb3ZlICR7ci5uYW1lfSBkb3duYCxvbkNsaWNrOmk9PntpLnN0b3BQcm9wYWdhdGlvbigpLG4ub25Nb3ZlKHQsImRvd24iKX19LCJcdTIxOTMiKSkpfWZ1bmN0aW9uIE52KGUsdCxuLHIsbyxhKXtyZXR1cm4gZSgiZGl2Iix7Y2xhc3NOYW1lOlsiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uIixhLmRyYWdPdmVyU2VjdGlvbj09PXQ/ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2VjdGlvbi0tZHJhZy1vdmVyIjoiIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKSxvbkRyYWdPdmVyOmk9PmEub25EcmFnT3ZlclNlY3Rpb24oaSx0KSxvbkRyYWdMZWF2ZTphLm9uRHJhZ0xlYXZlU2VjdGlvbixvbkRyb3A6aT0+YS5vbkRyb3BPblNlY3Rpb24oaSx0KX0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNlY3Rpb24taGVhZGVyIn0sZSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uLWljb24iLCJhcmlhLWhpZGRlbiI6InRydWUifSxyKSxlKCJoNCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uLXRpdGxlIn0sbikpLG8ubGVuZ3RoPT09MD9lKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtZW1wdHkifSx0PT09InJlbmRlcmVkIj8iRHJhZyBjb21wb25lbnRzIGhlcmUgdG8gc2hvdyB0aGVtIG9uIHRoZSBkYXNoYm9hcmQiOiJBbGwgY29tcG9uZW50cyBhcmUgY3VycmVudGx5IHNob3duIik6ZSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWxpc3QifSwuLi5vLm1hcChpPT5TayhlLGksYSkpKSl9ZnVuY3Rpb24gRWsoZSx0LG4scil7bGV0IG89VHYodCk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9blt0XT8uZ3JpZFdpZHRoU2l6ZT8/by5kZWZhdWx0R3JpZFdpZHRoU2l6ZT8/MSxpPW5bdF0/LmdyaWRIZWlnaHRTaXplPz8xLHM9by5tYXhIb3Jpem9udGFsVGlsZXN8fDQsbD1vLm1heFZlcnRpY2FsVGlsZXN8fDI7cmV0dXJuIGUoImRpdiIse2tleTp0LGNsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctaXRlbSJ9LGUoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctaXRlbS1oZWFkZXIifSxlKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0taWNvbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LG8uaWNvbiksZSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLW5hbWUifSxvLm5hbWUpKSxlKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWl0ZW0tY29udHJvbHMifSxlKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWZpZWxkIn0sZSgibGFiZWwiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWxhYmVsIn0sIldpZHRoIiksZSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNpemluZy1zZWxlY3QiLHZhbHVlOmEsb25DaGFuZ2U6dT0+cih0LCJncmlkV2lkdGhTaXplIixOdW1iZXIodS50YXJnZXQudmFsdWUpKX0sLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOnN9LCh1LGQpPT5lKCJvcHRpb24iLHtrZXk6ZCsxLHZhbHVlOmQrMX0sYCR7ZCsxfWApKSkpLGUoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctZmllbGQifSxlKCJsYWJlbCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctbGFiZWwifSwiVmVydGljYWwgdGlsZXMiKSxlKCJzZWxlY3QiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLXNlbGVjdCIsdmFsdWU6aSxvbkNoYW5nZTp1PT5yKHQsImdyaWRIZWlnaHRTaXplIixOdW1iZXIodS50YXJnZXQudmFsdWUpKX0sLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOmx9LCh1LGQpPT5lKCJvcHRpb24iLHtrZXk6ZCsxLHZhbHVlOmQrMX0sYCR7ZCsxfWApKSkpKSl9ZnVuY3Rpb24gTmsoZSl7bGV0e3JlbmRlcmVkSWRzOnQsaGlkZGVuSWRzOm59PXdrKGUpLFtyLG9dPSgwLHd0LnVzZVN0YXRlKSh0KSxbYSxpXT0oMCx3dC51c2VTdGF0ZSkobiksW3MsbF09KDAsd3QudXNlU3RhdGUpKCgpPT5FdihlKSksW3UsZF09KDAsd3QudXNlU3RhdGUpKG51bGwpLFtjLGhdPSgwLHd0LnVzZVN0YXRlKShudWxsKSxbdixtXT0oMCx3dC51c2VTdGF0ZSkobnVsbCksdz0oMCx3dC51c2VSZWYpKG51bGwpLFtiLGddPSgwLHd0LnVzZVN0YXRlKSghMSksZj0oKT0+e3cuY3VycmVudD1udWxsLGQobnVsbCksaChudWxsKSxtKG51bGwpfTtyZXR1cm57cmVuZGVyZWRJZHM6cixoaWRkZW5JZHM6YSxzaXppbmc6cyxkcmFnZ2luZ0lkOnUsZHJhZ092ZXJJZDpjLGRyYWdPdmVyU2VjdGlvbjp2LGhhc1Jlc2V0OmIsb25Nb3ZlOihULFApPT57bGV0IFU9eGsocixhLFQsUCk7VSYmKG8oVS5yZW5kZXJlZElkcyksaShVLmhpZGRlbklkcykpfSxvbkRyYWdTdGFydDooVCxQKT0+e3cuY3VycmVudD1QLFQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+ZChQKSl9LG9uRHJhZ0VuZDooKT0+ZigpLG9uRHJhZ092ZXJJdGVtOihULFApPT57VC5wcmV2ZW50RGVmYXVsdCgpLFQuc3RvcFByb3BhZ2F0aW9uKCksVC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIsaChQKSxtKG51bGwpfSxvbkRyYWdPdmVyU2VjdGlvbjooVCxQKT0+e1QucHJldmVudERlZmF1bHQoKSxULmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJtb3ZlIixtKFApLGgobnVsbCl9LG9uRHJhZ0xlYXZlU2VjdGlvbjpUPT57VC5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKFQucmVsYXRlZFRhcmdldCl8fG0obnVsbCl9LG9uRHJvcE9uSXRlbTooVCxQKT0+e1QucHJldmVudERlZmF1bHQoKSxULnN0b3BQcm9wYWdhdGlvbigpO2xldCBVPXcuY3VycmVudDtpZihmKCksIVV8fFU9PT1QKXJldHVybjtsZXR7cmVuZGVyZWRJZHM6RixoaWRkZW5JZHM6V309YmsocixhLFUsUCk7byhGKSxpKFcpfSxvbkRyb3BPblNlY3Rpb246KFQsUCk9PntULnByZXZlbnREZWZhdWx0KCk7bGV0IFU9dy5jdXJyZW50O2lmKGYoKSwhVSlyZXR1cm47bGV0e3JlbmRlcmVkSWRzOkYsaGlkZGVuSWRzOld9PWtrKHIsYSxVLFApO28oRiksaShXKX0sb25TaXppbmdDaGFuZ2U6KFQsUCxVKT0+e2woRj0+KHsuLi5GLFtUXTp7Li4uRltUXSxbUF06VX19KSl9LG9uUmVzZXQ6KCk9PntvKGFuLm1hcChUPT5ULndpZGdldElkKSksaShbXSksZyghMCksbChFdihudWxsKSl9fX1mdW5jdGlvbiBPZCh7Y3VycmVudExheW91dDplLG9uU2F2ZTp0LG9uQ2FuY2VsOm59KXtsZXQgcj13dC5jcmVhdGVFbGVtZW50LFtvLGFdPSgwLHd0LnVzZVN0YXRlKSgiY29tcG9uZW50cyIpLGk9TmsoZSkse3JlbmRlcmVkSWRzOnMsaGlkZGVuSWRzOmwsc2l6aW5nOnUsaGFzUmVzZXQ6ZCxvblJlc2V0OmMsb25TaXppbmdDaGFuZ2U6aH09aSx2PW89PT0iY29tcG9uZW50cyI/W052KHIsInJlbmRlcmVkIiwiUmVuZGVyZWQgRGFzaGJvYXJkIEVsZW1lbnRzIiwiXHV7MUY0NDF9IixzLGkpLE52KHIsImhpZGRlbiIsIkhpZGRlbiBEYXNoYm9hcmQgRWxlbWVudHMiLCJcdXsxRjZBQn0iLGwsaSldOltzLmxlbmd0aD09PTA/cigiZGl2Iix7a2V5OiJlbXB0eSIsY2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWVtcHR5In0sIk5vIHJlbmRlcmVkIGNvbXBvbmVudHMuIEFkZCBjb21wb25lbnRzIGluIHRoZSBDb21wb25lbnRzIHRhYi4iKTpyKCJkaXYiLHtrZXk6InNpemluZy1saXN0IixjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nIn0sLi4ucy5tYXAobT0+RWsocixtLHUsaCkpKV07cmV0dXJuIHIoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLW92ZXJsYXkiLG9uQ2xpY2s6bT0+bS50YXJnZXQ9PT1tLmN1cnJlbnRUYXJnZXQmJm4oKX0scigiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtY29udGFpbmVyIGRhc2hib2FyZC1sYXlvdXQtcG9wdXAifSxyKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1oZWFkZXIifSxyKCJoMyIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLXRpdGxlIn0sIlx1MjY5OVx1RkUwRiBEYXNoYm9hcmQgTGF5b3V0IikscigiZGl2Iix7Y2xhc3NOYW1lOiJleHBsYW5hdGlvbi1wYXJhZ3JhcGgifSwiQ3VzdG9taXplIHRoZSBvcmRlciBvZiB5b3VyIHdpZGdldHMgYnkgZHJhZ2dpbmcgb3Igc2l6aW5nIHRoZW0gaW4gdGhpcyBtZW51LiBZb3UgY2FuIGFsc28gcmVvcmRlciB3aWRnZXRzIG91dHNpZGUgdGhpcyBtZW51IGJ5IGNsaWNraW5nIG9uIHRoZWlyIGhlYWRlciBmb3IgMiBzZWNvbmRzIHRvIGVuZ2FnZSBkcmFnIHJlb3JkZXJpbmcuIikscigiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXRhYnMifSxyKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtdGFiIisobz09PSJjb21wb25lbnRzIj8iIGFjdGl2ZSI6IiIpLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+YSgiY29tcG9uZW50cyIpfSwiQ29tcG9uZW50cyIpLHIoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC10YWIiKyhvPT09InNpemluZyI/IiBhY3RpdmUiOiIiKSx0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PmEoInNpemluZyIpfSwiU2l6aW5nIikpKSxyKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1ib2R5IGRhc2hib2FyZC1sYXlvdXQtcG9wdXAtYm9keSJ9LC4uLnYpLHIoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWFjdGlvbnMifSxyKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1saW5rIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6Y30sIlJlc2V0IHRvIGRlZmF1bHRzIikscigiYnV0dG9uIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYnRuIGNvbmZpZy1wb3B1cC1idG4tLWNhbmNlbCIsdHlwZToiYnV0dG9uIixvbkNsaWNrOm59LCJDYW5jZWwiKSxyKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1idG4gY29uZmlnLXBvcHVwLWJ0bi0tc3VibWl0Iix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnQocyx7aXNSZXNldDpkLHNpemluZzp1fSl9LCJTYXZlIExheW91dCIpKSkpfXZhciBFbz1sZShpZSgpKTt2YXIgVGs9NTAqMTAyNCo0O3ZhciBEdj17YW50aHJvcGljOiJodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9zZXR0aW5ncy9rZXlzIixkZWVwc2VlazoiaHR0cHM6Ly9wbGF0Zm9ybS5kZWVwc2Vlay5jb20vYXBpX2tleXMiLGdlbWluaToiaHR0cHM6Ly9haXN0dWRpby5nb29nbGUuY29tL2FwcC9hcGkta2V5cyIsZ3JvazoiaHR0cHM6Ly9jb25zb2xlLnguYWkvdGVhbS9kZWZhdWx0L2FwaS1rZXlzIixvcGVuYWk6Imh0dHBzOi8vcGxhdGZvcm0ub3BlbmFpLmNvbS9hcGkta2V5cyIscGVycGxleGl0eToiaHR0cHM6Ly93d3cucGVycGxleGl0eS5haS9hY2NvdW50L2FwaS9rZXlzIn0sUXM9e2FudGhyb3BpYzoiY2xhdWRlLXNvbm5ldC00LTUiLGRlZXBzZWVrOiJkZWVwc2Vlay1jaGF0IixnZW1pbmk6ImdlbWluaS0zLXByby1wcmV2aWV3Iixncm9rOiJncm9rLTQtMS1mYXN0IixvcGVuYWk6ImdwdC01LjIiLHBlcnBsZXhpdHk6InNvbmFyLXBybyJ9O3ZhciBSZD17YW50aHJvcGljOiJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIixkZWVwc2VlazoiaHR0cHM6Ly9hcGkuZGVlcHNlZWsuY29tL3YxL2NoYXQvY29tcGxldGlvbnMiLGdlbWluaToiaHR0cHM6Ly9nZW5lcmF0aXZlbGFuZ3VhZ2UuZ29vZ2xlYXBpcy5jb20vdjFiZXRhL21vZGVscy97bW9kZWwtbmFtZX06Z2VuZXJhdGVDb250ZW50Iixncm9rOiJodHRwczovL2FwaS54LmFpL3YxL2NoYXQvY29tcGxldGlvbnMiLG9wZW5haToiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jaGF0L2NvbXBsZXRpb25zIixwZXJwbGV4aXR5OiJodHRwczovL2FwaS5wZXJwbGV4aXR5LmFpL2NoYXQvY29tcGxldGlvbnMifSxUXz1PYmplY3Qua2V5cyhSZCksQ3Y9eyJjbGF1ZGUtc29ubmV0LTQtNSI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTUtMjAyNTA5MjkiOjIwMCoxMDI0KjQsImNsYXVkZS1oYWlrdS00LTUiOjIwMCoxMDI0KjQsImNsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtNSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC01LTIwMjUxMTAxIjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTEiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtMS0yMDI1MDgwNSI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTAiOjIwMCoxMDI0KjQsImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNy1zb25uZXQtbGF0ZXN0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy03LXNvbm5ldC0yMDI1MDIxOSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC0wIjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTIwMjUwNTE0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy01LWhhaWt1LWxhdGVzdCI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMiI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNS1zb25uZXQtbGF0ZXN0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNyI6MjAwKjEwMjQqNH0sX3Y9eyJkZWVwc2Vlay1jaGF0Ijo2NCoxMDI0KjQsImRlZXBzZWVrLXJlYXNvbmVyIjo2NCoxMDI0KjQsImRlZXBzZWVrLXIxIjo2NCoxMDI0KjQsImRlZXBzZWVrLXIxLTA1MjgiOjY0KjEwMjQqNH0sQXY9eyJnZW1pbmktMy1mbGFzaCI6NjQqMTAyNCo0LCJnZW1pbmktMy1mbGFzaC1wcmV2aWV3Ijo2NCoxMDI0KjQsImdlbWluaS0zLXBybyI6MTAyNCoxMDI0KjQsImdlbWluaS0zLXByby1wcmV2aWV3IjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTMtcHJvLWltYWdlLXByZXZpZXciOjY0KjEwMjQqNCwiZ2VtaW5pLTIuNS1wcm8iOjEwMjQqMTAyNCo0LCJnZW1pbmktMi41LWZsYXNoIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuNS1mbGFzaC1saXRlIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuNS1mbGFzaC1saXRlLXByZXZpZXctMDYtMTciOjEwMjQqMTAyNCo0LCJnZW1pbmktMi4wLWZsYXNoIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuMC1mbGFzaC1saXRlIjoxMDI0KjEwMjQqNH0sT3Y9eyJncm9rLTQtMS1mYXN0IjoyMDQ4KjEwMjQqNCwiZ3Jvay00LWZhc3QiOjIwNDgqMTAyNCo0LCJncm9rLTQiOjI1NioxMDI0KjQsImdyb2stNC0wNzA5IjoyNTYqMTAyNCo0LCJncm9rLTMiOjEyOCoxMDI0KjQsImdyb2stMy1iZXRhIjoxMjgqMTAyNCo0LCJncm9rLTMtbWluaSI6MTI4KjEwMjQqNCwiZ3Jvay0zLW1pbmktYmV0YSI6MTI4KjEwMjQqNCwiZ3Jvay0yLXZpc2lvbi0xMjEyIjo4KjEwMjQqNCwiZ3Jvay0yLWltYWdlLTEyMTIiOjEyOCoxMDI0KjQsImdyb2stMi0xMjEyIjoxMjgqMTAyNCo0fSxSdj17ImdwdC01LjIiOjQwMCoxMDI0KjQsImdwdC01LjEiOjQwMCoxMDI0KjQsImdwdC01LjEtY29kZXgtbWF4Ijo0MDAqMTAyNCo0LCJncHQtNSI6NDAwKjEwMjQqNCwiZ3B0LTUtZmFzdCI6NDAwKjEwMjQqNCwiZ3B0LTUtdGhpbmtpbmciOjQwMCoxMDI0KjQsImdwdC00LjEiOjFlMyoxMDI0KjQsImdwdC00LjEtbWluaSI6MTI4KjEwMjQqNCwiZ3B0LTRvIjoxMjgqMTAyNCo0LCJncHQtNG8tbWluaSI6MTI4KjEwMjQqNCxvMzoyMDAqMTAyNCo0LCJvMy1taW5pIjoyMDAqMTAyNCo0LCJvMy1wcm8iOjIwMCoxMDI0KjQsIm80LW1pbmkiOjIwMCoxMDI0KjQsImdwdC00Ijo4KjEwMjQqNCwiZ3B0LTQtMTEwNi1wcmV2aWV3IjoxMjgqMTAyNCo0LCJncHQtNC0zMmsiOjMyKjEwMjQqNCwiZ3B0LTQtMzJrLTA2MTMiOjMyKjEwMjQqNCwiZ3B0LTQtdmlzaW9uLXByZXZpZXciOjEyOCoxMDI0KjR9LERfPXsic29uYXItcHJvIjoyMDAqMTAyNCo0LHNvbmFyOjEyOCoxMDI0KjQsInNvbmFyLXJlYXNvbmluZy1wcm8iOjEyOCoxMDI0KjQsInNvbmFyLXJlYXNvbmluZyI6MTI4KjEwMjQqNCwic29uYXItZGVlcC1yZXNlYXJjaCI6MTI4KjEwMjQqNH0sRGs9ey4uLkN2LC4uLl92LC4uLkF2LC4uLk92LC4uLlJ2fSxJZD17YW50aHJvcGljOk9iamVjdC5rZXlzKEN2KSxkZWVwc2VlazpPYmplY3Qua2V5cyhfdiksZ2VtaW5pOk9iamVjdC5rZXlzKEF2KSxncm9rOk9iamVjdC5rZXlzKE92KSxvcGVuYWk6T2JqZWN0LmtleXMoUnYpfTt2YXIgZHQ9bGUoaWUoKSk7ZnVuY3Rpb24gQ2soZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57bGV0IHI9bmV3IEZpbGVSZWFkZXI7ci5vbmxvYWQ9bz0+dChvLnRhcmdldC5yZXN1bHQpLHIub25lcnJvcj1vPT57ci5hYm9ydCgpLG4oby50YXJnZXQuZXJyb3IpfSxyLnJlYWRBc0RhdGFVUkwoZSl9KX1mdW5jdGlvbiBNZCh7YXBwOmUsaW5pdGlhbEltYWdlVXJsOnQ9IiIsaW5pdGlhbE1vZGU6bj0iY292ZXIifT17fSl7bGV0W3Isb109KDAsZHQudXNlU3RhdGUpKHQpLFthLGldPSgwLGR0LnVzZVN0YXRlKShuKSxbcyxsXT0oMCxkdC51c2VTdGF0ZSkoITEpLFt1LGRdPSgwLGR0LnVzZVN0YXRlKSghMSksYz0oMCxkdC51c2VSZWYpKG51bGwpLGg9KDAsZHQudXNlQ2FsbGJhY2spKGFzeW5jIGY9PntpZighZnx8IWYudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSl7TygiW2JnLXVwbG9hZF0gcmVqZWN0ZWQgZmlsZSAobm90IGFuIGltYWdlIG9yIG1pc3NpbmcpOiIsZj8udHlwZSk7cmV0dXJufU8oIltiZy11cGxvYWRdIHN0YXJ0aW5nIHVwbG9hZCBmb3I6IixmLm5hbWUsZi50eXBlLGYuc2l6ZSwiYnl0ZXMiKSxsKCEwKTt0cnl7bGV0IHk9YXdhaXQgQ2soZik7TygiW2JnLXVwbG9hZF0gZmlsZSBjb252ZXJ0ZWQgdG8gZGF0YSBVUkwsIGxlbmd0aDoiLHkubGVuZ3RoKTtsZXQgcD1lLmNvbnRleHQ/LnBsdWdpblVVSUR8fCJkZXYtZGFzaGJvYXJkLXBsdWdpbi11dWlkIixFPWF3YWl0IGUuYXR0YWNoTm90ZU1lZGlhKHt1dWlkOnB9LHkpO08oIltiZy11cGxvYWRdIHVwbG9hZEJhY2tncm91bmRJbWFnZSByZXR1cm5lZCBVUkw6IixFKSxFP28oRSk6TygiW2JnLXVwbG9hZF0gdXBsb2FkQmFja2dyb3VuZEltYWdlIHJldHVybmVkIGZhbHN5IFVSTCBcdTIwMTQgdXBsb2FkIG1heSBoYXZlIGZhaWxlZCBzaWxlbnRseSIpfWNhdGNoKHkpe08oIltiZy11cGxvYWRdIHVwbG9hZCBGQUlMRUQgd2l0aCBleGNlcHRpb246Iix5KX1maW5hbGx5e2woITEpLE8oIltiZy11cGxvYWRdIHVwbG9hZCBmbG93IGNvbXBsZXRlIil9fSxbXSksdj0oMCxkdC51c2VDYWxsYmFjaykoZj0+e2YucHJldmVudERlZmF1bHQoKSxmLnN0b3BQcm9wYWdhdGlvbigpLGQoITEpO2xldCB5PWYuZGF0YVRyYW5zZmVyPy5maWxlcz8uWzBdO3kmJmgoeSl9LFtoXSksbT0oMCxkdC51c2VDYWxsYmFjaykoZj0+e2YucHJldmVudERlZmF1bHQoKSxmLnN0b3BQcm9wYWdhdGlvbigpLGQoITApfSxbXSksdz0oMCxkdC51c2VDYWxsYmFjaykoZj0+e2YucHJldmVudERlZmF1bHQoKSxmLnN0b3BQcm9wYWdhdGlvbigpLGQoITEpfSxbXSksYj0oMCxkdC51c2VDYWxsYmFjaykoZj0+e2xldCB5PWYudGFyZ2V0LmZpbGVzPy5bMF07eSYmaCh5KX0sW2hdKSxnPSgwLGR0LnVzZUNhbGxiYWNrKSgoKT0+e28oIiIpfSxbXSk7cmV0dXJue2JhY2tncm91bmRJbWFnZVVybDpyLGJhY2tncm91bmRNb2RlOmEsc2V0QmFja2dyb3VuZE1vZGU6aSx1cGxvYWRpbmc6cyxkcmFnT3Zlcjp1LGZpbGVJbnB1dFJlZjpjLGhhbmRsZURyb3A6dixoYW5kbGVEcmFnT3ZlcjptLGhhbmRsZURyYWdMZWF2ZTp3LGhhbmRsZUZpbGVJbnB1dENoYW5nZTpiLGhhbmRsZVJlbW92ZUltYWdlOmd9fXZhciBKcz1be3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSAoZGlzYWJsZSBBSSBmZWF0dXJlcykiLGFwaUtleVByb3ZpZGVyOm51bGx9LHt2YWx1ZToib3BlbmFpIixsYWJlbDoiT3BlbkFJIENoYXRHUFQiLGFwaUtleVByb3ZpZGVyOiJvcGVuYWkifSx7dmFsdWU6ImFudGhyb3BpYyIsbGFiZWw6IkFudGhyb3BpYyBDbGF1ZGUiLGFwaUtleVByb3ZpZGVyOiJhbnRocm9waWMifSx7dmFsdWU6ImFudGhyb3BpYy1zb25uZXQiLGxhYmVsOiJBbnRocm9waWMgU29ubmV0IixhcGlLZXlQcm92aWRlcjoiYW50aHJvcGljIn0se3ZhbHVlOiJnZW1pbmkiLGxhYmVsOiJHb29nbGUgR2VtaW5pIixhcGlLZXlQcm92aWRlcjoiZ2VtaW5pIn0se3ZhbHVlOiJncm9rIixsYWJlbDoiR3JvayIsYXBpS2V5UHJvdmlkZXI6Imdyb2sifV07ZnVuY3Rpb24gUGQoe2FwcDplLGNvbmZpZ1BhcmFtczp0LG9uQ2FuY2VsOm4sb25TYXZlOnJ9KXtsZXQgbz1Fby5jcmVhdGVFbGVtZW50LGE9dD8uW1YuTExNX1BST1ZJREVSXSxpPXQ/LltWLkxMTV9BUElfS0VZXSxzPXQ/LltWLkJBQ0tHUk9VTkRfSU1BR0VfVVJMXSxsPXQ/LltWLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERV0sW3UsZF09KDAsRW8udXNlU3RhdGUpKGF8fCJvcGVuYWkiKSxbYyxoXT0oMCxFby51c2VTdGF0ZSkoaXx8IiIpLFt2LG1dPSgwLEVvLnVzZVN0YXRlKSghMSk7TygiW3NldHRpbmdzLXBvcHVwXSByZW5kZXJpbmcgRGFzaGJvYXJkU2V0dGluZ3NQb3B1cCwgY3VycmVudEJhY2tncm91bmRJbWFnZVVybDoiLHMpO2xldHtiYWNrZ3JvdW5kSW1hZ2VVcmw6dyxiYWNrZ3JvdW5kTW9kZTpiLHNldEJhY2tncm91bmRNb2RlOmcsdXBsb2FkaW5nOmYsZHJhZ092ZXI6eSxmaWxlSW5wdXRSZWY6cCxoYW5kbGVEcm9wOkUsaGFuZGxlRHJhZ092ZXI6UyxoYW5kbGVEcmFnTGVhdmU6eCxoYW5kbGVGaWxlSW5wdXRDaGFuZ2U6TixoYW5kbGVSZW1vdmVJbWFnZTpDfT1NZCh7YXBwOmUsaW5pdGlhbEltYWdlVXJsOnMsaW5pdGlhbE1vZGU6bH0pLGs9SnMuZmluZChUPT5ULnZhbHVlPT09dSl8fEpzWzBdLEE9RHZbay5hcGlLZXlQcm92aWRlcl0sUj1Kcy5maW5kKFQ9PlQudmFsdWU9PT11KT8ubGFiZWw7cmV0dXJuIG8oQW4se3RpdGxlOiJcdTI2OTlcdUZFMEYgRGFzaGJvYXJkIFNldHRpbmdzIixvblN1Ym1pdDooKT0+cih7bGxtUHJvdmlkZXI6dSxhcGlLZXk6YyxiYWNrZ3JvdW5kTW9kZTpiLGJhY2tncm91bmRJbWFnZVVybDp3fSksb25DYW5jZWw6bixzdWJtaXRMYWJlbDoiU2F2ZSBTZXR0aW5ncyJ9LG8oImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWNvbnRhaW5lciJ9LG8oImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24ifSxvKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlciJ9LG8oImg0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi10aXRsZSJ9LCJCYWNrZ3JvdW5kIEltYWdlIiksbygicCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tZGVzYyJ9LCJVcGxvYWQgYW4gaW1hZ2UgdG8gdXNlIGFzIHlvdXIgZGFzaGJvYXJkIGJhY2tncm91bmQuIikpLG8oImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIn0sbygiZGl2Iix7Y2xhc3NOYW1lOmBkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUke3k/IiBkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtLWFjdGl2ZSI6IiJ9JHtmPyIgZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLS11cGxvYWRpbmciOiIifWAsb25Ecm9wOkUsb25EcmFnT3ZlcjpTLG9uRHJhZ0xlYXZlOngsb25DbGljazooKT0+IWYmJnAuY3VycmVudD8uY2xpY2soKX0sbygiaW5wdXQiLHtyZWY6cCx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyoiLGNsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLWlucHV0IixvbkNoYW5nZTpOfSksZj9vKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtdGV4dCJ9LCJVcGxvYWRpbmcuLi4iKTp3P28oImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLXByZXZpZXcifSxvKCJpbWciLHtzcmM6dyxhbHQ6IkJhY2tncm91bmQgcHJldmlldyIsY2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtcHJldmlldy1pbWciLG9uTG9hZDooKT0+TygiW3NldHRpbmdzLXBvcHVwXSBiYWNrZ3JvdW5kIHByZXZpZXcgaW1hZ2UgbG9hZGVkIE9LOiIsdyksb25FcnJvcjpUPT5PKCJbc2V0dGluZ3MtcG9wdXBdIGJhY2tncm91bmQgcHJldmlldyBpbWFnZSBGQUlMRUQgdG8gbG9hZDoiLHcsVC50eXBlKX0pLG8oInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1kcm9wem9uZS10ZXh0In0sIkRyb3AgYSBuZXcgaW1hZ2Ugb3IgY2xpY2sgdG8gcmVwbGFjZSIpKTpvKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtdGV4dCJ9LCJEcmFnICYgZHJvcCBhbiBpbWFnZSBoZXJlLCBvciBjbGljayB0byB1cGxvYWQiKSksdyYmbygiYSIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXJlbW92ZS1pbWFnZSIsaHJlZjoiIyIsb25DbGljazpUPT57VC5wcmV2ZW50RGVmYXVsdCgpLEMoKX19LCJSZW1vdmUgaW1hZ2UiKSksdyYmbygiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQifSxvKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCJ9LCJEaXNwbGF5IE1vZGUiKSxvKCJzZWxlY3QiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWxlY3QiLHZhbHVlOmIsb25DaGFuZ2U6VD0+ZyhULnRhcmdldC52YWx1ZSl9LC4uLlVtLm1hcChUPT5vKCJvcHRpb24iLHtrZXk6VC52YWx1ZSx2YWx1ZTpULnZhbHVlfSxULmxhYmVsKSkpKSxvKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uIn0sbygiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXIifSxvKCJoNCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tdGl0bGUifSwiQUkgUHJvdmlkZXIiKSxvKCJwIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjIn0sIkVuYWJsZSBhbmFseXNpcyBvZiBxdWFydGVybHkgcGxhbiAmIHN1Z2dlc3RlZCB0YXNrcy4iKSkpLG8oImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIn0sbygiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctbGluZSJ9LG8oImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIn0sIkxMTSBQcm92aWRlciIpLG8oInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlbGVjdCIsaWQ6ImxsbS1wcm92aWRlci1zZWxlY3QiLHZhbHVlOnUsb25DaGFuZ2U6VD0+ZChULnRhcmdldC52YWx1ZSl9LC4uLkpzLm1hcChUPT5vKCJvcHRpb24iLHtrZXk6VC52YWx1ZSx2YWx1ZTpULnZhbHVlfSxULmxhYmVsKSkpKSxvKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1saW5lIn0sbygiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwifSwiQVBJIEtleSIpLG8oImEiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWxpbmsiLGhyZWY6QSx0YXJnZXQ6Il9ibGFuayIscmVsOiJub29wZW5lciBub3JlZmVycmVyIn0sIlJldHJpZXZlIHlvdXIgQVBJIGtleSBcdTIxOTIiKSxvKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWlucHV0LXJvdyJ9LG8oImlucHV0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtYXBpLWtleS1pbnB1dCIsdHlwZTp2PyJ0ZXh0IjoicGFzc3dvcmQiLHZhbHVlOmMsb25DaGFuZ2U6VD0+aChULnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlBhc3RlIHlvdXIgQVBJIGtleSBoZXJlIixhdXRvQ29tcGxldGU6Im9mZiIsc3BlbGxDaGVjazohMX0pLG8oImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWFwaS1rZXktdG9nZ2xlIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pm0oVD0+IVQpLHRpdGxlOnY/IkhpZGUgQVBJIGtleSI6IlNob3cgQVBJIGtleSIsImFyaWEtbGFiZWwiOnY/IkhpZGUgQVBJIGtleSI6IlNob3cgQVBJIGtleSJ9LHY/Ilx1ezFGNjQ4fSI6Ilx1ezFGNDQxfVx1RkUwRiIpKSkpKSkpfXZhciBqZT1sZShpZSgpKTtmdW5jdGlvbiBJdihlKXtsZXQgdD1lLnNldHRpbmdzW1YuTExNX1BST1ZJREVSXTtpZighdHx8dD09PSJub25lIilyZXR1cm5bXTtsZXQgbj1JZFt0XTtpZighbnx8bi5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPVFzW3RdO3JldHVybiByP1tyLC4uLm4uZmlsdGVyKG89Pm8hPT1yKV06Wy4uLm5dfWZ1bmN0aW9uIE12KGUsdCl7bGV0IG49Vi5MTE1fQVBJX0tFWTtpZihlLnNldHRpbmdzW25dKXJldHVybiBlLnNldHRpbmdzW25dLnRyaW0oKTtpZihGbSl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbnQgZmluZCBhICR7dH0ga2V5IGluICR7ZS5zZXR0aW5nc31gKTtyZXR1cm4gZS5hbGVydCgiUGxlYXNlIGNvbmZpZ3VyZSB5b3VyIE9wZW5BSSBrZXkgaW4gcGx1Z2luIHNldHRpbmdzLiIpLG51bGx9ZnVuY3Rpb24gUHYoZSx0KXtsZXQgbj1ObyhlKSxyPVJkW25dO3JldHVybiByPXIucmVwbGFjZSgie21vZGVsLW5hbWV9IixlKSxuPT09ImdlbWluaSImJihyPWAke3J9P2tleT0ke3R9YCkscn1mdW5jdGlvbiBObyhlKXtmb3IobGV0W3Qsbl1vZiBPYmplY3QuZW50cmllcyhJZCkpaWYobi5pbmNsdWRlcyhlKSlyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoYE1vZGVsICR7ZX0gbm90IGZvdW5kIGluIGFueSBwcm92aWRlcmApfWZ1bmN0aW9uIEx2KGUpe2xldCB0LG49ZS50cmltKCkscj1uLmluZGV4T2YoIlsiKSxvPW4uaW5kZXhPZigieyIpLGE9bi5pbmNsdWRlcygifSIpLGk9bi5pbmNsdWRlcygiXSIpLHM9ITEsbD0tMTthJiZvPT09LTEmJihlPWB7JHtlfWAsbz0wKSxpJiZyPT09LTEmJihlPWBbJHtlfWAscj0wKSxyPWUuaW5kZXhPZigiWyIpLG89ZS5pbmRleE9mKCJ7IiksciE9PS0xJiYobz09PS0xfHxyPG8pPyhzPSEwLGw9cik6byE9PS0xPyhzPSExLGw9byk6KGU9YHske2V9fWAsbD0wLHM9ITEpO2xldCB1PXM/Il0iOiJ9IixkPWUubGFzdEluZGV4T2YodSk7aWYoZD09PS0xKXtlW2UubGVuZ3RoLTFdPT09IiwiJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKTtsZXQgYz1lLmluY2x1ZGVzKCJbIikmJiFlLmluY2x1ZGVzKCJdIiksaD1lLmluY2x1ZGVzKCJ7IikmJiFlLmluY2x1ZGVzKCJ9Iik7YyYmaD9lKz0ifV0iOmM/ZSs9Il0iOmg/ZSs9In0iOmU9cz9gJHtlfV1gOmAke2V9fWB9ZWxzZSBlPWUuc3Vic3RyaW5nKGwsZCsxKTt0cnl7cmV0dXJuIHQ9SlNPTi5wYXJzZShlKSx0fWNhdGNoKGMpe2xldCBoPWU7ZT1fayhlKSxPKGBGYWlsZWQgdG8gcGFyc2UganNvblRleHQgU1RBUlQ6CiR7aH0KRU5ECiBkdWUgdG8gJHtjfS4gQXR0ZW1wdGVkIHJlYmFsYW5jZSB5aWVsZGVkOiAke2V9IChvcmlnaW5hbCBzaXplICR7aC5sZW5ndGh8fCIobnVsbCkifSwgcmViYWxhbmNlIHNpemUgJHtlPy5sZW5ndGh8fCIoMCkifSlgKTt0cnl7cmV0dXJuIHQ9SlNPTi5wYXJzZShlKSx0fWNhdGNoKG0pe08oIlJlYmFsYW5jZWQganNvblRleHQgc3RpbGwgZmFpbHMiLG0pfWxldCB2PWUucmVwbGFjZSgvIiIiL2csJyJcXCIiJykucmVwbGFjZSgvIlxuL2csJyJcXG4nKTtpZih2PXYucmVwbGFjZSgvKFt7LF1ccyopKFthLXpBLVpfJF1bYS16QS1aMC05XyRdKikiOi9nLCckMSIkMiI6Jyksdj12LnJlcGxhY2UoL1xuXHMqWyfigJzigJ1dL2csYAoiYCkucmVwbGFjZSgvWyfigJzigJ1dLFxzKlxuL2csYCIsCmApLnJlcGxhY2UoL1sn4oCc4oCdXVxzKihbXG5cXV0pLywnIiQxJyksdiE9PWUpdHJ5e3JldHVybiB0PUpTT04ucGFyc2UodiksdH1jYXRjaChtKXtPKCJSZWZvcm1hdHRlZCB0ZXh0IHN0aWxsIGZhaWxzIixtKX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gX2soZSl7bGV0IHQ9ZS5pbmRleE9mKCJ7Iik7aWYodD09PS0xKXJldHVybiBudWxsO2xldCBuPWUuc3Vic3RyaW5nKHQpLnRyaW0oKSxyPVtdLG89IiI7Zm9yKGxldCBhIG9mIG4paWYobys9YSxhPT09InsiP3IucHVzaCgifSIpOmE9PT0ifSI/cltyLmxlbmd0aC0xXT09PSJ9IiYmci5wb3AoKTphPT09IlsiP3IucHVzaCgiXSIpOmE9PT0iXSImJnJbci5sZW5ndGgtMV09PT0iXSImJnIucG9wKCksci5sZW5ndGg9PT0wKWJyZWFrO3JldHVybiByLmxlbmd0aCYmKE8oIkZvdW5kIixyLmxlbmd0aCwiY2hhcmFjdGVycyB0byBhcHBlbmQgdG8gYmFsYW5jZSIsbywiLiBBZGRpbmcgIixyLnJldmVyc2UoKS5qb2luKCIiKSksbys9ci5yZXZlcnNlKCkuam9pbigiIikpLG99dmFyIHp2PTI7ZnVuY3Rpb24gTGQoZSl7bGV0IHQ9ZS50cmltKCk7dC5pbmRleE9mKCJ7Iik9PT0tMSYmKHQ9InsiK3QpO2xldCByO3Quc3BsaXQoIn17IikubGVuZ3RoPjE/KHI9dC5zcGxpdCgifXsiKS5tYXAoaT0+YCR7aVswXT09PSJ7Ij8iIjoieyJ9JHtpfSR7aVtpLmxlbmd0aC0xXT09PSJ9Ij8iIjoifSJ9YCksTygiUmVjZWl2ZWQgbXVsdGlwbGUgcmVzcG9uc2VzIGZyb20gQUksIGV2YWx1YXRpbmcgZWFjaCBvZiIscikpOnI9W3RdO2xldCBhPXIubWFwKGk9Pkx2KGkpKS5maWx0ZXIoaT0+aSk7aWYoYS5sZW5ndGgpaWYoYS5sZW5ndGg+MSl7bGV0IGk9YVswXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW3MsbF0pPT57Zm9yKGxldCB1IG9mIGEuc2xpY2UoMSkpe2xldCBkPXVbc107ZCYmQXJyYXkuaXNBcnJheShkKSYmQXJyYXkuaXNBcnJheShsKSYmKGlbc109Wy4uLm5ldyBTZXQoWy4uLmwsLi4uZF0pXS5maWx0ZXIoYz0+YykpfX0pLGl9ZWxzZSByZXR1cm4gYVswXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBayhlLHQpe2xldCBuO3N3aXRjaChlKXtjYXNlImFudGhyb3BpYyI6bj10Py5jb250ZW50Py5hdCgwKT8udGV4dDticmVhaztjYXNlImdlbWluaSI6bj10Py5jYW5kaWRhdGVzPy5hdCgwKT8uY29udGVudD8ucGFydHM/LmF0KDApPy50ZXh0O2JyZWFrO2Nhc2Uib2xsYW1hIjpuPXQ/Lm1lc3NhZ2U/LmNvbnRlbnR8fHQ/LnJlc3BvbnNlO2JyZWFrO2Nhc2UiZGVlcHNlZWsiOmNhc2UiZ3JvayI6Y2FzZSJvcGVuYWkiOmNhc2UicGVycGxleGl0eSI6ZGVmYXVsdDpuPXQ/LmNob2ljZXM/LmF0KDApPy5tZXNzYWdlPy5jb250ZW50fHx0Py5jaG9pY2VzPy5hdCgwKT8ubWVzc2FnZT8udG9vbF9jYWxscz8uYXQoMCk/LmZ1bmN0aW9uPy5hcmd1bWVudHM7YnJlYWt9cmV0dXJuIG58fE8oYENvdWxkIG5vdCBleHRyYWN0IGNvbnRlbnQgZnJvbSAke2V9IHJlc3BvbnNlOmAsSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpKSxufHxudWxsfWFzeW5jIGZ1bmN0aW9uICR2KGUsdCxuLHIsbyxhLHt0aW1lb3V0U2Vjb25kczppPTMwfT17fSl7bGV0IHM9Tm8obiksbDtpZihvKWw9YXdhaXQgT2soZSx0LG4sITAsbyksZS5hbGVydChsLHtzY3JvbGxUb0VuZDohMH0pO2Vsc2UgdHJ5e2F3YWl0IFByb21pc2UucmFjZShbbmV3IFByb21pc2UoYXN5bmMoZCxjKT0+e2xldCBoPWF3YWl0IHQuanNvbigpO2w9QWsocyxoKSxkKGwpfSksbmV3IFByb21pc2UoKGQsYyk9PnNldFRpbWVvdXQoKCk9PmMobmV3IEVycm9yKGAke3N9IFRpbWVvdXRgKSksaSoxZTMpKV0pfWNhdGNoKGQpe3Rocm93IE8oIkZhaWxlZCB0byBwYXJzZSByZXNwb25zZSBmcm9tIixuLCJlcnJvciIsZCksZH1sZXQgdT1sO3JldHVybiBsPUxkKGwpLCFhfHxhKGwpP2w6KHUmJk8oIlJlY2VpdmVkIix1LCJidXQgY291bGQgbm90IHBhcnNlIGFzIGEgdmFsaWQgcmVzdWx0IiksbnVsbCl9YXN5bmMgZnVuY3Rpb24gT2soZSx0LG4scixvKXtyZXR1cm4gdHlwZW9mIGdsb2JhbDwidSImJnR5cGVvZiBnbG9iYWwuZmV0Y2g8InUiP2F3YWl0IFJrKGUsdCxuLHIsbyk6YXdhaXQgSWsoZSx0LG4scixvKX1hc3luYyBmdW5jdGlvbiBSayhlLHQsbixyLG8pe2xldCBhPXQuYm9keSxpPSExLHM9IiIsbCx1O3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgoZCxjKT0+e2xldCBoPSgpPT57bGV0IHY9MCxtPSgpPT57bGV0IHc9YS5yZWFkKCk7aWYodyl7dj0wO2xldCBiPXcudG9TdHJpbmcoKTtpZih7YWJvcnQ6aSxmYWlsZWRQYXJzZUNvbnRlbnQ6bCxpbmNyZW1lbnRhbENvbnRlbnRzOnUscmVjZWl2ZWRDb250ZW50OnN9PW8oZSxiLHMsbixyLGwpLGl8fCFGdih1LHMpKXtkKCk7cmV0dXJufW0oKX1lbHNlIHYrPTEsdjwzP3NldFRpbWVvdXQobSx6dioxZTMpOmQoKX07bSgpfTthLm9uKCJyZWFkYWJsZSIsaCl9KSxzfWFzeW5jIGZ1bmN0aW9uIElrKGUsdCxuLHIsbyl7bGV0IGE9dC5ib2R5LmdldFJlYWRlcigpLGk9bmV3IFRleHREZWNvZGVyLHMsbCx1LGQsYz0wLGg9IiI7Zm9yKDshbDspe2xldCB2PW51bGwsbT0hMTt0cnl7YXdhaXQgUHJvbWlzZS5yYWNlKFt7ZG9uZTptLHZhbHVlOnZ9PWF3YWl0IGEucmVhZCgpLG5ldyBQcm9taXNlKCh3LGIpPT5zZXRUaW1lb3V0KCgpPT5iKG5ldyBFcnJvcigiVGltZW91dCIpKSx6dioxZTMpKV0pfWNhdGNoKHcpe2w9dyxPKCJGYWlsZWQgdG8gcmVjZWl2ZSBmdXJ0aGVyIHN0cmVhbSBkYXRhIGluIHRpbWUiLHcpO2JyZWFrfWlmKG18fGM+Myl7TygiQ29tcGxldGVkIGdlbmVyYXRpbmcgcmVzcG9uc2UgbGVuZ3RoIik7YnJlYWt9ZWxzZSBpZih2KXtsZXQgdz1pLmRlY29kZSh2LHtzdHJlYW06ITB9KTt0cnl7aWYodHlwZW9mIHc9PSJzdHJpbmciKXtjPTA7bGV0IGI9byhlLHcsaCxuLHIsdSk7aWYoYil7aWYoe2Fib3J0OnMsZmFpbGVkUGFyc2VDb250ZW50OnUsaW5jcmVtZW50YWxDb250ZW50czpkLHJlY2VpdmVkQ29udGVudDpofT1iLHN8fCFGdihkLGgpKWJyZWFrfWVsc2UgTygiRmFpbGVkIHRvIHBhcnNlIHN0cmVhbSBmcm9tIix2LCJhcyBKU09OIiksYys9MX1lbHNlIE8oIkZhaWxlZCB0byBwYXJzZSBzdHJlYW0gZnJvbSIsdiwiYXMgSlNPTiIpLGMrPTF9Y2F0Y2goYil7TygiVGhlcmUgd2FzIGFuIGVycm9yIHBhcnNpbmcgdGhlIHJlc3BvbnNlIGZyb20gc3RyZWFtOiIsYik7YnJlYWt9fWVsc2UgYys9MX1yZXR1cm4gaH1mdW5jdGlvbiBGdihlLHQpe2xldCBuO2lmKGU/Lmxlbmd0aCYmKHQ/Lmxlbmd0aHx8MCk+PUNjKXtsZXQgcj10LnJlcGxhY2UoL1xuL2csIiAiKTtuPXIuc3Vic3RyaW5nKHIubGVuZ3RoLUNjKS50cmltKCk9PT0iIixuJiZPKCJSZXNwb25zZSBleGNlZWRzIGVtcHR5IHNwYWNlIHRocmVzaG9sZC4gQWJvcnRpbmciKX1yZXR1cm4hbn12YXIgTWs9MzA7YXN5bmMgZnVuY3Rpb24gVXYoZSx0LG4se2FpTW9kZWw6cj1udWxsLGFwaUtleTpvPW51bGwsY29uY3VycmVuY3k6YT0xLGpzb25SZXNwb25zZTppPSExLHRpbWVvdXRTZWNvbmRzOnM9bnVsbH09e30pe2xldCBsPUl2KGUpO3ImJihsPWwuZmlsdGVyKHc9PnchPT1yKSxsLnVuc2hpZnQocikpO2xldCB1PWwuc2hpZnQoKSxkPVt7cm9sZToidXNlciIsY29udGVudDpufV0sYz1zP3t0aW1lb3V0U2Vjb25kczpzfTp7fTtvJiYoYy5hcGlLZXk9byk7bGV0IGg9YXdhaXQgemsoZSxkLHUsYyksbT1hd2FpdCAkdihlLGgsdSxpPyJsbG1Qcm9tcHRKc29uIjpudWxsLG51bGwsbnVsbCk7cmV0dXJuIG0mJmkmJnR5cGVvZiBtPT0ic3RyaW5nIj9MZChtKTptfWZ1bmN0aW9uIFBrKGUsdCl7bGV0IG49eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn07c3dpdGNoKGUpe2Nhc2UiYW50aHJvcGljIjpyZXR1cm57Li4ubiwieC1hcGkta2V5Ijp0LCJhbnRocm9waWMtZGFuZ2Vyb3VzLWRpcmVjdC1icm93c2VyLWFjY2VzcyI6InRydWUiLCJhbnRocm9waWMtdmVyc2lvbiI6IjIwMjMtMDYtMDEifTtjYXNlImdlbWluaSI6cmV0dXJuIG47ZGVmYXVsdDpyZXR1cm57Li4ubixBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt0fWB9fX1mdW5jdGlvbiBMayhlLHQsbixyLHtwcm9tcHRLZXk6bz1udWxsfT17fSl7bGV0IGE7c3dpdGNoKE5vKHQpKXtjYXNlImFudGhyb3BpYyI6e2xldCBzPWUuZmluZCh1PT51LnJvbGU9PT0ic3lzdGVtIiksbD1lLmZpbHRlcih1PT51LnJvbGUhPT0ic3lzdGVtIik7YT17bWF4X3Rva2Vuczo0MDk2LG1vZGVsOnQsbWVzc2FnZXM6bH0sbiYmKGEuc3RyZWFtPW4pLHMmJihhLnN5c3RlbT1zLmNvbnRlbnQpO2JyZWFrfWNhc2UiZ2VtaW5pIjp7bGV0IHM9ZS5maW5kKHU9PnUucm9sZT09PSJzeXN0ZW0iKTthPXtjb250ZW50czplLmZpbHRlcih1PT51LnJvbGUhPT0ic3lzdGVtIikubWFwKHU9Pih7cm9sZTp1LnJvbGU9PT0iYXNzaXN0YW50Ij8ibW9kZWwiOiJ1c2VyIixwYXJ0czpbe3RleHQ6dS5jb250ZW50fV19KSl9LHMmJihhLnN5c3RlbUluc3RydWN0aW9uPXtwYXJ0czpbe3RleHQ6cy5jb250ZW50fV19KSxhLmdlbmVyYXRpb25Db25maWc9e3Jlc3BvbnNlTWltZVR5cGU6ImFwcGxpY2F0aW9uL2pzb24ifTticmVha31jYXNlImdyb2siOmNhc2UicGVycGxleGl0eSI6YT17bW9kZWw6dCxtZXNzYWdlczplfSxuJiYoYS5zdHJlYW09biksciYmKGEudG9vbHM9cik7YnJlYWs7Y2FzZSJkZWVwc2VlayI6e2E9e21vZGVsOnQsbWVzc2FnZXM6ZX0sbiYmKGEuc3RyZWFtPW4pLHImJihhLnRvb2xzPXIpLGEucmVzcG9uc2VfZm9ybWF0PXt0eXBlOiJqc29uX29iamVjdCJ9O2JyZWFrfWNhc2Uib3BlbmFpIjpkZWZhdWx0OnthPXttb2RlbDp0LG1lc3NhZ2VzOmV9LG4mJihhLnN0cmVhbT1uKSxyJiYoYS50b29scz1yKSxhLnJlc3BvbnNlX2Zvcm1hdD17dHlwZToianNvbl9vYmplY3QifTticmVha319cmV0dXJuIGF9YXN5bmMgZnVuY3Rpb24gemsoZSx0LG4se2FwaUtleTpyPW51bGwsYXR0ZW1wdE51bWJlcjpvPTEscHJvbXB0S2V5OmE9bnVsbCxzdHJlYW06aT1udWxsLHRpbWVvdXRTZWNvbmRzOnM9TWssdG9vbHM6bD1udWxsfT17fSl7bGV0IHU9Tm8obik7bz4wJiZPKGBBdHRlbXB0ICMke299OiBUcnlpbmcgJHtufSB3aXRoICR7YXx8Im5vIHByb21wdEtleSJ9YCkscnx8KHI9TXYoZSx1KSk7bGV0IGQ9TGsodCxuLGksbCx7cHJvbXB0S2V5OmF9KSxjPVB2KG4scik7TyhgQ2FsbGluZyAke3V9IGF0ICR7Y30gd2l0aCBib2R5ICR7SlNPTi5zdHJpbmdpZnkoZCl9IGF0ICR7bmV3IERhdGV9YCk7bGV0IGg9UGsodSxyKSx2PWF3YWl0IFByb21pc2UucmFjZShbZmV0Y2goYyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOmgsYm9keTpKU09OLnN0cmluZ2lmeShkKX0pLG5ldyBQcm9taXNlKChtLHcpPT5zZXRUaW1lb3V0KCgpPT53KG5ldyBFcnJvcigiVGltZW91dCIpKSxzKjFlMykpXSk7aWYoIXYub2spe2xldCBtPW5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHt2LnN0YXR1c31gKTt0aHJvdyBtLnJlc3BvbnNlPXYsbX1yZXR1cm4gdn12YXIgJGs9WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLEZrPTUwLFVrPTJlMyxXaz0zZTMsQms9MWUzLGprPTFlMyxXdj01MDA7YXN5bmMgZnVuY3Rpb24gQnYoZSx0KXtsZXQgbj1uZXcgRGF0ZSxyPSRrW24uZ2V0RGF5KCldLG89VGFbbi5nZXRNb250aCgpXSxhPW4uZ2V0RnVsbFllYXIoKSxpPW4uZ2V0RGF0ZSgpLHM9YCR7cn0gJHtvfSAke2l9LCAke2F9YCxsPWAke299ICR7YX0gRGFzaGJvYXJkIFRhc2sgSWRlYXNgLHU9bi5nZXREYXkoKT09PTB8fG4uZ2V0RGF5KCk9PT02LGQ9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpsfSk7aWYoIWQpe2xldCB6PWF3YWl0IGUuY3JlYXRlTm90ZShsLFtybl0pO2Q9e3V1aWQ6en0sTyhgW2RyZWFtLXRhc2tdIENyZWF0ZWQgbW9udGhseSBub3RlICIke2x9IiB3aXRoIHV1aWQgJHt6fWApfWxldCBjPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6ZC51dWlkfSksaD10eXBlb2YgYz09InN0cmluZyI/YzoiIix2PWF3YWl0IFZrKGUpLG09dj9hd2FpdCBlLmdldFRhc2tEb21haW5UYXNrcyh2KTpbXSx3PW0uZmlsdGVyKHo9PiF6LmNvbXBsZXRlZEF0JiYhei5kaXNtaXNzZWRBdCk7TyhgW2RyZWFtLXRhc2tdIEZvdW5kICR7dy5sZW5ndGh9IG9wZW4gdGFza3MgZnJvbSBkb21haW4gJHt2fWApO2xldCBiPW5ldyBNYXA7Zm9yKGxldCB6IG9mIHcpei51dWlkJiZ6Lm5vdGVVVUlEJiZiLnNldCh6LnV1aWQsei5ub3RlVVVJRCk7bGV0IGc9SGsobSk7TyhgW2RyZWFtLXRhc2tdIERlZmF1bHQgbm90ZSBmb3IgbmV3IHRhc2tzOiAke2d9YCk7bGV0IGY9dCYmdC5zaXplPjA7aWYoIWYpe2xldCB6PUdrKGgscyk7aWYoeil7TygiW2RyZWFtLXRhc2tdIEZvdW5kIGNhY2hlZCBhbmFseXNpcyBmb3IgdG9kYXksIHJldHVybmluZyBwYXJzZWQgcmVzdWx0cyIpO2xldCBhZT1Layh6KTtyZXR1cm57dGFza3M6YWUudGFza3MubWFwKE1lPT4oey4uLk1lLG5vdGVVVUlEOk1lLnV1aWQmJmIuZ2V0KE1lLnV1aWQpfHxudWxsLGlzRXhpc3Rpbmc6TWUuaXNFeGlzdGluZyE9PXZvaWQgMD9NZS5pc0V4aXN0aW5nOiEhTWUudXVpZH0pKSxnb2Fsc1N1bW1hcnk6YWUuZ29hbHNTdW1tYXJ5LGNhY2hlZDohMCxub3RlVVVJRDpkLnV1aWQsZGVmYXVsdE5vdGVVVUlEOmd9fX1sZXQgeT1mJiZ0P3cuZmlsdGVyKHo9PiF0Lmhhcyh6LnV1aWQpKTp3O08oYFtkcmVhbS10YXNrXSBBZnRlciBleGNsdXNpb246ICR7eS5sZW5ndGh9IGNhbmRpZGF0ZSB0YXNrcyAoJHt3Lmxlbmd0aC15Lmxlbmd0aH0gZXhjbHVkZWQpYCk7bGV0IEU9YCR7TWMoKS5sYWJlbH0gUGxhbmAseD0oYXdhaXQgZS5maWx0ZXJOb3Rlcyh7cXVlcnk6RX0pKS5maW5kKHo9PnoubmFtZT09PUUpLE49bnVsbCxDPW51bGwsaz1udWxsO2lmKHgpe2xldCB6PWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6eC51dWlkfSk7aWYoeil7Tj16LEM9Z28oeixvKTtsZXQgYWU9Q3MoKSxwZT1fcyhhZSk7az1nbyh6LHBlKX19bGV0IEE9aD9oLnN1YnN0cmluZygwLFVrKTpudWxsLFI9SmsoeSksVD1SLm1hcCh6PT5Yayh6KSk7TyhgW2RyZWFtLXRhc2tdIFNlbGVjdGVkICR7VC5sZW5ndGh9IHRvcCB0YXNrcyBmcm9tICR7eS5sZW5ndGh9IGNhbmRpZGF0ZSB0YXNrcyBmb3IgTExNIGFuYWx5c2lzYCk7bGV0IFA9Wmsoe2RhdGVIZWFkaW5nOnMsZGF5TmFtZTpyLGlzV2Vla2VuZDp1LHRhc2tKc29uT2JqZWN0czpULHF1YXJ0ZXJseUNvbnRlbnQ6Tixtb250aGx5Q29udGVudDpDLHdlZWtseUNvbnRlbnQ6ayxwcmV2aW91c0FuYWx5c2VzOkEsb3BlblRhc2tDb3VudDp5Lmxlbmd0aH0pO08oIltkcmVhbS10YXNrXSBTZW5kaW5nIHByb21wdCB0byBMTE0sIGxlbmd0aDoiLFAubGVuZ3RoKTtsZXQgVT17anNvblJlc3BvbnNlOiEwLHRpbWVvdXRTZWNvbmRzOjYwfTtTbiYmcHJvY2Vzcy5lbnYuT1BFTl9BSV9BQ0NFU1NfVE9LRU4mJihVLmFpTW9kZWw9UXMub3BlbmFpLFUuYXBpS2V5PXByb2Nlc3MuZW52Lk9QRU5fQUlfQUNDRVNTX1RPS0VOLE8oIltkcmVhbS10YXNrXSBEZXYgbW9kZTogdXNpbmcgT1BFTl9BSV9BQ0NFU1NfVE9LRU4gd2l0aCBvcGVuYWkgcHJvdmlkZXIiKSk7bGV0IEY7dHJ5e0Y9YXdhaXQgVXYoZSxudWxsLFAsVSl9Y2F0Y2goeil7cmV0dXJuIE8oIltkcmVhbS10YXNrXSBMTE0gY2FsbCBmYWlsZWQ6Iix6KSx7dGFza3M6W10sZXJyb3I6IkxMTSByZXF1ZXN0IGZhaWxlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iLG5vdGVVVUlEOmQudXVpZH19aWYoIUZ8fCFGLnRhc2tzKXJldHVybiBPKCJbZHJlYW0tdGFza10gTExNIHJldHVybmVkIGludmFsaWQgcmVzcG9uc2U6IixGKSx7dGFza3M6W10sZXJyb3I6IkNvdWxkIG5vdCBwYXJzZSBBSSByZXNwb25zZS4iLG5vdGVVVUlEOmQudXVpZH07bGV0IFc9bmV3IFNldCh3Lm1hcCh6PT56LnV1aWQpLmZpbHRlcihCb29sZWFuKSksWT1ZayhGLnRhc2tzLFcpLHNlPVFrKFksUixiKSxEZT1xayhGLmdvYWxzU3VtbWFyeSk7TyhgW2RyZWFtLXRhc2tdIFJlY2VpdmVkICR7c2UubGVuZ3RofSB0YXNrIHN1Z2dlc3Rpb25zICgke3NlLmZpbHRlcih6PT56LmlzRXhpc3RpbmcpLmxlbmd0aH0gZXhpc3RpbmcsICR7c2UuZmlsdGVyKHo9PiF6LmlzRXhpc3RpbmcpLmxlbmd0aH0gaW52ZW50ZWQpYCk7bGV0IENlPWUxKHMsc2UsRGUpO3RyeXthd2FpdCBlLmluc2VydE5vdGVDb250ZW50KGQsQ2UpLE8oIltkcmVhbS10YXNrXSBXcm90ZSBhbmFseXNpcyB0byBtb250aGx5IG5vdGUiKX1jYXRjaCh6KXtPKCJbZHJlYW0tdGFza10gRmFpbGVkIHRvIHdyaXRlIHRvIG1vbnRobHkgbm90ZToiLHopfWxldCBCPXNlLmZpbHRlcih6PT56LnV1aWQpLm1hcCh6PT56LnV1aWQpO3JldHVybnt0YXNrczpzZSxnb2Fsc1N1bW1hcnk6RGUsY2FjaGVkOiExLG5vdGVVVUlEOmQudXVpZCxkZWZhdWx0Tm90ZVVVSUQ6ZyxzaG93blV1aWRzOkJ9fWFzeW5jIGZ1bmN0aW9uIFZrKGUpe2xldCB0PWUuc2V0dGluZ3NbVi5UQVNLX0RPTUFJTlNdLG49dD9KU09OLnBhcnNlKHQpOnt9O2lmKG4uc2VsZWN0ZWREb21haW5VdWlkKXJldHVybiBuLnNlbGVjdGVkRG9tYWluVXVpZDtsZXQgcj1hd2FpdCBlLmdldFRhc2tEb21haW5zKCk7aWYoIXJ8fHIubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgbz1yLmZpbmQoYT0+YS5uYW1lPT09IldvcmsiKTtyZXR1cm4gbz9vLnV1aWQ6clswXS51dWlkfWZ1bmN0aW9uIEhrKGUpe2xldCB0PXt9O2ZvcihsZXQgbyBvZiBlKW8ubm90ZVVVSUQmJih0W28ubm90ZVVVSURdPSh0W28ubm90ZVVVSURdfHwwKSsxKTtsZXQgbj0wLHI9bnVsbDtmb3IobGV0W28sYV1vZiBPYmplY3QuZW50cmllcyh0KSlhPm4mJihuPWEscj1vKTtyZXR1cm4gcn1mdW5jdGlvbiBHayhlLHQpe2xldCBuPWAjIyAke3R9YCxyPWUuaW5kZXhPZihuKTtpZihyPT09LTEpcmV0dXJuIG51bGw7bGV0IG89cituLmxlbmd0aCxhPWUuaW5kZXhPZihgCiMjIGAsbyk7cmV0dXJuKGEhPT0tMT9lLnN1YnN0cmluZyhvLGEpOmUuc3Vic3RyaW5nKG8pKS50cmltKCl8fG51bGx9ZnVuY3Rpb24gS2soZSl7bGV0IHQ9W10sbj0vIyMjIFxkK1wuXHMrKC4rPylccytcKFJhdGluZzpccyooXGQrKVwvMTBcKVxuKD86XCpcW3Rhc2s6KFteXF1dKylcXVwqXG4pPyhbXHNcU10qPykoPz1cbiMjIyB8XG4tLS18JCkvZyxyO2Zvcig7KHI9bi5leGVjKGUpKSE9PW51bGw7KXtsZXQgaT1yWzNdfHxudWxsO3QucHVzaCh7dGl0bGU6clsxXS50cmltKCkscmF0aW5nOnBhcnNlSW50KHJbMl0sMTApLHV1aWQ6aSxpc0V4aXN0aW5nOiEhaSxleHBsYW5hdGlvbjpyWzRdLnRyaW0oKX0pfWxldCBvPW51bGwsYT1lLnNlYXJjaCgvIyMjIFxkK1wuLyk7aWYoYT4wKXtsZXQgcz1lLnN1YnN0cmluZygwLGEpLnRyaW0oKS5tYXRjaCgvXCpcKllvdXIgZ29hbHMgdGhpcyBxdWFydGVyXC9tb250aFwvd2VlazpcKlwqXHMqKFtcc1xTXSopLyk7cyYmKG89c1sxXS50cmltKCkpfXJldHVybnt0YXNrczp0LGdvYWxzU3VtbWFyeTpvfX1mdW5jdGlvbiBZayhlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKG49Pm4mJnR5cGVvZiBuLnRpdGxlPT0ic3RyaW5nIiYmbi50aXRsZS50cmltKCkubGVuZ3RoPjApLm1hcChuPT57bGV0IHI9bi51dWlkJiZ0JiZ0LmhhcyhuLnV1aWQpP24udXVpZDpudWxsO3JldHVybnt0aXRsZTpTdHJpbmcobi50aXRsZSkudHJpbSgpLGV4cGxhbmF0aW9uOlN0cmluZyhuLmV4cGxhbmF0aW9ufHwiIikudHJpbSgpLHJhdGluZzpNYXRoLm1pbigxMCxNYXRoLm1heCgxLHBhcnNlSW50KG4ucmF0aW5nLDEwKXx8NSkpLHV1aWQ6cixpc0V4aXN0aW5nOiEhcn19KS5zbGljZSgwLDUpOltdfWZ1bmN0aW9uIHFrKGUpe2lmKCFlfHx0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIG51bGw7bGV0IHQ9ZS50cmltKCk7cmV0dXJuIHQ/dC5zdWJzdHJpbmcoMCxXdik6bnVsbH1mdW5jdGlvbiBRayhlLHQsbil7bGV0IHI9ZS5maWx0ZXIodT0+dS5pc0V4aXN0aW5nKS5sZW5ndGgsbz1NYXRoLmNlaWwoZS5sZW5ndGgvMik7aWYocj49bylyZXR1cm4gZS5tYXAodT0+KHsuLi51LG5vdGVVVUlEOnUudXVpZCYmbi5nZXQodS51dWlkKXx8bnVsbH0pKTtsZXQgYT1uZXcgU2V0KGUuZmlsdGVyKHU9PnUudXVpZCkubWFwKHU9PnUudXVpZCkpLGk9dC5maWx0ZXIodT0+dS51dWlkJiYhYS5oYXModS51dWlkKSkuc2xpY2UoMCxvLXIpLm1hcCh1PT4oe3RpdGxlOnUuY29udGVudHx8IlVudGl0bGVkIHRhc2siLGV4cGxhbmF0aW9uOiJIaWdobHktcmFua2VkIHRhc2sgZnJvbSB5b3VyIHRhc2sgbGlzdCB0aGF0IGFsaWducyB3aXRoIHlvdXIgY3VycmVudCBwcmlvcml0aWVzLiIscmF0aW5nOjcsdXVpZDp1LnV1aWQsaXNFeGlzdGluZzohMCxub3RlVVVJRDpuLmdldCh1LnV1aWQpfHxudWxsfSkpLHM9Wy4uLmVdLm1hcCh1PT4oey4uLnUsbm90ZVVVSUQ6dS51dWlkJiZuLmdldCh1LnV1aWQpfHxudWxsfSkpLGw9cy5tYXAoKHUsZCk9Pih7aW5kZXg6ZCxyYXRpbmc6dS5yYXRpbmcsaXNFeGlzdGluZzp1LmlzRXhpc3Rpbmd9KSkuZmlsdGVyKHU9PiF1LmlzRXhpc3RpbmcpLnNvcnQoKHUsZCk9PnUucmF0aW5nLWQucmF0aW5nKTtmb3IobGV0IHU9MDt1PGkubGVuZ3RoJiZ1PGwubGVuZ3RoO3UrKylzW2xbdV0uaW5kZXhdPWlbdV07cmV0dXJuIHN9ZnVuY3Rpb24gSmsoZSl7bGV0IHQ9ZS5tYXAocj0+e2xldCBvPTAsYT1yLnNjb3JlPz9yLnZpY3RvcnlWYWx1ZT8/MDtpZihyLmltcG9ydGFudCYmKG8rPTIwKSxyLnVyZ2VudCYmKG8rPTE1KSxhPjEwP28rPTE1OmE+NSYmKG8rPTgpLHIuZGVhZGxpbmUpe2xldCBpPURhdGUubm93KCkvMWUzLGw9KChyLmRlYWRsaW5lPDFlMTA/ci5kZWFkbGluZTpyLmRlYWRsaW5lLzFlMyktaSkvODY0MDA7bDwwP28rPTI1Omw8PTE/bys9MjA6bDw9Mz9vKz0xMjpsPD03JiYobys9NSl9aWYoci5zdGFydEF0KXtsZXQgaT1EYXRlLm5vdygpLzFlMyxzPXIuc3RhcnRBdDwxZTEwP3Iuc3RhcnRBdDpyLnN0YXJ0QXQvMWUzO3M8PWk/bys9NToocy1pKS84NjQwMDw9MSYmKG8rPTMpfXJldHVybiBvKz1NYXRoLm1pbihhLDE1KSx7dGFzazpyLHJhbms6b319KTt0LnNvcnQoKHIsbyk9Pm8ucmFuay1yLnJhbmspO2xldCBuPU1hdGgubWluKE1hdGguY2VpbChlLmxlbmd0aCouMSksRmspO3JldHVybiB0LnNsaWNlKDAsTWF0aC5tYXgobiwzKSkubWFwKHI9PnIudGFzayl9ZnVuY3Rpb24gWGsoZSl7bGV0IHQ9e2NvbnRlbnQ6ZS5jb250ZW50LHV1aWQ6ZS51dWlkfTtlLmltcG9ydGFudCYmKHQuaW1wb3J0YW50PSEwKSxlLnVyZ2VudCYmKHQudXJnZW50PSEwKTtsZXQgbj1lLnNjb3JlPz9lLnZpY3RvcnlWYWx1ZTtyZXR1cm4gbiE9bnVsbCYmKHQuc2NvcmU9biksZS5kZWFkbGluZSYmKHQuZGVhZGxpbmU9ZS5kZWFkbGluZSx0LmRlYWRsaW5lRm9ybWF0dGVkPW5ldyBEYXRlKGUuZGVhZGxpbmU8MWUxMD9lLmRlYWRsaW5lKjFlMzplLmRlYWRsaW5lKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLVVTIix7d2Vla2RheToic2hvcnQiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIix5ZWFyOiJudW1lcmljIn0pKSxlLnN0YXJ0QXQmJih0LnN0YXJ0QXQ9ZS5zdGFydEF0LHQuc3RhcnRBdEZvcm1hdHRlZD1uZXcgRGF0ZShlLnN0YXJ0QXQ8MWUxMD9lLnN0YXJ0QXQqMWUzOmUuc3RhcnRBdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KSksZS5oaWRlVW50aWwmJih0LmhpZGRlblVudGlsRm9ybWF0dGVkPW5ldyBEYXRlKGUuaGlkZVVudGlsPDFlMTA/ZS5oaWRlVW50aWwqMWUzOmUuaGlkZVVudGlsKS50b0xvY2FsZURhdGVTdHJpbmcoImVuLVVTIix7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSkpLGUuaXNSZXBlYXRpbmcmJih0LmlzUmVwZWF0aW5nPSEwKSx0fWZ1bmN0aW9uIFprKHtkYXRlSGVhZGluZzplLGRheU5hbWU6dCxpc1dlZWtlbmQ6bix0YXNrSnNvbk9iamVjdHM6cixxdWFydGVybHlDb250ZW50Om8sbW9udGhseUNvbnRlbnQ6YSx3ZWVrbHlDb250ZW50OmkscHJldmlvdXNBbmFseXNlczpzLG9wZW5UYXNrQ291bnQ6bH0pe2xldCB1PWBZb3UgYXJlIGEgcHJvZHVjdGl2aXR5IGNvYWNoIGFuYWx5emluZyBhIHVzZXIncyB0YXNrIGxpc3QgYW5kIGdvYWxzIHRvIHN1Z2dlc3QgdGhlIG1vc3QgaW1wYWN0ZnVsIHRhc2tzIGZvciB0b2RheS4KClRvZGF5IGlzICR7ZX0uYDtyZXR1cm4gbj91Kz1gCkl0IGlzICR7dH0gXHUyMDE0IGEgd2Vla2VuZCBkYXkuIExlYW4gdG93YXJkIGNyZWF0aXZlLCBleHBsb3JhdG9yeSwgb3IgZW5qb3lhYmxlIHRhc2tzIHRoYXQgc3RpbGwgYWR2YW5jZSB0aGUgdXNlcidzIGdvYWxzLiBGdW4gc2lkZS1wcm9qZWN0cywgbGVhcm5pbmcsIGFuZCByZWZsZWN0aW9uIGFyZSBncmVhdCB3ZWVrZW5kIHBpY2tzLmA6dSs9YApJdCBpcyAke3R9IFx1MjAxNCBhIHdlZWtkYXkuIFByaW9yaXRpemUgaGlnaC1pbXBhY3QsIGdvYWwtYWR2YW5jaW5nIHdvcmsgdGhhdCBtb3ZlcyBpbXBvcnRhbnQgcHJvamVjdHMgZm9yd2FyZC5gLG8/dSs9YAoKIyMgVXNlcidzIFF1YXJ0ZXJseSBQbGFuCiR7by5zdWJzdHJpbmcoMCxXayl9YDp1Kz1gCgojIyBVc2VyJ3MgUXVhcnRlcmx5IFBsYW4KTm8gcXVhcnRlcmx5IHBsYW4gZm91bmQuYCxhJiYodSs9YAoKIyMgVXNlcidzIE1vbnRobHkgRm9jdXMKJHthLnN1YnN0cmluZygwLEJrKX1gKSxpJiYodSs9YAoKIyMgVXNlcidzIFdlZWtseSBQbGFuCiR7aS5zdWJzdHJpbmcoMCxqayl9YCkscyYmKHUrPWAKCiMjIFByZXZpb3VzIFRhc2sgU3VnZ2VzdGlvbnMgVGhpcyBNb250aCAoYXZvaWQgcmVwZWF0aW5nIHRoZXNlIHZlcmJhdGltKQoke3N9YCksdSs9YAoKIyMgVG9wIENhbmRpZGF0ZSBUYXNrcyAoJHtsfSBvcGVuIHRvdGFsLCAke3IubGVuZ3RofSBoaWdoZXN0LXJhbmtlZCBzaG93biBhcyBKU09OKQpgLHIubGVuZ3RoPjA/KHUrPWBFYWNoIHRhc2sgb2JqZWN0IGZvbGxvd3MgdGhlIEFtcGxlbm90ZSB0YXNrIHR5cGUgc2NoZW1hLiBUaGUgInNjb3JlIiBmaWVsZCByZWZsZWN0cyBob3cgbG9uZyB0aGUgdGFzayBoYXMgYmVlbiBhY2N1bXVsYXRpbmcgdmFsdWUgXHUyMDE0IGhpZ2hlciBzY29yZXMgaW5kaWNhdGUgdGFza3MgdGhhdCBoYXZlIGJlZW4gd2FpdGluZyBsb25nZXIgb3IgYXJlIG92ZXJkdWUuIFRhc2tzIG1hcmtlZCAiaW1wb3J0YW50IiBvciAidXJnZW50IiBkZXNlcnZlIHNwZWNpYWwgY29uc2lkZXJhdGlvbi4KCmAsdSs9ci5tYXAoZD0+SlNPTi5zdHJpbmdpZnkoZCkpLmpvaW4oYApgKSk6dSs9Ik5vIG9wZW4gdGFza3MgZm91bmQuIix1Kz1gCgpZb3VyIHJlc3BvbnNlIG11c3QgaW5jbHVkZSB0d28gcGFydHM6CgoxLiAqKmdvYWxzU3VtbWFyeSoqOiBBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgdXNlcidzIGtub3duIGdvYWxzIGZvciB0aGlzIHF1YXJ0ZXIsIG1vbnRoLCBhbmQgd2Vlay4gV3JpdGUgYXQgbGVhc3Qgb25lIHNlbnRlbmNlIHBlciB0aW1lIGhvcml6b24gdGhhdCBoYXMgY29udGVudCBhdmFpbGFibGUgKHF1YXJ0ZXIsIG1vbnRoLCB3ZWVrKS4gTWF4aW11bSA1IHNlbnRlbmNlcyBhbmQgJHtXdn0gY2hhcmFjdGVycyB0b3RhbC4gSWYgYSB0aW1lIGhvcml6b24gaGFzIG5vIHBsYW4sIG5vdGUgdGhhdCBicmllZmx5LiBUaGlzIHN1bW1hcnkgY2FwdHVyZXMgdGhlIGVzc2VuY2Ugb2Ygd2hhdCB0aGUgdXNlciBpcyBzZWVraW5nIHRvIGFjY29tcGxpc2ggaW4gdGhlIG5lYXIgdGVybS4KCjIuICoqdGFza3MqKjogMy01IHRhc2tzIHRoYXQgYXJlIGVzcGVjaWFsbHkgd2VsbC1hbGlnbmVkIHdpdGggdGhvc2UgZ29hbHMuICoqQXQgbGVhc3QgaGFsZiBvZiB0aGUgdGFza3MgTVVTVCBiZSBleGlzdGluZyB0YXNrcyBjaG9zZW4gZnJvbSB0aGUgY2FuZGlkYXRlIGxpc3QgYWJvdmUqKiBcdTIwMTQgaW5jbHVkZSB0aGVpciBleGFjdCAidXVpZCIgZnJvbSB0aGUgSlNPTiBvYmplY3RzLiBUaGUgcmVtYWluaW5nIHRhc2tzIHNob3VsZCBiZSB5b3VyIG93biBpbnZlbnRlZCBzdWdnZXN0aW9ucyBpbnNwaXJlZCBieSB0aGUgdXNlcidzIHF1YXJ0ZXJseSwgbW9udGhseSwgYW5kIHdlZWtseSBnb2FscyBhbmQgYXBwcm9wcmlhdGUgZm9yICR7dH0uIEZvciBlYWNoIHRhc2sgcHJvdmlkZToKICAgLSBBIGNsZWFyLCBhY3Rpb25hYmxlIHRhc2sgdGl0bGUgKGZvciBleGlzdGluZyB0YXNrcywgeW91IG1heSByZXBocmFzZSB0aGUgY29udGVudCBmb3IgY2xhcml0eSkKICAgLSBBIDItMyBzZW50ZW5jZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB0YXNrIGRlc2VydmVzIGF0dGVudGlvbiB0b2RheSwgcmVmZXJlbmNpbmcgc3BlY2lmaWMgZ29hbHMgYW5kIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgLSBBIHJhdGluZyBmcm9tIDEtMTAgZm9yIGhvdyByZWxldmFudCBhbmQgaW1wYWN0ZnVsIHRoaXMgdGFzayBpcyByaWdodCBub3cKICAgLSAidXVpZCI6IHRoZSBleGFjdCBVVUlEIHN0cmluZyBmcm9tIHRoZSBjYW5kaWRhdGUgbGlzdCBpZiB0aGlzIGlzIGFuIGV4aXN0aW5nIHRhc2ssIG9yIG51bGwgaWYgdGhpcyBpcyBhIG5ldyBzdWdnZXN0aW9uCgpSZXR1cm4gT05MWSB2YWxpZCBKU09OIGluIHRoaXMgZXhhY3QgZm9ybWF0IChubyBtYXJrZG93biBmZW5jZXMpOgp7ImdvYWxzU3VtbWFyeSI6IlN1bW1hcnkgb2YgcXVhcnRlci9tb250aC93ZWVrIGdvYWxzLi4uIiwidGFza3MiOlt7InRpdGxlIjoiVGFzayB0aXRsZSIsImV4cGxhbmF0aW9uIjoiV2h5IHRoaXMgdGFzayBtYXR0ZXJzIHRvZGF5Li4uIiwicmF0aW5nIjo4LCJ1dWlkIjoiZXhpc3RpbmctdGFzay11dWlkLW9yLW51bGwifV19YCx1fWZ1bmN0aW9uIGUxKGUsdCxuKXtsZXQgcj1gIyMgJHtlfQoKYDtyZXR1cm4gbiYmKHIrPWAqKllvdXIgZ29hbHMgdGhpcyBxdWFydGVyL21vbnRoL3dlZWs6KioKJHtufQoKYCksdC5mb3JFYWNoKChvLGEpPT57cis9YCMjIyAke2ErMX0uICR7by50aXRsZX0gKFJhdGluZzogJHtvLnJhdGluZ30vMTApCmAscis9YCR7by5leHBsYW5hdGlvbn0KCmB9KSxyKz1gLS0tCgpgLHJ9dmFyIHQxPTIzMCxqdj0iZGFzaGJvYXJkX2RyZWFtLXRhc2tfc2Vlbl91dWlkcyIsbjE9NyxxdD0iZHJlYW0tdGFzayI7ZnVuY3Rpb24gcjEoZSx0KXtyZXR1cm4gTWF0aC5tYXgoMSwoZXx8MSkqKHR8fDEpKX1mdW5jdGlvbiBvMShlLHQpe3JldHVyblsuLi5lXS5zb3J0KChyLG8pPT5vLnJhdGluZy1yLnJhdGluZykuc2xpY2UoMCx0KX1mdW5jdGlvbiBYcyhlKXtsZXQgdD1lLnNldHRpbmdzPy5banZdLG49e307aWYodCl0cnl7bj10eXBlb2YgdD09InN0cmluZyI/SlNPTi5wYXJzZSh0KTp0fWNhdGNoe249e319bGV0IHI9bmV3IERhdGU7ci5zZXREYXRlKHIuZ2V0RGF0ZSgpLW4xKTtsZXQgbz17fTtmb3IobGV0W2EsaV1vZiBPYmplY3QuZW50cmllcyhuKSluZXcgRGF0ZShhKT49ciYmKG9bYV09aSk7cmV0dXJuIG99ZnVuY3Rpb24gYTEoZSl7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgT2JqZWN0LnZhbHVlcyhlKSlmb3IobGV0IHIgb2Ygbil0LmFkZChyKTtyZXR1cm4gdH1mdW5jdGlvbiBpMSgpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCl9YXN5bmMgZnVuY3Rpb24gczEoZSx0LG4pe2xldCByPWkxKCksbz10W3JdfHxbXSxhPUFycmF5LmZyb20obmV3IFNldChbLi4ubywuLi5uXSkpLGk9ey4uLnQsW3JdOmF9O3JldHVybiBhd2FpdCBlLnNldFNldHRpbmcoanYsSlNPTi5zdHJpbmdpZnkoaSkpLGl9ZnVuY3Rpb24gbDEoZSl7cmV0dXJuIGU+PTg/ImhpZ2giOmU+PTU/Im1lZGl1bSI6ImxvdyJ9YXN5bmMgZnVuY3Rpb24gdTEoZSx0LG4pe2lmKHQuaXNFeGlzdGluZyYmdC51dWlkJiZ0Lm5vdGVVVUlEKWF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHt0Lm5vdGVVVUlEfT9oaWdobGlnaHRUYXNrVVVJRD0ke3QudXVpZH1gKTtlbHNlIGlmKG4pe2xldCByPWF3YWl0IGUuaW5zZXJ0VGFzayh7dXVpZDpufSx7Y29udGVudDp0LnRpdGxlfSk7ciYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke259P2hpZ2hsaWdodFRhc2tVVUlEPSR7cn1gKX19ZnVuY3Rpb24gYzEoZSl7ZSYmZSgpfWZ1bmN0aW9uIGQxKGUsdCxuKXtyZXR1cm4gdD9lKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsb25DbGljazpuLHRpdGxlOiJPcGVuIHRoaXMgbW9udGgncyB0YXNrIGlkZWFzIG5vdGUifSwiXHV7MUY1RDJ9XHVGRTBGIE5vdGUiKTpudWxsfWZ1bmN0aW9uIFZhKCl7cmV0dXJuIFdtKHF0KS5pY29ufWZ1bmN0aW9uIHAxKGUsdCl7cmV0dXJuIGUoImEiLHtocmVmOiIjIixjbGFzc05hbWU6IndpZGdldC1oZWFkZXItYWN0aW9uIixvbkNsaWNrOnQsdGl0bGU6IkdldCBuZXcgdGFzayBzdWdnZXN0aW9ucyAoZXhjbHVkZXMgdGFza3Mgc2hvd24gdG9kYXkpIn0sIlx1ezFGNTA0fSBSZXNlZWQiKX1mdW5jdGlvbiBmMShlKXtyZXR1cm4gZShYLHt0aXRsZTpaKHF0KSxpY29uOlZhKCksd2lkZ2V0SWQ6cXR9LGUoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1sb2FkaW5nIn0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLXNwaW5uZXIifSksZSgicCIsbnVsbCwiRGVkdWNpbmcgY29udGVudC4uLiBcdTIwMjYiKSkpfWZ1bmN0aW9uIGgxKGUsdCl7cmV0dXJuIGUoWCx7dGl0bGU6WihxdCksaWNvbjpWYSgpLHdpZGdldElkOnF0fSxlKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbm8tY29uZmlnIn0sZSgicCIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1uby1jb25maWctdGV4dCJ9LCJEcmVhbVRhc2sgdXNlcyBBSSB0byBzdWdnZXN0IHRhc2tzIGFsaWduZWQgd2l0aCB5b3VyIGdvYWxzLiIpLGUoInAiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbm8tY29uZmlnLXRleHQifSwiQW4gTExNIHByb3ZpZGVyIGFuZCBBUEkga2V5IGFyZSByZXF1aXJlZC4gIixlKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLXNldHRpbmdzLWxpbmsiLG9uQ2xpY2s6dH0sIkNvbmZpZ3VyZSBBSSBzZXR0aW5ncyBcdTIxOTIiKSkpKX1mdW5jdGlvbiBtMShlLHQsbixyKXtyZXR1cm4gZShYLHt0aXRsZTpaKHF0KSxpY29uOlZhKCksd2lkZ2V0SWQ6cXQsaGVhZGVyQWN0aW9uczpufSxlKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stZXJyb3IifSxlKCJwIixudWxsLHQpLGUoImJ1dHRvbiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1yZXRyeSIsb25DbGljazpyfSwiUmV0cnkiKSkpfWZ1bmN0aW9uIGcxKGUsdCxuKXtyZXR1cm4gZShYLHt0aXRsZTpaKHF0KSxpY29uOlZhKCksd2lkZ2V0SWQ6cXQsaGVhZGVyQWN0aW9uczp0fSxlKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stZW1wdHkifSxlKCJwIixudWxsLCJObyB0YXNrIHN1Z2dlc3Rpb25zIGF2YWlsYWJsZS4iKSxlKCJidXR0b24iLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stcmV0cnkiLG9uQ2xpY2s6bn0sIlJlZnJlc2giKSkpfWZ1bmN0aW9uIHYxKGUsdCxuLHIsbyxhKXtsZXQgaT1vMSh0LG4pO3JldHVybiBlKFgse2hlYWRlckFjdGlvbnM6cixzdWJ0aXRsZToiV2hhdCBpZiB5b3UgZGlkIGl0IHRvZGF5PyIsdGl0bGU6WihxdCksaWNvbjpWYSgpLHdpZGdldElkOnF0fSxlKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbGlzdCIscmVmOmF9LC4uLmkubWFwKChzLGwpPT57bGV0IHU9ISFvO3JldHVybiBlKCJkaXYiLHtrZXk6bCxjbGFzc05hbWU6YGRyZWFtLXRhc2stY2FyZCR7cy5pc0V4aXN0aW5nPyIiOiIgZHJlYW0tdGFzay1jYXJkLS1pbnZlbnRlZCJ9YH0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtaGVhZGVyIn0sZSgic3BhbiIse2NsYXNzTmFtZTpgZHJlYW0tdGFzay1jYXJkLXRpdGxlJHt1PyIgZHJlYW0tdGFzay1jYXJkLXRpdGxlLS1jbGlja2FibGUiOiIifWAsb25DbGljazp1PygpPT5vKHMpOnZvaWQgMCxyb2xlOnU/ImJ1dHRvbiI6dm9pZCAwLHRhYkluZGV4OnU/MDp2b2lkIDAsb25LZXlEb3duOnU/ZD0+eyhkLmtleT09PSJFbnRlciJ8fGQua2V5PT09IiAiKSYmKGQucHJldmVudERlZmF1bHQoKSxvKHMpKX06dm9pZCAwLHRpdGxlOnMuaXNFeGlzdGluZz8iT3BlbiB0aGlzIHRhc2siOiJDbGljayB0byBjcmVhdGUgdGhpcyB0YXNrIixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmphKHMudGl0bGUpfHxzLnRpdGxlfX0pLCFzLmlzRXhpc3RpbmcmJnU/ZSgic3BhbiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1uZXctYmFkZ2UiLHRpdGxlOiJOZXcgdGFzayBcdTIwMTQgY2xpY2sgdG8gY3JlYXRlIn0sIituZXciKTpudWxsLGUoInNwYW4iLHtjbGFzc05hbWU6YGRyZWFtLXRhc2stcmF0aW5nIGRyZWFtLXRhc2stcmF0aW5nLS0ke2wxKHMucmF0aW5nKX1gLHRpdGxlOmBSZWxldmFuY2U6ICR7cy5yYXRpbmd9LzEwYH0sYCR7cy5yYXRpbmd9LzEwYCkpLGUoInAiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stY2FyZC1leHBsYW5hdGlvbiIsdGl0bGU6cy5leHBsYW5hdGlvbj8ubGVuZ3RoPnQxP3MuZXhwbGFuYXRpb246bnVsbCxkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOmphKHMuZXhwbGFuYXRpb24pfHwiIn19KSl9KSkpfWZ1bmN0aW9uIHpkKHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTp0PTEsZ3JpZFdpZHRoU2l6ZTpuPTEsb25PcGVuU2V0dGluZ3M6cn0pe2xldCBvPWplLmNyZWF0ZUVsZW1lbnQsW2EsaV09KDAsamUudXNlU3RhdGUpKCExKSxbcyxsXT0oMCxqZS51c2VTdGF0ZSkobnVsbCksW3UsZF09KDAsamUudXNlU3RhdGUpKG51bGwpLFtjLGhdPSgwLGplLnVzZVN0YXRlKShudWxsKSxbdixtXT0oMCxqZS51c2VTdGF0ZSkobnVsbCksW3csYl09KDAsamUudXNlU3RhdGUpKCgpPT5YcyhlKSksZz0oMCxqZS51c2VSZWYpKG51bGwpLGY9ZS5zZXR0aW5ncz8uW1YuTExNX1BST1ZJREVSXSx5PWUuc2V0dGluZ3M/LltWLkxMTV9BUElfS0VZXSxFPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5lbnY/Lk9QRU5fQUlfQUNDRVNTX1RPS0VOfHwiInx8ZiYmZiE9PSJub25lIiYmeSxTPXIxKG4sdCkseD0oMCxqZS51c2VDYWxsYmFjaykoYXN5bmMoRixXKT0+e2xldCBZPShGfHxbXSkuZmlsdGVyKEJvb2xlYW4pO2lmKFkubGVuZ3RoPT09MClyZXR1cm4gVztsZXQgc2U9YXdhaXQgczEoZSxXLFkpO3JldHVybiBiKHNlKSxzZX0sW2VdKSxOPSgwLGplLnVzZUNhbGxiYWNrKShGPT57RSYmKGkoITApLGQobnVsbCksQnYoZSxGKS50aGVuKGFzeW5jIFc9PntpZihXPy5lcnJvcilkKFcuZXJyb3IpO2Vsc2UgaWYoVz8udGFza3Mpe2woVy50YXNrcyk7bGV0IFk9WHMoZSk7YXdhaXQgeChXLnNob3duVXVpZHN8fFtdLFkpfVc/Lm5vdGVVVUlEJiZoKFcubm90ZVVVSUQpLFc/LmRlZmF1bHROb3RlVVVJRCYmbShXLmRlZmF1bHROb3RlVVVJRCksaSghMSl9KS5jYXRjaChXPT57ZChXLm1lc3NhZ2V8fCJBbmFseXNpcyBmYWlsZWQiKSxpKCExKX0pKX0sW0UsZSx4XSk7KDAsamUudXNlRWZmZWN0KSgoKT0+e2xldCBGPVhzKGUpO2IoRiksTihudWxsKX0sW10pLCgwLGplLnVzZUVmZmVjdCkoKCk9PntZcyhnLmN1cnJlbnQpfSk7bGV0IEM9YXN5bmMgRj0+e0YucHJldmVudERlZmF1bHQoKSxjJiZhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7Y31gKX0saz1GPT57Ri5wcmV2ZW50RGVmYXVsdCgpLGMxKHIpfSxBPWFzeW5jIEY9PntGLnByZXZlbnREZWZhdWx0KCksbChudWxsKTtsZXQgVz1YcyhlKSxZPWExKFcpO04oWSl9O2lmKCFFKXJldHVybiBoMShvLGspO2xldCBSPWQxKG8sYyxDKSxUPXAxKG8sQSksUD1vKCJzcGFuIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLWhlYWRlci1hY3Rpb25zIn0sVCxSKSxVPUY9PnUxKGUsRix2KTtyZXR1cm4gYT9mMShvKTp1P20xKG8sdSxSLCgpPT5OKG51bGwpKTohc3x8cy5sZW5ndGg9PT0wP2cxKG8sUiwoKT0+TihudWxsKSk6djEobyxzLFMsUCxVLGcpfXZhciB1bj1sZShpZSgpKTtmdW5jdGlvbiB5MShlKXtsZXQgdD17fTtmb3IobGV0e2RhdGVLZXk6bix0YXNrczpyfW9mIGUpdFtuXT1yO3JldHVybiB0fWZ1bmN0aW9uICRkKGUpe2xldFt0LG5dPSgwLHVuLnVzZVN0YXRlKSh7fSkscj0oMCx1bi51c2VSZWYpKCExKSxvPSgwLHVuLnVzZVJlZikobnVsbCksYT0oMCx1bi51c2VSZWYpKG5ldyBTZXQpLGk9KDAsdW4udXNlUmVmKShudWxsKSxzPSgwLHVuLnVzZVJlZikoe30pLGw9KDAsdW4udXNlQ2FsbGJhY2spKGFzeW5jKHUsZCk9PntpLmN1cnJlbnQhPT1kJiYoaS5jdXJyZW50PWQsYS5jdXJyZW50PW5ldyBTZXQscy5jdXJyZW50PXt9KTtsZXR7Ym91bmRhcmllczpjLHdlZWtTdGFydEtleTpofT1MZyh1KSx2PWAke2h9Ojoke2R8fCIifWA7aWYoYS5jdXJyZW50Lmhhcyh2KSlyZXR1cm4gcy5jdXJyZW50O3IuY3VycmVudD0hMCxvLmN1cnJlbnQ9bnVsbDt0cnl7bGV0IG09YXdhaXQgUHJvbWlzZS5hbGwoYy5tYXAoYXN5bmMoe2Zyb206Zyx0bzpmLGRhdGVLZXk6eX0pPT57bGV0IHA9YXdhaXQgZS5nZXRDb21wbGV0ZWRUYXNrcyhnLGYpO3JldHVybntkYXRlS2V5OnksdGFza3M6cHx8W119fSkpLHc9eTEobSksYj17Li4ucy5jdXJyZW50LC4uLnd9O3JldHVybiBuKGIpLHMuY3VycmVudD1iLGEuY3VycmVudC5hZGQodiksYn1jYXRjaChtKXtyZXR1cm4gTygidXNlQ29tcGxldGVkVGFza3M6IGZhaWxlZCB0byBmZXRjaCBjb21wbGV0ZWQgdGFza3MiLG0pLG8uY3VycmVudD1tLHMuY3VycmVudH1maW5hbGx5e3IuY3VycmVudD0hMX19LFtdKTtyZXR1cm57Y29tcGxldGVkVGFza3NCeURhdGU6dCxnZXQgbG9hZGluZygpe3JldHVybiByLmN1cnJlbnR9LGdldCBlcnJvcigpe3JldHVybiBvLmN1cnJlbnR9LGZldGNoQ29tcGxldGVkVGFza3M6bH19dmFyIFRlPWxlKGllKCkpO3ZhciBWdj0iZGF5LXNrZXRjaCIsSHY9Nix3MT0yMSx4MT0xZTQsSGE9QXJyYXkuZnJvbSh7bGVuZ3RoOncxLUh2KzF9LChlLHQpPT5Idit0KTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZT09PTA/IjEyYW0iOmU8MTI/YCR7ZX1hbWA6ZT09PTEyPyIxMnBtIjpgJHtlLTEyfXBtYH1mdW5jdGlvbiBLdihlKXtyZXR1cm4gZS50b0xvY2FsZURhdGVTdHJpbmcoImVuLVVTIix7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1mdW5jdGlvbiBiMShlKXtyZXR1cm5gRGF5IFNrZXRjaCAke0t2KGUpfWB9ZnVuY3Rpb24gazEoZSl7bGV0IHQ9e307aWYoIWUpcmV0dXJuIHQ7Zm9yKGxldCBuIG9mIGUuc3BsaXQoYApgKSl7bGV0IHI9bi5tYXRjaCgvXihcZHsxLDJ9KD86YW18cG0pKTpccyooLiopL2kpO2lmKCFyKWNvbnRpbnVlO2xldCBvPXJbMV0udG9Mb3dlckNhc2UoKSxhPXJbMl0ucmVwbGFjZSgvXFwrJC8sIiIpLnRyaW0oKSxpPVMxKG8pO2khPT1udWxsJiZIYS5pbmNsdWRlcyhpKSYmKHRbaV09YSl9cmV0dXJuIHR9ZnVuY3Rpb24gUzEoZSl7bGV0IHQ9ZS5tYXRjaCgvXihcZHsxLDJ9KShhbXxwbSkkL2kpO2lmKCF0KXJldHVybiBudWxsO2xldCBuPXBhcnNlSW50KHRbMV0sMTApLHI9dFsyXS50b0xvd2VyQ2FzZSgpO3JldHVybiByPT09ImFtIiYmbj09PTEyP249MDpyPT09InBtIiYmbiE9PTEyJiYobis9MTIpLG59ZnVuY3Rpb24gRTEoZSl7cmV0dXJuIEhhLm1hcCh0PT57bGV0IG49RmQodCkscj1lW3RdfHwiIjtyZXR1cm5gJHtufTogJHtyfWB9KS5qb2luKGAKYCl9ZnVuY3Rpb24gVG8oKXtsZXQgZT17fTtyZXR1cm4gSGEuZm9yRWFjaCh0PT57ZVt0XT0iIn0pLGV9ZnVuY3Rpb24gR3YoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCk6dHlwZW9mIGU9PSJudW1iZXIiP2U8MWUxMD9lKjFlMzplOm51bGw6bnVsbH1mdW5jdGlvbiBOMShlKXtsZXQgdD1HdihlPy5zdGFydEF0KTtpZighdClyZXR1cm5bXTtsZXQgbj1uZXcgRGF0ZSh0KS5nZXRIb3VycygpLHI9W25dLG89R3YoZT8uZW5kQXQpO2lmKCFvfHxvPD10KXJldHVybiByO2xldCBhPU1hdGguZmxvb3IoKG8tdCkvKDYwKjYwKjFlMykpO2ZvcihsZXQgaT0xO2k8YTtpKz0xKXIucHVzaChuK2kpO3JldHVybiByfWZ1bmN0aW9uIFQxKGUpe3JldHVybihlPy5jb250ZW50fHwiIikucmVwbGFjZSgvXFsoW15cXV0rKVxdXChbXildKlwpL2csIiQxIikucmVwbGFjZSgvXFtcXlteXF1dKlxdL2csIiIpLnNwbGl0KGAKYClbMF0udHJpbSgpfWZ1bmN0aW9uIFVkKHthcHA6ZSxhZ2VuZGFUYXNrczp0LGN1cnJlbnREYXRlOm59KXtsZXQgcj1UZS5jcmVhdGVFbGVtZW50LFtvLGFdPSgwLFRlLnVzZVN0YXRlKShUbyksW2ksc109KDAsVGUudXNlU3RhdGUpKG51bGwpLFtsLHVdPSgwLFRlLnVzZVN0YXRlKShudWxsKSxbZCxjXT0oMCxUZS51c2VTdGF0ZSkoITApLGg9KDAsVGUudXNlUmVmKShudWxsKSx2PSgwLFRlLnVzZVJlZikobyk7di5jdXJyZW50PW87bGV0IG09bnQobiksdz1iMShtKSxiPWkhPT1udWxsJiZKU09OLnN0cmluZ2lmeShvKSE9PUpTT04uc3RyaW5naWZ5KGkpLGc9KDAsVGUudXNlQ2FsbGJhY2spKGFzeW5jIHg9PntpZighZSlyZXR1cm47bGV0IE49RTEoeCk7dHJ5e2xldCBDPWw7aWYoIUMpe2xldCBrPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6d30pO2s/LnV1aWQ/Qz1rLnV1aWQ6Qz1hd2FpdCBlLmNyZWF0ZU5vdGUodyxbcm5dKSx1KEMpfWF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHt1dWlkOkN9LE4pLHMoey4uLnh9KSxPKGBbRGF5U2tldGNoXSBwZXJzaXN0ZWQgJHt3fWApfWNhdGNoKEMpe08oIltEYXlTa2V0Y2hdIHNhdmUgZmFpbGVkIixDKX19LFtlLHcsbF0pLGY9KDAsVGUudXNlQ2FsbGJhY2spKCgpPT57aC5jdXJyZW50JiZjbGVhclRpbWVvdXQoaC5jdXJyZW50KSxoLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2codi5jdXJyZW50KX0seDEpfSxbZ10pLHk9KDAsVGUudXNlQ2FsbGJhY2spKCh4LE4pPT57YShDPT4oey4uLkMsW3hdOk59KSksZigpfSxbZl0pLHA9KDAsVGUudXNlQ2FsbGJhY2spKCgpPT57aC5jdXJyZW50JiZjbGVhclRpbWVvdXQoaC5jdXJyZW50KSxoLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2codi5jdXJyZW50KX0sMzAwKX0sW2ddKSxFPSgwLFRlLnVzZUNhbGxiYWNrKSgoKT0+e2guY3VycmVudCYmY2xlYXJUaW1lb3V0KGguY3VycmVudCksZyh2LmN1cnJlbnQpfSxbZ10pOygwLFRlLnVzZUVmZmVjdCkoKCk9PntsZXQgeD0hMTtyZXR1cm4oYXN5bmMoKT0+e2MoITApO3RyeXtsZXQgTj1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnd9KTtpZih4KXJldHVybjtpZihOPy51dWlkKXt1KE4udXVpZCk7bGV0IEM9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpOLnV1aWR9KTtpZih4KXJldHVybjtsZXQgaz1rMShDKSxBPXsuLi5UbygpLC4uLmt9O2EoQSkscyhBKX1lbHNlIGEoVG8oKSkscyhUbygpKX1jYXRjaChOKXtPKCJbRGF5U2tldGNoXSBsb2FkIGZhaWxlZCIsTikseHx8KGEoVG8oKSkscyhUbygpKSl9ZmluYWxseXt4fHxjKCExKX19KSgpLCgpPT57eD0hMH19LFtlLHddKSwoMCxUZS51c2VFZmZlY3QpKCgpPT57aWYoIXR8fCFufHxkKXJldHVybjtsZXQgeD1jdChuKSxOPXRbeF18fFtdO04ubGVuZ3RoIT09MCYmYShDPT57bGV0IGs9ey4uLkN9LEE9ITE7cmV0dXJuIE4uZm9yRWFjaChSPT57bGV0IFQ9VDEoUik7VCYmTjEoUikuZm9yRWFjaChQPT57SGEuaW5jbHVkZXMoUCkmJiFrW1BdJiYoa1tQXT1ULEE9ITApfSl9KSxBP2s6Q30pfSxbdCxuLGRdKSwoMCxUZS51c2VFZmZlY3QpKCgpPT4oKT0+e2guY3VycmVudCYmY2xlYXJUaW1lb3V0KGguY3VycmVudCl9LFtdKTtsZXQgUz1yKCJidXR0b24iLHtjbGFzc05hbWU6YGRheS1za2V0Y2gtc2F2ZS1idG4ke2I/IiI6IiBkYXktc2tldGNoLXNhdmUtYnRuLS1kaXNhYmxlZCJ9YCxkaXNhYmxlZDohYixvbkNsaWNrOkUsdGl0bGU6Yj8iU2F2ZSBjaGFuZ2VzIjoiTm8gdW5zYXZlZCBjaGFuZ2VzIn0sYj8iU2F2ZSI6IlNhdmVkIik7cmV0dXJuIHIoWCx7dGl0bGU6WihWdiksc3VidGl0bGU6S3YobSksaWNvbjoiXHV7MUY1RDJ9XHVGRTBGIix3aWRnZXRJZDpWdixoZWFkZXJBY3Rpb25zOlN9LHIoImRpdiIse2NsYXNzTmFtZToiZGF5LXNrZXRjaC1ub3RlYm9vayJ9LGQ/cigiZGl2Iix7Y2xhc3NOYW1lOiJkYXktc2tldGNoLWxvYWRpbmcifSwiTG9hZGluZ1x1MjAyNiIpOkhhLm1hcCh4PT5yKCJkaXYiLHtrZXk6eCxjbGFzc05hbWU6ImRheS1za2V0Y2gtbGluZSJ9LHIoInNwYW4iLHtjbGFzc05hbWU6ImRheS1za2V0Y2gtaG91ci1sYWJlbCJ9LEZkKHgpKSxyKCJpbnB1dCIse3R5cGU6InRleHQiLGNsYXNzTmFtZToiZGF5LXNrZXRjaC1pbnB1dCIsdmFsdWU6b1t4XXx8IiIsb25DaGFuZ2U6Tj0+eSh4LE4udGFyZ2V0LnZhbHVlKSxvbkJsdXI6cCxwbGFjZWhvbGRlcjoiIiwiYXJpYS1sYWJlbCI6YCR7RmQoeCl9IGVudHJ5YH0pKSkpKX12YXIgVmU9bGUoaWUoKSk7dmFyIFpzPSJwZWFrLWhvdXJzIixlbD1BcnJheS5mcm9tKHtsZW5ndGg6MjR9LChlLHQpPT50PT09MD8iMTIgQU0iOnQ8MTI/YCR7dH0gQU1gOnQ9PT0xMj8iMTIgUE0iOmAke3QtMTJ9IFBNYCk7ZnVuY3Rpb24gWXYoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIERhdGU/ZTp0eXBlb2YgZT09Im51bWJlciI/bmV3IERhdGUoZTwxZTEyP2UqMWUzOmUpOm5ldyBEYXRlKGUpOm51bGx9ZnVuY3Rpb24gRDEoZSl7bGV0IHQ9bnQoZSksbj10LmdldEZ1bGxZZWFyKCkscj10LmdldE1vbnRoKCksbz1uZXcgRGF0ZShuLHIsMSwwLDAsMCwwKSxhPW5ldyBEYXRlKG4scisxLDEsMCwwLDAsMCk7cmV0dXJue2Zyb206TWF0aC5mbG9vcihvLmdldFRpbWUoKS8xZTMpLHRvOk1hdGguZmxvb3IoYS5nZXRUaW1lKCkvMWUzKSxtb250aEtleTpgJHtufS0ke1N0cmluZyhyKzEpLnBhZFN0YXJ0KDIsIjAiKX1gfX1mdW5jdGlvbiBDMShlKXtsZXQgdD1uZXcgQXJyYXkoMjQpLmZpbGwoMCksbj1uZXcgQXJyYXkoMjQpLmZpbGwoMCkscj0wO2ZvcihsZXQgaSBvZiBlKXtsZXQgcz1pLnZpY3RvcnlWYWx1ZXx8MSxsPVl2KGkuY3JlYXRlZEF0fHxpLnN0YXJ0QXQpO2wmJiFpc05hTihsKSYmKHRbbC5nZXRIb3VycygpXSs9cyxyKyspO2xldCB1PVl2KGkuY29tcGxldGVkQXQpO3UmJiFpc05hTih1KSYmKG5bdS5nZXRIb3VycygpXSs9cyl9bGV0IG89dC5pbmRleE9mKE1hdGgubWF4KC4uLnQpKSxhPW4uaW5kZXhPZihNYXRoLm1heCguLi5uKSk7cmV0dXJue2NyZWF0ZWRCeUhvdXI6dCxjb21wbGV0ZWRCeUhvdXI6bix0b3RhbFRhc2tzOnIscGVha0NyZWF0ZUhvdXI6ZWxbb10scGVha0NvbXBsZXRlSG91cjplbFthXX19ZnVuY3Rpb24gXzEoZSl7bGV0IHQ9Z2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm57YmFyQ3JlYXRlZDp0LmdldFByb3BlcnR5VmFsdWUoIi0tZGFzaGJvYXJkLWNvbG9yLWJsdWUiKS50cmltKCl8fCIjNWI3YmJmIixiYXJDb21wbGV0ZWQ6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci1hY2NlbnQiKS50cmltKCl8fCIjZTg4NTNkIixheGlzVGV4dDp0LmdldFByb3BlcnR5VmFsdWUoIi0tZGFzaGJvYXJkLWNvbG9yLXRleHQtc2Vjb25kYXJ5IikudHJpbSgpfHwiIzdhODY5OSIsZ3JpZExpbmU6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci1ib3JkZXIiKS50cmltKCl8fCIjZDhkZGU2In19ZnVuY3Rpb24gcXYoZSx0LG4pe2xldCByPWUuZ2V0Q29udGV4dCgiMmQiKSxvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxLGE9ZS5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9YS53aWR0aCxzPWEuaGVpZ2h0O2lmKGk8PTB8fHM8PTApcmV0dXJuO2Uud2lkdGg9aSpvLGUuaGVpZ2h0PXMqbyxlLnN0eWxlLndpZHRoPWAke2l9cHhgLGUuc3R5bGUuaGVpZ2h0PWAke3N9cHhgLHIuc2NhbGUobyxvKTtsZXQgbD1fMShlKSx1PTQ4LGQ9MTIsYz0xMixoPTQwLHY9aS11LWQsbT1zLWMtaCx3PU1hdGgubWF4KC4uLnQsLi4ubiwxKSxiPU1hdGguY2VpbCh3LzEwKSoxMHx8MTA7ci5jbGVhclJlY3QoMCwwLGkscyk7bGV0IGc9NTtyLmZvbnQ9IjExcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLHIudGV4dEFsaWduPSJyaWdodCIsci50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7Zm9yKGxldCB4PTA7eDw9Zzt4Kyspe2xldCBOPU1hdGgucm91bmQoYi9nKngpLEM9YyttLW0qeC9nO3IuZmlsbFN0eWxlPWwuYXhpc1RleHQsci5maWxsVGV4dChgJHtOfWAsdS04LEMpLHg+MCYmKHIuc3Ryb2tlU3R5bGU9bC5ncmlkTGluZSxyLmdsb2JhbEFscGhhPS40LHIubGluZVdpZHRoPS41LHIuYmVnaW5QYXRoKCksci5tb3ZlVG8odSxDKSxyLmxpbmVUbyh1K3YsQyksci5zdHJva2UoKSxyLmdsb2JhbEFscGhhPTEpfWxldCBmPTI0LHk9di9mLHA9eSouMzIsRT15Ki4wNDtmb3IobGV0IHg9MDt4PGY7eCsrKXtsZXQgTj11K3gqeSsoeS1wKjItRSkvMixDPXRbeF0vYiptLGs9blt4XS9iKm07ci5maWxsU3R5bGU9bC5iYXJDcmVhdGVkLFF2KHIsTixjK20tQyxwLEMsMiksci5maWxsU3R5bGU9bC5iYXJDb21wbGV0ZWQsUXYocixOK3ArRSxjK20tayxwLGssMil9ci5maWxsU3R5bGU9bC5heGlzVGV4dCxyLmZvbnQ9IjEwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLHIudGV4dEFsaWduPSJjZW50ZXIiLHIudGV4dEJhc2VsaW5lPSJ0b3AiO2xldCBTPXY8MzAwPzQ6Mjtmb3IobGV0IHg9MDt4PGY7eCs9Uyl7bGV0IE49dSt4KnkreS8yO3IuZmlsbFRleHQoZWxbeF0sTixjK20rOCl9fWZ1bmN0aW9uIFF2KGUsdCxuLHIsbyxhKXtvPDF8fChhPU1hdGgubWluKGEsby8yLHIvMiksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0K2EsbiksZS5saW5lVG8odCtyLWEsbiksZS5hcmNUbyh0K3Isbix0K3IsbithLGEpLGUubGluZVRvKHQrcixuK28pLGUubGluZVRvKHQsbitvKSxlLmxpbmVUbyh0LG4rYSksZS5hcmNUbyh0LG4sdCthLG4sYSksZS5jbG9zZVBhdGgoKSxlLmZpbGwoKSl9ZnVuY3Rpb24gQTEoZSx0KXtsZXQgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dC5jbGllbnRYLW4ubGVmdCxvPW4ud2lkdGgsYT00OCxzPW8tYS0xMixsPXItYTtyZXR1cm4gbDwwfHxsPnM/LTE6TWF0aC5mbG9vcihsL3MqMjQpfWZ1bmN0aW9uIFdkKGUsdCxuKXtyZXR1cm4gZSgiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLW1ldHJpYy1jYXJkIixrZXk6dH0sZSgiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLW1ldHJpYy1sYWJlbCJ9LHQpLGUoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1tZXRyaWMtdmFsdWUifSxuKSl9ZnVuY3Rpb24gSnYoZSx0LG4pe3JldHVybiBlKCJzcGFuIix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLWxlZ2VuZC1pdGVtIixrZXk6bn0sZSgic3BhbiIse2NsYXNzTmFtZTpgcGVhay1ob3Vycy1sZWdlbmQtc3dhdGNoICR7dH1gfSksbil9ZnVuY3Rpb24gQmQoe2FwcDplLHNlbGVjdGVkRGF0ZTp0LGN1cnJlbnREYXRlOm59KXtsZXQgcj1WZS5jcmVhdGVFbGVtZW50LG89KDAsVmUudXNlUmVmKShudWxsKSxbYSxpXT0oMCxWZS51c2VTdGF0ZSkobnVsbCksW3MsbF09KDAsVmUudXNlU3RhdGUpKFtdKSx1PSgwLFZlLnVzZVJlZikobnVsbCksZD10fHxuOygwLFZlLnVzZUVmZmVjdCkoKCk9PntpZighZHx8IWUpcmV0dXJuO2xldHtmcm9tOnAsdG86RSxtb250aEtleTpTfT1EMShkKTtpZih1LmN1cnJlbnQ9PT1TKXJldHVybjt1LmN1cnJlbnQ9UztsZXQgeD0hMTtyZXR1cm4gZS5nZXRDb21wbGV0ZWRUYXNrcyhwLEUpLnRoZW4oTj0+e3h8fGwoQXJyYXkuaXNBcnJheShOKT9OOltdKX0pLmNhdGNoKE49PntPKCJbcGVhay1ob3Vyc10gZmFpbGVkIHRvIGZldGNoIG1vbnRoIHRhc2tzIixOKSx4fHxsKFtdKX0pLCgpPT57eD0hMH19LFtlLGRdKTtsZXR7Y3JlYXRlZEJ5SG91cjpjLGNvbXBsZXRlZEJ5SG91cjpoLHRvdGFsVGFza3M6dixwZWFrQ3JlYXRlSG91cjptLHBlYWtDb21wbGV0ZUhvdXI6d309KDAsVmUudXNlTWVtbykoKCk9PkMxKHMpLFtzXSkse21vbnRoU3VidGl0bGU6YixkYXRlUmFuZ2U6Z309KDAsVmUudXNlTWVtbykoKCk9PntpZighZClyZXR1cm57bW9udGhTdWJ0aXRsZTpudWxsLGRhdGVSYW5nZTpudWxsfTtsZXQgcD1udChkKSxFPXAuZ2V0RnVsbFllYXIoKSxTPXAuZ2V0TW9udGgoKTtyZXR1cm57bW9udGhTdWJ0aXRsZTpwLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOiJsb25nIix5ZWFyOiJudW1lcmljIn0pLGRhdGVSYW5nZTp7c3RhcnQ6bmV3IERhdGUoRSxTLDEpLGVuZDpuZXcgRGF0ZShFLFMrMSwwKX19fSxbZF0pOygwLFZlLnVzZUVmZmVjdCkoKCk9PntpZighby5jdXJyZW50KXJldHVybjtxdihvLmN1cnJlbnQsYyxoKTtsZXQgcD0oKT0+e28uY3VycmVudCYmcXYoby5jdXJyZW50LGMsaCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixwKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIscCl9LFtjLGhdKTtsZXQgZj0oMCxWZS51c2VDYWxsYmFjaykocD0+e2xldCBFPUExKG8uY3VycmVudCxwKTtpZihFPDB8fEU+MjMpe2kobnVsbCk7cmV0dXJufWxldCBTPW8uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpKHt4OnAuY2xpZW50WC1TLmxlZnQseTpwLmNsaWVudFktUy50b3AtNjAsaG91cjplbFtFXSxjcmVhdGVkOmNbRV0sY29tcGxldGVkOmhbRV19KX0sW2MsaF0pLHk9KDAsVmUudXNlQ2FsbGJhY2spKCgpPT5pKG51bGwpLFtdKTtyZXR1cm4gdj09PTA/cihYLHt0aXRsZTpaKFpzKSxpY29uOiJcdTIzRjAiLHdpZGdldElkOlpzLHN1YnRpdGxlOmJ9LHIoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1lbXB0eSJ9LHIoInAiLG51bGwsIk5vIGNvbXBsZXRlZCB0YXNrIGRhdGEgYXZhaWxhYmxlIHlldC4iKSkpOnIoWCx7dGl0bGU6WihacyksaWNvbjoiXHUyM0YwIix3aWRnZXRJZDpacyxzdWJ0aXRsZTpifSxyKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljcy1ncmlkIn0sV2QociwiVGFza3MgYW5hbHl6ZWQiLHYpLFdkKHIsIlBlYWsgY3JlYXRlIGhvdXIiLG0pLFdkKHIsIlBlYWsgY29tcGxldGUgaG91ciIsdykpLHIoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1sZWdlbmQifSxKdihyLCJwZWFrLWhvdXJzLWxlZ2VuZC1zd2F0Y2gtLWNyZWF0ZWQiLCJDcmVhdGVkIHZhbHVlIiksSnYociwicGVhay1ob3Vycy1sZWdlbmQtc3dhdGNoLS1jb21wbGV0ZWQiLCJDb21wbGV0ZWQgdmFsdWUiKSkscigiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLWNoYXJ0LWNvbnRhaW5lciJ9LHIoImNhbnZhcyIse3JlZjpvLGNsYXNzTmFtZToicGVhay1ob3Vycy1jYW52YXMiLG9uTW91c2VNb3ZlOmYsb25Nb3VzZUxlYXZlOnl9KSxhJiZyKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcCIsc3R5bGU6e2xlZnQ6YS54LHRvcDphLnksdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIn19LHIoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLWhlYWRlciJ9LGEuaG91cikscigiZGl2Iix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLXRvb2x0aXAtcm93In0scigic3BhbiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLWxhYmVsIHBlYWstaG91cnMtdG9vbHRpcC1sYWJlbC0tY3JlYXRlZCJ9LCJDcmVhdGVkOiIpLGAgJHthLmNyZWF0ZWR9IHB0c2ApLHIoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLXJvdyJ9LHIoInNwYW4iLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcC1sYWJlbCBwZWFrLWhvdXJzLXRvb2x0aXAtbGFiZWwtLWNvbXBsZXRlZCJ9LCJDb21wbGV0ZWQ6IiksYCAke2EuY29tcGxldGVkfSBwdHNgKSkpLGcmJnIoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1mb290ZXIifSxiKSl9dmFyIGNuPWxlKGllKCkpO2Z1bmN0aW9uIHRsKGUpe2xldCB0O2lmKGUgaW5zdGFuY2VvZiBEYXRlKXQ9ZTtlbHNle2xldCBhPXR5cGVvZiBlPT0ibnVtYmVyIiYmZTwxZTEwP2UqMWUzOmU7dD1uZXcgRGF0ZShhKX1sZXQgbj10LmdldEZ1bGxZZWFyKCkscj1TdHJpbmcodC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsIjAiKSxvPVN0cmluZyh0LmdldERhdGUoKSkucGFkU3RhcnQoMiwiMCIpO3JldHVybmAke259LSR7cn0tJHtvfWB9ZnVuY3Rpb24gbmwoZSl7cmV0dXJuIGUuc3RhcnRBdHx8ZS5kZWFkbGluZX1mdW5jdGlvbiBqZChlLHQsbj0oKT0+ITApe2xldCByPXt9LG89MCxhPW5ldyBEYXRlO3JldHVybiBlLmZvckVhY2goaT0+e2lmKG8rPTEsIW4oaSkpcmV0dXJuO2xldCBzPXQoaSk7aWYoIXMpcmV0dXJuO2xldCBsPXRsKHMpO3JbbF18fChyW2xdPVtdKSxyW2xdLnB1c2goaSl9KSxPKGBBbmFseXplZCAke299IHRhc2tzLCBncm91cGVkIGludG8gJHtPYmplY3Qua2V5cyhyKS5sZW5ndGh9IGRhdGUga2V5cyBpbiAke25ldyBEYXRlLWF9bXNgKSxyfWZ1bmN0aW9uIFh2KGUpe3JldHVybiBqZChlLG5sLHQ9PiF0LmNvbXBsZXRlZEF0JiYhdC5kaXNtaXNzZWRBdCl9ZnVuY3Rpb24gWnYoZSl7cmV0dXJuIGpkKGUsdD0+dC5jb21wbGV0ZWRBdCx0PT4hIXQuY29tcGxldGVkQXQpfWZ1bmN0aW9uIE8xKGUsdCl7bGV0IG49ZS5maWx0ZXIobz0+bz50KSxyPWUuZmlsdGVyKG89Pm88dCk7cmV0dXJue3VwY29taW5nRGF0ZUtleXM6bixvbGRlckRhdGVLZXlzOnJ9fWZ1bmN0aW9uIFIxKGUsdCl7bGV0IG49e307cmV0dXJuIHQuZm9yRWFjaChyPT57bltyXT1lW3JdfHxbXX0pLG59ZnVuY3Rpb24gVmQoKXtsZXRbZSx0XT0oMCxjbi51c2VTdGF0ZSkoW10pLFtuLHJdPSgwLGNuLnVzZVN0YXRlKShudWxsKSxbbyxhXT0oMCxjbi51c2VTdGF0ZSkobnVsbCksW2ksc109KDAsY24udXNlU3RhdGUpKHt9KSxbbCx1XT0oMCxjbi51c2VTdGF0ZSkoe30pLGQ9bmV3IERhdGUsYz0oMCxjbi51c2VDYWxsYmFjaykobT0+e2lmKCFtKXJldHVybjt0KG0udGFza0RvbWFpbnN8fFtdKSxyKG0uYWN0aXZlVGFza0RvbWFpbnx8bnVsbCk7bGV0IHc9bS50YXNrc3x8W107cyhYdih3KSksdShadih3KSksYShEYXRlLm5vdygpKX0sW10pLGg9KDAsY24udXNlQ2FsbGJhY2spKChtLHcsYik9PntpZihtJiZ0KG0pLHcmJnIodyksYil7bGV0IGc9Yi50YXNrc3x8W107cyhYdihnKSksdShadihnKSksYShEYXRlLm5vdygpKX19LFtdKSx2PSgwLGNuLnVzZUNhbGxiYWNrKShtPT57bGV0IHc9bT9uZXcgRGF0ZShtKTpuZXcgRGF0ZSxiPXRsKHcpLGc9T2JqZWN0LnZhbHVlcyhpKS5mbGF0KCksZj1nLmZpbHRlcih4PT4hISh4LnN0YXJ0QXR8fHguZGVhZGxpbmUpKS5zb3J0KCh4LE4pPT5ubCh4KS1ubChOKSk7TyhgQWdlbmRhIHdpbGwgcmV2aWV3ZWQgJHtnLmxlbmd0aH0gb3BlbiB0YXNrc2AsZy5tYXAoeD0+KHtkZWFkbGluZVRleHQ6eC5kZWFkbGluZT90bCh4LmRlYWRsaW5lKToiTi9BIixzdGFydFRleHQ6eC5zdGFydEF0P3RsKHguc3RhcnRBdCk6Ik5vbmUiLC4uLnh9KSkpLE8oYCR7Zi5sZW5ndGh9IHJlbGV2YW50ICh3aXRoIHN0YXJ0QXQpYCxmKTtsZXQgeT1qZChmLG5sKSxwPU9iamVjdC5rZXlzKHkpLnNvcnQoKSx7dXBjb21pbmdEYXRlS2V5czpFfT1PMShwLGIpLFM9W2IsLi4uRV07cmV0dXJuIFIxKHksUyl9LFtpXSk7cmV0dXJuIE8oYHVzZURvbWFpblRhc2tzIGluaXRpYWxpemVkIHdpdGggYWN0aXZlIGRvbWFpbiAke259IGluICR7bmV3IERhdGUtZH1tc2ApLHt0YXNrRG9tYWluczplLGFjdGl2ZVRhc2tEb21haW46bix0YXNrc0ZldGNoZWRBdDpvLG9wZW5UYXNrczppLGNvbXBsZXRlZFRhc2tzOmwsaW5pdGlhbGl6ZURvbWFpblRhc2tzOmMsb25Eb21haW5DaGFuZ2U6aCxidWlsZEFnZW5kYVRhc2tzQnlEYXRlOnZ9fXZhciBkZT1sZShpZSgpKTt2YXIgSTE9NWUzLGF5PTcsTTE9MyxvZT0yMjAsaXk9MTQsc3k9MixQMT00LEwxPTc4LHoxPTQwLGV5PTQsJDE9NDgsRjE9OTUsVTE9MTYsVzE9LjA0LEIxPTEyLGoxPTEyLHR5PS41LFYxPTEuOCxIMT0tNCxHMT01LG55PS43LEsxPTMuMyxZMT0xOCxxMT0yMixRMT0tNSxKMT0xMSxYMT0xMyxaMT0yNixlUz0xMCx0Uz0zMCxuUz00NCxyUz01LHJsPTEvMyxvUz0xLjMsYVM9W1swLCIjMjdBRTYwNTAiXSxbLjUsIiNGMkM5NEMyMCJdLFsxLCIjRTg0NTNDMDgiXV0saVM9MixzUz0zLjUsbFM9MS4yLHVTPTgscnk9LjMsY1M9MixkUz0xLHBTPTE2LGZTPTI4LG95PS43LGhTPTMsbVM9LTExLGdTPTE0LHZTPTU2LHlTPTQ2LHdTPTE2LHhTPTgsYlM9MzMsa1M9MTIsU1M9LjI1LEVTPS43NSxOUz0yNSxUUz0xMjAwLERTPTFlMyxseT0zLG9sPVt7dmFsdWU6LTIsZW1vamk6Ilx1ezFGNjM1fVx1MjAwRFx1ezFGNEFCfSIsbGFiZWw6IkF3ZnVsIn0se3ZhbHVlOi0xLGVtb2ppOiJcdXsxRkFFNH0iLGxhYmVsOiJCYWQifSx7dmFsdWU6MCxlbW9qaToiXHV7MUY2NDJ9IixsYWJlbDoiT2theSJ9LHt2YWx1ZToxLGVtb2ppOiJcdXsxRjYwMH0iLGxhYmVsOiJHb29kIn0se3ZhbHVlOjIsZW1vamk6Ilx1ezFGOTI5fSIsbGFiZWw6IkdyZWF0In1dLENTPXsiLTIiOiIjRTg0NTNDIiwiLTEiOiIjRjI5OTRBIiwwOiIjRjJDOTRDIiwxOiIjNkZDRjk3IiwyOiIjMjdBRTYwIn0sX1M9T2JqZWN0LmZyb21FbnRyaWVzKG9sLm1hcChlPT5bZS52YWx1ZSxlLmVtb2ppXSkpO2Z1bmN0aW9uIERvKGUpe3JldHVybiBDU1tNYXRoLnJvdW5kKGUpXXx8IiNjY2MifWZ1bmN0aW9uIHV5KGUpe3JldHVybiBfU1tNYXRoLnJvdW5kKGUpXXx8Ilx1Mjc1MyJ9ZnVuY3Rpb24gQVMoZSl7bGV0IHQ9b2wuZmluZChuPT5uLnZhbHVlPT09ZSk7cmV0dXJuIHQ/dC5sYWJlbDoiIn1mdW5jdGlvbiBjeShlKXtpZighZSlyZXR1cm4iIjtsZXR7ZnVsbERhdGU6dCxlbnRyaWVzOm59PWUscj1bYDxkaXYgY2xhc3M9Im1vb2Qtdml6LXRvb2x0aXAtZGF0ZSI+JHt0fTwvZGl2PmBdO2ZvcihsZXQgbyBvZiBuKXtsZXQgYT1vbC5maW5kKGw9PmwudmFsdWU9PT1vLnJhdGluZyk/LmVtb2ppfHwiXHUyNzUzIixpPUFTKG8ucmF0aW5nKSxzPWA8ZGl2IGNsYXNzPSJtb29kLXZpei10b29sdGlwLWVudHJ5Ij48c3BhbiBjbGFzcz0ibW9vZC12aXotdG9vbHRpcC10aW1lIj4ke28udGltZX08L3NwYW4+PHNwYW4gY2xhc3M9Im1vb2Qtdml6LXRvb2x0aXAtbW9vZCI+JHthfSAke2l9PC9zcGFuPmA7by5ub3RlcyYmKHMrPWA8ZGl2IGNsYXNzPSJtb29kLXZpei10b29sdGlwLW5vdGUiPiR7by5ub3Rlc308L2Rpdj5gKSxzKz0iPC9kaXY+IixyLnB1c2gocyl9cmV0dXJuIHIuam9pbigiIil9YXN5bmMgZnVuY3Rpb24gT1MoZSx0LG4scil7bGV0IG89Ik1vb2QgcmF0aW5nIGhpc3RvcnkiLGE9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpvfSk7YXx8KGE9e3V1aWQ6YXdhaXQgZS5jcmVhdGVOb3RlKG8sW3JuXSl9KTtsZXQgaT1uZXcgRGF0ZSxzPWkudG9JU09TdHJpbmcoKS5zcGxpdCgiVCIpWzBdLGw9aS50b1RpbWVTdHJpbmcoKS5zcGxpdCgiICIpWzBdLHU9YAojIyAke3N9ICR7bH0KKipNb29kOioqICR7bn0gKCR7dH0pCmA7cmV0dXJuIHImJih1Kz1gKipOb3RlczoqKiAke3J9CmApLGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoYSx1LHthdEVuZDohMH0pLCEwfWZ1bmN0aW9uIFJTKGUsdCxuLHIpe3R8fG58fHIoZSl9ZnVuY3Rpb24gSVMoZSx0LG4scixvLGEsaSl7dC5rZXk9PT0iRW50ZXIiJiYodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGR5KGUsbixyLG8sYSxpKSl9YXN5bmMgZnVuY3Rpb24gZHkoZSx0LG4scixvLGEpe3IoITApO3RyeXthd2FpdCBlLnJlY29yZE1vb2RSYXRpbmcodC52YWx1ZSksYXdhaXQgT1MoZSx0LnZhbHVlLHQubGFiZWwsbi50cmltKCkpLG8oITApLGEmJmEoe3JhdGluZzp0LnZhbHVlLHRpbWVzdGFtcDpNYXRoLmZsb29yKERhdGUubm93KCkvMWUzKX0pfWNhdGNoKGkpe08oIkZhaWxlZCB0byByZWNvcmQgbW9vZDoiLGkpfWZpbmFsbHl7cighMSl9fWZ1bmN0aW9uIE1TKGUpe2xldCB0PShlfHxbXSkuc2xpY2UoLWF5KTtpZighdC5sZW5ndGgpcmV0dXJue3JlY2VudE1vb2RzOnQsYXZlcmFnZU1vb2Q6Ilx1MjAxNCJ9O2xldCBuPSh0LnJlZHVjZSgocixvKT0+citvLnJhdGluZywwKS90Lmxlbmd0aCkudG9GaXhlZCgxKTtyZXR1cm57cmVjZW50TW9vZHM6dCxhdmVyYWdlTW9vZDpufX1mdW5jdGlvbiBweSgpe2xldCBlPWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx0PW49PmUuZ2V0UHJvcGVydHlWYWx1ZShuKS50cmltKCk7cmV0dXJue2JnQ2FyZDp0KCItLWRhc2hib2FyZC1jb2xvci1iZy1jYXJkIiksYmdQYWdlOnQoIi0tZGFzaGJvYXJkLWNvbG9yLWJnLXBhZ2UiKSxib3JkZXI6dCgiLS1kYXNoYm9hcmQtY29sb3ItYm9yZGVyIiksdGV4dFNlY29uZGFyeTp0KCItLWRhc2hib2FyZC1jb2xvci10ZXh0LXNlY29uZGFyeSIpLHRleHRNdXRlZDp0KCItLWRhc2hib2FyZC1jb2xvci10ZXh0LW11dGVkIil9fWZ1bmN0aW9uIEhkKGUsdCl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiIyIpJiZlLmxlbmd0aD09PTc/ZSt0OmV9ZnVuY3Rpb24gUFMoe21vb2REYXRhOmV9KXtsZXQgdD1kZS5jcmVhdGVFbGVtZW50LG49KDAsZGUudXNlUmVmKShudWxsKSxyPSgwLGRlLnVzZVJlZikobnVsbCksW28sYV09KDAsZGUudXNlU3RhdGUpKDApLGk9emEoKSxzPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybigwLGRlLnVzZUVmZmVjdCkoKCk9PnthKDApO2xldCBkLGM9bnVsbCxoPVRTLHY9bT0+e2N8fChjPW0pO2xldCB3PU1hdGgubWluKChtLWMpL2gsMSksYj0xLU1hdGgucG93KDEtdyxseSk7YShiKSx3PDEmJihkPXJlcXVlc3RBbmltYXRpb25GcmFtZSh2KSl9O3JldHVybiBkPXJlcXVlc3RBbmltYXRpb25GcmFtZSh2KSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZCl9LFtzXSksKDAsZGUudXNlRWZmZWN0KSgoKT0+e2xldCBkPW4uY3VycmVudDtpZighZClyZXR1cm47bGV0IGM9ZC5nZXRDb250ZXh0KCIyZCIpLGg9d2luZG93LmRldmljZVBpeGVsUmF0aW98fHN5O2Qud2lkdGg9b2UqaCxkLmhlaWdodD1vZSpoLGMuc2NhbGUoaCxoKSxjLmNsZWFyUmVjdCgwLDAsb2Usb2UpO2xldCB2PXB5KCksbT1vZS8yLHc9b2UvMitQMSxiPUwxLGc9ejE7Yy5maWxsU3R5bGU9di5iZ0NhcmQsYy5iZWdpblBhdGgoKSxjLnJvdW5kUmVjdCgwLDAsb2Usb2UsaXkpLGMuZmlsbCgpLGMuc3Ryb2tlU3R5bGU9SGQodi5ib3JkZXIsIjI4IiksYy5saW5lV2lkdGg9MTtmb3IobGV0IFM9JDE7Uzw9RjE7Uys9VTEpYy5iZWdpblBhdGgoKSxjLmFyYyhtLHcsUywwLE1hdGguUEkqMiksYy5zdHJva2UoKTtsZXQgZj1lLm1hcChTPT4oe2xhYmVsOlMuZGF5TGFiZWwsZGF0ZUxhYmVsOlMuZGF0ZUxhYmVsLHZhbDpTLnJhdGluZ30pKSx5PU1hdGgubWF4KGYubGVuZ3RoLDEpLHA9TWF0aC5QSSoyL3ksRT1mLmxlbmd0aD4xP1cxOjA7aWYoci5jdXJyZW50PXtjZW50ZXJYOm0sY2VudGVyWTp3LGlubmVyUmFkaXVzOmcsb3V0ZXJSYWRpdXM6YixzZWdtZW50Q291bnQ6Zi5sZW5ndGgsc2VnbWVudEFuZ2xlOnAsZ2FwQW5nbGU6RX0sZi5mb3JFYWNoKCh7bGFiZWw6UyxkYXRlTGFiZWw6eCx2YWw6Tn0sQyk9PntsZXQgaz0tTWF0aC5QSS8yK0MqcCtFLEE9aysocC1FKjIpKm8sUj1EbyhOKTtjLnNoYWRvd0NvbG9yPVIsYy5zaGFkb3dCbHVyPUIxKm8sYy5iZWdpblBhdGgoKSxjLmFyYyhtLHcsYixrLEEpLGMuYXJjKG0sdyxnLEEsaywhMCksYy5jbG9zZVBhdGgoKTtsZXQgVD1jLmNyZWF0ZVJhZGlhbEdyYWRpZW50KG0sdyxnLG0sdyxiKTtpZihULmFkZENvbG9yU3RvcCgwLFIrIjk5IiksVC5hZGRDb2xvclN0b3AoMSxSKyJmZiIpLGMuZmlsbFN0eWxlPVQsYy5maWxsKCksYy5zaGFkb3dCbHVyPTAsbz50eSl7bGV0IFA9aysocC1FKjIpLzIsVT1iK2oxLEY9bStNYXRoLmNvcyhQKSpVLFc9dytNYXRoLnNpbihQKSpVO2MuZmlsbFN0eWxlPXYudGV4dFNlY29uZGFyeSxjLmdsb2JhbEFscGhhPShvLXR5KSpWMSxjLmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMudGV4dEFsaWduPSJjZW50ZXIiLGMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGMuZmlsbFRleHQoUyxGLFcrSDEpLGMuZm9udD0iN3B4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMuZmlsbFN0eWxlPXYudGV4dE11dGVkLGMuZmlsbFRleHQoeCxGLFcrRzEpLGMuZ2xvYmFsQWxwaGE9MX1pZihvPm55KXtsZXQgUD1rKyhwLUUqMikvMixVPShiK2cpLzIsRj1tK01hdGguY29zKFApKlUsVz13K01hdGguc2luKFApKlU7Yy5mb250PSIxM3B4IHNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0ibWlkZGxlIixjLmdsb2JhbEFscGhhPU1hdGgubWluKChvLW55KSpLMSwxKSxjLmZpbGxUZXh0KHV5KE4pLEYsVyksYy5nbG9iYWxBbHBoYT0xfX0pLGMuYmVnaW5QYXRoKCksYy5hcmMobSx3LGctZXksMCxNYXRoLlBJKjIpLGMuZmlsbFN0eWxlPXYuYmdQYWdlLGMuZmlsbCgpLGYubGVuZ3RoPjApe2xldCBTPShmLnJlZHVjZSgoeCxOKT0+eCtOLnZhbCwwKS9mLmxlbmd0aCkudG9GaXhlZCgxKTtjLmZpbGxTdHlsZT1EbyhNYXRoLnJvdW5kKE51bWJlcihTKSkpLGMuZm9udD1gYm9sZCAke3ExfXB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWZgLGMudGV4dEFsaWduPSJjZW50ZXIiLGMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGMuZ2xvYmFsQWxwaGE9byxjLmZpbGxUZXh0KFMsbSx3K1ExKSxjLmZpbGxTdHlsZT12LnRleHRNdXRlZCxjLmZvbnQ9ImJvbGQgN3B4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLGMuZmlsbFRleHQoIjctREFZIEFWRyIsbSx3K0oxKSxjLmdsb2JhbEFscGhhPTF9Yy5maWxsU3R5bGU9di50ZXh0TXV0ZWQsYy5mb250PSJib2xkIDhweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsYy5maWxsVGV4dCgiVyBFIEUgSyAgIFIgSSBOIEciLG0sWDEpfSxbcyxvXSksdCgiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbGluZUhlaWdodDowfX0sdCgiY2FudmFzIix7cmVmOm4sY2xhc3NOYW1lOiJtb29kLXZpei1jYW52YXMiLG9uTW91c2VNb3ZlOmQ9PntsZXQgYz1yLmN1cnJlbnQsaD1uLmN1cnJlbnQ7aWYoIWN8fCFjLnNlZ21lbnRDb3VudHx8IWgpe2kuaGlkZSgpO3JldHVybn1sZXQgdj1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09KGQuY2xpZW50WC12LmxlZnQpKihvZS92LndpZHRoKSx3PShkLmNsaWVudFktdi50b3ApKihvZS92LmhlaWdodCksYj1tLWMuY2VudGVyWCxnPXctYy5jZW50ZXJZLGY9TWF0aC5zcXJ0KGIqYitnKmcpO2lmKGY8Yy5pbm5lclJhZGl1cy1leXx8Zj5jLm91dGVyUmFkaXVzK1kxKXtpLmhpZGUoKTtyZXR1cm59bGV0IHk9TWF0aC5hdGFuMihnLGIpK01hdGguUEkvMjt5PDAmJih5Kz1NYXRoLlBJKjIpO2xldCBwPU1hdGguZmxvb3IoeS9jLnNlZ21lbnRBbmdsZSk7aWYocD49MCYmcDxjLnNlZ21lbnRDb3VudCl7bGV0IEU9ZVtwXSxTPXYubGVmdCttL29lKnYud2lkdGgseD12LnRvcCt3L29lKnYuaGVpZ2h0O2kuc2hvdyhjeSh7ZnVsbERhdGU6RS5mdWxsRGF0ZSxlbnRyaWVzOkUuZW50cmllc3x8W0VdfSksUyx4KX1lbHNlIGkuaGlkZSgpfSxvbk1vdXNlTGVhdmU6KCk9PmkuaGlkZSgpfSkpfWZ1bmN0aW9uIExTKHttb29kRGF0YTplfSl7bGV0IHQ9ZGUuY3JlYXRlRWxlbWVudCxuPSgwLGRlLnVzZVJlZikobnVsbCkscj0oMCxkZS51c2VSZWYpKFtdKSxbbyxhXT0oMCxkZS51c2VTdGF0ZSkoMCksaT16YSgpLHM9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuKDAsZGUudXNlRWZmZWN0KSgoKT0+e2EoMCk7bGV0IGQsYz1udWxsLGg9RFMsdj1tPT57Y3x8KGM9bSk7bGV0IHc9TWF0aC5taW4oKG0tYykvaCwxKTthKDEtTWF0aC5wb3coMS13LGx5KSksdzwxJiYoZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodikpfTtyZXR1cm4gZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodiksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGQpfSxbc10pLCgwLGRlLnVzZUVmZmVjdCkoKCk9PntsZXQgZD1uLmN1cnJlbnQ7aWYoIWQpcmV0dXJuO2xldCBjPWQuZ2V0Q29udGV4dCgiMmQiKSxoPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHxzeTtkLndpZHRoPW9lKmgsZC5oZWlnaHQ9b2UqaCxjLnNjYWxlKGgsaCksYy5jbGVhclJlY3QoMCwwLG9lLG9lKTtsZXQgdj1weSgpO2MuYmVnaW5QYXRoKCksYy5yb3VuZFJlY3QoMCwwLG9lLG9lLGl5KSxjLmZpbGxTdHlsZT12LmJnQ2FyZCxjLmZpbGwoKTtsZXQgbT1aMSx3PWVTLGI9dFMsZz1uUyxmPW9lLW0tdyx5PW9lLWItZyxwPWIreTtmb3IobGV0IGs9LTI7azw9MjtrKyspe2xldCBBPWIreS0oaysyKS80Knk7Yy5zdHJva2VTdHlsZT1IZCh2LmJvcmRlciwiNTAiKSxjLmxpbmVXaWR0aD0xLGMuYmVnaW5QYXRoKCksYy5tb3ZlVG8obSxBKSxjLmxpbmVUbyhvZS13LEEpLGMuc3Ryb2tlKCksYy5maWxsU3R5bGU9di50ZXh0TXV0ZWQsYy5mb250PSJib2xkIDhweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0icmlnaHQiLGMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGMuZmlsbFRleHQoaz4wP2ArJHtrfWA6ayxtLXJTLEEpfWxldCBFPWUubWFwKGs9Pih7bGFiZWw6ay5kYXlMYWJlbCxkYXRlTGFiZWw6ay5kYXRlTGFiZWwsdmFsOmsucmF0aW5nfSkpLFM9KGssQSk9PkE9PT0xP20rZi8yOkE9PT0yP20rZiooaz09PTA/U1M6RVMpOm0ray8oQS0xKSpmLHg9RS5tYXAoKGssQSk9Pih7eDpTKEEsRS5sZW5ndGgpLHk6Yit5LShrLnZhbCsyKS80KnksdmFsOmsudmFsLGxhYmVsOmsubGFiZWwsZGF0ZUxhYmVsOmsuZGF0ZUxhYmVsfSkpO3IuY3VycmVudD14O2xldCBOPXgubWFwKGs9Pih7Li4uayx5OmIreS0oay52YWwrMikvNCp5Kk1hdGgubWluKG8qb1MsMSl9KSksQz0oayxBKT0+e2MuYmVnaW5QYXRoKCksYy5tb3ZlVG8oa1swXS54LGtbMF0ueSk7Zm9yKGxldCBSPTA7UjxrLmxlbmd0aC0xO1IrKyl7bGV0IFQ9a1tSKzFdLngta1tSXS54LFA9a1tSXS54K1QqcmwsVT1rW1IrMV0ueC1UKnJsO2MuYmV6aWVyQ3VydmVUbyhQLGtbUl0ueSxVLGtbUisxXS55LGtbUisxXS54LGtbUisxXS55KX1BJiYoYy5saW5lVG8oa1trLmxlbmd0aC0xXS54LHApLGMubGluZVRvKGtbMF0ueCxwKSxjLmNsb3NlUGF0aCgpKX07aWYoTi5sZW5ndGg+PTIpe2xldCBrPWMuY3JlYXRlTGluZWFyR3JhZGllbnQoMCxiLDAscCk7Zm9yKGxldFtBLFJdb2YgYVMpay5hZGRDb2xvclN0b3AoQSxSKTtDKE4sITApLGMuZmlsbFN0eWxlPWssYy5maWxsKCksYy5saW5lV2lkdGg9aVMsYy5saW5lQ2FwPSJyb3VuZCI7Zm9yKGxldCBBPTA7QTxOLmxlbmd0aC0xO0ErKyl7bGV0IFI9TltBXSxUPU5bQSsxXSxQPWMuY3JlYXRlTGluZWFyR3JhZGllbnQoUi54LFIueSxULngsVC55KTtQLmFkZENvbG9yU3RvcCgwLERvKFIudmFsKSksUC5hZGRDb2xvclN0b3AoMSxEbyhULnZhbCkpLGMuc3Ryb2tlU3R5bGU9UCxjLmJlZ2luUGF0aCgpO2xldCBVPVQueC1SLngsRj1SLngrVSpybCxXPVQueC1VKnJsO2MubW92ZVRvKFIueCxSLnkpLGMuYmV6aWVyQ3VydmVUbyhGLFIueSxXLFQueSxULngsVC55KSxjLnN0cm9rZSgpfX1pZihvPnJ5JiZOLmZvckVhY2goaz0+e2xldCBBPU1hdGgubWluKChvLXJ5KSpjUywxKSxSPURvKGsudmFsKTtjLnNoYWRvd0NvbG9yPVIsYy5zaGFkb3dCbHVyPXVTLGMuYmVnaW5QYXRoKCksYy5hcmMoay54LGsueSxzUywwLE1hdGguUEkqMiksYy5maWxsU3R5bGU9UixjLmdsb2JhbEFscGhhPUEsYy5maWxsKCksYy5zaGFkb3dCbHVyPTAsYy5iZWdpblBhdGgoKSxjLmFyYyhrLngsay55LGxTLDAsTWF0aC5QSSoyKSxjLmZpbGxTdHlsZT12LmJnQ2FyZCxjLmZpbGwoKSxjLmdsb2JhbEFscGhhPTEsYy5maWxsU3R5bGU9di50ZXh0U2Vjb25kYXJ5LGMuZ2xvYmFsQWxwaGE9QSpkUyxjLmZvbnQ9ImJvbGQgMTBweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLnRleHRBbGlnbj0iY2VudGVyIixjLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsYy5maWxsVGV4dChrLmxhYmVsLGsueCxwK3BTKSxjLmZvbnQ9IjlweCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmIixjLmZpbGxUZXh0KGsuZGF0ZUxhYmVsLGsueCxwK2ZTKSxjLmdsb2JhbEFscGhhPTEsbz5veSYmKGMuZ2xvYmFsQWxwaGE9TWF0aC5taW4oKG8tb3kpKmhTLDEpLGMuZm9udD0iMTFweCBzZXJpZiIsYy5maWxsVGV4dCh1eShrLnZhbCksay54LGsueSttUyksYy5nbG9iYWxBbHBoYT0xKX0pLGMuZmlsbFN0eWxlPXYudGV4dE11dGVkLGMuZm9udD0iYm9sZCA4cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsYy50ZXh0QWxpZ249ImNlbnRlciIsYy50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLGMuZmlsbFRleHQoIk0gTyBPIEQgICBXIEEgViBFIixvZS8yLGdTKSxFLmxlbmd0aD4wKXtsZXQgaz0oRS5yZWR1Y2UoKFIsVCk9PlIrVC52YWwsMCkvRS5sZW5ndGgpLnRvRml4ZWQoMSksQT1EbyhNYXRoLnJvdW5kKE51bWJlcihrKSkpO2MuZmlsbFN0eWxlPUhkKEEsIjIyIiksYy5iZWdpblBhdGgoKSxjLnJvdW5kUmVjdChvZS12Uyw0LHlTLHdTLHhTKSxjLmZpbGwoKSxjLmZpbGxTdHlsZT1BLGMuZm9udD0iYm9sZCA4cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsYy50ZXh0QWxpZ249ImNlbnRlciIsYy50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsYy5maWxsVGV4dChgQXZnICR7a31gLG9lLWJTLGtTKX19LFtzLG9dKSx0KCJkaXYiLHtzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixsaW5lSGVpZ2h0OjB9fSx0KCJjYW52YXMiLHtyZWY6bixjbGFzc05hbWU6Im1vb2Qtdml6LWNhbnZhcyIsb25Nb3VzZU1vdmU6ZD0+e2xldCBjPW4uY3VycmVudDtpZighYylyZXR1cm47bGV0IGg9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PShkLmNsaWVudFgtaC5sZWZ0KSoob2UvaC53aWR0aCksbT0oZC5jbGllbnRZLWgudG9wKSoob2UvaC5oZWlnaHQpLHc9ci5jdXJyZW50O2lmKCF3fHwhdy5sZW5ndGgpe2kuaGlkZSgpO3JldHVybn1sZXQgYj0tMSxnPU5TO2ZvcihsZXQgZj0wO2Y8dy5sZW5ndGg7ZisrKXtsZXQgeT12LXdbZl0ueCxwPW0td1tmXS55LEU9TWF0aC5zcXJ0KHkqeStwKnApO0U8ZyYmKGc9RSxiPWYpfWlmKGI+PTApe2xldCBmPXdbYl0seT1lW2JdLHA9aC5sZWZ0K2YueC9vZSpoLndpZHRoLEU9aC50b3ArZi55L29lKmguaGVpZ2h0O2kuc2hvdyhjeSh7ZnVsbERhdGU6eS5mdWxsRGF0ZSxlbnRyaWVzOnkuZW50cmllc3x8W3ldfSkscCxFKX1lbHNlIGkuaGlkZSgpfSxvbk1vdXNlTGVhdmU6KCk9PmkuaGlkZSgpfSkpfWZ1bmN0aW9uIHpTKGUpe2xldCB0PVsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbj1bLi4uZXx8W11dLnNvcnQoKGEsaSk9PihhLnRpbWVzdGFtcHx8MCktKGkudGltZXN0YW1wfHwwKSk7aWYobi5sZW5ndGgpY29uc29sZS5sb2coIkZvdW5kIGV4aXN0aW5nIHJhdGluZ3MiKTtlbHNlIHJldHVybiBjb25zb2xlLmxvZygiTm8gcmF0aW5ncyBmb3VuZCwgcmV0dXJuaW5nIFtdIiksW107bGV0IHI9bmV3IE1hcDtmb3IobGV0IGEgb2Ygbil7bGV0IGk9YS50aW1lc3RhbXA/bmV3IERhdGUoYS50aW1lc3RhbXAqMWUzKTpuZXcgRGF0ZSxzPWAke2kuZ2V0RnVsbFllYXIoKX0tJHtpLmdldE1vbnRoKCkrMX0tJHtpLmdldERhdGUoKX1gO3IuaGFzKHMpfHxyLnNldChzLHtkYXlMYWJlbDp0W2kuZ2V0RGF5KCldLGRhdGVMYWJlbDpgJHtpLmdldE1vbnRoKCkrMX0vJHtpLmdldERhdGUoKX1gLGRhdGVLZXk6cyxmdWxsRGF0ZTppLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHt3ZWVrZGF5OiJsb25nIix5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIn0pLGVudHJpZXM6W10scmF0aW5nU3VtOjAscmF0aW5nQ291bnQ6MH0pO2xldCBsPXIuZ2V0KHMpO2wuZW50cmllcy5wdXNoKHtyYXRpbmc6YS5yYXRpbmcsdGltZTooYS50aW1lc3RhbXA/bmV3IERhdGUoYS50aW1lc3RhbXAqMWUzKTpuZXcgRGF0ZSkudG9Mb2NhbGVUaW1lU3RyaW5nKCJlbi1VUyIse2hvdXI6Im51bWVyaWMiLG1pbnV0ZToiMi1kaWdpdCJ9KSxub3RlczphLm5vdGVzfHxhLm5vdGV8fG51bGwsdGltZXN0YW1wOmEudGltZXN0YW1wfSksbC5yYXRpbmdTdW0rPWEucmF0aW5nLGwucmF0aW5nQ291bnQrPTF9cmV0dXJuWy4uLnIudmFsdWVzKCldLnNsaWNlKC1heSkubWFwKGE9Pih7cmF0aW5nOmEucmF0aW5nU3VtL2EucmF0aW5nQ291bnQsZGF5TGFiZWw6YS5kYXlMYWJlbCxkYXRlTGFiZWw6YS5kYXRlTGFiZWwsZGF0ZUtleTphLmRhdGVLZXksZnVsbERhdGU6YS5mdWxsRGF0ZSx0aW1lOmEuZW50cmllc1thLmVudHJpZXMubGVuZ3RoLTFdLnRpbWUsdGltZXN0YW1wOmEuZW50cmllc1thLmVudHJpZXMubGVuZ3RoLTFdLnRpbWVzdGFtcCxub3RlczphLmVudHJpZXNbYS5lbnRyaWVzLmxlbmd0aC0xXS5ub3RlcyxlbnRyaWVzOmEuZW50cmllc30pKX1mdW5jdGlvbiAkUyhlLHQsbixyLG8sYSl7bGV0IGk9ZTtpZighKHR8fFtdKS5sZW5ndGgpcmV0dXJuIGkoImRpdiIse2NsYXNzTmFtZToibW9vZC1zdW1tYXJ5In0saSgic3BhbiIsbnVsbCwiQXZnIG1vb2QgKDdkKTogIituKSk7bGV0IHM9elModCksbD1yPT09IndhdmUiP2koTFMse2tleTpvLG1vb2REYXRhOnN9KTppKFBTLHtrZXk6byxtb29kRGF0YTpzfSk7cmV0dXJuIGkoImRpdiIse2NsYXNzTmFtZToibW9vZC12aXotc2VjdGlvbiJ9LGkoImRpdiIse2NsYXNzTmFtZToibW9vZC12aXotY2FudmFzLXdyYXAifSxsKSxpKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2Qtdml6LWNvbmZpZ3VyZS1saW5rIixvbkNsaWNrOmF9LCJcdTI2OTkgQ29uZmlndXJlIikpfWZ1bmN0aW9uIEdkKHthcHA6ZSxtb29kUmF0aW5nczp0LG9uTW9vZFJlY29yZGVkOm59KXtsZXQgcj1kZS5jcmVhdGVFbGVtZW50LFtvLGFdPSgwLGRlLnVzZVN0YXRlKShudWxsKSxbaSxzXT0oMCxkZS51c2VTdGF0ZSkoIiIpLFtsLHVdPSgwLGRlLnVzZVN0YXRlKSghMSksW2QsY109KDAsZGUudXNlU3RhdGUpKCExKSx2PWZvKGUsIm1vb2QiKVswXXx8InJpbmciLFttLHddPSgwLGRlLnVzZVN0YXRlKSh2KSxbYixnXT0oMCxkZS51c2VTdGF0ZSkodiksW2YseV09KDAsZGUudXNlU3RhdGUpKDApLFtwLEVdPSgwLGRlLnVzZVN0YXRlKSghMSk7KDAsZGUudXNlRWZmZWN0KSgoKT0+e2lmKCFkKXJldHVybjtsZXQgVD1zZXRUaW1lb3V0KCgpPT57YyghMSksYShudWxsKSxzKCIiKX0sSTEpO3JldHVybigpPT5jbGVhclRpbWVvdXQoVCl9LFtkXSk7bGV0IFM9KCk9PntnKG0pLEUoITApfSx4PSgpPT57dyhiKSx5KFQ9PlQrMSksRSghMSksZS5zZXRTZXR0aW5nKG9uKCJtb29kIiksSlNPTi5zdHJpbmdpZnkoW2JdKSl9LE49KCk9PntnKG0pLEUoITEpfSxDPSgpPT57YShudWxsKSxzKCIiKX0se2F2ZXJhZ2VNb29kOmt9PU1TKHQpLEE9JFMocix0LGssbSxmLFMpLFI9cD9yKEFuLHt0aXRsZToiTW9vZCBWaXN1YWxpemF0aW9uIixvblN1Ym1pdDp4LG9uQ2FuY2VsOk4sc3VibWl0TGFiZWw6IkFwcGx5In0scigiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQifSxyKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCJ9LCJEaXNwbGF5IHN0eWxlIiksW1sicmluZyIsIlJpbmciXSxbIndhdmUiLCJXYXZlIl1dLm1hcCgoW1QsUF0pPT5yKCJsYWJlbCIse2tleTpULGNsYXNzTmFtZToibW9vZC12aXotY29uZmlnLW9wdGlvbiJ9LHIoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6Im1vb2Qtdml6LW1vZGUiLHZhbHVlOlQsY2hlY2tlZDpiPT09VCxvbkNoYW5nZTooKT0+ZyhUKX0pLFApKSkpOm51bGw7cmV0dXJuIGQ/cihYLHt0aXRsZTpaKCJtb29kIiksaWNvbjoiXHV7MUYzQUR9Iix3aWRnZXRJZDoibW9vZCJ9LFIscigiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLWNvbmZpcm1hdGlvbiJ9LHIoImRpdiIse2NsYXNzTmFtZToibW9vZC1jb25maXJtYXRpb24taWNvbiJ9LG8uZW1vamkpLHIoInAiLHtjbGFzc05hbWU6Im1vb2QtY29uZmlybWF0aW9uLXRleHQifSwiTW9vZCByYXRpbmcgcmVjb3JkZWQiKSksQSk6cihYLHt0aXRsZTpaKCJtb29kIiksaWNvbjoiXHV7MUYzQUR9Iix3aWRnZXRJZDoibW9vZCJ9LFIscigiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLXNlbGVjdG9yIn0sb2wubWFwKFQ9PnIoImJ1dHRvbiIse2tleTpULnZhbHVlLGNsYXNzTmFtZToibW9vZC1idG4iKyhvPy52YWx1ZT09PVQudmFsdWU/IiBtb29kLWJ0bi0tc2VsZWN0ZWQiOiIiKSx0aXRsZTpULmxhYmVsLG9uQ2xpY2s6KCk9PlJTKFQsbCxkLGEpfSxyKCJzcGFuIix7Y2xhc3NOYW1lOiJtb29kLWVtb2ppIn0sVC5lbW9qaSkpKSksbyE9PW51bGwmJnIoImRpdiIse2NsYXNzTmFtZToibW9vZC1kZXRhaWxzIn0scigibGFiZWwiLHtjbGFzc05hbWU6Im1vb2QtZGV0YWlscy1sYWJlbCJ9LCJNb3JlIGRldGFpbHMgKG9wdGlvbmFsKSIpLHIoInRleHRhcmVhIix7Y2xhc3NOYW1lOiJtb29kLWRldGFpbHMtdGV4dGFyZWEiLHZhbHVlOmksb25DaGFuZ2U6VD0+cyhULnRhcmdldC52YWx1ZSksb25LZXlEb3duOlQ9PklTKGUsVCxvLGksdSxjLG4pLHBsYWNlaG9sZGVyOiJXaGF0J3Mgb24geW91ciBtaW5kPyIscm93czpNMX0pKSxvIT09bnVsbCYmcigiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLXN1Ym1pdC1yb3cifSxyKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2QtY2FuY2VsLWJ0biIsb25DbGljazpDLGRpc2FibGVkOmx9LCJDYW5jZWwiKSxyKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2Qtc3VibWl0LWJ0biIsb25DbGljazooKT0+ZHkoZSxvLGksdSxjLG4pLGRpc2FibGVkOmx9LGw/IlJlY29yZGluZy4uLiI6IlN1Ym1pdCIpKSxvPT09bnVsbCYmQSl9dmFyIHJyPWxlKGllKCkpO3ZhciBGUz1be3RleHQ6IlRoZSBzZWNyZXQgb2YgZ2V0dGluZyBhaGVhZCBpcyBnZXR0aW5nIHN0YXJ0ZWQuIixhdXRob3I6Ik1hcmsgVHdhaW4ifSx7dGV4dDoiWW91IGRvbid0IGhhdmUgdG8gYmUgZ3JlYXQgdG8gc3RhcnQsIGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB0byBiZSBncmVhdC4iLGF1dGhvcjoiWmlnIFppZ2xhciJ9LHt0ZXh0OiJBY3Rpb24gaXMgdGhlIGZvdW5kYXRpb25hbCBrZXkgdG8gYWxsIHN1Y2Nlc3MuIixhdXRob3I6IlBhYmxvIFBpY2Fzc28ifSx7dGV4dDoiRG9uZSBpcyBiZXR0ZXIgdGhhbiBwZXJmZWN0LiIsYXV0aG9yOiJTaGVyeWwgU2FuZGJlcmcifSx7dGV4dDoiQW1hdGV1cnMgc2l0IGFuZCB3YWl0IGZvciBpbnNwaXJhdGlvbjsgdGhlIHJlc3Qgb2YgdXMganVzdCBnZXQgdXAgYW5kIGdvIHRvIHdvcmsuIixhdXRob3I6IlN0ZXBoZW4gS2luZyJ9LHt0ZXh0OiJUaGUgd2F5IHRvIGdldCBzdGFydGVkIGlzIHRvIHF1aXQgdGFsa2luZyBhbmQgYmVnaW4gZG9pbmcuIixhdXRob3I6IldhbHQgRGlzbmV5In0se3RleHQ6IkZvY3VzIG9uIGJlaW5nIHByb2R1Y3RpdmUgaW5zdGVhZCBvZiBidXN5LiIsYXV0aG9yOiJUaW0gRmVycmlzcyJ9LHt0ZXh0OiJJdCdzIG5vdCBhYm91dCBoYXZpbmcgdGltZS4gSXQncyBhYm91dCBtYWtpbmcgdGltZS4iLGF1dGhvcjoiIn0se3RleHQ6IldvcmsgZXhwYW5kcyB0byBmaWxsIHRoZSB0aW1lIGF2YWlsYWJsZSBmb3IgaXRzIGNvbXBsZXRpb24uIixhdXRob3I6IkN5cmlsIE5vcnRoY290ZSBQYXJraW5zb24ifSx7dGV4dDoiU3RvcCB3YWl0aW5nIGZvciB0aGUgcmlnaHQgdGltZS4gVGhlIHRpbWUgd2lsbCBuZXZlciBiZSBqdXN0IHJpZ2h0LiIsYXV0aG9yOiJOYXBvbGVvbiBIaWxsIn0se3RleHQ6Ik1vdGl2YXRpb24gaXMgd2hhdCBnZXRzIHlvdSBzdGFydGVkLiBIYWJpdCBpcyB3aGF0IGtlZXBzIHlvdSBnb2luZy4iLGF1dGhvcjoiSmltIFJ5dW4ifSx7dGV4dDoiSWYgeW91IHNwZW5kIHRvbyBtdWNoIHRpbWUgdGhpbmtpbmcgYWJvdXQgYSB0aGluZywgeW91J2xsIG5ldmVyIGdldCBpdCBkb25lLiIsYXV0aG9yOiJCcnVjZSBMZWUifSx7dGV4dDoiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmRpbmFyeSBhbmQgZXh0cmFvcmRpbmFyeSBpcyB0aGF0IGxpdHRsZSAnZXh0cmEnLiIsYXV0aG9yOiIifSx7dGV4dDoiRWZmaWNpZW5jeSBpcyBkb2luZyB0aGluZ3MgcmlnaHQuIEVmZmVjdGl2ZW5lc3MgaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5ncy4iLGF1dGhvcjoiUGV0ZXIgRHJ1Y2tlciJ9LHt0ZXh0OiJZb3UgYXJlIG5ldmVyIHRvbyBvbGQgdG8gc2V0IGFub3RoZXIgZ29hbCBvciB0byBkcmVhbSBhIG5ldyBkcmVhbS4iLGF1dGhvcjoiQy5TLiBMZXdpcyJ9LHt0ZXh0OiJTbWFsbCBkYWlseSBpbXByb3ZlbWVudHMgYXJlIHRoZSBrZXkgdG8gc3RhZ2dlcmluZyBsb25nLXRlcm0gcmVzdWx0cy4iLGF1dGhvcjoiUm9iaW4gU2hhcm1hIn0se3RleHQ6IkRyZWFtcyBkb24ndCB3b3JrIHVubGVzcyB5b3UgZG8uIixhdXRob3I6IkpvaG4gQy4gTWF4d2VsbCJ9LHt0ZXh0OiJUaGUgbW9zdCBlZmZlY3RpdmUgd2F5IHRvIGRvIGl0IGlzIHRvIGRvIGl0LiIsYXV0aG9yOiJBbWVsaWEgRWFyaGFydCJ9LHt0ZXh0OiJUYWtlIHRpbWUgdG8gZGVsaWJlcmF0ZSwgYnV0IHdoZW4gdGhlIHRpbWUgZm9yIGFjdGlvbiBhcnJpdmVzLCBzdG9wIHRoaW5raW5nIGFuZCBnbyBpbi4iLGF1dGhvcjoiTmFwb2xlb24gQm9uYXBhcnRlIn0se3RleHQ6IlN0cml2aW5nIGZvciBleGNlbGxlbmNlIG1vdGl2YXRlcyB5b3U7IHN0cml2aW5nIGZvciBwZXJmZWN0aW9uIGlzIGRlbW9yYWxpemluZy4iLGF1dGhvcjoiSGFycmlldCBCcmFpa2VyIn0se3RleHQ6IlRoZSBqb3VybmV5IG9mIGEgdGhvdXNhbmQgbWlsZXMgYmVnaW5zIHdpdGggYSBzaW5nbGUgc3RlcC4iLGF1dGhvcjoiTGFvIFR6dSJ9LHt0ZXh0OiJBIHllYXIgZnJvbSBub3cgeW91IG1heSB3aXNoIHlvdSBoYWQgc3RhcnRlZCB0b2RheS4iLGF1dGhvcjoiS2FyZW4gTGFtYiJ9LHt0ZXh0OiJUaGUgYmVnaW5uaW5nIGlzIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIHRoZSB3b3JrLiIsYXV0aG9yOiJQbGF0byJ9LHt0ZXh0OiJZb3UgZG9uJ3QgbmVlZCB0byBzZWUgdGhlIHdob2xlIHN0YWlyY2FzZSwganVzdCB0YWtlIHRoZSBmaXJzdCBzdGVwLiIsYXV0aG9yOiJNYXJ0aW4gTHV0aGVyIEtpbmcgSnIuIn0se3RleHQ6IlN0YXJ0IHdoZXJlIHlvdSBhcmUuIFVzZSB3aGF0IHlvdSBoYXZlLiBEbyB3aGF0IHlvdSBjYW4uIixhdXRob3I6IkFydGh1ciBBc2hlIn0se3RleHQ6IlRoZSBmaXJzdCBzdGVwIGlzIHlvdSBoYXZlIHRvIHNheSB0aGF0IHlvdSBjYW4uIixhdXRob3I6IldpbGwgU21pdGgifSx7dGV4dDoiSW4gdGhlIG1pZGRsZSBvZiBldmVyeSBkaWZmaWN1bHR5IGxpZXMgb3Bwb3J0dW5pdHkuIixhdXRob3I6IkFsYmVydCBFaW5zdGVpbiJ9LHt0ZXh0OiJFdmVuIHRoZSBsb25nZXN0IGpvdXJuZXkgc3RhcnRzIHdpdGggcHV0dGluZyBvbmUgZm9vdCBpbiBmcm9udCBvZiB0aGUgb3RoZXIuIixhdXRob3I6IiJ9LHt0ZXh0OiJZb3UgZG9uJ3QgaGF2ZSB0byBiZSBwZXJmZWN0IHRvIHN0YXJ0LCBidXQgeW91IGhhdmUgdG8gc3RhcnQgdG8gYmUgcGVyZmVjdC4iLGF1dGhvcjoiIn0se3RleHQ6IkNvdXJhZ2UgaXMgbm90IHRoZSBhYnNlbmNlIG9mIGZlYXIsIGJ1dCB0aGUganVkZ21lbnQgdGhhdCBzb21ldGhpbmcgZWxzZSBpcyBtb3JlIGltcG9ydGFudC4iLGF1dGhvcjoiQW1icm9zZSBSZWRtb29uIn0se3RleHQ6IldoYXRldmVyIHlvdSBjYW4gZG8sIG9yIGRyZWFtIHlvdSBjYW4gXHUyMDE0IGJlZ2luIGl0LiBCb2xkbmVzcyBoYXMgZ2VuaXVzLCBwb3dlciwgYW5kIG1hZ2ljIGluIGl0LiIsYXV0aG9yOiJKb2hhbm4gV29sZmdhbmcgdm9uIEdvZXRoZSJ9LHt0ZXh0OiJUaGUgaGFyZGVzdCBwYXJ0IGlzIHN0YXJ0aW5nLiBPbmNlIHlvdSBnZXQgdGhhdCBvdXQgb2YgdGhlIHdheSwgeW91J2xsIGZpbmQgdGhlIHJlc3Qgb2YgdGhlIGpvdXJuZXkgbXVjaCBlYXNpZXIuIixhdXRob3I6IiJ9LHt0ZXh0OiJJbmFjdGlvbiBicmVlZHMgZG91YnQgYW5kIGZlYXIuIEFjdGlvbiBicmVlZHMgY29uZmlkZW5jZSBhbmQgY291cmFnZS4iLGF1dGhvcjoiRGFsZSBDYXJuZWdpZSJ9LHt0ZXh0OiJUaGUgYmVzdCB0aW1lIHRvIHBsYW50IGEgdHJlZSB3YXMgdHdlbnR5IHllYXJzIGFnby4gVGhlIHNlY29uZCBiZXN0IHRpbWUgaXMgbm93LiIsYXV0aG9yOiJDaGluZXNlIFByb3ZlcmIifSx7dGV4dDoiWW91IGRvbid0IGhhdmUgdG8gYmUgZmVhcmxlc3MuIEp1c3QgZG9uJ3QgbGV0IGZlYXIgc3RvcCB5b3UuIixhdXRob3I6IiJ9LHt0ZXh0OiJQcm9ncmVzcywgbm90IHBlcmZlY3Rpb24sIGlzIHRoZSBnb2FsLiIsYXV0aG9yOiIifSx7dGV4dDoiTm90aGluZyB3aWxsIHdvcmsgdW5sZXNzIHlvdSBkby4iLGF1dGhvcjoiTWF5YSBBbmdlbG91In0se3RleHQ6IkxlYXAgYW5kIHRoZSBuZXQgd2lsbCBhcHBlYXIuIixhdXRob3I6IkpvaG4gQnVycm91Z2hzIn0se3RleHQ6IlRoZSBmaXJzdCBzdGVwIGJpbmRzIG9uZSB0byB0aGUgc2Vjb25kLiIsYXV0aG9yOiJGcmVuY2ggUHJvdmVyYiJ9LHt0ZXh0OiJUYWtlIHRoZSBmaXJzdCBzdGVwIGluIGZhaXRoLiBZb3UgZG9uJ3QgaGF2ZSB0byBzZWUgdGhlIHdob2xlIHN0YWlyY2FzZS4iLGF1dGhvcjoiTWFydGluIEx1dGhlciBLaW5nIEpyLiJ9LHt0ZXh0OiJUb2RheSBpcyBhIG5ldyBkYXkuIERvbid0IGxldCB5ZXN0ZXJkYXkncyBmYWlsdXJlcyBoYXVudCBpdC4iLGF1dGhvcjoiIn0se3RleHQ6IkV2ZXJ5IG1vcm5pbmcgd2UgYXJlIGJvcm4gYWdhaW4uIFdoYXQgd2UgZG8gdG9kYXkgbWF0dGVycyBtb3N0LiIsYXV0aG9yOiJCdWRkaGEifSx7dGV4dDoiV2l0aCB0aGUgbmV3IGRheSBjb21lcyBuZXcgc3RyZW5ndGggYW5kIG5ldyB0aG91Z2h0cy4iLGF1dGhvcjoiRWxlYW5vciBSb29zZXZlbHQifSx7dGV4dDoiVG9kYXkgaXMgYW5vdGhlciBjaGFuY2UgdG8gZ2V0IGJldHRlci4iLGF1dGhvcjoiIn0se3RleHQ6Illlc3RlcmRheSBpcyBub3Qgb3VycyB0byByZWNvdmVyLCBidXQgdG9tb3Jyb3cgaXMgb3VycyB0byB3aW4gb3IgbG9zZS4iLGF1dGhvcjoiTHluZG9uIEIuIEpvaG5zb24ifSx7dGV4dDoiVGhlIHN1biBpcyBhIGRhaWx5IHJlbWluZGVyIHRoYXQgd2UgdG9vIGNhbiByaXNlIGFnYWluIGZyb20gdGhlIGRhcmtuZXNzLiIsYXV0aG9yOiJTLiBBam5hIn0se3RleHQ6IkV2ZXJ5IGRheSBpcyBhIHNlY29uZCBjaGFuY2UuIixhdXRob3I6IiJ9LHt0ZXh0OiJUb2RheSdzIGFjY29tcGxpc2htZW50cyB3ZXJlIHllc3RlcmRheSdzIGltcG9zc2liaWxpdGllcy4iLGF1dGhvcjoiUm9iZXJ0IEguIFNjaHVsbGVyIn0se3RleHQ6IkVhY2ggbmV3IGRheSBpcyBhIGJsYW5rIHBhZ2UgaW4gdGhlIGRpYXJ5IG9mIHlvdXIgbGlmZS4iLGF1dGhvcjoiIn0se3RleHQ6IkFuIG9wdGltaXN0IHNlZXMgYW4gb3Bwb3J0dW5pdHkgaW4gZXZlcnkgY2FsYW1pdHk7IGEgcGVzc2ltaXN0IHNlZXMgYSBjYWxhbWl0eSBpbiBldmVyeSBvcHBvcnR1bml0eS4iLGF1dGhvcjoiV2luc3RvbiBDaHVyY2hpbGwifSx7dGV4dDoiT3Bwb3J0dW5pdGllcyBkb24ndCBoYXBwZW4uIFlvdSBjcmVhdGUgdGhlbS4iLGF1dGhvcjoiQ2hyaXMgR3Jvc3NlciJ9LHt0ZXh0OiJUaGlzIGlzIGEgd29uZGVyZnVsIGRheS4gSSd2ZSBuZXZlciBzZWVuIHRoaXMgb25lIGJlZm9yZS4iLGF1dGhvcjoiTWF5YSBBbmdlbG91In0se3RleHQ6IllvdSBoYXZlIGV4YWN0bHkgb25lIGxpZmUgaW4gd2hpY2ggdG8gZG8gZXZlcnl0aGluZyB5b3UnbGwgZXZlciBkby4gQWN0IGFjY29yZGluZ2x5LiIsYXV0aG9yOiJDb2xpbiBXcmlnaHQifSx7dGV4dDoiTGlmZSBpcyB3aGF0IGhhcHBlbnMgd2hlbiB5b3UncmUgYnVzeSBtYWtpbmcgb3RoZXIgcGxhbnMuIixhdXRob3I6IkpvaG4gTGVubm9uIn0se3RleHQ6IllvdXIgbGlmZSBkb2VzIG5vdCBnZXQgYmV0dGVyIGJ5IGNoYW5jZSwgaXQgZ2V0cyBiZXR0ZXIgYnkgY2hhbmdlLiIsYXV0aG9yOiJKaW0gUm9obiJ9LHt0ZXh0OiJEb24ndCB3YXRjaCB0aGUgY2xvY2s7IGRvIHdoYXQgaXQgZG9lcy4gS2VlcCBnb2luZy4iLGF1dGhvcjoiU2FtIExldmVuc29uIn0se3RleHQ6IkJlbGlldmUgeW91IGNhbiBhbmQgeW91J3JlIGhhbGZ3YXkgdGhlcmUuIixhdXRob3I6IlRoZW9kb3JlIFJvb3NldmVsdCJ9LHt0ZXh0OiJJdCBkb2VzIG5vdCBtYXR0ZXIgaG93IHNsb3dseSB5b3UgZ28gYXMgbG9uZyBhcyB5b3UgZG8gbm90IHN0b3AuIixhdXRob3I6IkNvbmZ1Y2l1cyJ9LHt0ZXh0OiJUaGUgb25seSBsaW1pdCB0byBvdXIgcmVhbGl6YXRpb24gb2YgdG9tb3Jyb3cgd2lsbCBiZSBvdXIgZG91YnRzIG9mIHRvZGF5LiIsYXV0aG9yOiJGcmFua2xpbiBELiBSb29zZXZlbHQifSx7dGV4dDoiVGhlIGZ1dHVyZSBiZWxvbmdzIHRvIHRob3NlIHdobyBiZWxpZXZlIGluIHRoZSBiZWF1dHkgb2YgdGhlaXIgZHJlYW1zLiIsYXV0aG9yOiJFbGVhbm9yIFJvb3NldmVsdCJ9LHt0ZXh0OiJJZiB5b3UncmUgZ29pbmcgdGhyb3VnaCBoZWxsLCBrZWVwIGdvaW5nLiIsYXV0aG9yOiJXaW5zdG9uIENodXJjaGlsbCJ9LHt0ZXh0OiJQZXJzaXN0ZW5jZSBndWFyYW50ZWVzIHRoYXQgcmVzdWx0cyBhcmUgaW5ldml0YWJsZS4iLGF1dGhvcjoiUGFyYW1haGFuc2EgWW9nYW5hbmRhIn0se3RleHQ6IlN1Y2Nlc3MgaXMgbm90IGZpbmFsLCBmYWlsdXJlIGlzIG5vdCBmYXRhbDogaXQgaXMgdGhlIGNvdXJhZ2UgdG8gY29udGludWUgdGhhdCBjb3VudHMuIixhdXRob3I6IldpbnN0b24gQ2h1cmNoaWxsIn0se3RleHQ6IllvdSBtaXNzIDEwMCUgb2YgdGhlIHNob3RzIHlvdSBkb24ndCB0YWtlLiIsYXV0aG9yOiJXYXluZSBHcmV0emt5In0se3RleHQ6Ikl0IGFsd2F5cyBzZWVtcyBpbXBvc3NpYmxlIHVudGlsIGl0J3MgZG9uZS4iLGF1dGhvcjoiTmVsc29uIE1hbmRlbGEifSx7dGV4dDoiV2UgbWF5IGVuY291bnRlciBtYW55IGRlZmVhdHMsIGJ1dCB3ZSBtdXN0IG5vdCBiZSBkZWZlYXRlZC4iLGF1dGhvcjoiTWF5YSBBbmdlbG91In0se3RleHQ6IkkgbmV2ZXIgZHJlYW1lZCBhYm91dCBzdWNjZXNzLiBJIHdvcmtlZCBmb3IgaXQuIixhdXRob3I6IkVzdFx4RTllIExhdWRlciJ9LHt0ZXh0OiJUaGUgb25seSB3YXkgb3V0IGlzIHRocm91Z2guIixhdXRob3I6IlJvYmVydCBGcm9zdCJ9LHt0ZXh0OiJIYXJkc2hpcHMgb2Z0ZW4gcHJlcGFyZSBvcmRpbmFyeSBwZW9wbGUgZm9yIGFuIGV4dHJhb3JkaW5hcnkgZGVzdGlueS4iLGF1dGhvcjoiQy5TLiBMZXdpcyJ9LHt0ZXh0OiJBY3QgYXMgaWYgd2hhdCB5b3UgZG8gbWFrZXMgYSBkaWZmZXJlbmNlLiBJdCBkb2VzLiIsYXV0aG9yOiJXaWxsaWFtIEphbWVzIn0se3RleHQ6IkluIHRoZSBtaWRkbGUgb2YgZGlmZmljdWx0eSBsaWVzIG9wcG9ydHVuaXR5LiIsYXV0aG9yOiJBbGJlcnQgRWluc3RlaW4ifSx7dGV4dDoiWW91IGFyZSBicmF2ZXIgdGhhbiB5b3UgYmVsaWV2ZSwgc3Ryb25nZXIgdGhhbiB5b3Ugc2VlbSwgYW5kIHNtYXJ0ZXIgdGhhbiB5b3UgdGhpbmsuIixhdXRob3I6IkEuQS4gTWlsbmUifSx7dGV4dDoiS2VlcCB5b3VyIGV5ZXMgb24gdGhlIHN0YXJzIGFuZCB5b3VyIGZlZXQgb24gdGhlIGdyb3VuZC4iLGF1dGhvcjoiVGhlb2RvcmUgUm9vc2V2ZWx0In0se3RleHQ6IldoYXQgeW91IGRvIHRvZGF5IGNhbiBpbXByb3ZlIGFsbCB5b3VyIHRvbW9ycm93cy4iLGF1dGhvcjoiUmFscGggTWFyc3RvbiJ9LHt0ZXh0OiJEb24ndCBiZSBwdXNoZWQgYXJvdW5kIGJ5IHRoZSBmZWFycyBpbiB5b3VyIG1pbmQuIEJlIGxlZCBieSB0aGUgZHJlYW1zIGluIHlvdXIgaGVhcnQuIixhdXRob3I6IlJveSBULiBCZW5uZXR0In0se3RleHQ6IlRoZSBvbmx5IHBlcnNvbiB5b3Ugc2hvdWxkIHRyeSB0byBiZSBiZXR0ZXIgdGhhbiBpcyB3aG8geW91IHdlcmUgeWVzdGVyZGF5LiIsYXV0aG9yOiIifSx7dGV4dDoiSWYgeW91IHdhbnQgdG8gYWNoaWV2ZSBncmVhdG5lc3MsIHN0b3AgYXNraW5nIGZvciBwZXJtaXNzaW9uLiIsYXV0aG9yOiIifSx7dGV4dDoiVGhpbmdzIHdvcmsgb3V0IGJlc3QgZm9yIHRob3NlIHdobyBtYWtlIHRoZSBiZXN0IG9mIGhvdyB0aGluZ3Mgd29yayBvdXQuIixhdXRob3I6IkpvaG4gV29vZGVuIn0se3RleHQ6IlRvIGxpdmUgYSBjcmVhdGl2ZSBsaWZlLCB3ZSBtdXN0IGxvc2Ugb3VyIGZlYXIgb2YgYmVpbmcgd3JvbmcuIixhdXRob3I6Ikpvc2VwaCBDaGlsdG9uIFBlYXJjZSJ9LHt0ZXh0OiJJZiB5b3UgYXJlIG5vdCB3aWxsaW5nIHRvIHJpc2sgdGhlIHVzdWFsLCB5b3Ugd2lsbCBoYXZlIHRvIHNldHRsZSBmb3IgdGhlIG9yZGluYXJ5LiIsYXV0aG9yOiJKaW0gUm9obiJ9LHt0ZXh0OiJUcnVzdCB5b3Vyc2VsZi4gWW91IGtub3cgbW9yZSB0aGFuIHlvdSB0aGluayB5b3UgZG8uIixhdXRob3I6IkJlbmphbWluIFNwb2NrIn0se3RleHQ6IldoYXQgc2VlbXMgdG8gdXMgYXMgYml0dGVyIHRyaWFscyBhcmUgb2Z0ZW4gYmxlc3NpbmdzIGluIGRpc2d1aXNlLiIsYXV0aG9yOiJPc2NhciBXaWxkZSJ9LHt0ZXh0OiJUaGUgb25seSBwbGFjZSB3aGVyZSBzdWNjZXNzIGNvbWVzIGJlZm9yZSB3b3JrIGlzIGluIHRoZSBkaWN0aW9uYXJ5LiIsYXV0aG9yOiJWaWRhbCBTYXNzb29uIn0se3RleHQ6IlRvbyBtYW55IG9mIHVzIGFyZSBub3QgbGl2aW5nIG91ciBkcmVhbXMgYmVjYXVzZSB3ZSBhcmUgbGl2aW5nIG91ciBmZWFycy4iLGF1dGhvcjoiTGVzIEJyb3duIn0se3RleHQ6IkkgZmluZCB0aGF0IHRoZSBoYXJkZXIgSSB3b3JrLCB0aGUgbW9yZSBsdWNrIEkgc2VlbSB0byBoYXZlLiIsYXV0aG9yOiJUaG9tYXMgSmVmZmVyc29uIn0se3RleHQ6IlN1Y2Nlc3MgdXN1YWxseSBjb21lcyB0byB0aG9zZSB3aG8gYXJlIHRvbyBidXN5IHRvIGJlIGxvb2tpbmcgZm9yIGl0LiIsYXV0aG9yOiJIZW5yeSBEYXZpZCBUaG9yZWF1In0se3RleHQ6IklmIHlvdSByZWFsbHkgbG9vayBjbG9zZWx5LCBtb3N0IG92ZXJuaWdodCBzdWNjZXNzZXMgdG9vayBhIGxvbmcgdGltZS4iLGF1dGhvcjoiU3RldmUgSm9icyJ9LHt0ZXh0OiJOZXZlciBnaXZlIHVwIG9uIGEgZHJlYW0ganVzdCBiZWNhdXNlIG9mIHRoZSB0aW1lIGl0IHdpbGwgdGFrZSB0byBhY2NvbXBsaXNoIGl0LiIsYXV0aG9yOiJFYXJsIE5pZ2h0aW5nYWxlIn0se3RleHQ6IllvdSd2ZSBnb3QgdG8gZ2V0IHVwIGV2ZXJ5IG1vcm5pbmcgd2l0aCBkZXRlcm1pbmF0aW9uIGlmIHlvdSdyZSBnb2luZyB0byBnbyB0byBiZWQgd2l0aCBzYXRpc2ZhY3Rpb24uIixhdXRob3I6Ikdlb3JnZSBMb3JpbWVyIn0se3RleHQ6IlRoZSBzZWNyZXQgb2YgeW91ciBzdWNjZXNzIGlzIGRldGVybWluZWQgYnkgeW91ciBkYWlseSBhZ2VuZGEuIixhdXRob3I6IkpvaG4gQy4gTWF4d2VsbCJ9XTtmdW5jdGlvbiBHYShlPTIpe3JldHVyblsuLi5GU10uc29ydCgoKT0+TWF0aC5yYW5kb20oKS0uNSkuc2xpY2UoMCxlKX1mdW5jdGlvbiBLZCh7YXBwOmUsZ3JpZEhlaWdodFNpemU6dD0xLHBsYW5Db250ZW50Om4scXVvdGVzOnJ9KXtsZXQgbz1yci5jcmVhdGVFbGVtZW50LGE9dD49Mj80OjIsW2ksc109KDAscnIudXNlU3RhdGUpKHJ8fChuP1tdOkdhKGEpKSksW2wsdV09KDAscnIudXNlU3RhdGUpKCFyJiYhIW4pLGQ9WyJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQ/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDA3MTQ1OTYwNC0zYjVlYzNhN2ZlMDU/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMTc4NTg4ODA0MS1hZjNlZjI4NWI0NzA/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDgyMjc1OTAyMy1mZWQ2MjJmZjJjM2I/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxOTY4MTM5Mzc4NC1kMTIwMjY3OTMzYmE/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NTkyNDE1NjczNC00OTZmNmNhYzZlYzE/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5MDczMDE0MTEwMy02Y2FjMjdhYWFiOTQ/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzMzA4Njk2NjM1OC01NDg1OWQwZWQ3MTY/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MjIxNDEwMzQ1MS05Mzc0YmQxYzc5OGU/dz02MDAmaD02MDAmZml0PWNyb3AiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQxNDYwOTI0NTIyNC1hZmEwMmJmYjNmZGE/dz02MDAmaD02MDAmZml0PWNyb3AiXTsoMCxyci51c2VFZmZlY3QpKCgpPT57IXImJm4mJih1KCEwKSxCZyhlLG4pLnRoZW4odj0+e3ModiYmdi5sZW5ndGg/djpHYShhKSksdSghMSl9KSl9LFtdKSwoMCxyci51c2VFZmZlY3QpKCgpPT57IWwmJmkubGVuZ3RoPGEmJnMoR2EoYSkpfSxbYV0pO2xldCBoPW8oImJ1dHRvbiIse2NsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLG9uQ2xpY2s6KCk9PntzKEdhKGEpKX0sdGl0bGU6IlJlc2VlZCBxdW90ZXMifSwiXHUyMUJCIFJlc2VlZCIpO3JldHVybiBsP28oWCx7dGl0bGU6WigicXVvdGVzIiksaWNvbjoiXHV7MUY0QTF9Iix3aWRnZXRJZDoicXVvdGVzIn0sbygiZGl2Iix7Y2xhc3NOYW1lOiJxdW90ZXMtbG9hZGluZyJ9LCJHZW5lcmF0aW5nIHF1b3Rlcy4uLiIpKTpvKFgse3RpdGxlOlooInF1b3RlcyIpLGljb246Ilx1ezFGNEExfSIsd2lkZ2V0SWQ6InF1b3RlcyIsaGVhZGVyQWN0aW9uczpofSxvKCJkaXYiLHtjbGFzc05hbWU6InF1b3Rlcy1ncmlkIn0saS5zbGljZSgwLGEpLm1hcCgodixtKT0+bygiZGl2Iix7a2V5Om0sY2xhc3NOYW1lOiJxdW90ZS10aWxlIixzdHlsZTp7YmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQocmdiYSgwLDAsMCwwLjUpLCByZ2JhKDAsMCwwLDAuNikpLCB1cmwoIitkW20lZC5sZW5ndGhdKyIpIn19LG8oInAiLHtjbGFzc05hbWU6InF1b3RlLXRleHQifSwnIicrdi50ZXh0KyciJyksdi5hdXRob3I/bygic3BhbiIse2NsYXNzTmFtZToicXVvdGUtYXV0aG9yIn0sIlx1MjAxNCAiK3YuYXV0aG9yKTpudWxsKSkpKX12YXIgZnk9bGUoaWUoKSk7dmFyIFVTPXtkYWlseUpvdDoiaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy9qb3RzIixqb3VybmFsOiJodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzL2pvdHMiLGNhbGVuZGFyOiJodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzL2NhbGVuZGFyIn07YXN5bmMgZnVuY3Rpb24gV1MoZSl7bGV0IHQ7dHJ5e3Q9YXdhaXQgZS5nZXRUYXNrRG9tYWlucygpfWNhdGNoe3JldHVybn1sZXQgbj0oQXJyYXkuaXNBcnJheSh0KT90OltdKS5maWx0ZXIobz0+byE9bnVsbCkuZmxhdE1hcChvPT5vLm5vdGVzfHxbXSk7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgcj1uW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuLmxlbmd0aCldO3I/LnV1aWQmJmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtyLnV1aWR9YCl9ZnVuY3Rpb24gWWQoe2FwcDplfSl7bGV0IHQ9ZnkuY3JlYXRlRWxlbWVudCxuPVt7bGFiZWw6IkRhaWx5IEpvdCIsaWNvbjoiXHV7MUY0RER9IixhY3Rpb246ImRhaWx5Sm90In0se2xhYmVsOiJKb3VybmFsIixpY29uOiJcdXsxRjREM30iLGFjdGlvbjoiam91cm5hbCJ9LHtsYWJlbDoiQ2FsZW5kYXIiLGljb246Ilx1ezFGNEM1fSIsYWN0aW9uOiJjYWxlbmRhciJ9LHtsYWJlbDoiUmFuZG9tIE5vdGUiLGljb246Ilx1ezFGM0IyfSIsYWN0aW9uOiJyYW5kb21Ob3RlIn1dLHI9YXN5bmMgbz0+e2lmKG89PT0icmFuZG9tTm90ZSIpe2F3YWl0IFdTKGUpO3JldHVybn1sZXQgYT1VU1tvXTthJiZhd2FpdCBlLm5hdmlnYXRlKGEpfTtyZXR1cm4gdChYLHt0aXRsZTpaKCJxdWljay1hY3Rpb25zIiksaWNvbjoiXHUyNkExIix3aWRnZXRJZDoicXVpY2stYWN0aW9ucyJ9LHQoImRpdiIse2NsYXNzTmFtZToicWEtZ3JpZCJ9LG4ubWFwKG89PnQoImJ1dHRvbiIse2tleTpvLmFjdGlvbixjbGFzc05hbWU6InFhLWJ1dHRvbiIsb25DbGljazooKT0+cihvLmFjdGlvbil9LHQoInNwYW4iLHtjbGFzc05hbWU6InFhLWljb24ifSxvLmljb24pLHQoInNwYW4iLHtjbGFzc05hbWU6InFhLWxhYmVsIn0sby5sYWJlbCkpKSkpfXZhciBkbj1sZShpZSgpKTt2YXIgQlM9NyoyNCo2MCo2MCoxZTMsaHk9MyxteT01LGpTPTUscWQ9b24oInJlY2VudC1ub3RlcyIpLGd5PVsiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiLCJTdW5kYXkiXTtmdW5jdGlvbiBWUyhlKXtsZXQgdD0yMTY2MTM2MjYxO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXRePWUuY2hhckNvZGVBdChuKSx0PU1hdGguaW11bCh0LDE2Nzc3NjE5KT4+PjA7cmV0dXJuIHR9ZnVuY3Rpb24gSFMoZSl7bGV0IHQ9ZT4+PjA7cmV0dXJuIGZ1bmN0aW9uKCl7dCs9MTgzMTU2NTgxMztsZXQgbj1NYXRoLmltdWwodF50Pj4+MTUsMXx0KTtyZXR1cm4gbl49bitNYXRoLmltdWwobl5uPj4+Nyw2MXxuKSwoKG5ebj4+PjE0KT4+PjApLzQyOTQ5NjcyOTZ9fWZ1bmN0aW9uIEdTKGUpe2xldCB0PW5ldyBEYXRlLG49YCR7dC5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh0LmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwiMCIpfS0ke1N0cmluZyh0LmdldERhdGUoKSkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuIFZTKGAke259LSR7ZX1gKX1mdW5jdGlvbiBRZChlKXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KGUpKXJldHVybnt9O2xldCB0PXt9O2ZvcihsZXQgbiBvZiBneSl7bGV0IHI9QXJyYXkuaXNBcnJheShlW25dKT9lW25dOltdO3Rbbl09Wy4uLm5ldyBTZXQoci5maWx0ZXIobz0+dHlwZW9mIG89PSJzdHJpbmciJiZvLmxlbmd0aD4wKSldfXJldHVybiB0fWZ1bmN0aW9uIEtTKGUpe2xldCB0PWU/LnNldHRpbmdzPy5bcWRdO2lmKCF0KXJldHVybnt9O2lmKHR5cGVvZiB0PT0ic3RyaW5nIil0cnl7cmV0dXJuIFFkKEpTT04ucGFyc2UodCkpfWNhdGNoe3JldHVybnt9fXJldHVybiBRZCh0KX1hc3luYyBmdW5jdGlvbiBZUyhlLHQpe2xldCBuPVFkKHQpLHI9SlNPTi5zdHJpbmdpZnkobik7YXdhaXQgZS5zZXRTZXR0aW5nKHFkLHIpLGU/LnNldHRpbmdzJiYoZS5zZXR0aW5nc1txZF09bil9ZnVuY3Rpb24gcVMoZSl7bGV0IHQ9bmV3IFNldDtyZXR1cm4gZ3kuZm9yRWFjaChuPT57KGVbbl18fFtdKS5mb3JFYWNoKHI9PnQuYWRkKHIpKX0pLHR9ZnVuY3Rpb24gUVMoZSx0KXtsZXQgbj1uZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHt3ZWVrZGF5OiJsb25nIn0pLHI9QXJyYXkuaXNBcnJheShlW25dKT9lW25dOltdO3JldHVybnsuLi5lLFtuXTpbLi4ubmV3IFNldChbLi4uciwuLi50XSldfX1hc3luYyBmdW5jdGlvbiBKUyhlKXtsZXQgdDt0cnl7dD1hd2FpdCBlLmdldFRhc2tEb21haW5zKCl9Y2F0Y2gobyl7cmV0dXJuIE8oIltSZWNlbnROb3Rlc10gZ2V0VGFza0RvbWFpbnMgZmFpbGVkOiIsbyksW119aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgU2V0LHI9W107Zm9yKGxldCBvIG9mIHQpaWYobylmb3IobGV0IGEgb2Ygby5ub3Rlc3x8W10pYT8udXVpZCYmIW4uaGFzKGEudXVpZCkmJihuLmFkZChhLnV1aWQpLHIucHVzaChhKSk7cmV0dXJuIHJ9YXN5bmMgZnVuY3Rpb24gWFMoZSx0LG49bXkpe2xldCByPWF3YWl0IEpTKGUpLG89RGF0ZS5ub3coKS1CUyxhPUhTKHQpLGk9W10scz1bXSxsPVtdO2ZvcihsZXQgYiBvZiByKXRyeXtsZXQgZz1hd2FpdCBlLmdldE5vdGVUYXNrcyh7dXVpZDpiLnV1aWR9LHtpbmNsdWRlRG9uZTohMX0pO2lmKCFBcnJheS5pc0FycmF5KGcpfHxnLmxlbmd0aD09PTApY29udGludWU7bGV0IGY9Zy5yZWR1Y2UoKHkscCk9PntsZXQgRT1wLnN0YXJ0QXQ/cC5zdGFydEF0KjFlMzowO3JldHVybiBNYXRoLm1heCh5LEUpfSwwKTtpZihmIT09MCYmZj49byljb250aW51ZTtpLnB1c2goe25vdGVIYW5kbGU6Yix0YXNrQ291bnQ6Zy5sZW5ndGgsbGF0ZXN0VGFza1RpbWVzdGFtcDpmfSl9Y2F0Y2goZyl7TyhgW1JlY2VudE5vdGVzXSBGYWlsZWQgdG8gZmV0Y2ggdGFza3MgZm9yIG5vdGUgJHtiLnV1aWR9OmAsZyl9bGV0IHU9S1MoZSksZD1xUyh1KSxjPWkuZmlsdGVyKGI9PiFkLmhhcyhiLm5vdGVIYW5kbGUudXVpZCkpLGg9dTtpLmxlbmd0aD4wJiZjLmxlbmd0aD09PTAmJihoPXt9LGM9aSk7Zm9yKGxldCBiIG9mIGMpe2lmKHMubGVuZ3RoPj1uKWJyZWFrO2wubGVuZ3RoPGpTJiZhKCk8LjU/bC5wdXNoKGIpOnMucHVzaChiKX1sZXQgdj1zLmxlbmd0aD49aHk/czpbLi4ucywuLi5sXS5zbGljZSgwLG4pLG09YXdhaXQgUHJvbWlzZS5hbGwodi5tYXAoYj0+ZS5maW5kTm90ZSh7dXVpZDpiLm5vdGVIYW5kbGUudXVpZH0pLnRoZW4oZz0+KHsuLi5iLG5vdGVIYW5kbGU6Z3x8Yi5ub3RlSGFuZGxlfSkpLmNhdGNoKCgpPT5iKSkpLHc9bS5tYXAoKHtub3RlSGFuZGxlOmJ9KT0+Yj8udXVpZCkuZmlsdGVyKEJvb2xlYW4pO2lmKHcubGVuZ3RoPjApdHJ5e2F3YWl0IFlTKGUsUVMoaCx3KSl9Y2F0Y2goYil7TygiW1JlY2VudE5vdGVzXSBGYWlsZWQgdG8gcGVyc2lzdCByZWNlbnQtbm90ZSBVVUlEIGhpc3Rvcnk6IixiKX1yZXR1cm4gbX1mdW5jdGlvbiBKZCh7YXBwOmUsZ3JpZEhlaWdodFNpemU6dD0xfSl7bGV0IG49ZG4uY3JlYXRlRWxlbWVudCxbcixvXT0oMCxkbi51c2VTdGF0ZSkoMCksW2EsaV09KDAsZG4udXNlU3RhdGUpKG51bGwpLFtzLGxdPSgwLGRuLnVzZVN0YXRlKShudWxsKSx1PXQ+PTI/MTA6bXksZD0oMCxkbi51c2VNZW1vKSgoKT0+R1MociksW3JdKTsoMCxkbi51c2VFZmZlY3QpKCgpPT57aShudWxsKSxsKG51bGwpLFhTKGUsZCx1KS50aGVuKG09PntpKG0pLE8oIltSZWNlbnROb3Rlc10gc3RhbGVOb3RlczoiLG0sInNlZWQ6IixkLCJyZXNlZWRDb3VudDoiLHIpfSkuY2F0Y2gobT0+e08oIltSZWNlbnROb3Rlc10gZmV0Y2ggZXJyb3I6IixtKSxsKG0ubWVzc2FnZXx8IkZhaWxlZCB0byBsb2FkIG5vdGVzIil9KX0sW2QsdV0pO2xldCBoPW4oImJ1dHRvbiIse2NsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+byhtPT5tKzEpLHRpdGxlOiJTaG93IGEgZGlmZmVyZW50IHNldCBvZiBub3RlcyJ9LCJcdTIxQkIgUmVzZWVkIiksdj0oKT0+cz9uKCJwIix7Y2xhc3NOYW1lOiJub3RlLWVycm9yIn0sYEVycm9yOiAke3N9YCk6YT09PW51bGw/bigicCIse2NsYXNzTmFtZToibm90ZS1sb2FkaW5nIn0sIkxvYWRpbmdcdTIwMjYiKTphLmxlbmd0aDxoeT9uKCJwIix7Y2xhc3NOYW1lOiJub3RlLWVtcHR5In0sIk5vIG5vdGVzIHdpdGggc3RhbGUgdGFza3MgZm91bmQuIik6bigidWwiLHtjbGFzc05hbWU6Im5vdGUtbGlzdCJ9LGEubWFwKCh7bm90ZUhhbmRsZTptLHRhc2tDb3VudDp3fSk9Pm4oImxpIix7a2V5Om0udXVpZCxjbGFzc05hbWU6Im5vdGUtaXRlbSJ9LG4oImJ1dHRvbiIse2NsYXNzTmFtZToibm90ZS1saW5rIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PmUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHttLnV1aWR9YCksdGl0bGU6YE9wZW4gIiR7bS5uYW1lfHwiVW50aXRsZWQifSJgfSxuKCJzcGFuIix7Y2xhc3NOYW1lOiJub3RlLW5hbWUifSxtLm5hbWV8fCJVbnRpdGxlZCIpLG4oInNwYW4iLHtjbGFzc05hbWU6Im5vdGUtY291bnQifSxgJHt3fSBvcGVuIHRhc2ske3chPT0xPyJzIjoiIn1gKSkpKSk7cmV0dXJuIG4oWCx7dGl0bGU6WigicmVjZW50LW5vdGVzIiksaWNvbjoiXHV7MUY0RER9Iix3aWRnZXRJZDoicmVjZW50LW5vdGVzIixoZWFkZXJBY3Rpb25zOmh9LHYoKSl9dmFyIGFsPWxlKGllKCkpO2Z1bmN0aW9uIFhkKHthY3RpdmVUYXNrRG9tYWluOmUsYXBwOnQsZG9tYWluczpuLG9uRG9tYWluQ2hhbmdlOnJ9KXtsZXQgbz1hbC5jcmVhdGVFbGVtZW50LFthLGldPSgwLGFsLnVzZVN0YXRlKSghMSkscz1hc3luYygpPT57aSghMCk7dHJ5e2xldCBkPWF3YWl0IFVnKHQpO2QmJnImJnIoZC5kb21haW5zLGQuYWN0aXZlVGFza0RvbWFpbil9ZmluYWxseXtpKCExKX19LGw9YXN5bmMgZD0+e2lmKGQ9PT1lKXJldHVybjtsZXQgYz1hd2FpdCBGZyh0LGQpO2MmJnImJnIobnVsbCxkLGMpfSx1PWFzeW5jIGQ9PntkLnN0b3BQcm9wYWdhdGlvbigpLGF3YWl0IHQubmF2aWdhdGUoImh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXM/dGFnPXRhc2tfY2FsZW5kYXIiKX07cmV0dXJuIW58fG4ubGVuZ3RoPT09MD9vKCJkaXYiLHtjbGFzc05hbWU6InRhc2stZG9tYWlucyB0YXNrLWRvbWFpbnMtLWVtcHR5In0sbygiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMtZW1wdHkifSwnVmlzaXQgIlNldHRpbmdzIiA+ICJUYXNrIENhbGVuZGFyIiB0byBjcmVhdGUgYSB0YXNrIGRvbWFpbiwgZW5hYmxpbmcgRGFzaGJvYXJkLicpLG8oImJ1dHRvbiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLXJlZnJlc2giLG9uQ2xpY2s6cyxkaXNhYmxlZDphLHR5cGU6ImJ1dHRvbiJ9LGE/IlJlZnJlc2hpbmcuLi4iOiJcdTIxQkIgUmVmcmVzaCIpKTpvKCJkaXYiLHtjbGFzc05hbWU6InRhc2stZG9tYWlucyJ9LG8oImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLWxpc3QifSxuLm1hcChkPT5vKCJkaXYiLHtrZXk6ZC51dWlkLGNsYXNzTmFtZToidGFzay1kb21haW4taXRlbSIrKGQudXVpZD09PWU/IiBhY3RpdmUiOiIiKSxvbkNsaWNrOigpPT5sKGQudXVpZCl9LG8oInNwYW4iLHtjbGFzc05hbWU6InRhc2stZG9tYWluLW5hbWUifSxkLm5hbWUpKSkpLG8oImJ1dHRvbiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLXJlZnJlc2giLG9uQ2xpY2s6cyxkaXNhYmxlZDphfSxhPyJSZWZyZXNoaW5nLi4uIjoiXHUyMUJCIFJlZnJlc2ggVGFzayBEb21haW5zIikpfXZhciBpbD1sZShpZSgpKTtmdW5jdGlvbiB2eShlKXtsZXQgdD0oMCxpbC51c2VSZWYpKG51bGwpO3QuY3VycmVudD09PW51bGwmJih0LmN1cnJlbnQ9cGVyZm9ybWFuY2Uubm93KCksTyhgW2Rhc2hib2FyZF0gV2lkZ2V0ICIke2V9IiBsb2FkaW5nLi4uYCkpLCgwLGlsLnVzZUVmZmVjdCkoKCk9Pnt0LmN1cnJlbnQhPT1udWxsJiYoTyhgW2Rhc2hib2FyZF0gV2lkZ2V0ICIke2V9IiBmaW5pc2hlZCBsb2FkaW5nIGluICR7KHBlcmZvcm1hbmNlLm5vdygpLXQuY3VycmVudCkudG9GaXhlZCgxKX1tc2ApLHQuY3VycmVudD1udWxsKX0sW10pfXZhciB4dD1sZShpZSgpKTt2YXIgWlM9W3t2YWx1ZTotMixlbW9qaToiXHV7MUY2MjJ9IixsYWJlbDoiQXdmdWwifSx7dmFsdWU6LTEsZW1vamk6Ilx1ezFGNjFGfSIsbGFiZWw6IkJhZCJ9LHt2YWx1ZTowLGVtb2ppOiJcdXsxRjYxMH0iLGxhYmVsOiJPa2F5In0se3ZhbHVlOjEsZW1vamk6Ilx1ezFGNjQyfSIsbGFiZWw6Ikdvb2QifSx7dmFsdWU6MixlbW9qaToiXHV7MUY2MDR9IixsYWJlbDoiR3JlYXQifV07ZnVuY3Rpb24gZUUoZSl7aWYoIWV8fGUubGVuZ3RoPDcpcmV0dXJuIiI7bGV0IHQ9bnQoZVswXS5kYXRlKSxuPW50KGVbNl0uZGF0ZSkscj1vPT5vLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse21vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIn0pO3JldHVybmAke3IodCl9IFx1MjAxMyAke3Iobil9YH1mdW5jdGlvbiB5eShlLHQpe2xldCBuPW50KGUpO3JldHVybiBuLnNldERhdGUobi5nZXREYXRlKCkrdCo3KSxjdChuKX1mdW5jdGlvbiB0RShlKXtsZXQgdD1SdChlKSxuPVJ0KG5ldyBEYXRlKTtyZXR1cm4gdD49bn1mdW5jdGlvbiBuRShlLHQpe3JldHVybiFBcnJheS5pc0FycmF5KGUpfHxlLmxlbmd0aD09PTA/W106IXR8fHR5cGVvZiB0IT0ib2JqZWN0Ij9lOmUubWFwKG49PntsZXQgcj1jdChuLmRhdGUpLG89QXJyYXkuaXNBcnJheSh0W3JdKT90W3JdOltdLGE9by5yZWR1Y2UoKGkscyk9PmkrKHMudmljdG9yeVZhbHVlfHwwKSwwKTtyZXR1cm57Li4ubix2YWx1ZTphLHRhc2tDb3VudDpvLmxlbmd0aH19KX1mdW5jdGlvbiByRShlLHQsbil7bGV0IHI9emcoZSk7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij9uRSh0LG4pOnIubWFwKG89PntsZXQgYT1BcnJheS5pc0FycmF5KG5bby5kYXRlS2V5XSk/bltvLmRhdGVLZXldOltdLGk9YS5yZWR1Y2UoKHMsbCk9PnMrKGwudmljdG9yeVZhbHVlfHwwKSwwKTtyZXR1cm57ZGF5Om8uZGF5LGRhdGU6by5kYXRlLHZhbHVlOmksdGFza0NvdW50OmEubGVuZ3RofX0pfWFzeW5jIGZ1bmN0aW9uIG9FKGUsdCxuLHIpe2xldCBvPVt0LFN0cmluZyhuKV07YXdhaXQgZS5zZXRTZXR0aW5nKG9uKCJ2aWN0b3J5LXZhbHVlIiksSlNPTi5zdHJpbmdpZnkobykpLHIoITEpfWZ1bmN0aW9uIHd5KGUpe3JldHVybiBlPT1udWxsPyEwOmU9PT0idHJ1ZSJ8fGU9PT0hMH1mdW5jdGlvbiBhRShlLHQsbixyKXt0KGVbMF18fCJ3ZWVrIiksbih3eShlWzFdKSkscighMSl9ZnVuY3Rpb24gaUUoZSx0LG4pe2xldCByPWUuY3VycmVudDtpZighcilyZXR1cm47bGV0IG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW4uY2xpZW50WC1vLmxlZnQscz0oby53aWR0aC04MCkvNztmb3IobGV0IGw9MDtsPDc7bCsrKXtsZXQgdT00MCtsKnMsZD11K3M7aWYoYT49dSYmYTxkKXt0KGwpO3JldHVybn19dChudWxsKX1mdW5jdGlvbiBzRShlLHQpe2xldCBuPWUuY3VycmVudDtpZighbilyZXR1cm4gMDtsZXQgbz0obi5vZmZzZXRXaWR0aC04MCkvNztyZXR1cm4gNDArdCpvK28qLjV9ZnVuY3Rpb24gbEUoZSx0LG4scil7bGV0IG89ZS5jdXJyZW50O2lmKCFvKXJldHVybiAwO2xldCBhPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1vLm9mZnNldEhlaWdodC01MCx1PShuW3RdPy52YWx1ZXx8MCkvcipzKi44NTtyZXR1cm4gYS50b3Arcy11KzEwfWZ1bmN0aW9uIHh5KGUsdCxuKXtpZighbnx8IXRbZV0pcmV0dXJuW107bGV0IHI9Y3QodFtlXS5kYXRlKTtyZXR1cm4obltyXXx8W10pLnNsaWNlKCkuc29ydCgobyxhKT0+KGEudmljdG9yeVZhbHVlfHwwKS0oby52aWN0b3J5VmFsdWV8fDApKX1mdW5jdGlvbiB1RShlLHQpe2lmKCFlfHwhQXJyYXkuaXNBcnJheShlKXx8IXQpcmV0dXJuW107bGV0IG49e307Zm9yKGxldCByIG9mIGUpe2lmKCFyfHxyLnRpbWVzdGFtcD09bnVsbCljb250aW51ZTtsZXQgbz1uZXcgRGF0ZShyLnRpbWVzdGFtcCoxZTMpLGE9Y3Qobyk7KCFuW2FdfHxyLnRpbWVzdGFtcD5uW2FdLnRpbWVzdGFtcCkmJihuW2FdPXIpfXJldHVybiB0Lm1hcChyPT57bGV0IG89Y3Qoci5kYXRlKTtyZXR1cm4gbltvXXx8bnVsbH0pfWZ1bmN0aW9uIGNFKGUsdCxuKXtpZighdHx8IXRbZV0pcmV0dXJuIG51bGw7aWYobiYmbltlXSl7bGV0IG89bmV3IERhdGU7aWYoby5zZXRIb3VycygyMyw1OSw1OSw5OTkpLG50KG5bZV0uZGF0ZSk+bylyZXR1cm4gbnVsbH1sZXQgcj10W2VdLnJhdGluZztyZXR1cm4gWlMuZmluZChvPT5vLnZhbHVlPT09cil8fG51bGx9ZnVuY3Rpb24gZEUoZSx0LG4scixvLGEpe3QuZm9yRWFjaCgoaSxzKT0+e2xldCBsPWkudmFsdWUvbipvKi44NSx1PTQwK3MqcityKi4xNSxkPW8tbCsxMDtlLmZpbGxTdHlsZT1pLnZhbHVlPjA/IiM2MzY2ZjEiOiIjZTVlN2ViIixlLmJlZ2luUGF0aCgpLGUucm91bmRSZWN0KHUsZCxyKi43LGwsWzQsNCwwLDBdKSxlLmZpbGwoKSxlLmZpbGxTdHlsZT0iIzZiNzI4MCIsZS5mb250PSIxMXB4IHN5c3RlbS11aSIsZS50ZXh0QWxpZ249ImNlbnRlciIsZS5maWxsVGV4dChpLmRheSx1K3IqLjM1LGEtMTUpO2xldCBoPW50KGkuZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSk7ZS5maWxsU3R5bGU9IiM5Y2EzYWYiLGUuZm9udD0iOXB4IHN5c3RlbS11aSIsZS5maWxsVGV4dChoLHUrciouMzUsYS0zKSxpLnZhbHVlPjAmJihlLmZpbGxTdHlsZT0iI2ZmZmZmZiIsZS5mb250PSJib2xkIDEwcHggc3lzdGVtLXVpIixlLmZpbGxUZXh0KHBFKGkudmFsdWUpLHUrciouMzUsZCsxNCkpfSl9ZnVuY3Rpb24gcEUoZSl7cmV0dXJuKE1hdGgucm91bmQoKGV8fDApKjEwKS8xMCkudG9GaXhlZCgxKX1mdW5jdGlvbiBmRShlLHQsbixyLG8pe2xldCBhPW5ldyBEYXRlO2Euc2V0SG91cnMoMjMsNTksNTksOTk5KTtsZXQgaT1bXTtpZih0LmZvckVhY2goKHMsbCk9PntpZighc3x8IW5bbF18fG50KG5bbF0uZGF0ZSk+YSlyZXR1cm47bGV0IGQ9by0ocy5yYXRpbmcrMikvNCpvKzEwLGM9NDArbCpyK3IqLjU7aS5wdXNoKHtpbmRleDpsLHg6Yyx5OmR9KX0pLGkubGVuZ3RoIT09MCl7ZS5zdHJva2VTdHlsZT0iI2Y1OWUwYiIsZS5saW5lV2lkdGg9Mjtmb3IobGV0IHM9MTtzPGkubGVuZ3RoO3MrKyl7bGV0IGw9aVtzLTFdLHU9aVtzXTtlLnNldExpbmVEYXNoKHUuaW5kZXg9PT1sLmluZGV4KzE/W106WzMsNF0pLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8obC54LGwueSksZS5saW5lVG8odS54LHUueSksZS5zdHJva2UoKX1lLnNldExpbmVEYXNoKFtdKSxpLmZvckVhY2goKHt4OnMseTpsfSk9PntlLmZpbGxTdHlsZT0iI2Y1OWUwYiIsZS5iZWdpblBhdGgoKSxlLmFyYyhzLGwsMywwLE1hdGguUEkqMiksZS5maWxsKCl9KX19ZnVuY3Rpb24gaEUoZSx0LG4scixvKXtsZXQgYT1lLmN1cnJlbnQ7aWYoIWEpcmV0dXJuO2xldCBpPWEuZ2V0Q29udGV4dCgiMmQiKSxzPWEud2lkdGg9YS5vZmZzZXRXaWR0aCoyLGw9YS5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQqMjtpLnNjYWxlKDIsMik7bGV0IHU9cy8yLGQ9bC8yLGM9KHUtODApLzcsaD1kLTUwO2kuY2xlYXJSZWN0KDAsMCx1LGQpLGRFKGksdCxuLGMsaCxkKSxvJiZyJiZyLnNvbWUodj0+diE9PW51bGwpJiZmRShpLHIsdCxjLGgpfWZ1bmN0aW9uIG1FKGUsdCl7cmV0dXJuIGUubWFwKChuLHIpPT57bGV0IG89eHkocixlLHQpO3JldHVybntkYXk6bi5kYXksZGF0ZTpuLmRhdGUsZGF0ZUtleTpjdChuLmRhdGUpLGV4cGVjdGVkVGFza0NvdW50Om8ubGVuZ3RoLGV4cGVjdGVkVGFza3M6by5tYXAoYT0+KHt1dWlkOmEudXVpZHx8bnVsbCxjb250ZW50OmEuY29udGVudHx8IiIsdmljdG9yeVZhbHVlOmEudmljdG9yeVZhbHVlfHwwfSkpfX0pfWZ1bmN0aW9uIGdFKGUsdCl7bGV0IG49bUUoZSx0KTtPKCJbVmljdG9yeVZhbHVlXSBleHBlY3RlZCB0b29sdGlwIHRhc2tzIGJ5IGRheSIsbil9ZnVuY3Rpb24gdkUoZSx0LG4scil7bGV0IG89eHkoZSx0LG4pLGE9Y0UoZSxyLHQpLHM9W2A8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1oZWFkZXIiPiR7dFtlXT8kZyh0W2VdLmRhdGUpOiIifTwvZGl2PmBdO2lmKGEmJnMucHVzaChgPGRpdiBjbGFzcz0iZGFzaGJvYXJkLXRvb2x0aXAtc2VjdGlvbiI+JHthLmVtb2ppfSAke2EubGFiZWx9PC9kaXY+YCksby5sZW5ndGg+MClmb3IobGV0IGwgb2YgbylzLnB1c2goYDxkaXYgY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXJvdyI+PHNwYW4gY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXJvdy1sYWJlbCI+JHtTbyhsLmNvbnRlbnQpfTwvc3Bhbj48c3BhbiBjbGFzcz0iZGFzaGJvYXJkLXRvb2x0aXAtcm93LXZhbHVlIj4ke2wudmljdG9yeVZhbHVlfHwwfSBwdHM8L3NwYW4+PC9kaXY+YCk7ZWxzZSBzLnB1c2goJzxkaXYgY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLWVtcHR5Ij5ObyBjb21wbGV0ZWQgdGFza3M8L2Rpdj4nKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB5RShlLHQsbil7cmV0dXJuWyJ3ZWVrIiwibW9udGgiLCIzMGRheXMiXS5tYXAocj0+ZSgibGFiZWwiLHtrZXk6cn0sZSgiaW5wdXQiLHt0eXBlOiJyYWRpbyIsbmFtZToidnYtdGltZS1yYW5nZSIsdmFsdWU6cixjaGVja2VkOnQ9PT1yLG9uQ2hhbmdlOm4uYmluZChudWxsLHIpfSkscj09PSJ3ZWVrIj8iVGhpcyB3ZWVrIjpyPT09Im1vbnRoIj8iVGhpcyBtb250aCI6Ikxhc3QgMzAgZGF5cyIpKX1mdW5jdGlvbiBaZCh7YXBwOmUsY29tcGxldGVkVGFza3NCeURhdGU6dCxkYWlseVZhbHVlczpuLG1vb2RSYXRpbmdzOnIsb25SZWZlcmVuY2VEYXRlQ2hhbmdlOm8scmVmZXJlbmNlRGF0ZTphLHdlZWtseVRvdGFsOml9KXtsZXQgcz14dC5jcmVhdGVFbGVtZW50LGw9KDAseHQudXNlUmVmKShudWxsKSx1PXJFKGEsbix0KSxkPU1hdGgubWF4KC4uLnUubWFwKFA9PlAudmFsdWUpLDEpLGM9dS5yZWR1Y2UoKFAsVSk9PlArKFUudmFsdWV8fDApLDApLGg9TWF0aC5yb3VuZChjfHxpfHwwKSx2PXVFKHIsdSksW20sd109KDAseHQudXNlU3RhdGUpKCExKSxbYixnXT0oMCx4dC51c2VTdGF0ZSkobnVsbCksZj1mbyhlLCJ2aWN0b3J5LXZhbHVlIiksW3kscF09KDAseHQudXNlU3RhdGUpKGZbMF18fCJ3ZWVrIiksW0UsU109KDAseHQudXNlU3RhdGUpKHd5KGZbMV0pKSx4PXcuYmluZChudWxsLCEwKSxOPW9FLmJpbmQobnVsbCxlLHksRSx3KSxDPWFFLmJpbmQobnVsbCxmLHAsUyx3KSxrPWVFKHUpLEE9emEoe2ludGVyYWN0aXZlOiEwfSksUj1QPT57QS5jYW5jZWxTY2hlZHVsZWRIaWRlKCksaUUobCxnLFApfSxUPSgpPT5BLnNjaGVkdWxlSGlkZSgzMDAsKCk9PmcobnVsbCkpO3JldHVybigwLHh0LnVzZUVmZmVjdCkoKCk9PntoRShsLHUsZCx2LEUpfSxbdSxkLHYsRV0pLCgwLHh0LnVzZUVmZmVjdCkoKCk9PntnRSh1LHQpfSxbdSx0XSksKDAseHQudXNlRWZmZWN0KSgoKT0+e2lmKGI9PT1udWxsKXtBLmhpZGUoKTtyZXR1cm59bGV0IFA9bC5jdXJyZW50O2lmKCFQKXJldHVybjtsZXQgVT1QLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEY9c0UobCxiKSxXPVUubGVmdCtGLFk9bEUobCxiLHUsZCksc2U9WSxEZT13aW5kb3cuaW5uZXJIZWlnaHQtVS5ib3R0b20sQ2U9dkUoYix1LHQsdik7RGU+c2U/QS5zaG93KENlLFcsVS5ib3R0b20se3BsYWNlbWVudDoiYm90dG9tIixiZWxvd0NoYXJ0OiEwfSk6QS5zaG93KENlLFcsWSx7cGxhY2VtZW50OiJ0b3AifSl9LFtiXSkscyhYLHt0aXRsZTpaKCJ2aWN0b3J5LXZhbHVlIiksaWNvbjoiXHV7MUYzQzZ9Iix3aWRnZXRJZDoidmljdG9yeS12YWx1ZSIsY29uZmlndXJhYmxlOiEwLG9uQ29uZmlndXJlOnh9LG0/cyhBbix7dGl0bGU6IkNvbmZpZ3VyZSBWaWN0b3J5IFZhbHVlIixvblN1Ym1pdDpOLG9uQ2FuY2VsOkN9LHMoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIn0scygiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwifSwiVGltZSByYW5nZSIpLHlFKHMseSxwKSkscygiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQifSxzKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCJ9LCJNb29kIG92ZXJsYXkiKSxzKCJsYWJlbCIsbnVsbCxzKCJpbnB1dCIse3R5cGU6ImNoZWNrYm94IixjaGVja2VkOkUsb25DaGFuZ2U6UD0+UyhQLnRhcmdldC5jaGVja2VkKX0pLCJTaG93IG1vb2Qgb3ZlcmxheSIpKSk6bnVsbCxzKCJkaXYiLHtjbGFzc05hbWU6InZ2LWhlYWRlciJ9LHMoInNwYW4iLHtjbGFzc05hbWU6InZ2LXRvdGFsIn0saCkscygic3BhbiIse2NsYXNzTmFtZToidnYtbGFiZWwifSxgcG9pbnRzICR7a31gKSkscygiZGl2Iix7Y2xhc3NOYW1lOiJ2di1jaGFydC1jb250YWluZXIifSxzKCJidXR0b24iLHtjbGFzc05hbWU6InZ2LW5hdi1hcnJvdyIsdHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5vJiZvKHl5KGEsLTEpKSx0aXRsZToiUHJldmlvdXMgd2VlayIsImFyaWEtbGFiZWwiOiJQcmV2aW91cyB3ZWVrIn0sIlx1MjAzOSIpLHMoImRpdiIse2NsYXNzTmFtZToidnYtY2hhcnQtd3JhcCJ9LHMoImNhbnZhcyIse3JlZjpsLGNsYXNzTmFtZToidnYtY2hhcnQiLG9uTW91c2VNb3ZlOlIsb25Nb3VzZUxlYXZlOlR9KSkscygiYnV0dG9uIix7Y2xhc3NOYW1lOiJ2di1uYXYtYXJyb3ciLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6dEUoYSksb25DbGljazooKT0+byYmbyh5eShhLDEpKSx0aXRsZToiTmV4dCB3ZWVrIiwiYXJpYS1sYWJlbCI6Ik5leHQgd2VlayJ9LCJcdTIwM0EiKSkpfWZ1bmN0aW9uIHdFKGUpe2xldCB0PU51bWJlcihlPy5ncmlkV2lkdGhTaXplKT4wP051bWJlcihlLmdyaWRXaWR0aFNpemUpOjEsbj1OdW1iZXIoZT8uZ3JpZEhlaWdodFNpemUpPjA/TnVtYmVyKGUuZ3JpZEhlaWdodFNpemUpOjE7cmV0dXJuYGdyaWQtY2VsbCBob3Jpem9udGFsLSR7dH0tY2VsbCB2ZXJ0aWNhbC0ke259LWNlbGxgfWZ1bmN0aW9uIHhFKGUsdCl7bGV0IG49ZT8ud2lkZ2V0SWQ7cmV0dXJue2NsYXNzTmFtZTpbd0UoZSksdD8iZ3JpZC1jZWxsLS1kcmFnLWFjdGl2ZSI6IiIsdCYmdD09PW4/ImdyaWQtY2VsbC0tZHJhZ2dpbmctcmVhZHkiOiIiLHQmJnQhPT1uPyJncmlkLWNlbGwtLWRyYWctc2hpZnQiOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpLCJkYXRhLXdpZGdldC1pZCI6bn19dmFyIGVwPWNsYXNzIGV4dGVuZHMgRy5Db21wb25lbnR7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5zdGF0ZT17aGFzRXJyb3I6ITEsZXJyb3I6bnVsbH19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcih0KXtyZXR1cm57aGFzRXJyb3I6ITAsZXJyb3I6dH19Y29tcG9uZW50RGlkQ2F0Y2godCxuKXtPKGBbV2lkZ2V0RXJyb3JCb3VuZGFyeV0gV2lkZ2V0ICIke3RoaXMucHJvcHMud2lkZ2V0SWR9IiBjcmFzaGVkOmAsdCxuKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5oYXNFcnJvcj8oMCxHLmNyZWF0ZUVsZW1lbnQpKCJkaXYiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjayJ9LCgwLEcuY3JlYXRlRWxlbWVudCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay10aXRsZSJ9LGBcdTI2QTAgJHt0aGlzLnByb3BzLndpZGdldElkfWApLCgwLEcuY3JlYXRlRWxlbWVudCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay1tZXNzYWdlIn0sdGhpcy5zdGF0ZS5lcnJvcj8ubWVzc2FnZXx8IkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQiKSwoMCxHLmNyZWF0ZUVsZW1lbnQpKCJidXR0b24iLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay1yZXRyeSIsb25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6ITEsZXJyb3I6bnVsbH0pfSwiUmV0cnkiKSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19O2Z1bmN0aW9uIFF0KGUsdCxuKXtyZXR1cm4oMCxHLm1lbW8pKGZ1bmN0aW9uKG8pe3Z5KGUpO2xldHtjb25maWc6YSxkcmFnZ2luZ1dpZGdldElkOml9PW87cmV0dXJuKDAsRy5jcmVhdGVFbGVtZW50KSgiZGl2Iix4RShhLGkpLCgwLEcuY3JlYXRlRWxlbWVudCkoZXAse3dpZGdldElkOmV9LCgwLEcuY3JlYXRlRWxlbWVudCkodCxuKG8pKSkpfSl9dmFyIGJFPVF0KCJwbGFubmluZyIsRGQsKHthcHA6ZSxjb25maWc6dCxxdWFydGVybHlQbGFuczpufSk9Pih7cXVhcnRlcmx5UGxhbnM6bixncmlkSGVpZ2h0U2l6ZTpOdW1iZXIodD8uZ3JpZEhlaWdodFNpemUpfHwxLGFwcDplfSkpLGtFPVF0KCJ2aWN0b3J5LXZhbHVlIixaZCwoe2FwcDplLGNvbXBsZXRlZFRhc2tzQnlEYXRlOnQsZGFpbHlWYWx1ZXM6bixtb29kUmF0aW5nczpyLG9uUmVmZXJlbmNlRGF0ZUNoYW5nZTpvLHJlZmVyZW5jZURhdGU6YSx3ZWVrbHlUb3RhbDppfSk9Pih7Y29tcGxldGVkVGFza3NCeURhdGU6dCxkYWlseVZhbHVlczpuLHdlZWtseVRvdGFsOmksbW9vZFJhdGluZ3M6cixyZWZlcmVuY2VEYXRlOmEsb25SZWZlcmVuY2VEYXRlQ2hhbmdlOm8sYXBwOmV9KSksU0U9UXQoIm1vb2QiLEdkLCh7YXBwOmUsbW9vZFJhdGluZ3M6dCxvbk1vb2RSZWNvcmRlZDpufSk9Pih7bW9vZFJhdGluZ3M6dCxvbk1vb2RSZWNvcmRlZDpuLGFwcDplfSkpLEVFPVF0KCJjYWxlbmRhciIsQWQsKHthcHA6ZSxjb25maWc6dCxjb21wbGV0ZWRUYXNrc0J5RGF0ZTpuLGN1cnJlbnREYXRlOnIsb25EYXRlU2VsZWN0Om8sb3BlblRhc2tzOmEsc2VsZWN0ZWREYXRlOml9KT0+KHtjb21wbGV0ZWRUYXNrc0J5RGF0ZTpuLGN1cnJlbnREYXRlOnIsZ3JpZEhlaWdodFNpemU6dD8uZ3JpZEhlaWdodFNpemUsZ3JpZFdpZHRoU2l6ZTp0Py5ncmlkV2lkdGhTaXplLG9wZW5UYXNrczphLG9uRGF0ZVNlbGVjdDpvLHNlbGVjdGVkRGF0ZTppLGFwcDplfSkpLE5FPVF0KCJhZ2VuZGEiLF9kLCh7YWdlbmRhVGFza3M6ZSxhcHA6dCxjdXJyZW50RGF0ZTpuLHNlbGVjdGVkRGF0ZTpyfSk9Pih7Y3VycmVudERhdGU6bix0YXNrczplLHNlbGVjdGVkRGF0ZTpyLGFwcDp0fSkpLFRFPVF0KCJxdW90ZXMiLEtkLCh7YXBwOmUsY29uZmlnOnR9KT0+KHtxdW90ZXM6bnVsbCxwbGFuQ29udGVudDpudWxsLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEsYXBwOmV9KSksREU9UXQoInJlY2VudC1ub3RlcyIsSmQsKHthcHA6ZSxjb25maWc6dH0pPT4oe2dyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEsYXBwOmV9KSksQ0U9UXQoInF1aWNrLWFjdGlvbnMiLFlkLCh7YXBwOmV9KT0+KHthcHA6ZX0pKSxfRT1RdCgiZHJlYW0tdGFzayIsemQsKHthcHA6ZSxjb25maWc6dCxvbk9wZW5TZXR0aW5nczpufSk9Pih7Z3JpZEhlaWdodFNpemU6TnVtYmVyKHQ/LmdyaWRIZWlnaHRTaXplKXx8MSxncmlkV2lkdGhTaXplOk51bWJlcih0Py5ncmlkV2lkdGhTaXplKXx8Mixvbk9wZW5TZXR0aW5nczpuLGFwcDplfSkpLEFFPVF0KCJwZWFrLWhvdXJzIixCZCwoe2FwcDplLHNlbGVjdGVkRGF0ZTp0LGN1cnJlbnREYXRlOm59KT0+KHthcHA6ZSxzZWxlY3RlZERhdGU6dCxjdXJyZW50RGF0ZTpufSkpLE9FPVF0KCJkYXktc2tldGNoIixVZCwoe2FwcDplLGFnZW5kYVRhc2tzOnQsY3VycmVudERhdGU6bn0pPT4oe2FwcDplLGFnZW5kYVRhc2tzOnQsY3VycmVudERhdGU6bn0pKSxSRT17YWdlbmRhOk5FLGNhbGVuZGFyOkVFLG1vb2Q6U0UscGxhbm5pbmc6YkUsInF1aWNrLWFjdGlvbnMiOkNFLHF1b3RlczpURSwicmVjZW50LW5vdGVzIjpERSwidmljdG9yeS12YWx1ZSI6a0UsImRyZWFtLXRhc2siOl9FLCJwZWFrLWhvdXJzIjpBRSwiZGF5LXNrZXRjaCI6T0V9O2Z1bmN0aW9uIElFKGUse2luaXRpYWxpemVEb21haW5UYXNrczp0LHNldE1vb2RSYXRpbmdzOm4sc2V0UXVhcnRlcmx5UGxhbnM6cixzZXRDb25maWdQYXJhbXM6byxzZXREYWlseVZpY3RvcnlWYWx1ZXM6YSxzZXRXZWVrbHlWaWN0b3J5VmFsdWU6aSxzZXRDdXJyZW50RGF0ZTpzLGluaXREYXRhRnJlc2hSZWY6bH0pe2lkKGUuc2V0dGluZ3M/LltWLkNPTlNPTEVfTE9HR0lOR10pLE8oIkluaXQgcmV0dXJucyIsZSwiaW5jbHVkaW5nIG1vb2RSYXRpbmdzIixlLm1vb2RSYXRpbmdzKSx0KGUpLG4oZS5tb29kUmF0aW5ncykscihlLnF1YXJ0ZXJseVBsYW5zKSxvKGUuc2V0dGluZ3MpLGEoZS5kYWlseVZpY3RvcnlWYWx1ZXMpLGkoZS53ZWVrbHlWaWN0b3J5VmFsdWUpLHMoZS5jdXJyZW50RGF0ZSksbC5jdXJyZW50PSEwfWFzeW5jIGZ1bmN0aW9uIE1FKGUsdCxuKXtsZXQgcj1SdCh0KSxvPUZzKHQpO3NkKCkmJihyPW5ldyBEYXRlKHIpLHIuc2V0RGF0ZShyLmdldERhdGUoKS03KSk7bGV0IGE9TWF0aC5mbG9vcihyLmdldFRpbWUoKS8xZTMpLGk9TWF0aC5mbG9vcihvLmdldFRpbWUoKS8xZTMpO3RyeXtsZXQgcz1hd2FpdCBlLmdldE1vb2RSYXRpbmdzKGEsaSk7QXJyYXkuaXNBcnJheShzKSYmbihzKX1jYXRjaChzKXtPKCJmZXRjaE1vb2RSYXRpbmdzOiBmYWlsZWQgdG8gbG9hZCBtb29kIHJhdGluZ3MiLHMpfX1mdW5jdGlvbiBQRShlLHQsbixyLG8sYSl7ZShyLG8sYSksYSYmKHQoYS5kYWlseVZpY3RvcnlWYWx1ZXMpLG4oYS53ZWVrbHlWaWN0b3J5VmFsdWUpKX1hc3luYyBmdW5jdGlvbiBMRShlLHQsbixyLG8se2lzUmVzZXQ6YSxzaXppbmc6aX09e30pe2xldCBzPUFycmF5LmlzQXJyYXkodD8uW1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdKT90W1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdOmhvLGw9e307YXx8cy5mb3JFYWNoKGQ9PntsW2Qud2lkZ2V0SWRdPWR9KTtsZXQgdT1vLm1hcChkPT57bGV0IGM9bFtkXSxoPWFuLmZpbmQobT0+bS53aWRnZXRJZD09PWQpLHY9aT8uW2RdO3JldHVybnt3aWRnZXRJZDpkLGdyaWRXaWR0aFNpemU6dj8uZ3JpZFdpZHRoU2l6ZT8/Yz8uZ3JpZFdpZHRoU2l6ZT8/aD8uZGVmYXVsdEdyaWRXaWR0aFNpemU/PzEsZ3JpZEhlaWdodFNpemU6dj8uZ3JpZEhlaWdodFNpemU/P2M/LmdyaWRIZWlnaHRTaXplPz8xLHNldHRpbmdzOmM/LnNldHRpbmdzfHx7fX19KTthd2FpdCBlLnNldFNldHRpbmcoVi5EQVNIQk9BUkRfQ09NUE9ORU5UUyxKU09OLnN0cmluZ2lmeSh1KSksbihkPT4oey4uLmQsW1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdOnV9KSkscihqdC5ERUZBVUxUKX1hc3luYyBmdW5jdGlvbiB6RShlLHQsbix7bGxtUHJvdmlkZXI6cixhcGlLZXk6byxiYWNrZ3JvdW5kTW9kZTphLGJhY2tncm91bmRJbWFnZVVybDppfSl7TygiW2Rhc2hib2FyZF0gaGFuZGxlU2V0dGluZ3NTYXZlIGNhbGxlZCB3aXRoOiIse2xsbVByb3ZpZGVyOnIsYmFja2dyb3VuZE1vZGU6YSxiYWNrZ3JvdW5kSW1hZ2VVcmw6aSE9bnVsbD8iKHNldCkiOiIodW5jaGFuZ2VkKSJ9KTtsZXQgcz1bZS5zZXRTZXR0aW5nKFYuTExNX1BST1ZJREVSLHIpLGUuc2V0U2V0dGluZyhWLkxMTV9BUElfS0VZLG8pLGUuc2V0U2V0dGluZyhWLkJBQ0tHUk9VTkRfSU1BR0VfVVJMLGl8fCIiKV07aSYmYSYmcy5wdXNoKGUuc2V0U2V0dGluZyhWLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERSxhKSk7dHJ5e2F3YWl0IFByb21pc2UuYWxsKHMpLE8oIltkYXNoYm9hcmRdIHNldHRpbmdzIHNhdmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIpfWNhdGNoKGwpe08oIltkYXNoYm9hcmRdIHNldHRpbmdzIHNhdmUgRkFJTEVEOiIsbCl9dChsPT4oey4uLmwsW1YuTExNX1BST1ZJREVSXTpyLFtWLkxMTV9BUElfS0VZXTpvLFtWLkJBQ0tHUk9VTkRfSU1BR0VfVVJMXTppfHwiIixbVi5CQUNLR1JPVU5EX0lNQUdFX01PREVdOmk/YXx8ImNvdmVyIjoiIn0pKSxuKGp0LkRFRkFVTFQpfWZ1bmN0aW9uICRFKGUsdCl7ZShuPT5bLi4ubnx8W10sdF0pfWZ1bmN0aW9uIHRwKHthcHA6ZX0pe2xldCB0PUcuY3JlYXRlRWxlbWVudCx7YWN0aXZlVGFza0RvbWFpbjpuLGJ1aWxkQWdlbmRhVGFza3NCeURhdGU6cixpbml0aWFsaXplRG9tYWluVGFza3M6byxvbkRvbWFpbkNoYW5nZTphLG9wZW5UYXNrczppLHRhc2tEb21haW5zOnN9PVZkKCkse2NvbXBsZXRlZFRhc2tzQnlEYXRlOmwsZmV0Y2hDb21wbGV0ZWRUYXNrczp1fT0kZChlKSxbZCxjXT0oMCxHLnVzZVN0YXRlKShudWxsKSxbaCx2XT0oMCxHLnVzZVN0YXRlKShudWxsKSxbbSx3XT0oMCxHLnVzZVN0YXRlKShudWxsKSxbYixnXT0oMCxHLnVzZVN0YXRlKShudWxsKSxbZix5XT0oMCxHLnVzZVN0YXRlKShudWxsKSxbcCxFXT0oMCxHLnVzZVN0YXRlKShudWxsKSxbUyx4XT0oMCxHLnVzZVN0YXRlKShudWxsKSxbTixDXT0oMCxHLnVzZVN0YXRlKShudWxsKSxbayxBXT0oMCxHLnVzZVN0YXRlKShqdC5ERUZBVUxUKSxSPSgwLEcudXNlUmVmKSghMSk7KDAsRy51c2VFZmZlY3QpKCgpPT57ZS5pbml0KCkudGhlbihIPT57SD8uZXJyb3I/eChILmVycm9yKTooSD8uc2V0dGluZ3MmJihlLnNldHRpbmdzPUguc2V0dGluZ3MpLElFKEgse2luaXRpYWxpemVEb21haW5UYXNrczpvLHNldE1vb2RSYXRpbmdzOmMsc2V0UXVhcnRlcmx5UGxhbnM6dixzZXRDb25maWdQYXJhbXM6dyxzZXREYWlseVZpY3RvcnlWYWx1ZXM6ZyxzZXRXZWVrbHlWaWN0b3J5VmFsdWU6eSxzZXRDdXJyZW50RGF0ZTpFLGluaXREYXRhRnJlc2hSZWY6Un0pKX0pLmNhdGNoKEg9PngoSC5tZXNzYWdlKSl9LFtdKTtsZXQgVD0oMCxHLnVzZU1lbW8pKCgpPT57aWYoTilyZXR1cm4gTjtpZighcClyZXR1cm4gbnVsbDtpZihzZCgpKXtsZXQgSD1SdChwKSxfZT1uZXcgRGF0ZShIKTtyZXR1cm4gX2Uuc2V0RGF0ZShfZS5nZXREYXRlKCktMSksY3QoX2UpfXJldHVybiBwfSxbcCxOXSksUD0oMCxHLnVzZUNhbGxiYWNrKShIPT5NRShlLEgsYyksW2VdKTsoMCxHLnVzZUVmZmVjdCkoKCk9PntsZXQgSD1OfHxwO0gmJihSLmN1cnJlbnQ/Ui5jdXJyZW50PSExOlAoSCksbiYmKHUoSCxuKSxUJiZUIT09SCYmdShULG4pKSl9LFtuLHAsdSxQLE4sVF0pO2xldCBVPSgwLEcudXNlQ2FsbGJhY2spKChILF9lLEl0KT0+UEUoYSxnLHksSCxfZSxJdCksW2FdKSxGPSgwLEcudXNlQ2FsbGJhY2spKChILF9lKT0+TEUoZSxtLHcsQSxILF9lKSxbZSxtXSksVz0oMCxHLnVzZUNhbGxiYWNrKShIPT56RShlLHcsQSxIKSxbZV0pLFk9KDAsRy51c2VDYWxsYmFjaykoSD0+JEUoYyxIKSxbXSksc2U9KDAsRy51c2VNZW1vKSgoKT0+cD9yKHApOnt9LFtyLHBdKSxEZT0oMCxHLnVzZU1lbW8pKCgpPT57bGV0IEg9bT8uW1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdO3JldHVybiBBcnJheS5pc0FycmF5KEgpJiZILmxlbmd0aD4wP0g6aG99LFttXSkse2RyYWdnaW5nV2lkZ2V0SWQ6Q2UsZGlzcGxheWVkQ29tcG9uZW50czpCfT1ndihEZSxGKSx6PSgwLEcudXNlQ2FsbGJhY2spKCgpPT5BKGp0LlNFVFRJTkdTX0NPTkZJRyksW10pO2lmKFMpcmV0dXJuIHQoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWVycm9yIn0sdCgiaDIiLG51bGwsIkRhc2hib2FyZCBFcnJvciIpLHQoInAiLG51bGwsUykpO2lmKCFtKXJldHVybiB0KCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1vdXRlci1jb250YWluZXIifSx0KCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sb2FkaW5nIn0sdCgiZGl2Iix7Y2xhc3NOYW1lOiJzcGlubmVyIn0pLHQoInAiLG51bGwsIkxvYWRpbmcgZGFzaGJvYXJkLi4uIikpKTtsZXQgYWU9bT8uW1YuQkFDS0dST1VORF9JTUFHRV9VUkxdLHBlPW0/LltWLkJBQ0tHUk9VTkRfSU1BR0VfTU9ERV18fCJjb3ZlciI7YWUmJk8oIltkYXNoYm9hcmRdIGJhY2tncm91bmQgaW1hZ2UgVVJMIGZyb20gc2V0dGluZ3M6IixhZSwibW9kZToiLHBlKTtsZXQgTWU9YWU/KCgpPT57bGV0IEg9cGUuc3RhcnRzV2l0aCgicmVwZWF0Iik7cmV0dXJue2JhY2tncm91bmRJbWFnZTpgdXJsKCR7YWV9KWAsYmFja2dyb3VuZFNpemU6SD8iYXV0byI6cGUsYmFja2dyb3VuZFJlcGVhdDpIP3BlOiJuby1yZXBlYXQiLGJhY2tncm91bmRQb3NpdGlvbjoiY2VudGVyIixiYWNrZ3JvdW5kQXR0YWNobWVudDoiZml4ZWQifX0pKCk6dm9pZCAwO3JldHVybiB0KCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1vdXRlci1jb250YWluZXIiLHN0eWxlOk1lfSxrPT09anQuTEFZT1VUX0NPTkZJRz90KE9kLHtjdXJyZW50TGF5b3V0OkFycmF5LmlzQXJyYXkobT8uW1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdKT9tW1YuREFTSEJPQVJEX0NPTVBPTkVOVFNdOmhvLG9uU2F2ZTpGLG9uQ2FuY2VsOigpPT5BKGp0LkRFRkFVTFQpfSk6bnVsbCxrPT09anQuU0VUVElOR1NfQ09ORklHPyhPKCJbZGFzaGJvYXJkXSByZW5kZXJpbmcgRGFzaGJvYXJkU2V0dGluZ3NQb3B1cCwgYmdVcmw6IixtPy5bVi5CQUNLR1JPVU5EX0lNQUdFX1VSTF0pLHQoUGQse2FwcDplLGNvbmZpZ1BhcmFtczptLG9uQ2FuY2VsOigpPT5BKGp0LkRFRkFVTFQpLG9uU2F2ZTpXfSkpOm51bGwsdCgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtY29udGVudCJ9LHQoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXRvb2xiYXIifSx0KFhkLHthY3RpdmVUYXNrRG9tYWluOm4sYXBwOmUsZG9tYWluczpzLG9uRG9tYWluQ2hhbmdlOlV9KSx0KCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC10b29sYmFyLWFjdGlvbnMifSx0KCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1jb25maWd1cmUtYnV0dG9uIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntPKCJbZGFzaGJvYXJkXSBvcGVuaW5nIFNldHRpbmdzIHBvcHVwIiksQShqdC5TRVRUSU5HU19DT05GSUcpfSx0aXRsZToiQ29uZmlndXJlIExMTSBwcm92aWRlciBhbmQgQVBJIGtleSBmb3IgQUktcG93ZXJlZCBmZWF0dXJlcyJ9LCJcdTI2OTlcdUZFMEYgU2V0dGluZ3MiKSx0KCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1jb25maWd1cmUtYnV0dG9uIix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PkEoanQuTEFZT1VUX0NPTkZJRyksdGl0bGU6IkNvbmZpZ3VyZSB3aGljaCB3aWRnZXRzIGFyZSBzaG93biBhbmQgaW4gd2hhdCBvcmRlciJ9LCJcdTI2MzAgTGF5b3V0IikpKSx0KCJkaXYiLHtjbGFzc05hbWU6YGRhc2hib2FyZC1ncmlkJHtDZT8iIGRhc2hib2FyZC1ncmlkLS1kcmFnZ2luZyI6IiJ9YH0sLi4uQi5tYXAoKEgsX2UpPT57bGV0IEl0PUg/LndpZGdldElkfHxob1tfZV0/LndpZGdldElkLE10PVJFW0l0XTtyZXR1cm4gTXQ/dChNdCx7a2V5Okl0LGFnZW5kYVRhc2tzOnNlLGFwcDplLGNvbXBsZXRlZFRhc2tzQnlEYXRlOmwsY29uZmlnOkgsY3VycmVudERhdGU6cCxkYWlseVZhbHVlczpiLGRyYWdnaW5nV2lkZ2V0SWQ6Q2UsbW9vZFJhdGluZ3M6ZCxvbkRhdGVTZWxlY3Q6Qyxvbk1vb2RSZWNvcmRlZDpZLG9uT3BlblNldHRpbmdzOnosb25SZWZlcmVuY2VEYXRlQ2hhbmdlOkMsb3BlblRhc2tzOmkscXVhcnRlcmx5UGxhbnM6aCxyZWZlcmVuY2VEYXRlOlQsc2VsZWN0ZWREYXRlOk4sd2Vla2x5VG90YWw6Zn0pOm51bGx9KS5maWx0ZXIoQm9vbGVhbikpKSl9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2xldCBuPU1hdGgubWluKHNjcmVlbi53aWR0aCxzY3JlZW4uaGVpZ2h0KSxyPXdpbmRvdy5tYXRjaE1lZGlhKCIob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKS5tYXRjaGVzP01hdGgubWF4KHNjcmVlbi53aWR0aCxzY3JlZW4uaGVpZ2h0KTpuO2lmKHI+PXdpbmRvdy5pbm5lcldpZHRoKXtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUubWF4V2lkdGg9IiIsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WD0iIixkb2N1bWVudC5ib2R5LnN0eWxlLm1heFdpZHRoPSIiLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3dYPSIiO3JldHVybn1sZXQgbz1yKyJweCI7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm1heFdpZHRoPW8sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIixkb2N1bWVudC5ib2R5LnN0eWxlLm1heFdpZHRoPW8sZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiJ9dCgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHQpfSkoKTt2YXIgRkU9U24/UmMoKTpuZXcgUHJveHkoe3NldHRpbmdzOnt9fSx7Z2V0KGUsdCl7aWYodD09PSJzZXR0aW5ncyIpcmV0dXJuIGUuc2V0dGluZ3M7aWYodHlwZW9mIHQhPSJzeW1ib2wiKXJldHVybiguLi5uKT0+d2luZG93LmNhbGxBbXBsZW5vdGVQbHVnaW4odCwuLi5uKX0sc2V0KGUsdCxuKXtyZXR1cm4gZVt0XT1uLCEwfX0pLFVFPSgwLGt5LmNyZWF0ZVJvb3QpKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXNoYm9hcmQtcm9vdCIpKTtVRS5yZW5kZXIoKDAsYnkuY3JlYXRlRWxlbWVudCkodHAse2FwcDpGRX0pKTt9KSgpOwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzOgogICgqKgogICAqIEBsaWNlbnNlIFJlYWN0CiAgICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICAgKgogICAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgUmVhY3QKICAgKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMKICAgKgogICAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanM6CiAgKCoqCiAgICogQGxpY2Vuc2UgUmVhY3QKICAgKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICAgKgogICAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAgICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoqLwo=";var y=`[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{border-radius:6px;font-size:.75rem;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}.tippy-content{padding:8px 12px;position:relative;z-index:1}.tippy-arrow{color:var(--dashboard-color-tooltip-bg);height:16px;width:16px}.tippy-arrow:before{border-color:#0000;border-style:solid;content:"";position:absolute}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-theme~=dashboard]{background:var(--dashboard-color-tooltip-bg);box-shadow:0 4px 12px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);max-width:260px;min-width:180px}.tippy-box[data-theme~=dashboard]>.tippy-arrow{color:var(--dashboard-color-tooltip-bg)}.tippy-box[data-theme~=dashboard].below-chart>.tippy-content{max-height:40vh;overflow-y:auto}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-header{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-section{border-bottom:1px solid var(--dashboard-color-tooltip-border);margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row{align-items:baseline;display:flex;gap:8px;justify-content:space-between;padding:2px 0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label p{display:inline;margin:0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-value{color:var(--dashboard-color-tooltip-accent);flex-shrink:0;font-weight:600}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-empty{color:var(--dashboard-color-tooltip-text-muted);font-style:italic}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-date{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-entry{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 6px;padding:2px 0}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-time{color:var(--dashboard-color-tooltip-text-muted);font-size:.7rem;min-width:52px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-mood{color:var(--dashboard-color-tooltip-text)}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-note{color:var(--dashboard-color-tooltip-text-muted);flex-basis:100%;font-size:.7rem;font-style:italic;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-word}.widget-planning .planning-quarters{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px}.widget-planning .quarter-card{border:2px dashed var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex:1 1 140px;flex-direction:column;gap:4px;min-width:0;padding:12px 16px;transition:background .15s,border-color .15s}.widget-planning .quarter-card:hover{border-color:var(--dashboard-color-blue)}.widget-planning .quarter-card--has-plan{background:var(--dashboard-color-plan-created-bg);border-color:var(--dashboard-color-plan-created-border);border-style:solid}.widget-planning .quarter-card--has-plan:hover{border-color:var(--dashboard-color-plan-created-border);filter:brightness(.97)}.widget-planning .quarter-card .quarter-label{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700}.widget-planning .quarter-card .quarter-status-row{align-items:center;display:flex;gap:8px;justify-content:space-between}.widget-planning .quarter-card .quarter-status{color:var(--dashboard-color-text-secondary);font-size:.75rem}.widget-planning .quarter-card .quarter-plan-indicator{cursor:default;flex-shrink:0;font-size:.85rem;line-height:1}.widget-planning .month-tabs{display:flex;flex-wrap:wrap;gap:4px}.widget-planning .month-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s,color .15s}.widget-planning .month-tab:hover{background:var(--dashboard-color-blue-light)}.widget-planning .month-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .month-content-area{border:1px solid var(--dashboard-color-border);border-radius:6px;margin-top:12px;overflow:hidden;padding:12px 16px}.widget-planning .month-content-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .month-content-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .month-content-text{color:var(--dashboard-color-text);font-size:.8rem;line-height:1.4}.widget-planning .month-content-text p{margin:0 0 4px}.widget-planning .month-content-text ol,.widget-planning .month-content-text ul{margin:0 0 4px;padding-left:16px}.widget-planning .month-content-text li{margin:0;padding:0}.widget-planning .month-content-text strong{color:var(--dashboard-color-navy)}.widget-planning .month-content-text>:last-child{margin-bottom:0}.widget-planning .month-content-empty{text-align:center}.widget-planning .create-month-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-blue);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s}.widget-planning .create-month-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .planning-empty{color:var(--dashboard-color-text-muted);font-size:.85rem;font-style:italic;padding:16px 0;text-align:center}.widget-planning .weekly-plan-section{border-top:1px solid var(--dashboard-color-border);margin-top:16px;padding-top:12px}.widget-planning .weekly-plan-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .weekly-plan-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .create-week-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-blue);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s;width:100%}.widget-planning .create-week-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .note-editor{display:flex;flex-direction:column;gap:8px;height:100%}.widget-planning .note-editor-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px}.widget-planning .note-editor-toolbar{display:flex;gap:8px}.widget-planning .note-editor-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;padding:4px 12px;transition:background .15s}.widget-planning .note-editor-btn:hover{background:var(--dashboard-color-blue-light)}.widget-planning .note-editor-btn--save{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .note-editor-btn--save:hover{filter:brightness(.92)}.widget-planning .note-editor-btn--save:disabled{cursor:default;opacity:.6}.widget-planning .note-editor-textarea{border:1px solid var(--dashboard-color-border);border-radius:6px;flex:1;font-family:monospace;font-size:.8rem;line-height:1.5;min-height:180px;padding:12px;resize:vertical}.rich-footnote-wrap{display:inline}.rich-footnote-indicator{cursor:default;display:inline-block;font-size:.65em;margin-left:2px;opacity:.65;vertical-align:super}.rich-footnote-indicator:hover{opacity:1}.tippy-box[data-theme~=rich-footnote]{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:10px;box-shadow:0 4px 16px var(--dashboard-color-overlay-shadow);color:var(--dashboard-color-text);font-size:.85rem;line-height:1.5;max-width:420px;min-width:200px}.tippy-box[data-theme~=rich-footnote]>.tippy-arrow{color:var(--dashboard-color-bg-card)}.tippy-box[data-theme~=rich-footnote]>.tippy-content{padding:12px}.rich-footnote-popup{display:flex;flex-direction:column;gap:8px}.rich-footnote-popup-url{align-items:center;display:flex;gap:4px}.rich-footnote-popup-url svg{color:var(--dashboard-color-accent);flex-shrink:0}.rich-footnote-popup-url a{color:var(--dashboard-color-accent);overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.rich-footnote-popup-url a:hover{text-decoration:underline}.rich-footnote-popup-text{color:var(--dashboard-color-text)}.rich-footnote-popup-media{border-radius:6px;overflow:hidden}.rich-footnote-popup-media img,.rich-footnote-popup-media video,.rich-footnote-popup-media iframe{display:block;max-width:100%;width:100%}.rich-footnote-popup-media iframe{aspect-ratio:16/9;border:0}.rich-footnote-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;justify-content:flex-end;padding-top:8px}.rich-footnote-popup-close{background:none;border:none;color:var(--dashboard-color-accent);cursor:pointer;font-size:.8rem;font-weight:600;letter-spacing:.5px;padding:4px 8px}.rich-footnote-popup-close:hover{opacity:.8}.widget-agenda a{color:var(--dashboard-color-blue);text-decoration:none}.widget-agenda a:hover{text-decoration:underline}.widget-agenda img{max-width:100%}.widget-agenda .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-agenda .agenda-list{display:flex;flex:1;flex-direction:column;gap:12px;min-height:0;overflow-x:hidden;overflow-y:auto;padding-right:4px}.widget-agenda .agenda-day{display:flex;flex-direction:column;gap:4px}.widget-agenda .agenda-date-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.widget-agenda .agenda-empty-day{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:4px 0}.widget-agenda .agenda-item{align-items:center;display:flex;gap:12px;padding:8px 0}.widget-agenda .agenda-item .agenda-indicator{border-radius:2px;flex-shrink:0;height:36px;width:4px}.widget-agenda .agenda-item .agenda-indicator.priority-critical{background-color:var(--dashboard-color-agenda-priority-critical)}.widget-agenda .agenda-item .agenda-indicator.priority-important{background-color:var(--dashboard-color-agenda-priority-important)}.widget-agenda .agenda-item .agenda-indicator.priority-urgent{background-color:var(--dashboard-color-agenda-priority-urgent)}.widget-agenda .agenda-item .agenda-indicator.priority-normal{background-color:var(--dashboard-color-agenda-priority-normal)}.widget-agenda .agenda-item .agenda-content{display:flex;flex:1;flex-direction:column;gap:4px}.widget-agenda .agenda-item .agenda-content .agenda-time{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600}.widget-agenda .agenda-item .agenda-content .agenda-text{color:var(--dashboard-color-text);font-size:.85rem;overflow:hidden;white-space:nowrap}.widget-agenda .agenda-item .agenda-content .agenda-note-link{background:#0000;border:0;color:var(--dashboard-color-blue);cursor:pointer;font-size:.72rem;margin:0;padding:0;text-align:left;text-decoration:underline}.widget-agenda .agenda-item .agenda-duration{color:var(--dashboard-color-text-muted);font-size:.7rem}.widget-agenda .agenda-task-row{border-radius:6px;cursor:pointer;padding:8px;transition:background-color .12s ease}.widget-agenda .agenda-task-row:hover{background:var(--dashboard-color-bg-page)}.widget-agenda .agenda-empty{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-agenda .agenda-pagination{align-items:center;display:flex;gap:4px}.widget-agenda .agenda-page-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.65rem;line-height:1;padding:2px 4px}.widget-agenda .agenda-page-arrow:hover:not(:disabled){color:var(--dashboard-color-navy)}.widget-agenda .agenda-page-arrow:disabled{cursor:default;opacity:.3}.widget-agenda .agenda-page-indicator{color:var(--dashboard-color-text-muted);font-size:.7rem;white-space:nowrap}.config-popup-overlay{align-items:center;background:var(--dashboard-color-overlay-backdrop);display:flex;inset:0;justify-content:center;position:fixed;z-index:1000}.config-popup-container{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;box-shadow:0 8px 32px var(--dashboard-color-overlay-shadow);max-width:440px;min-width:320px;width:90%}.config-popup-container .explanation-paragraph{font-size:14px;margin:12px 0 20px}.config-popup-container .config-popup-header{border-bottom:1px solid var(--dashboard-color-border);padding:16px}.config-popup-container .config-popup-title{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700;margin:0}.config-popup-container .config-popup-body{padding:16px}.config-popup-container .config-popup-body label{align-items:center;color:var(--dashboard-color-text);cursor:pointer;display:flex;font-size:.85rem;gap:8px;padding:4px 0}.config-popup-container .config-popup-body input[type=radio],.config-popup-container .config-popup-body input[type=checkbox]{accent-color:var(--dashboard-color-accent)}.config-popup-container .config-popup-body .config-field{margin-bottom:12px}.config-popup-container .config-popup-body .config-field .config-line{margin-bottom:10px;margin-top:10px}.config-popup-container .config-popup-body .config-field:last-child{margin-bottom:0}.config-popup-container .config-popup-body .config-field-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.03em;margin-bottom:4px;text-transform:uppercase}.config-popup-container .config-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;gap:8px;justify-content:flex-end;padding:12px 16px}.config-popup-container .config-popup-actions>button{padding-left:8px;padding-right:8px}.config-popup-container .config-popup-btn{border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;font-weight:600;padding:8px 16px}.config-popup-container .config-popup-btn--cancel{background:#0000;color:var(--dashboard-color-text-secondary)}.config-popup-container .config-popup-btn--cancel:hover{background:var(--dashboard-color-bg-page-hover)}.config-popup-container .config-popup-btn--submit{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent)}.config-popup-container .config-popup-btn--submit:hover{opacity:.9}.widget-calendar.vertical-2-cell .cal-arrow{font-size:.9rem}.widget-calendar.vertical-2-cell .cal-month{font-size:1.1rem}.widget-calendar.vertical-2-cell .cal-header{font-size:.85rem}.widget-calendar.vertical-2-cell .cal-cell{padding-top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-day{font-size:16px;top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-dot{bottom:18%;height:6px;width:6px}.widget-calendar.horizontal-2-cell.vertical-1-cell .widget-body{display:flex;flex-direction:column;padding:8px 16px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-nav{margin-bottom:8px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-grid{flex:1}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-header{padding:2px 0}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-cell{aspect-ratio:auto;border-radius:12px}.widget-calendar .cal-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.widget-calendar .cal-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px}.widget-calendar .cal-arrow:hover{color:var(--dashboard-color-navy)}.widget-calendar .cal-month{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700}.widget-calendar .cal-grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr);text-align:center}.widget-calendar .cal-header{color:var(--dashboard-color-text-muted);font-size:.7rem;font-weight:600;padding:4px 0}.widget-calendar .cal-cell{align-items:center;aspect-ratio:1;border-radius:50%;cursor:pointer;display:flex;flex-direction:column;justify-content:center;padding:4px 0;position:relative;transition:background-color .12s ease}.widget-calendar .cal-cell:not(.empty):hover{background:var(--dashboard-color-blue-light)}.widget-calendar .cal-cell.empty{cursor:default;visibility:hidden}.widget-calendar .cal-cell.today{background:var(--dashboard-color-blue)}.widget-calendar .cal-cell.today .cal-day{color:var(--dashboard-color-text-on-accent);font-weight:700}.widget-calendar .cal-cell.today:hover{background:var(--dashboard-color-navy)}.widget-calendar .cal-cell.selected{outline:2px solid var(--dashboard-color-accent);outline-offset:0}.widget-calendar .cal-cell.today.selected{outline-color:var(--dashboard-color-accent)}.widget-calendar .cal-cell .cal-day{color:var(--dashboard-color-text);font-size:.8rem;position:relative;top:-2px}.widget-calendar .cal-cell .cal-dot{border-radius:50%;bottom:6px;height:4px;position:absolute;width:4px}.dashboard-layout-popup{display:flex;flex-direction:column;margin:16px;max-height:min(800px,100vh - 32px);max-width:min(800px,100vw - 32px);min-width:0;width:100%}.dashboard-layout-popup .dashboard-layout-popup-tabs{display:flex;gap:4px;margin-top:12px}.dashboard-layout-popup .dashboard-layout-popup-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s ease,color .15s ease}.dashboard-layout-popup .dashboard-layout-popup-tab:hover{background:var(--dashboard-color-blue-light)}.dashboard-layout-popup .dashboard-layout-popup-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.dashboard-layout-popup .dashboard-layout-popup-body{display:flex;flex:1;flex-direction:column;gap:16px;overflow-y:auto;padding:16px}.dashboard-layout-popup .dashboard-layout-popup-section{border:2px dashed rgba(0,0,0,0);border-radius:10px;padding:4px;transition:border-color .15s ease,background .15s ease}.dashboard-layout-popup .dashboard-layout-popup-section--drag-over{background:var(--dashboard-color-blue-light);border-color:var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-section-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;margin-bottom:8px;padding-bottom:8px}.dashboard-layout-popup .dashboard-layout-popup-section-icon{flex-shrink:0;font-size:.9rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-section-title{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:700;letter-spacing:.05em;margin:0;text-transform:uppercase}.dashboard-layout-popup .dashboard-layout-popup-list{display:flex;flex-direction:column;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-item{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:grab;display:flex;gap:8px;padding:8px 12px;transition:opacity .12s ease,box-shadow .12s ease,background .12s ease;-webkit-user-select:none;user-select:none}.dashboard-layout-popup .dashboard-layout-popup-item:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item--dragging{opacity:.35}.dashboard-layout-popup .dashboard-layout-popup-item--drag-over{background:var(--dashboard-color-bg-card);box-shadow:0 -2px 0 var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-item-handle{color:var(--dashboard-color-text-muted);cursor:grab;flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-handle:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item-icon{flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-info{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0;overflow:hidden}.dashboard-layout-popup .dashboard-layout-popup-item-name{color:var(--dashboard-color-text);font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-description{color:var(--dashboard-color-text-secondary);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-actions{display:flex;flex-shrink:0;gap:2px}.dashboard-layout-popup .dashboard-layout-popup-arrow-button{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;line-height:1;padding:3px 7px;transition:background .1s ease,color .1s ease}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:hover:not(:disabled){background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:disabled{cursor:not-allowed;opacity:.3}.dashboard-layout-popup .dashboard-layout-popup-empty{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px 8px;text-align:center}.dashboard-layout-popup .dashboard-layout-popup-sizing{display:flex;flex-direction:column;gap:8px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;align-items:center;gap:12px;padding:8px 12px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-header{align-items:center;display:flex;gap:8px;flex:1;min-width:0}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-controls{display:flex;flex-shrink:0;gap:16px}.dashboard-layout-popup .dashboard-layout-popup-sizing-field{align-items:center;display:flex;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-sizing-label{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-sizing-select{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;padding:4px 8px}.dashboard-layout-popup .config-popup-actions .config-popup-link{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;margin-right:auto;padding:0;text-decoration:underline}.dashboard-layout-popup .config-popup-actions .config-popup-link:hover{color:var(--dashboard-color-text)}.dashboard-toolbar{align-items:center;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;margin-bottom:16px}.dashboard-toolbar .dashboard-toolbar-actions{align-items:center;display:flex;background-color:var(--dashboard-color-bg-card);border-radius:6px;border:1px solid var(--dashboard-color-border);color:var(--dashboard-color-text-secondary);flex-shrink:0;padding:8px 0}.dashboard-toolbar .dashboard-configure-button{background-color:var(--dashboard-color-bg-card);border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;font-weight:500;padding:4px 12px;transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.dashboard-toolbar .dashboard-configure-button:hover{background:var(--dashboard-color-bg-page);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text)}.dashboard-settings-container .dashboard-settings-section{display:flex;flex-direction:column;gap:16px}.dashboard-settings-container .dashboard-settings-section-header{display:flex;flex-direction:column;gap:4px}.dashboard-settings-container .dashboard-settings-section-title{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;letter-spacing:.02em;margin:0}.dashboard-settings-container .dashboard-settings-section-desc{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.5;margin:0}.dashboard-settings-container .dashboard-settings-select{-webkit-appearance:none;appearance:none;background:var(--dashboard-color-bg-page);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-position:right 8px center;background-repeat:no-repeat;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.85rem;padding:8px 24px 8px 8px;transition:border-color .15s ease;width:100%}.dashboard-settings-container .dashboard-settings-select:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-dropzone{align-items:center;background:var(--dashboard-color-bg-page);border:2px dashed var(--dashboard-color-border);border-radius:6px;cursor:pointer;display:flex;flex-direction:column;gap:8px;justify-content:center;min-height:120px;padding:16px;text-align:center;transition:border-color .15s ease,background .15s ease}.dashboard-settings-container .dashboard-settings-dropzone:hover{border-color:var(--dashboard-color-accent)}.dashboard-settings-container .dashboard-settings-dropzone--active{background:#00000008;border-color:var(--dashboard-color-accent);border-style:solid}.dashboard-settings-container .dashboard-settings-dropzone--uploading{cursor:wait;opacity:.7}.dashboard-settings-container .dashboard-settings-dropzone-input{display:none}.dashboard-settings-container .dashboard-settings-dropzone-text{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-settings-container .dashboard-settings-dropzone-preview{align-items:center;display:flex;flex-direction:column;gap:8px}.dashboard-settings-container .dashboard-settings-dropzone-preview-img{border-radius:6px;max-height:80px;max-width:100%;object-fit:contain}.dashboard-settings-container .dashboard-settings-remove-image{color:var(--dashboard-color-danger);cursor:pointer;display:inline-block;font-size:.8rem;margin-top:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-remove-image:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-link{color:var(--dashboard-color-accent);display:inline-block;font-size:.8rem;margin-bottom:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-api-key-link:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-input-row{align-items:center;display:flex;gap:4px}.dashboard-settings-container .dashboard-settings-api-key-input{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);flex:1;font-family:monospace;font-size:.82rem;min-width:0;padding:8px;transition:border-color .15s ease}.dashboard-settings-container .dashboard-settings-api-key-input::placeholder{color:var(--dashboard-color-text-muted)}.dashboard-settings-container .dashboard-settings-api-key-input:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-api-key-toggle{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:.9rem;line-height:1;padding:8px;transition:background .1s ease,color .1s ease}.dashboard-settings-container .dashboard-settings-api-key-toggle:hover{background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.widget-dream-task .dream-task-header-actions{align-items:center;display:flex;gap:8px}.widget-dream-task .dream-task-list{display:flex;flex-direction:column;gap:12px}.widget-dream-task .dream-task-goals-summary{border-bottom:1px solid var(--dashboard-color-border);margin-bottom:8px;padding-bottom:12px}.widget-dream-task .dream-task-goals-text{color:var(--dashboard-color-text-secondary);font-size:.8rem;font-style:italic;line-height:1.5;margin:0}.widget-dream-task .dream-task-card{border:1px solid var(--dashboard-color-border);border-radius:10px;padding:12px 16px;transition:border-color .15s ease}.widget-dream-task .dream-task-card:hover{border-color:var(--dashboard-color-blue-light)}.widget-dream-task .dream-task-card-header{align-items:flex-start;display:flex;gap:8px;justify-content:space-between;margin-bottom:8px}.widget-dream-task .dream-task-card-title{color:var(--dashboard-color-navy);font-size:.9rem;font-weight:600;line-height:1.3}.widget-dream-task .dream-task-card-title--clickable{cursor:pointer}.widget-dream-task .dream-task-card-title--clickable:hover{color:var(--dashboard-color-blue);text-decoration:underline}.widget-dream-task .dream-task-rating{border-radius:6px;flex-shrink:0}.widget-dream-task .dream-task-rating--high{background:#22c55e1f;color:var(--dashboard-color-success)}.widget-dream-task .dream-task-rating--medium{background:#eab3081f;color:var(--dashboard-color-warning)}.widget-dream-task .dream-task-rating--low{background:#ef44441f;color:var(--dashboard-color-danger)}.widget-dream-task .dream-task-card--invented{border-left:2px solid var(--dashboard-color-blue-light)}.widget-dream-task .dream-task-new-badge{background:#4a9eff1f;border-radius:6px;color:var(--dashboard-color-blue);flex-shrink:0}.widget-dream-task .dream-task-new-badge,.widget-dream-task .dream-task-rating{font-size:11px;font-weight:700;padding:2px 4px;text-transform:uppercase;white-space:nowrap}.widget-dream-task .dream-task-card-explanation{color:var(--dashboard-color-text-secondary);display:-webkit-box;font-size:.8rem;line-height:1.5;margin:0;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:3}.widget-dream-task .dream-task-no-config{align-items:center;display:flex;flex-direction:column;gap:12px;padding:24px 16px;text-align:center}.widget-dream-task .dream-task-no-config-text{color:var(--dashboard-color-text-secondary);font-size:.85rem;line-height:1.5;margin:0}.widget-dream-task .dream-task-settings-link{color:var(--dashboard-color-blue);font-weight:600;text-decoration:none}.widget-dream-task .dream-task-settings-link:hover{text-decoration:underline}.widget-dream-task .dream-task-loading{align-items:center;display:flex;flex-direction:column;gap:12px;padding:24px;text-align:center}.widget-dream-task .dream-task-loading p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.widget-dream-task .dream-task-spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:24px;width:24px}.widget-dream-task .dream-task-error{padding:16px;text-align:center}.widget-dream-task .dream-task-error p{color:var(--dashboard-color-danger);font-size:.85rem;margin:0 0 12px}.widget-dream-task .dream-task-empty{padding:16px;text-align:center}.widget-dream-task .dream-task-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0 0 12px}.widget-dream-task .dream-task-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:4px 12px}.widget-dream-task .dream-task-retry:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-blue)}.widget-day-sketch .widget-body{display:flex;flex-direction:column;overflow:hidden;padding:0}.widget-day-sketch .day-sketch-notebook{background-color:#fffef5;background-image:repeating-linear-gradient(transparent,transparent 33px,#b8d4e8 33px,#b8d4e8 34px);background-attachment:local;background-position:0 0;background-size:100% 34px;border-left:3px solid #e88e8e;flex:1;margin-left:0;min-height:0;overflow-y:auto;padding:0 8px 0 0}.widget-day-sketch .day-sketch-line{align-items:center;display:flex;height:34px;padding-left:4px;position:relative}.widget-day-sketch .day-sketch-hour-label{color:#a0a0a0;flex-shrink:0;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.78rem;font-weight:700;letter-spacing:.02em;text-align:right;text-transform:lowercase;-webkit-user-select:none;user-select:none;width:64px;padding-right:8px}.widget-day-sketch .day-sketch-input{background:#0000;border:none;color:#333;flex:1;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.88rem;height:100%;line-height:34px;outline:none;padding:0 4px}.widget-day-sketch .day-sketch-input::placeholder{color:#0000}.widget-day-sketch .day-sketch-input:focus{background:#b8d4e81f}.widget-day-sketch .day-sketch-loading{align-items:center;color:var(--dashboard-color-text-muted);display:flex;font-size:.85rem;height:100%;justify-content:center;padding:24px}.widget-day-sketch .day-sketch-save-btn{background:none;border:1px solid var(--dashboard-color-blue);border-radius:6px;color:var(--dashboard-color-blue);cursor:pointer;font-size:.72rem;font-weight:600;padding:2px 8px;transition:background .15s ease,color .15s ease}.widget-day-sketch .day-sketch-save-btn:hover:not(:disabled){background:var(--dashboard-color-blue);color:var(--dashboard-color-text-on-accent)}.widget-day-sketch .day-sketch-save-btn--disabled{border-color:var(--dashboard-color-text-muted);color:var(--dashboard-color-text-muted);cursor:default;opacity:.5}@media (prefers-color-scheme: dark){.widget-day-sketch .day-sketch-notebook{background-color:#2a2923;background-image:repeating-linear-gradient(transparent,transparent 33px,#4a5568 33px,#4a5568 34px);border-left-color:#7c4444}.widget-day-sketch .day-sketch-hour-label{color:#6b7280}.widget-day-sketch .day-sketch-input{color:#e2e0d8}.widget-day-sketch .day-sketch-input:focus{background:#4a556826}}.widget-peak-hours .peak-hours-metrics-grid{display:grid;gap:12px;grid-template-columns:repeat(3,1fr);margin-bottom:16px}.widget-peak-hours .peak-hours-metric-card{background:var(--dashboard-color-bg-page);border-radius:10px;padding:12px 16px}.widget-peak-hours .peak-hours-metric-label{color:var(--dashboard-color-text-secondary);font-size:.8rem;margin-bottom:4px}.widget-peak-hours .peak-hours-metric-value{color:var(--dashboard-color-navy);font-size:1.25rem;font-weight:600}.widget-peak-hours .peak-hours-legend{color:var(--dashboard-color-text-secondary);display:flex;flex-wrap:wrap;font-size:.75rem;gap:16px;margin-bottom:8px}.widget-peak-hours .peak-hours-legend-item{align-items:center;display:flex;gap:4px}.widget-peak-hours .peak-hours-legend-swatch{border-radius:2px;display:inline-block;height:10px;width:10px}.widget-peak-hours .peak-hours-legend-swatch--created{background:var(--dashboard-color-blue)}.widget-peak-hours .peak-hours-legend-swatch--completed{background:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-chart-container{height:260px;position:relative;width:100%}.widget-peak-hours .peak-hours-canvas{display:block;height:100%;width:100%}.widget-peak-hours .peak-hours-tooltip{background:var(--dashboard-color-tooltip-bg);border:1px solid var(--dashboard-color-tooltip-border);border-radius:6px;box-shadow:0 2px 8px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);font-size:.75rem;padding:8px 12px;pointer-events:none;position:absolute;white-space:nowrap;z-index:10}.widget-peak-hours .peak-hours-tooltip-header{font-weight:600;margin-bottom:4px}.widget-peak-hours .peak-hours-tooltip-label--created{color:var(--dashboard-color-tooltip-accent)}.widget-peak-hours .peak-hours-tooltip-label--completed{color:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-footer{color:var(--dashboard-color-text-muted);font-size:.75rem;margin-top:12px;text-align:center}.widget-peak-hours .peak-hours-empty{padding:24px;text-align:center}.widget-peak-hours .peak-hours-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.vertical-1-cell .widget-peak-hours .peak-hours-metrics-grid{gap:8px;margin-bottom:8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-card{padding:4px 8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-label{font-size:.7rem;margin-bottom:0}.vertical-1-cell .widget-peak-hours .peak-hours-metric-value{font-size:1rem}.vertical-1-cell .widget-peak-hours .peak-hours-legend{margin-bottom:4px}.vertical-1-cell .widget-peak-hours .peak-hours-chart-container{height:160px}.vertical-1-cell .widget-peak-hours .peak-hours-footer{margin-top:8px}.horizontal-2-cell .widget-peak-hours .peak-hours-chart-container{height:260px}.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:380px}.horizontal-2-cell.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:440px}@keyframes mood-fadeout{0%{opacity:1}to{opacity:0}}.widget-mood .mood-selector{display:flex;gap:8px;justify-content:center;margin-bottom:16px}.widget-mood .mood-btn{align-items:center;background:none;border:2px solid rgba(0,0,0,0);border-radius:50%;cursor:pointer;display:flex;height:44px;justify-content:center;transition:border-color .15s,transform .15s;width:44px}.widget-mood .mood-btn:hover{border-color:var(--dashboard-color-blue);transform:scale(1.15)}.widget-mood .mood-btn--selected{border-color:var(--dashboard-color-blue);background:var(--dashboard-color-blue-light);transform:scale(1.15)}.widget-mood .mood-btn .mood-emoji{font-size:1.5rem}.widget-mood .mood-details{margin-bottom:12px}.widget-mood .mood-details-label{color:var(--dashboard-color-text-secondary);display:block;font-size:.8rem;margin-bottom:4px}.widget-mood .mood-details-textarea{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.85rem;padding:8px;resize:vertical;width:100%}.widget-mood .mood-details-textarea:focus{border-color:var(--dashboard-color-blue);outline:none}.widget-mood .mood-details-textarea::placeholder{color:var(--dashboard-color-text-muted)}.widget-mood .mood-submit-row{display:flex;gap:8px;margin-bottom:16px}.widget-mood .mood-submit-btn{background:var(--dashboard-color-blue);border:none;border-radius:6px;color:var(--dashboard-color-text-on-accent);cursor:pointer;flex:1;font-size:.85rem;font-weight:600;padding:8px 16px;transition:opacity .15s}.widget-mood .mood-submit-btn:hover:not(:disabled){opacity:.9}.widget-mood .mood-submit-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-cancel-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.85rem;font-weight:600;padding:8px 16px;transition:border-color .15s,color .15s}.widget-mood .mood-cancel-btn:hover:not(:disabled){border-color:var(--dashboard-color-text-secondary);color:var(--dashboard-color-text)}.widget-mood .mood-cancel-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-confirmation{align-items:center;animation:mood-fadeout 1s ease-out 4s forwards;display:flex;flex-direction:column;gap:8px;margin-bottom:16px;padding:16px 0}.widget-mood .mood-confirmation-icon{font-size:2.5rem}.widget-mood .mood-confirmation-text{color:var(--dashboard-color-success);font-size:.9rem;font-weight:600}.widget-mood .mood-summary{color:var(--dashboard-color-text-secondary);font-size:.8rem;text-align:center}.widget-mood .mood-sparkline{align-items:flex-end;display:flex;gap:3px;height:24px;justify-content:center;margin-top:8px}.widget-mood .mood-dot{background:var(--dashboard-color-blue);border-radius:2px;min-height:4px;position:relative;width:4px}.widget-mood .mood-viz-section{align-items:center;display:flex;flex-direction:column;gap:4px;margin-top:8px}.widget-mood .mood-viz-canvas-wrap{border-radius:10px;line-height:0;overflow:visible;position:relative}.widget-mood .mood-viz-canvas{border-radius:10px;display:block;height:220px;width:220px}.widget-mood .mood-viz-configure-link{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:.75rem;padding:4px 8px;transition:color .15s}.widget-mood .mood-viz-configure-link:hover{color:var(--dashboard-color-text-secondary)}.widget-mood .mood-viz-config-option{align-items:center;cursor:pointer;display:flex;font-size:.9rem;gap:8px;padding:4px 0}.widget-mood .mood-viz-config-option input[type=radio]{accent-color:var(--dashboard-color-blue);cursor:pointer}.widget-quotes .widget-body{display:flex;flex-direction:column}.widget-quotes .quotes-grid{display:grid;flex:1;gap:16px;grid-template-columns:1fr 1fr}.widget-quotes .quote-tile{background-position:center;background-size:cover;border-radius:10px;color:var(--dashboard-color-text-on-accent);display:flex;flex-direction:column;justify-content:flex-end;min-height:150px;padding:24px 16px}.widget-quotes .quote-tile .quote-text{font-family:Georgia,Times New Roman,serif;font-size:.95rem;font-style:italic;line-height:1.5;margin:0 0 8px}.widget-quotes .quote-tile .quote-author{font-size:.75rem;opacity:.85}.widget-quotes .quotes-loading{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-quick-actions .qa-grid{display:grid;gap:8px;grid-template-columns:1fr 1fr}.widget-quick-actions .qa-button{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex-direction:column;gap:8px;padding:16px 8px;transition:background .15s}.widget-quick-actions .qa-button:hover{background:var(--dashboard-color-bg-page-hover)}.widget-quick-actions .qa-button .qa-icon{font-size:1.4rem}.widget-quick-actions .qa-button .qa-label{color:var(--dashboard-color-text);font-size:.75rem;font-weight:500}.widget-recent-notes .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-recent-notes .note-list{display:flex;flex:1;flex-direction:column;gap:4px;list-style:none;min-height:0;overflow-y:auto}.widget-recent-notes .note-item{display:flex}.widget-recent-notes .note-item:hover{background-color:var(--dashboard-color-bg-page)}.widget-recent-notes .note-link{align-items:center;background:none;border:none;border-radius:6px;color:inherit;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:space-between;padding:8px 12px;text-align:left;width:100%}.widget-recent-notes .note-name{color:var(--dashboard-color-text);flex:1;font-size:.85rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-recent-notes .note-count{color:var(--dashboard-color-text-muted);flex-shrink:0;font-size:.75rem;white-space:nowrap}.widget-recent-notes .note-loading,.widget-recent-notes .note-empty,.widget-recent-notes .note-error{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-recent-notes .note-error{color:var(--dashboard-color-danger)}.dashboard-toolbar .task-domains{align-items:center;background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;gap:12px;padding:8px 12px}.dashboard-toolbar .task-domains-list{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:8px}.dashboard-toolbar .task-domain-item{align-items:center;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;display:inline-flex;font-size:.8rem;font-weight:500;gap:4px;padding:4px 12px;transition:all .15s ease}.dashboard-toolbar .task-domain-item:hover{background:var(--dashboard-color-blue-light);color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domain-item.active{background:var(--dashboard-color-navy);border-color:var(--dashboard-color-navy);color:var(--dashboard-color-bg-card)}.dashboard-toolbar .task-domain-item.active .task-domain-settings{color:var(--dashboard-color-text-on-accent-muted)}.dashboard-toolbar .task-domain-item.active .task-domain-settings:hover{color:var(--dashboard-color-text-on-accent)}.dashboard-toolbar .task-domain-name{-webkit-user-select:none;user-select:none}.dashboard-toolbar .task-domain-settings{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:.85rem;line-height:1;padding:0}.dashboard-toolbar .task-domain-settings:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px;white-space:nowrap}@media (max-width: 800px){.dashboard-toolbar .task-domains-refresh{display:none}}.dashboard-toolbar .task-domains-refresh:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh:disabled{cursor:default;opacity:.5}.dashboard-toolbar .task-domains-empty{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-toolbar .task-domains--empty .task-domains-empty{flex:1 1 100%;font-weight:500}.widget-victory-value .widget-body{display:flex;flex-direction:column;justify-content:space-between}.widget-victory-value .vv-header{align-items:baseline;display:flex;gap:8px;margin-bottom:8px}.widget-victory-value .vv-header .vv-total{color:var(--dashboard-color-navy);font-size:2rem;font-weight:700}.widget-victory-value .vv-header .vv-label{color:var(--dashboard-color-text-secondary);font-size:.8rem}.widget-victory-value .vv-date-range{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:400}.widget-victory-value .vv-chart-container{align-items:center;display:flex;gap:4px}.widget-victory-value .vv-chart-wrap{flex:1;min-width:0;position:relative}.widget-victory-value .vv-chart{border-radius:6px;display:block;width:100%}.widget-victory-value .vv-nav-arrow{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:1.25rem;line-height:1;padding:4px 8px;transition:background .15s,color .15s}.widget-victory-value .vv-nav-arrow:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);color:var(--dashboard-color-navy)}.widget-victory-value .vv-nav-arrow:disabled{cursor:not-allowed;opacity:.3}.vertical-1-cell .widget-victory-value .vv-chart{height:180px}.horizontal-2-cell .widget-victory-value .vv-chart{height:260px}.vertical-2-cell .widget-victory-value .vv-chart{height:380px}.horizontal-2-cell.vertical-2-cell .widget-victory-value .vv-chart{height:460px}:root{--dashboard-color-accent: #e8853d;--dashboard-color-agenda-priority-critical: #e85353;--dashboard-color-agenda-priority-important: #e8853d;--dashboard-color-agenda-priority-normal: #7a8699;--dashboard-color-agenda-priority-urgent: #5b7bbf;--dashboard-color-bg-card: #ffffff;--dashboard-color-bg-page: #eef1f5;--dashboard-color-bg-page-hover: #e6ebf2;--dashboard-color-blue: #5b7bbf;--dashboard-color-blue-light: #e8edf5;--dashboard-color-border: #d8dde6;--dashboard-color-danger: #e85353;--dashboard-color-info: #5b7bbf;--dashboard-color-navy: #2c3e6b;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .4);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .15);--dashboard-color-success: #4caf80;--dashboard-color-text: #1e2a3a;--dashboard-color-text-muted: #a3aebb;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #7a8699;--dashboard-color-tooltip-accent: #5b7bbf;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .3);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #e8853d;--dashboard-color-plan-created-bg: rgba(76, 175, 128, .08);--dashboard-color-plan-created-border: #4caf80}@media (prefers-color-scheme: dark){:root{--dashboard-color-accent: #ffb36b;--dashboard-color-agenda-priority-critical: #ff7a7a;--dashboard-color-agenda-priority-important: #ffb36b;--dashboard-color-agenda-priority-normal: #a3b0c4;--dashboard-color-agenda-priority-urgent: #8fb2ff;--dashboard-color-bg-card: #1f2937;--dashboard-color-bg-page: #111827;--dashboard-color-bg-page-hover: #1a2436;--dashboard-color-blue: #8fb2ff;--dashboard-color-blue-light: #253553;--dashboard-color-border: #374151;--dashboard-color-danger: #ff7a7a;--dashboard-color-info: #8fb2ff;--dashboard-color-navy: #c5d8ff;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .5);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .4);--dashboard-color-success: #73d4a3;--dashboard-color-text: #e5ecf5;--dashboard-color-text-muted: #95a3b8;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #b6c0cf;--dashboard-color-tooltip-accent: #a5b4fc;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .5);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #ffb36b;--dashboard-color-plan-created-bg: rgba(115, 212, 163, .1);--dashboard-color-plan-created-border: #73d4a3}}html{overflow-y:scroll}html *,html *:before,html *:after{box-sizing:border-box;margin:0;padding:0}html body{-webkit-font-smoothing:antialiased;background:var(--dashboard-color-bg-page);color:var(--dashboard-color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.dashboard-outer-container{min-height:100vh;overflow-x:hidden;width:100%}.dashboard-outer-container .dashboard-content{margin:0 auto;max-width:1200px;padding:24px}.dashboard-outer-container .dashboard-content .dashboard-grid{display:grid;gap:16px;grid-template-columns:repeat(4,1fr)}.dashboard-outer-container .dashboard-content .grid-cell{--drag-scale: 1;--flip-x: 0px;--flip-y: 0px;opacity:.95;min-width:0;transform:translate(var(--flip-x),var(--flip-y)) scale(var(--drag-scale));transition:opacity .3s ease,transform .22s ease;will-change:transform}.dashboard-outer-container .dashboard-content .grid-cell:hover{opacity:1}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell{grid-column:span 2}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell{grid-column:span 3}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 4}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell{max-height:400px;min-height:300px}.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 2;max-height:800px;min-height:600px}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-active{cursor:grabbing}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--dragging-ready{animation:widget-wobble .35s ease-in-out infinite alternate;opacity:1;z-index:3}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-shift{--drag-scale: .985}@media (max-width: 800px){.dashboard-outer-container .dashboard-content{padding:12px}.dashboard-outer-container .dashboard-content .dashboard-grid{grid-template-columns:1fr}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 1}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell,.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 1;max-height:none;min-height:auto}}.dashboard-outer-container .widget{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;display:flex;flex-direction:column;height:100%;max-width:100%;overflow:hidden}.dashboard-outer-container .widget-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;padding:12px 16px}.dashboard-outer-container .widget-heading-bar{-webkit-user-select:none;user-select:none}.dashboard-outer-container .widget-heading-bar.widget-heading-bar--drag-ready{cursor:grabbing}.dashboard-outer-container .widget-icon{font-size:1rem}.dashboard-outer-container .widget-title{align-items:baseline;color:var(--dashboard-color-navy);display:flex;flex:1;font-size:.85rem;font-weight:700;gap:8px;letter-spacing:.03em;margin:0;text-transform:uppercase}.dashboard-outer-container .widget-title__subtitle{color:var(--dashboard-color-text-muted);font-size:.75rem;font-weight:400;letter-spacing:.01em;text-transform:none}.dashboard-outer-container .widget-configure,.dashboard-outer-container .widget-header-action{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px}.dashboard-outer-container .widget-configure:hover,.dashboard-outer-container .widget-header-action:hover{color:var(--dashboard-color-navy)}.dashboard-outer-container .widget-body{flex:1;padding:16px}.dashboard-outer-container .dashboard-loading{align-items:center;color:var(--dashboard-color-text-secondary);display:flex;flex-direction:column;gap:16px;height:100vh;justify-content:center;width:100%}.dashboard-outer-container .dashboard-loading .spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:32px;width:32px}.dashboard-outer-container .dashboard-error{color:var(--dashboard-color-danger);padding:40px;text-align:center}.dashboard-outer-container .dashboard-error p{color:var(--dashboard-color-text-secondary);margin-top:8px}.dashboard-outer-container .widget-error-fallback{align-items:center;background:var(--dashboard-color-bg-card);border:1px dashed var(--dashboard-color-danger);border-radius:10px;display:flex;flex-direction:column;gap:8px;height:100%;justify-content:center;padding:24px;text-align:center}.dashboard-outer-container .widget-error-fallback-title{color:var(--dashboard-color-danger);font-size:.9rem;font-weight:700}.dashboard-outer-container .widget-error-fallback-message{color:var(--dashboard-color-text-muted);font-size:.8rem;max-width:280px;word-break:break-word}.dashboard-outer-container .widget-error-fallback-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;margin-top:4px;padding:4px 12px;transition:color .15s ease,border-color .15s ease}.dashboard-outer-container .widget-error-fallback-retry:hover{border-color:var(--dashboard-color-navy);color:var(--dashboard-color-navy)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes widget-wobble{0%{transform:rotate(-1.5deg)}to{transform:rotate(1.5deg)}}
`;function L(){return`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>${y}</style>
</head>
<body>
<div id="dashboard-root"></div>
<script type="text/javascript" src="data:text/javascript;base64,${x}"><\/script>
</body>
</html>`}var c={LLM_API_KEY:"LLM API Key",LLM_PROVIDER:"LLM Provider",BACKGROUND_IMAGE_URL:"Background Image URL",BACKGROUND_IMAGE_MODE:"Background Image Mode",CONSOLE_LOGGING:"Console logging",DASHBOARD_COMPONENTS:"dashboard_elements",TASK_DOMAINS:"dashboard_task_domains",PLANNING_NOTE_TAG:"Tag to apply to planning notes"};function p(l){return`dashboard_${l}_config`}var A=c.DASHBOARD_COMPONENTS,q=c.TASK_DOMAINS,_=c.PLANNING_NOTE_TAG,R=24*60*60*1e3,g=[{widgetId:"planning",name:"Quarterly Planning",description:"Plan and track your quarterly goals and priorities",icon:"\u{1F4CB}",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"victory-value",name:"Victory Value",description:"Celebrate wins and track high-value task completions",icon:"\u{1F3C6}",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"mood",name:"Mood Tracker",visibleTitle:"How are you feeling?",description:"Log your daily mood and visualize trends over time",icon:"\u{1F3AD}",defaultGridWidthSize:1,maxHorizontalTiles:2,maxVerticalTiles:2},{widgetId:"calendar",name:"Calendar",description:"See upcoming events and appointments at a glance",icon:"\u{1F4C5}",defaultGridWidthSize:1,maxHorizontalTiles:2,maxVerticalTiles:2},{widgetId:"agenda",name:"Task Agenda",description:"View and manage your prioritized task list",icon:"\u{1F4CC}",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"quotes",name:"Inspiration Quotes",description:"Rotating inspirational quotes to keep you motivated",icon:"\u{1F4A1}",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"recent-notes",name:"Revisit Candidate",description:"Notes with open tasks that have not had a new task in over a week",icon:"\u{1F4DD}",defaultGridWidthSize:1,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"quick-actions",name:"Quick Actions",description:"Shortcuts for your most frequently used dashboard actions",icon:"\u26A1",defaultGridWidthSize:1,maxHorizontalTiles:2,maxVerticalTiles:2},{widgetId:"dream-task",name:"DreamTask",description:"AI-suggested tasks aligned with your quarterly and monthly goals",icon:"\u{1F52E}",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"peak-hours",name:"Peak Hours",description:"Hourly distribution of task creation and completion activity",icon:"\u23F0",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2},{widgetId:"day-sketch",name:"Day Sketcher",description:"Notebook-paper day planner with hour-by-hour entries saved to a note",icon:"\u{1F5D2}\uFE0F",defaultGridWidthSize:2,maxHorizontalTiles:4,maxVerticalTiles:2}];var S=g.map(l=>({widgetId:l.widgetId,gridWidthSize:l.defaultGridWidthSize,gridHeightSize:1,settings:{}}));var e=["January","February","March","April","May","June","July","August","September","October","November","December"];function n(){let l=new Date,b=l.getFullYear(),d=l.getMonth(),m=Math.floor(d/3)+1;return{year:b,quarter:m,label:`Q${m} ${b}`}}function K(){let{year:l,quarter:b}=n();return b++,b>4&&(b=1,l++),{year:l,quarter:b,label:`Q${b} ${l}`}}var t=!1;function u(l){if(typeof l=="boolean"){t=l;return}let b=String(l||"").trim().toLowerCase();t=["true","yes","1","on","enabled"].includes(b)}function X(...l){t&&console.log(...l)}function N(l){if(!l)return new Date;if(l instanceof Date)return new Date(l);if(typeof l=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(l)){let[d,m,Z]=l.split("-").map(Number);return new Date(d,m-1,Z)}let b=new Date(l);return Number.isNaN(b.getTime())?new Date:b}function I(l){let b=N(l),d=b.getDay(),m=d===0?-6:1-d,Z=new Date(b.getFullYear(),b.getMonth(),b.getDate()+m);return Z.setHours(0,0,0,0),Z}function J(l){let b=I(l),d=new Date(b);return d.setDate(d.getDate()+6),d.setHours(23,59,59,999),d}async function C(l){u(l.settings[c.CONSOLE_LOGGING]);let b=new Date,d=I(b),m=J(b),Z={domains:[],selectedDomainUuid:null};try{Z=await U(l)}catch(h){X("[fetchDashboardData] _resolveTaskDomains failed, continuing with empty domains:",h)}let G=Math.floor(Date.now()/1e3)-60*60*24*14,W=await Promise.allSettled([w(l,G),j(l),B(l),r(l,Z.selectedDomainUuid)]),i=Y(W[0],[],"moodRatings"),a=Y(W[1],null,"quarterlyPlans"),o=Y(W[2],{},"settings"),V=Y(W[3],[],"domainTasks");return{tasks:V,todayTasks:z(V,b),completedThisWeek:T(V,d,m),weeklyVictoryValue:v(V,d,m),dailyVictoryValues:P(V,d),moodRatings:i,quarterlyPlans:a,currentDate:b.toISOString(),settings:o,taskDomains:Z.domains,activeTaskDomain:Z.selectedDomainUuid}}async function U(l){let b=l.settings[c.TASK_DOMAINS],d={};try{d=b?JSON.parse(b):{}}catch{d={}}let m=!d.lastRetrieved||Date.now()-d.lastRetrieved>R;if(!(Array.isArray(d.domains)&&d.domains.length>0)||m){let G=await l.getTaskDomains();d.domains=(Array.isArray(G)?G:[]).filter(i=>i&&i.uuid).map(i=>({name:i.name,uuid:i.uuid})),d.lastRetrieved=Date.now(),d.selectedDomainUuid&&d.domains.some(i=>i.uuid===d.selectedDomainUuid)||(d.selectedDomainUuid=H(d.domains)),await l.setSetting(c.TASK_DOMAINS,JSON.stringify(d))}return!d.selectedDomainUuid&&d.domains.length>0&&(d.selectedDomainUuid=H(d.domains),await l.setSetting(c.TASK_DOMAINS,JSON.stringify(d))),d}function Y(l,b,d){return l.status==="fulfilled"?l.value:(X(`[fetchDashboardData] ${d} fetch failed, using fallback:`,l.reason),b)}function H(l){if(!l||l.length===0)return null;let b=l.find(d=>d.name==="Work");return b?b.uuid:l[0].uuid}async function r(l,b){if(!b)return[];try{let d=await l.getTaskDomainTasks(b);return Array.isArray(d)?d:[]}catch(d){return X(`[_fetchTasksForDomain] getTaskDomainTasks failed for domain ${b}:`,d),[]}}function z(l,b){let d=new Date(b.getFullYear(),b.getMonth(),b.getDate()).getTime(),m=d+864e5;return l.filter(Z=>!Z.completedAt&&!Z.dismissedAt&&s(Z.startAt)&&s(Z.startAt)>=d&&s(Z.startAt)<m).sort((Z,G)=>(s(Z.startAt)||0)-(s(G.startAt)||0))}function T(l,b,d){let m=b.getTime(),Z=d.getTime();return l.filter(G=>s(G.completedAt)&&s(G.completedAt)>=m&&s(G.completedAt)<=Z)}function v(l,b,d){return T(l,b,d).reduce((m,Z)=>m+(Z.victoryValue||0),0)}function P(l,b){return Array.from({length:7},(m,Z)=>{let G=new Date(b);G.setDate(G.getDate()+Z);let W=new Date(G);W.setDate(W.getDate()+1);let i=l.filter(a=>s(a.completedAt)&&s(a.completedAt)>=G.getTime()&&s(a.completedAt)<W.getTime());return{day:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][Z],date:G.toISOString(),value:i.reduce((a,o)=>a+(o.victoryValue||0),0),taskCount:i.length}})}async function w(l,b){let d=await l.getMoodRatings(b);return X("Mood ratings",d,"from",b),d}async function j(l){let b=n(),d=K();X(`[_findQuarterlyPlans] querying: "${b.label} Plan", "${d.label} Plan"`);let[m,Z]=await Promise.all([l.filterNotes({query:`${b.label} Plan`}),l.filterNotes({query:`${d.label} Plan`})]);X("[_findQuarterlyPlans] filterNotes results \u2014 current:",m,"next:",Z);let G=m.find(h=>h.name===`${b.label} Plan`)?.uuid,W=Z.find(h=>h.name===`${d.label} Plan`)?.uuid;X(`[_findQuarterlyPlans] resolved UUIDs \u2014 current: ${G}, next: ${W}`);let i=k(b.quarter),a=k(d.quarter),[o,V]=await Promise.all([G?F(l,G,i):Promise.resolve(!1),W?F(l,W,a):Promise.resolve(!1)]);return X(`[_findQuarterlyPlans] hasAllMonthlyDetails \u2014 current: ${o}, next: ${V}`),{current:{...b,noteUUID:G,hasAllMonthlyDetails:o},next:{...d,noteUUID:W,hasAllMonthlyDetails:V}}}function k(l){let b=(l-1)*3;return[0,1,2].map(d=>e[(b+d)%12])}async function F(l,b,d){try{let m=await l.getNoteSections({uuid:b});return d.every(Z=>m.some(G=>G.heading?.text?.trim().toLowerCase()===Z.toLowerCase()))}catch{return!1}}async function B(l){let b=[p("victory-value"),p("calendar"),p("quotes"),p("mood"),p("recent-notes")],d={};for(let Z of b)try{let G=l.settings[Z];d[Z]=G?JSON.parse(G):null}catch{d[Z]=null}d[c.BACKGROUND_IMAGE_URL]=l.settings[c.BACKGROUND_IMAGE_URL]||"",d[c.BACKGROUND_IMAGE_MODE]=l.settings[c.BACKGROUND_IMAGE_MODE]||"cover",d[c.CONSOLE_LOGGING]=l.settings[c.CONSOLE_LOGGING]||"",d[c.LLM_PROVIDER]=l.settings[c.LLM_PROVIDER]||"",d[c.LLM_API_KEY]=l.settings[c.LLM_API_KEY]||"";let m=null;try{m=l.settings[c.DASHBOARD_COMPONENTS]?JSON.parse(l.settings[c.DASHBOARD_COMPONENTS]):null}catch{m=null}return(!Array.isArray(m)||m.length===0)&&(m=S.map(Z=>({...Z})),await l.setSetting(c.DASHBOARD_COMPONENTS,JSON.stringify(m))),d[c.DASHBOARD_COMPONENTS]=m,d}function s(l){if(l==null)return null;if(typeof l!="number"){let b=Number(l);return Number.isFinite(b)?b<1e10?b*1e3:b:null}return l<1e10?l*1e3:l}var Q={constants:{},appOption:{"Open Dashboard":async function(l){await l.openSidebarEmbed(1.5)},"Open Dashboard (Full)":async function(l){await l.openEmbed()}},async renderEmbed(l){try{return L()}catch(b){return X("Dashboard renderEmbed error:",b),`<div style="padding:20px;color:red;">Dashboard failed to load: ${b.message}</div>`}},async onEmbedCall(l,b,...d){u(l.settings[c.CONSOLE_LOGGING]);try{switch(b){case"configure":return await this._handleConfigure(l,d[0]);case"init":return await C(l);default:return typeof l[b]=="function"?await l[b](...d):(X(`Unknown embed action: ${b}`),null)}}catch(m){return X(`onEmbedCall error (${b}):`,m),{error:m.message}}},async _handleConfigure(l,b){let m={"victory-value":{title:"Configure Victory Value",inputs:[{label:"Time range",type:"radio",options:[{label:"This week",value:"week"},{label:"This month",value:"month"},{label:"Last 30 days",value:"30days"}]},{label:"Show mood overlay",type:"checkbox",value:!0}]},calendar:{title:"Configure Calendar",inputs:[{label:"Week starts on",type:"radio",options:[{label:"Sunday",value:"0"},{label:"Monday",value:"1"}]}]},quotes:{title:"Configure Quotes",inputs:[{label:"Quote style",type:"radio",options:[{label:"Motivational",value:"motivational"},{label:"Philosophical",value:"philosophical"},{label:"From quarterly goals",value:"goals"}]}]}}[b];if(!m)return null;let Z=await l.prompt(m.title,{inputs:m.inputs});return Z?(await l.setSetting(p(b),JSON.stringify(Array.isArray(Z)?Z:[Z])),Z):null}},Yl=Q;return Q;})()