3N4XMPXxEs6eZsy78Fgo4butfcAiwoDtG9P · data · 2.7c767379.chunk.js_0
{
"2.7c767379.chunk.js_0": "base64:KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1syXSxbZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDk5NCkoKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cig1MzcpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxNyksaT1yKDI3KSxvPXIoNTQpLGE9cig0OSkscz1yKDU4KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoODUpLGk9cigzNSksbz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsYT0iW29iamVjdCBGdW5jdGlvbl0iLHM9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIix1PSJbb2JqZWN0IFByb3h5XSI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3ZhciB0PW4oZSk7cmV0dXJuIHQ9PWF8fHQ9PXN8fHQ9PW98fHQ9PXV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2lmKG4pe3ZhciBvPXR5cGVvZiBuO2lmKCJzdHJpbmciPT09b3x8Im51bWJlciI9PT1vKWUucHVzaChuKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoKXt2YXIgYT1pLmFwcGx5KG51bGwsbik7YSYmZS5wdXNoKGEpfWVsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgcyBpbiBuKXIuY2FsbChuLHMpJiZuW3NdJiZlLnB1c2gocyl9fXJldHVybiBlLmpvaW4oIiAiKX1lLmV4cG9ydHM/KGkuZGVmYXVsdD1pLGUuZXhwb3J0cz1pKTp2b2lkIDA9PT0obj1mdW5jdGlvbigpe3JldHVybiBpfS5hcHBseSh0LFtdKSl8fChlLmV4cG9ydHM9bil9KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtvcHRpb25zOnt1c2VQdXJlSmF2YVNjcmlwdDohMX19fSxmdW5jdGlvbihlLHQpeyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0JiYoZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTgpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gaShlLHQscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjoobyhuLHQpLHQuQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlLHQscil9LGEuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBuPWkoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PT10eXBlb2Ygcj9uLmZpbGwodCxyKTpuLmZpbGwodCk6bi5maWxsKDApLG59LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkoZSl9LGEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fSxmdW5jdGlvbihlLHQpe3ZhciByPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCxuLGksbyl7dmFyIGE9cig2KSxzPXIoNjI4KSx1PWUuZXhwb3J0cz1hLnV0aWw9YS51dGlsfHx7fTtmdW5jdGlvbiBjKGUpe2lmKDghPT1lJiYxNiE9PWUmJjI0IT09ZSYmMzIhPT1lKXRocm93IG5ldyBFcnJvcigiT25seSA4LCAxNiwgMjQsIG9yIDMyIGJpdHMgc3VwcG9ydGVkOiAiK2UpfWZ1bmN0aW9uIGYoZSl7aWYodGhpcy5kYXRhPSIiLHRoaXMucmVhZD0wLCJzdHJpbmciPT09dHlwZW9mIGUpdGhpcy5kYXRhPWU7ZWxzZSBpZih1LmlzQXJyYXlCdWZmZXIoZSl8fHUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpaWYoInVuZGVmaW5lZCIhPT10eXBlb2YgbyYmZSBpbnN0YW5jZW9mIG8pdGhpcy5kYXRhPWUudG9TdHJpbmcoImJpbmFyeSIpO2Vsc2V7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7dHJ5e3RoaXMuZGF0YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9Y2F0Y2gobil7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdGhpcy5wdXRCeXRlKHRbcl0pfX1lbHNlKGUgaW5zdGFuY2VvZiBmfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYic3RyaW5nIj09PXR5cGVvZiBlLmRhdGEmJiJudW1iZXIiPT09dHlwZW9mIGUucmVhZCkmJih0aGlzLmRhdGE9ZS5kYXRhLHRoaXMucmVhZD1lLnJlYWQpO3RoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTB9IWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgdCYmdC5uZXh0VGljayYmIXQuYnJvd3NlcilyZXR1cm4gdS5uZXh0VGljaz10Lm5leHRUaWNrLHZvaWQodS5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBuP246dS5uZXh0VGljayk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBuKXJldHVybiB1LnNldEltbWVkaWF0ZT1mdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx2b2lkKHUubmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9KTtpZih1LnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9LCJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBlPSJmb3JnZS5zZXRJbW1lZGlhdGUiLHI9W107dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24odCl7ci5wdXNoKHQpLDE9PT1yLmxlbmd0aCYmd2luZG93LnBvc3RNZXNzYWdlKGUsIioiKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHQpe2lmKHQuc291cmNlPT09d2luZG93JiZ0LmRhdGE9PT1lKXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBuPXIuc2xpY2UoKTtyLmxlbmd0aD0wLG4uZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KX19LCEwKX1pZigidW5kZWZpbmVkIiE9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyKXt2YXIgaT1EYXRlLm5vdygpLG89ITAsYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyPVtdO25ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7dmFyIGU9ci5zbGljZSgpO3IubGVuZ3RoPTAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UoKX0pfSkub2JzZXJ2ZShhLHthdHRyaWJ1dGVzOiEwfSk7dmFyIHM9dS5zZXRJbW1lZGlhdGU7dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7RGF0ZS5ub3coKS1pPjE1PyhpPURhdGUubm93KCkscyhlKSk6KHIucHVzaChlKSwxPT09ci5sZW5ndGgmJmEuc2V0QXR0cmlidXRlKCJhIixvPSFvKSl9fXUubmV4dFRpY2s9dS5zZXRJbW1lZGlhdGV9KCksdS5pc05vZGVqcz0idW5kZWZpbmVkIiE9PXR5cGVvZiB0JiZ0LnZlcnNpb25zJiZ0LnZlcnNpb25zLm5vZGUsdS5nbG9iYWxTY29wZT11LmlzTm9kZWpzP2k6InVuZGVmaW5lZCI9PT10eXBlb2Ygc2VsZj93aW5kb3c6c2VsZix1LmlzQXJyYXk9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX0sdS5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LHUuaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnUuaXNBcnJheUJ1ZmZlcihlLmJ1ZmZlcikmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdS5CeXRlQnVmZmVyPWYsdS5CeXRlU3RyaW5nQnVmZmVyPWY7dS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZz1mdW5jdGlvbihlKXt0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aCs9ZSx0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aD40MDk2JiYodGhpcy5kYXRhLnN1YnN0cigwLDEpLHRoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTApfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMucmVhZH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoKCk8PTB9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5maWxsV2l0aEJ5dGU9ZnVuY3Rpb24oZSx0KXtlPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKHZhciByPXRoaXMuZGF0YTt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gdGhpcy5kYXRhPXIsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyh0KSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGErPWUsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyhlLmxlbmd0aCksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXModS5lbmNvZGVVdGY4KGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQyNExlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+MTYmMjU1KSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MzJMZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjE2JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpO3ZhciByPSIiO2Rve3QtPTgscis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpcy5wdXRCeXRlcyhyKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhlLmdldEJ5dGVzKCkpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8MTZedGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTtyZXR1cm4gdGhpcy5yZWFkKz0zLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpPDwyNF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMyk7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8ODtyZXR1cm4gdGhpcy5yZWFkKz0yLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MjRMZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCledGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8MTY7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMik8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCszKTw8MjQ7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludD1mdW5jdGlvbihlKXtjKGUpO3ZhciB0PTA7ZG97dD0odDw8OCkrdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspLGUtPTh9d2hpbGUoZT4wKTtyZXR1cm4gdH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5nZXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJbnQoZSkscj0yPDxlLTI7cmV0dXJuIHQ+PXImJih0LT1yPDwxKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGVzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlPyhlPU1hdGgubWluKHRoaXMubGVuZ3RoKCksZSksdD10aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKSx0aGlzLnJlYWQrPWUpOjA9PT1lP3Q9IiI6KHQ9MD09PXRoaXMucmVhZD90aGlzLmRhdGE6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCksdGhpcy5jbGVhcigpKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCk6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCx0aGlzLnJlYWQrZSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCtlKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGE9dGhpcy5kYXRhLnN1YnN0cigwLHRoaXMucmVhZCtlKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpK3RoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkK2UrMSksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuZGF0YS5sZW5ndGgtMSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBlPXUuY3JlYXRlQnVmZmVyKHRoaXMuZGF0YSk7cmV0dXJuIGUucmVhZD10aGlzLnJlYWQsZX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZD4wJiYodGhpcy5kYXRhPXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQpLHRoaXMucmVhZD0wKSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YT0iIix0aGlzLnJlYWQ9MCx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKTtyZXR1cm4gdGhpcy5kYXRhPXRoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkLHQpLHRoaXMucmVhZD0wLHRoaXN9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEubGVuZ3RoOysrdCl7dmFyIHI9dGhpcy5kYXRhLmNoYXJDb2RlQXQodCk7cjwxNiYmKGUrPSIwIiksZSs9ci50b1N0cmluZygxNil9cmV0dXJuIGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWNvZGVVdGY4KHRoaXMuYnl0ZXMoKSl9LHUuRGF0YUJ1ZmZlcj1mdW5jdGlvbihlLHQpe3Q9dHx8e30sdGhpcy5yZWFkPXQucmVhZE9mZnNldHx8MCx0aGlzLmdyb3dTaXplPXQuZ3Jvd1NpemV8fDEwMjQ7dmFyIHI9dS5pc0FycmF5QnVmZmVyKGUpLG49dS5pc0FycmF5QnVmZmVyVmlldyhlKTtpZihyfHxuKXJldHVybiB0aGlzLmRhdGE9cj9uZXcgRGF0YVZpZXcoZSk6bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHZvaWQodGhpcy53cml0ZT0id3JpdGVPZmZzZXQiaW4gdD90LndyaXRlT2Zmc2V0OnRoaXMuZGF0YS5ieXRlTGVuZ3RoKTt0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy53cml0ZT0wLG51bGwhPT1lJiZ2b2lkIDAhPT1lJiZ0aGlzLnB1dEJ5dGVzKGUpLCJ3cml0ZU9mZnNldCJpbiB0JiYodGhpcy53cml0ZT10LndyaXRlT2Zmc2V0KX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cml0ZS10aGlzLnJlYWR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCgpPD0wfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmFjY29tbW9kYXRlPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5sZW5ndGgoKT49ZSlyZXR1cm4gdGhpczt0PU1hdGgubWF4KHR8fHRoaXMuZ3Jvd1NpemUsZSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLmRhdGEuYnl0ZU9mZnNldCx0aGlzLmRhdGEuYnl0ZUxlbmd0aCksbj1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpK3QpO3JldHVybiBuLnNldChyKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMSksdGhpcy5kYXRhLnNldFVpbnQ4KHRoaXMud3JpdGUrKyxlKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmZpbGxXaXRoQnl0ZT1mdW5jdGlvbihlLHQpe3RoaXMuYWNjb21tb2RhdGUodCk7Zm9yKHZhciByPTA7cjx0Oysrcil0aGlzLmRhdGEuc2V0VWludDgoZSk7cmV0dXJuIHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZXM9ZnVuY3Rpb24oZSx0KXtpZih1LmlzQXJyYXlCdWZmZXJWaWV3KGUpKXt2YXIgcj0obj1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSkuYnl0ZUxlbmd0aC1uLmJ5dGVPZmZzZXQ7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUociksbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9cix0aGlzfWlmKHUuaXNBcnJheUJ1ZmZlcihlKSl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKS5zZXQobix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz1uLmJ5dGVMZW5ndGgsdGhpc31pZihlIGluc3RhbmNlb2YgdS5EYXRhQnVmZmVyfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLnJlYWQmJiJudW1iZXIiPT09dHlwZW9mIGUud3JpdGUmJnUuaXNBcnJheUJ1ZmZlclZpZXcoZS5kYXRhKSl7bj1uZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCxlLnJlYWQsZS5sZW5ndGgoKSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCx0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9bi5ieXRlTGVuZ3RoLHRoaXN9aWYoZSBpbnN0YW5jZW9mIHUuQnl0ZVN0cmluZ0J1ZmZlciYmKGU9ZS5kYXRhLHQ9ImJpbmFyeSIpLHQ9dHx8ImJpbmFyeSIsInN0cmluZyI9PT10eXBlb2YgZSl7dmFyIGk7aWYoImhleCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKE1hdGguY2VpbChlLmxlbmd0aC8yKSksaT1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyLHRoaXMud3JpdGUpLHRoaXMud3JpdGUrPXUuYmluYXJ5LmhleC5kZWNvZGUoZSxpLHRoaXMud3JpdGUpLHRoaXM7aWYoImJhc2U2NCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKDMqTWF0aC5jZWlsKGUubGVuZ3RoLzQpKSxpPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIsdGhpcy53cml0ZSksdGhpcy53cml0ZSs9dS5iaW5hcnkuYmFzZTY0LmRlY29kZShlLGksdGhpcy53cml0ZSksdGhpcztpZigidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSksdD0iYmluYXJ5IiksImJpbmFyeSI9PT10fHwicmF3Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoZS5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LmJpbmFyeS5yYXcuZGVjb2RlKGkpLHRoaXM7aWYoInV0ZjE2Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiplLmxlbmd0aCksaT1uZXcgVWludDE2QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LnRleHQudXRmMTYuZW5jb2RlKGkpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVuY29kaW5nOiAiK3QpfXRocm93IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlcjogIitlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoZSksZS5jbGVhcigpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKGUsInV0ZjE2Iil9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MTY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDMpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUpLHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUsZT4+MTYmMjU1KSx0aGlzLndyaXRlKz0zLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoNCksdGhpcy5kYXRhLnNldEludDMyKHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9NCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDE2TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSwhMCksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMyksdGhpcy5kYXRhLnNldEludDgodGhpcy53cml0ZSxlPj4xNiYyNTUpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUsITApLHRoaXMud3JpdGUrPTMsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDQpLHRoaXMuZGF0YS5zZXRJbnQzMih0aGlzLndyaXRlLGUsITApLHRoaXMud3JpdGUrPTQsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpLHRoaXMuYWNjb21tb2RhdGUodC84KTtkb3t0LT04LHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUrKyxlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0KSx0aGlzLmFjY29tbW9kYXRlKHQvOCksZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKyspfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk8PDhedGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKzIpO3JldHVybiB0aGlzLnJlYWQrPTMsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5nZXRJbnQzMih0aGlzLnJlYWQpO3JldHVybiB0aGlzLnJlYWQrPTQsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQxNkxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCwhMCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLnJlYWQrMSwhMCk8PDg7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50MzIodGhpcy5yZWFkLCEwKTtyZXR1cm4gdGhpcy5yZWFkKz00LGV9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50PWZ1bmN0aW9uKGUpe2MoZSk7dmFyIHQ9MDtkb3t0PSh0PDw4KSt0aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQrKyksZS09OH13aGlsZShlPjApO3JldHVybiB0fSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldFNpZ25lZEludD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEludChlKSxyPTI8PGUtMjtyZXR1cm4gdD49ciYmKHQtPXI8PDEpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0Qnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/KGU9TWF0aC5taW4odGhpcy5sZW5ndGgoKSxlKSx0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQsdGhpcy5yZWFkK2UpLHRoaXMucmVhZCs9ZSk6MD09PWU/dD0iIjoodD0wPT09dGhpcy5yZWFkP3RoaXMuZGF0YTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKSx0aGlzLmNsZWFyKCkpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuYnl0ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT90aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGEuc2V0VWludDgoZSx0KSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMud3JpdGUtMSl9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgdS5EYXRhQnVmZmVyKHRoaXMpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWQ+MCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLnJlYWQpLHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTt0LnNldChlKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KHQpLHRoaXMud3JpdGUtPXRoaXMucmVhZCx0aGlzLnJlYWQ9MH1yZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy5yZWFkPXRoaXMud3JpdGU9MCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlPU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKSx0aGlzLnJlYWQ9TWF0aC5taW4odGhpcy5yZWFkLHRoaXMud3JpdGUpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEuYnl0ZUxlbmd0aDsrK3Qpe3ZhciByPXRoaXMuZGF0YS5nZXRVaW50OCh0KTtyPDE2JiYoZSs9IjAiKSxlKz1yLnRvU3RyaW5nKDE2KX1yZXR1cm4gZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEsdGhpcy5yZWFkLHRoaXMubGVuZ3RoKCkpO2lmKCJiaW5hcnkiPT09KGU9ZXx8InV0ZjgiKXx8InJhdyI9PT1lKXJldHVybiB1LmJpbmFyeS5yYXcuZW5jb2RlKHQpO2lmKCJoZXgiPT09ZSlyZXR1cm4gdS5iaW5hcnkuaGV4LmVuY29kZSh0KTtpZigiYmFzZTY0Ij09PWUpcmV0dXJuIHUuYmluYXJ5LmJhc2U2NC5lbmNvZGUodCk7aWYoInV0ZjgiPT09ZSlyZXR1cm4gdS50ZXh0LnV0ZjguZGVjb2RlKHQpO2lmKCJ1dGYxNiI9PT1lKXJldHVybiB1LnRleHQudXRmMTYuZGVjb2RlKHQpO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBlbmNvZGluZzogIitlKX0sdS5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHwicmF3Iix2b2lkIDAhPT1lJiYidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSkpLG5ldyB1LkJ5dGVCdWZmZXIoZSl9LHUuZmlsbFN0cmluZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0iIjt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gcn0sdS54b3JCeXRlcz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPSIiLGk9IiIsbz0iIixhPTAscz0wO3I+MDstLXIsKythKWk9ZS5jaGFyQ29kZUF0KGEpXnQuY2hhckNvZGVBdChhKSxzPj0xMCYmKG4rPW8sbz0iIixzPTApLG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoaSksKytzO3JldHVybiBuKz1vfSx1LmhleFRvQnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9IiIscj0wO2ZvcighMCZlLmxlbmd0aCYmKHI9MSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVbMF0sMTYpKSk7cjxlLmxlbmd0aDtyKz0yKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHIociwyKSwxNikpO3JldHVybiB0fSx1LmJ5dGVzVG9IZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlQnVmZmVyKGUpLnRvSGV4KCl9LHUuaW50MzJUb0J5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpfTt2YXIgbD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGg9WzYyLC0xLC0xLC0xLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0xLC0xLC0xLDY0LC0xLC0xLC0xLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTEsLTEsLTEsLTEsLTEsLTEsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLHA9IjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoiO3UuZW5jb2RlNjQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89IiIsYT0iIixzPTA7czxlLmxlbmd0aDspcj1lLmNoYXJDb2RlQXQocysrKSxuPWUuY2hhckNvZGVBdChzKyspLGk9ZS5jaGFyQ29kZUF0KHMrKyksbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmRlY29kZTY0PWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7Zm9yKHZhciB0LHIsbixpLG89IiIsYT0wO2E8ZS5sZW5ndGg7KXQ9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10scj1oW2UuY2hhckNvZGVBdChhKyspLTQzXSxuPWhbZS5jaGFyQ29kZUF0KGErKyktNDNdLGk9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10sbys9U3RyaW5nLmZyb21DaGFyQ29kZSh0PDwyfHI+PjQpLDY0IT09biYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnIpPDw0fG4+PjIpLDY0IT09aSYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmbik8PDZ8aSkpKTtyZXR1cm4gb30sdS5lbmNvZGVVdGY4PWZ1bmN0aW9uKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfSx1LmRlY29kZVV0Zjg9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfSx1LmJpbmFyeT17cmF3Ont9LGhleDp7fSxiYXNlNjQ6e30sYmFzZTU4Ont9LGJhc2VOOntlbmNvZGU6cy5lbmNvZGUsZGVjb2RlOnMuZGVjb2RlfX0sdS5iaW5hcnkucmF3LmVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpfSx1LmJpbmFyeS5yYXcuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSk7Zm9yKHZhciBpPXI9cnx8MCxvPTA7bzxlLmxlbmd0aDsrK28pbltpKytdPWUuY2hhckNvZGVBdChvKTtyZXR1cm4gdD9pLXI6bn0sdS5iaW5hcnkuaGV4LmVuY29kZT11LmJ5dGVzVG9IZXgsdS5iaW5hcnkuaGV4LmRlY29kZT1mdW5jdGlvbihlLHQscil7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZS5sZW5ndGgvMikpKTt2YXIgaT0wLG89cj1yfHwwO2ZvcigxJmUubGVuZ3RoJiYoaT0xLG5bbysrXT1wYXJzZUludChlWzBdLDE2KSk7aTxlLmxlbmd0aDtpKz0yKW5bbysrXT1wYXJzZUludChlLnN1YnN0cihpLDIpLDE2KTtyZXR1cm4gdD9vLXI6bn0sdS5iaW5hcnkuYmFzZTY0LmVuY29kZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz0iIixhPSIiLHM9MDtzPGUuYnl0ZUxlbmd0aDspcj1lW3MrK10sbj1lW3MrK10saT1lW3MrK10sbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmJpbmFyeS5iYXNlNjQuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYSxzPXQ7c3x8KHM9bmV3IFVpbnQ4QXJyYXkoMypNYXRoLmNlaWwoZS5sZW5ndGgvNCkpKSxlPWUucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2Zvcih2YXIgdT0wLGM9cj1yfHwwO3U8ZS5sZW5ndGg7KW49aFtlLmNoYXJDb2RlQXQodSsrKS00M10saT1oW2UuY2hhckNvZGVBdCh1KyspLTQzXSxvPWhbZS5jaGFyQ29kZUF0KHUrKyktNDNdLGE9aFtlLmNoYXJDb2RlQXQodSsrKS00M10sc1tjKytdPW48PDJ8aT4+NCw2NCE9PW8mJihzW2MrK109KDE1JmkpPDw0fG8+PjIsNjQhPT1hJiYoc1tjKytdPSgzJm8pPDw2fGEpKTtyZXR1cm4gdD9jLXI6cy5zdWJhcnJheSgwLGMpfSx1LmJpbmFyeS5iYXNlNTguZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuYmluYXJ5LmJhc2VOLmVuY29kZShlLHAsdCl9LHUuYmluYXJ5LmJhc2U1OC5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5iaW5hcnkuYmFzZU4uZGVjb2RlKGUscCx0KX0sdS50ZXh0PXt1dGY4Ont9LHV0ZjE2Ont9fSx1LnRleHQudXRmOC5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe2U9dS5lbmNvZGVVdGY4KGUpO3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpKTtmb3IodmFyIGk9cj1yfHwwLG89MDtvPGUubGVuZ3RoOysrbyluW2krK109ZS5jaGFyQ29kZUF0KG8pO3JldHVybiB0P2ktcjpufSx1LnRleHQudXRmOC5kZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVjb2RlVXRmOChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSkpfSx1LnRleHQudXRmMTYuZW5jb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpKTtmb3IodmFyIGk9bmV3IFVpbnQxNkFycmF5KG4uYnVmZmVyKSxvPXI9cnx8MCxhPXIscz0wO3M8ZS5sZW5ndGg7KytzKWlbYSsrXT1lLmNoYXJDb2RlQXQocyksbys9MjtyZXR1cm4gdD9vLXI6bn0sdS50ZXh0LnV0ZjE2LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50MTZBcnJheShlLmJ1ZmZlcikpfSx1LmRlZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHQ9dS5kZWNvZGU2NChlLmRlZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbCkscil7dmFyIG49MjszMiZ0LmNoYXJDb2RlQXQoMSkmJihuPTYpLHQ9dC5zdWJzdHJpbmcobix0Lmxlbmd0aC00KX1yZXR1cm4gdH0sdS5pbmZsYXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmluZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbDtyZXR1cm4gbnVsbD09PW4/bnVsbDp1LmRlY29kZTY0KG4pfTt2YXIgZD1mdW5jdGlvbihlLHQscil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIG47aWYobnVsbD09PXI/bj1lLnJlbW92ZUl0ZW0odCk6KHI9dS5lbmNvZGU2NChKU09OLnN0cmluZ2lmeShyKSksbj1lLnNldEl0ZW0odCxyKSksInVuZGVmaW5lZCIhPT10eXBlb2YgbiYmITAhPT1uLnJ2YWwpe3ZhciBpPW5ldyBFcnJvcihuLmVycm9yLm1lc3NhZ2UpO3Rocm93IGkuaWQ9bi5lcnJvci5pZCxpLm5hbWU9bi5lcnJvci5uYW1lLGl9fSx5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIHI9ZS5nZXRJdGVtKHQpO2lmKGUuaW5pdClpZihudWxsPT09ci5ydmFsKXtpZihyLmVycm9yKXt2YXIgbj1uZXcgRXJyb3Ioci5lcnJvci5tZXNzYWdlKTt0aHJvdyBuLmlkPXIuZXJyb3IuaWQsbi5uYW1lPXIuZXJyb3IubmFtZSxufXI9bnVsbH1lbHNlIHI9ci5ydmFsO3JldHVybiBudWxsIT09ciYmKHI9SlNPTi5wYXJzZSh1LmRlY29kZTY0KHIpKSkscn0sZz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT15KGUsdCk7bnVsbD09PWkmJihpPXt9KSxpW3JdPW4sZChlLHQsaSl9LHY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtyZXR1cm4gbnVsbCE9PW4mJihuPXIgaW4gbj9uW3JdOm51bGwpLG59LG09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtpZihudWxsIT09biYmciBpbiBuKXtkZWxldGUgbltyXTt2YXIgaT0hMDtmb3IodmFyIG8gaW4gbil7aT0hMTticmVha31pJiYobj1udWxsKSxkKGUsdCxuKX19LGI9ZnVuY3Rpb24oZSx0KXtkKGUsdCxudWxsKX0sXz1mdW5jdGlvbihlLHQscil7dmFyIG4saT1udWxsOyJ1bmRlZmluZWQiPT09dHlwZW9mIHImJihyPVsid2ViIiwiZmxhc2giXSk7dmFyIG89ITEsYT1udWxsO2Zvcih2YXIgcyBpbiByKXtuPXJbc107dHJ5e2lmKCJmbGFzaCI9PT1ufHwiYm90aCI9PT1uKXtpZihudWxsPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoIkZsYXNoIGxvY2FsIHN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTtpPWUuYXBwbHkodGhpcyx0KSxvPSJmbGFzaCI9PT1ufSJ3ZWIiIT09biYmImJvdGgiIT09bnx8KHRbMF09bG9jYWxTdG9yYWdlLGk9ZS5hcHBseSh0aGlzLHQpLG89ITApfWNhdGNoKHUpe2E9dX1pZihvKWJyZWFrfWlmKCFvKXRocm93IGE7cmV0dXJuIGl9O3Uuc2V0SXRlbT1mdW5jdGlvbihlLHQscixuLGkpe18oZyxhcmd1bWVudHMsaSl9LHUuZ2V0SXRlbT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gXyh2LGFyZ3VtZW50cyxuKX0sdS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe18obSxhcmd1bWVudHMsbil9LHUuY2xlYXJJdGVtcz1mdW5jdGlvbihlLHQscil7XyhiLGFyZ3VtZW50cyxyKX0sdS5wYXJzZVVybD1mdW5jdGlvbihlKXt2YXIgdD0vXihodHRwcz8pOlwvXC8oW146Jl5cL10qKTo/KFxkKikoLiopJC9nO3QubGFzdEluZGV4PTA7dmFyIHI9dC5leGVjKGUpLG49bnVsbD09PXI/bnVsbDp7ZnVsbDplLHNjaGVtZTpyWzFdLGhvc3Q6clsyXSxwb3J0OnJbM10scGF0aDpyWzRdfTtyZXR1cm4gbiYmKG4uZnVsbEhvc3Q9bi5ob3N0LG4ucG9ydD84MCE9PW4ucG9ydCYmImh0dHAiPT09bg=="
}
Changelog:
{
"2020.03.29 15:15": "base64:KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1syXSxbZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDk5NCkoKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cig1MzcpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxNyksaT1yKDI3KSxvPXIoNTQpLGE9cig0OSkscz1yKDU4KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoODUpLGk9cigzNSksbz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsYT0iW29iamVjdCBGdW5jdGlvbl0iLHM9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIix1PSJbb2JqZWN0IFByb3h5XSI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3ZhciB0PW4oZSk7cmV0dXJuIHQ9PWF8fHQ9PXN8fHQ9PW98fHQ9PXV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2lmKG4pe3ZhciBvPXR5cGVvZiBuO2lmKCJzdHJpbmciPT09b3x8Im51bWJlciI9PT1vKWUucHVzaChuKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoKXt2YXIgYT1pLmFwcGx5KG51bGwsbik7YSYmZS5wdXNoKGEpfWVsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgcyBpbiBuKXIuY2FsbChuLHMpJiZuW3NdJiZlLnB1c2gocyl9fXJldHVybiBlLmpvaW4oIiAiKX1lLmV4cG9ydHM/KGkuZGVmYXVsdD1pLGUuZXhwb3J0cz1pKTp2b2lkIDA9PT0obj1mdW5jdGlvbigpe3JldHVybiBpfS5hcHBseSh0LFtdKSl8fChlLmV4cG9ydHM9bil9KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtvcHRpb25zOnt1c2VQdXJlSmF2YVNjcmlwdDohMX19fSxmdW5jdGlvbihlLHQpeyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0JiYoZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTgpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gaShlLHQscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjoobyhuLHQpLHQuQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlLHQscil9LGEuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBuPWkoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PT10eXBlb2Ygcj9uLmZpbGwodCxyKTpuLmZpbGwodCk6bi5maWxsKDApLG59LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkoZSl9LGEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fSxmdW5jdGlvbihlLHQpe3ZhciByPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCxuLGksbyl7dmFyIGE9cig2KSxzPXIoNjI4KSx1PWUuZXhwb3J0cz1hLnV0aWw9YS51dGlsfHx7fTtmdW5jdGlvbiBjKGUpe2lmKDghPT1lJiYxNiE9PWUmJjI0IT09ZSYmMzIhPT1lKXRocm93IG5ldyBFcnJvcigiT25seSA4LCAxNiwgMjQsIG9yIDMyIGJpdHMgc3VwcG9ydGVkOiAiK2UpfWZ1bmN0aW9uIGYoZSl7aWYodGhpcy5kYXRhPSIiLHRoaXMucmVhZD0wLCJzdHJpbmciPT09dHlwZW9mIGUpdGhpcy5kYXRhPWU7ZWxzZSBpZih1LmlzQXJyYXlCdWZmZXIoZSl8fHUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpaWYoInVuZGVmaW5lZCIhPT10eXBlb2YgbyYmZSBpbnN0YW5jZW9mIG8pdGhpcy5kYXRhPWUudG9TdHJpbmcoImJpbmFyeSIpO2Vsc2V7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7dHJ5e3RoaXMuZGF0YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9Y2F0Y2gobil7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdGhpcy5wdXRCeXRlKHRbcl0pfX1lbHNlKGUgaW5zdGFuY2VvZiBmfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYic3RyaW5nIj09PXR5cGVvZiBlLmRhdGEmJiJudW1iZXIiPT09dHlwZW9mIGUucmVhZCkmJih0aGlzLmRhdGE9ZS5kYXRhLHRoaXMucmVhZD1lLnJlYWQpO3RoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTB9IWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgdCYmdC5uZXh0VGljayYmIXQuYnJvd3NlcilyZXR1cm4gdS5uZXh0VGljaz10Lm5leHRUaWNrLHZvaWQodS5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBuP246dS5uZXh0VGljayk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBuKXJldHVybiB1LnNldEltbWVkaWF0ZT1mdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx2b2lkKHUubmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9KTtpZih1LnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9LCJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBlPSJmb3JnZS5zZXRJbW1lZGlhdGUiLHI9W107dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24odCl7ci5wdXNoKHQpLDE9PT1yLmxlbmd0aCYmd2luZG93LnBvc3RNZXNzYWdlKGUsIioiKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHQpe2lmKHQuc291cmNlPT09d2luZG93JiZ0LmRhdGE9PT1lKXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBuPXIuc2xpY2UoKTtyLmxlbmd0aD0wLG4uZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KX19LCEwKX1pZigidW5kZWZpbmVkIiE9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyKXt2YXIgaT1EYXRlLm5vdygpLG89ITAsYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyPVtdO25ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7dmFyIGU9ci5zbGljZSgpO3IubGVuZ3RoPTAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UoKX0pfSkub2JzZXJ2ZShhLHthdHRyaWJ1dGVzOiEwfSk7dmFyIHM9dS5zZXRJbW1lZGlhdGU7dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7RGF0ZS5ub3coKS1pPjE1PyhpPURhdGUubm93KCkscyhlKSk6KHIucHVzaChlKSwxPT09ci5sZW5ndGgmJmEuc2V0QXR0cmlidXRlKCJhIixvPSFvKSl9fXUubmV4dFRpY2s9dS5zZXRJbW1lZGlhdGV9KCksdS5pc05vZGVqcz0idW5kZWZpbmVkIiE9PXR5cGVvZiB0JiZ0LnZlcnNpb25zJiZ0LnZlcnNpb25zLm5vZGUsdS5nbG9iYWxTY29wZT11LmlzTm9kZWpzP2k6InVuZGVmaW5lZCI9PT10eXBlb2Ygc2VsZj93aW5kb3c6c2VsZix1LmlzQXJyYXk9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX0sdS5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LHUuaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnUuaXNBcnJheUJ1ZmZlcihlLmJ1ZmZlcikmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdS5CeXRlQnVmZmVyPWYsdS5CeXRlU3RyaW5nQnVmZmVyPWY7dS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZz1mdW5jdGlvbihlKXt0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aCs9ZSx0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aD40MDk2JiYodGhpcy5kYXRhLnN1YnN0cigwLDEpLHRoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTApfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMucmVhZH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoKCk8PTB9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5maWxsV2l0aEJ5dGU9ZnVuY3Rpb24oZSx0KXtlPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKHZhciByPXRoaXMuZGF0YTt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gdGhpcy5kYXRhPXIsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyh0KSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGErPWUsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyhlLmxlbmd0aCksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXModS5lbmNvZGVVdGY4KGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQyNExlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+MTYmMjU1KSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MzJMZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjE2JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpO3ZhciByPSIiO2Rve3QtPTgscis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpcy5wdXRCeXRlcyhyKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhlLmdldEJ5dGVzKCkpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8MTZedGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTtyZXR1cm4gdGhpcy5yZWFkKz0zLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpPDwyNF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMyk7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8ODtyZXR1cm4gdGhpcy5yZWFkKz0yLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MjRMZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCledGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8MTY7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMik8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCszKTw8MjQ7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludD1mdW5jdGlvbihlKXtjKGUpO3ZhciB0PTA7ZG97dD0odDw8OCkrdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspLGUtPTh9d2hpbGUoZT4wKTtyZXR1cm4gdH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5nZXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJbnQoZSkscj0yPDxlLTI7cmV0dXJuIHQ+PXImJih0LT1yPDwxKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGVzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlPyhlPU1hdGgubWluKHRoaXMubGVuZ3RoKCksZSksdD10aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKSx0aGlzLnJlYWQrPWUpOjA9PT1lP3Q9IiI6KHQ9MD09PXRoaXMucmVhZD90aGlzLmRhdGE6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCksdGhpcy5jbGVhcigpKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCk6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCx0aGlzLnJlYWQrZSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCtlKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGE9dGhpcy5kYXRhLnN1YnN0cigwLHRoaXMucmVhZCtlKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpK3RoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkK2UrMSksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuZGF0YS5sZW5ndGgtMSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBlPXUuY3JlYXRlQnVmZmVyKHRoaXMuZGF0YSk7cmV0dXJuIGUucmVhZD10aGlzLnJlYWQsZX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZD4wJiYodGhpcy5kYXRhPXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQpLHRoaXMucmVhZD0wKSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YT0iIix0aGlzLnJlYWQ9MCx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKTtyZXR1cm4gdGhpcy5kYXRhPXRoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkLHQpLHRoaXMucmVhZD0wLHRoaXN9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEubGVuZ3RoOysrdCl7dmFyIHI9dGhpcy5kYXRhLmNoYXJDb2RlQXQodCk7cjwxNiYmKGUrPSIwIiksZSs9ci50b1N0cmluZygxNil9cmV0dXJuIGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWNvZGVVdGY4KHRoaXMuYnl0ZXMoKSl9LHUuRGF0YUJ1ZmZlcj1mdW5jdGlvbihlLHQpe3Q9dHx8e30sdGhpcy5yZWFkPXQucmVhZE9mZnNldHx8MCx0aGlzLmdyb3dTaXplPXQuZ3Jvd1NpemV8fDEwMjQ7dmFyIHI9dS5pc0FycmF5QnVmZmVyKGUpLG49dS5pc0FycmF5QnVmZmVyVmlldyhlKTtpZihyfHxuKXJldHVybiB0aGlzLmRhdGE9cj9uZXcgRGF0YVZpZXcoZSk6bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHZvaWQodGhpcy53cml0ZT0id3JpdGVPZmZzZXQiaW4gdD90LndyaXRlT2Zmc2V0OnRoaXMuZGF0YS5ieXRlTGVuZ3RoKTt0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy53cml0ZT0wLG51bGwhPT1lJiZ2b2lkIDAhPT1lJiZ0aGlzLnB1dEJ5dGVzKGUpLCJ3cml0ZU9mZnNldCJpbiB0JiYodGhpcy53cml0ZT10LndyaXRlT2Zmc2V0KX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cml0ZS10aGlzLnJlYWR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCgpPD0wfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmFjY29tbW9kYXRlPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5sZW5ndGgoKT49ZSlyZXR1cm4gdGhpczt0PU1hdGgubWF4KHR8fHRoaXMuZ3Jvd1NpemUsZSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLmRhdGEuYnl0ZU9mZnNldCx0aGlzLmRhdGEuYnl0ZUxlbmd0aCksbj1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpK3QpO3JldHVybiBuLnNldChyKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMSksdGhpcy5kYXRhLnNldFVpbnQ4KHRoaXMud3JpdGUrKyxlKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmZpbGxXaXRoQnl0ZT1mdW5jdGlvbihlLHQpe3RoaXMuYWNjb21tb2RhdGUodCk7Zm9yKHZhciByPTA7cjx0Oysrcil0aGlzLmRhdGEuc2V0VWludDgoZSk7cmV0dXJuIHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZXM9ZnVuY3Rpb24oZSx0KXtpZih1LmlzQXJyYXlCdWZmZXJWaWV3KGUpKXt2YXIgcj0obj1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSkuYnl0ZUxlbmd0aC1uLmJ5dGVPZmZzZXQ7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUociksbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9cix0aGlzfWlmKHUuaXNBcnJheUJ1ZmZlcihlKSl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKS5zZXQobix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz1uLmJ5dGVMZW5ndGgsdGhpc31pZihlIGluc3RhbmNlb2YgdS5EYXRhQnVmZmVyfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLnJlYWQmJiJudW1iZXIiPT09dHlwZW9mIGUud3JpdGUmJnUuaXNBcnJheUJ1ZmZlclZpZXcoZS5kYXRhKSl7bj1uZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCxlLnJlYWQsZS5sZW5ndGgoKSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCx0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9bi5ieXRlTGVuZ3RoLHRoaXN9aWYoZSBpbnN0YW5jZW9mIHUuQnl0ZVN0cmluZ0J1ZmZlciYmKGU9ZS5kYXRhLHQ9ImJpbmFyeSIpLHQ9dHx8ImJpbmFyeSIsInN0cmluZyI9PT10eXBlb2YgZSl7dmFyIGk7aWYoImhleCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKE1hdGguY2VpbChlLmxlbmd0aC8yKSksaT1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyLHRoaXMud3JpdGUpLHRoaXMud3JpdGUrPXUuYmluYXJ5LmhleC5kZWNvZGUoZSxpLHRoaXMud3JpdGUpLHRoaXM7aWYoImJhc2U2NCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKDMqTWF0aC5jZWlsKGUubGVuZ3RoLzQpKSxpPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIsdGhpcy53cml0ZSksdGhpcy53cml0ZSs9dS5iaW5hcnkuYmFzZTY0LmRlY29kZShlLGksdGhpcy53cml0ZSksdGhpcztpZigidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSksdD0iYmluYXJ5IiksImJpbmFyeSI9PT10fHwicmF3Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoZS5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LmJpbmFyeS5yYXcuZGVjb2RlKGkpLHRoaXM7aWYoInV0ZjE2Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiplLmxlbmd0aCksaT1uZXcgVWludDE2QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LnRleHQudXRmMTYuZW5jb2RlKGkpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVuY29kaW5nOiAiK3QpfXRocm93IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlcjogIitlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoZSksZS5jbGVhcigpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKGUsInV0ZjE2Iil9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MTY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDMpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUpLHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUsZT4+MTYmMjU1KSx0aGlzLndyaXRlKz0zLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoNCksdGhpcy5kYXRhLnNldEludDMyKHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9NCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDE2TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSwhMCksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMyksdGhpcy5kYXRhLnNldEludDgodGhpcy53cml0ZSxlPj4xNiYyNTUpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUsITApLHRoaXMud3JpdGUrPTMsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDQpLHRoaXMuZGF0YS5zZXRJbnQzMih0aGlzLndyaXRlLGUsITApLHRoaXMud3JpdGUrPTQsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpLHRoaXMuYWNjb21tb2RhdGUodC84KTtkb3t0LT04LHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUrKyxlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0KSx0aGlzLmFjY29tbW9kYXRlKHQvOCksZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKyspfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk8PDhedGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKzIpO3JldHVybiB0aGlzLnJlYWQrPTMsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5nZXRJbnQzMih0aGlzLnJlYWQpO3JldHVybiB0aGlzLnJlYWQrPTQsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQxNkxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCwhMCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLnJlYWQrMSwhMCk8PDg7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50MzIodGhpcy5yZWFkLCEwKTtyZXR1cm4gdGhpcy5yZWFkKz00LGV9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50PWZ1bmN0aW9uKGUpe2MoZSk7dmFyIHQ9MDtkb3t0PSh0PDw4KSt0aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQrKyksZS09OH13aGlsZShlPjApO3JldHVybiB0fSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldFNpZ25lZEludD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEludChlKSxyPTI8PGUtMjtyZXR1cm4gdD49ciYmKHQtPXI8PDEpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0Qnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/KGU9TWF0aC5taW4odGhpcy5sZW5ndGgoKSxlKSx0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQsdGhpcy5yZWFkK2UpLHRoaXMucmVhZCs9ZSk6MD09PWU/dD0iIjoodD0wPT09dGhpcy5yZWFkP3RoaXMuZGF0YTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKSx0aGlzLmNsZWFyKCkpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuYnl0ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT90aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGEuc2V0VWludDgoZSx0KSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMud3JpdGUtMSl9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgdS5EYXRhQnVmZmVyKHRoaXMpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWQ+MCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLnJlYWQpLHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTt0LnNldChlKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KHQpLHRoaXMud3JpdGUtPXRoaXMucmVhZCx0aGlzLnJlYWQ9MH1yZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy5yZWFkPXRoaXMud3JpdGU9MCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlPU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKSx0aGlzLnJlYWQ9TWF0aC5taW4odGhpcy5yZWFkLHRoaXMud3JpdGUpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEuYnl0ZUxlbmd0aDsrK3Qpe3ZhciByPXRoaXMuZGF0YS5nZXRVaW50OCh0KTtyPDE2JiYoZSs9IjAiKSxlKz1yLnRvU3RyaW5nKDE2KX1yZXR1cm4gZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEsdGhpcy5yZWFkLHRoaXMubGVuZ3RoKCkpO2lmKCJiaW5hcnkiPT09KGU9ZXx8InV0ZjgiKXx8InJhdyI9PT1lKXJldHVybiB1LmJpbmFyeS5yYXcuZW5jb2RlKHQpO2lmKCJoZXgiPT09ZSlyZXR1cm4gdS5iaW5hcnkuaGV4LmVuY29kZSh0KTtpZigiYmFzZTY0Ij09PWUpcmV0dXJuIHUuYmluYXJ5LmJhc2U2NC5lbmNvZGUodCk7aWYoInV0ZjgiPT09ZSlyZXR1cm4gdS50ZXh0LnV0ZjguZGVjb2RlKHQpO2lmKCJ1dGYxNiI9PT1lKXJldHVybiB1LnRleHQudXRmMTYuZGVjb2RlKHQpO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBlbmNvZGluZzogIitlKX0sdS5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHwicmF3Iix2b2lkIDAhPT1lJiYidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSkpLG5ldyB1LkJ5dGVCdWZmZXIoZSl9LHUuZmlsbFN0cmluZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0iIjt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gcn0sdS54b3JCeXRlcz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPSIiLGk9IiIsbz0iIixhPTAscz0wO3I+MDstLXIsKythKWk9ZS5jaGFyQ29kZUF0KGEpXnQuY2hhckNvZGVBdChhKSxzPj0xMCYmKG4rPW8sbz0iIixzPTApLG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoaSksKytzO3JldHVybiBuKz1vfSx1LmhleFRvQnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9IiIscj0wO2ZvcighMCZlLmxlbmd0aCYmKHI9MSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVbMF0sMTYpKSk7cjxlLmxlbmd0aDtyKz0yKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHIociwyKSwxNikpO3JldHVybiB0fSx1LmJ5dGVzVG9IZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlQnVmZmVyKGUpLnRvSGV4KCl9LHUuaW50MzJUb0J5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpfTt2YXIgbD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGg9WzYyLC0xLC0xLC0xLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0xLC0xLC0xLDY0LC0xLC0xLC0xLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTEsLTEsLTEsLTEsLTEsLTEsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLHA9IjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoiO3UuZW5jb2RlNjQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89IiIsYT0iIixzPTA7czxlLmxlbmd0aDspcj1lLmNoYXJDb2RlQXQocysrKSxuPWUuY2hhckNvZGVBdChzKyspLGk9ZS5jaGFyQ29kZUF0KHMrKyksbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmRlY29kZTY0PWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7Zm9yKHZhciB0LHIsbixpLG89IiIsYT0wO2E8ZS5sZW5ndGg7KXQ9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10scj1oW2UuY2hhckNvZGVBdChhKyspLTQzXSxuPWhbZS5jaGFyQ29kZUF0KGErKyktNDNdLGk9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10sbys9U3RyaW5nLmZyb21DaGFyQ29kZSh0PDwyfHI+PjQpLDY0IT09biYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnIpPDw0fG4+PjIpLDY0IT09aSYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmbik8PDZ8aSkpKTtyZXR1cm4gb30sdS5lbmNvZGVVdGY4PWZ1bmN0aW9uKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfSx1LmRlY29kZVV0Zjg9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfSx1LmJpbmFyeT17cmF3Ont9LGhleDp7fSxiYXNlNjQ6e30sYmFzZTU4Ont9LGJhc2VOOntlbmNvZGU6cy5lbmNvZGUsZGVjb2RlOnMuZGVjb2RlfX0sdS5iaW5hcnkucmF3LmVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpfSx1LmJpbmFyeS5yYXcuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSk7Zm9yKHZhciBpPXI9cnx8MCxvPTA7bzxlLmxlbmd0aDsrK28pbltpKytdPWUuY2hhckNvZGVBdChvKTtyZXR1cm4gdD9pLXI6bn0sdS5iaW5hcnkuaGV4LmVuY29kZT11LmJ5dGVzVG9IZXgsdS5iaW5hcnkuaGV4LmRlY29kZT1mdW5jdGlvbihlLHQscil7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZS5sZW5ndGgvMikpKTt2YXIgaT0wLG89cj1yfHwwO2ZvcigxJmUubGVuZ3RoJiYoaT0xLG5bbysrXT1wYXJzZUludChlWzBdLDE2KSk7aTxlLmxlbmd0aDtpKz0yKW5bbysrXT1wYXJzZUludChlLnN1YnN0cihpLDIpLDE2KTtyZXR1cm4gdD9vLXI6bn0sdS5iaW5hcnkuYmFzZTY0LmVuY29kZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz0iIixhPSIiLHM9MDtzPGUuYnl0ZUxlbmd0aDspcj1lW3MrK10sbj1lW3MrK10saT1lW3MrK10sbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmJpbmFyeS5iYXNlNjQuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYSxzPXQ7c3x8KHM9bmV3IFVpbnQ4QXJyYXkoMypNYXRoLmNlaWwoZS5sZW5ndGgvNCkpKSxlPWUucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2Zvcih2YXIgdT0wLGM9cj1yfHwwO3U8ZS5sZW5ndGg7KW49aFtlLmNoYXJDb2RlQXQodSsrKS00M10saT1oW2UuY2hhckNvZGVBdCh1KyspLTQzXSxvPWhbZS5jaGFyQ29kZUF0KHUrKyktNDNdLGE9aFtlLmNoYXJDb2RlQXQodSsrKS00M10sc1tjKytdPW48PDJ8aT4+NCw2NCE9PW8mJihzW2MrK109KDE1JmkpPDw0fG8+PjIsNjQhPT1hJiYoc1tjKytdPSgzJm8pPDw2fGEpKTtyZXR1cm4gdD9jLXI6cy5zdWJhcnJheSgwLGMpfSx1LmJpbmFyeS5iYXNlNTguZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuYmluYXJ5LmJhc2VOLmVuY29kZShlLHAsdCl9LHUuYmluYXJ5LmJhc2U1OC5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5iaW5hcnkuYmFzZU4uZGVjb2RlKGUscCx0KX0sdS50ZXh0PXt1dGY4Ont9LHV0ZjE2Ont9fSx1LnRleHQudXRmOC5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe2U9dS5lbmNvZGVVdGY4KGUpO3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpKTtmb3IodmFyIGk9cj1yfHwwLG89MDtvPGUubGVuZ3RoOysrbyluW2krK109ZS5jaGFyQ29kZUF0KG8pO3JldHVybiB0P2ktcjpufSx1LnRleHQudXRmOC5kZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVjb2RlVXRmOChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSkpfSx1LnRleHQudXRmMTYuZW5jb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpKTtmb3IodmFyIGk9bmV3IFVpbnQxNkFycmF5KG4uYnVmZmVyKSxvPXI9cnx8MCxhPXIscz0wO3M8ZS5sZW5ndGg7KytzKWlbYSsrXT1lLmNoYXJDb2RlQXQocyksbys9MjtyZXR1cm4gdD9vLXI6bn0sdS50ZXh0LnV0ZjE2LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50MTZBcnJheShlLmJ1ZmZlcikpfSx1LmRlZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHQ9dS5kZWNvZGU2NChlLmRlZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbCkscil7dmFyIG49MjszMiZ0LmNoYXJDb2RlQXQoMSkmJihuPTYpLHQ9dC5zdWJzdHJpbmcobix0Lmxlbmd0aC00KX1yZXR1cm4gdH0sdS5pbmZsYXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmluZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbDtyZXR1cm4gbnVsbD09PW4/bnVsbDp1LmRlY29kZTY0KG4pfTt2YXIgZD1mdW5jdGlvbihlLHQscil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIG47aWYobnVsbD09PXI/bj1lLnJlbW92ZUl0ZW0odCk6KHI9dS5lbmNvZGU2NChKU09OLnN0cmluZ2lmeShyKSksbj1lLnNldEl0ZW0odCxyKSksInVuZGVmaW5lZCIhPT10eXBlb2YgbiYmITAhPT1uLnJ2YWwpe3ZhciBpPW5ldyBFcnJvcihuLmVycm9yLm1lc3NhZ2UpO3Rocm93IGkuaWQ9bi5lcnJvci5pZCxpLm5hbWU9bi5lcnJvci5uYW1lLGl9fSx5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIHI9ZS5nZXRJdGVtKHQpO2lmKGUuaW5pdClpZihudWxsPT09ci5ydmFsKXtpZihyLmVycm9yKXt2YXIgbj1uZXcgRXJyb3Ioci5lcnJvci5tZXNzYWdlKTt0aHJvdyBuLmlkPXIuZXJyb3IuaWQsbi5uYW1lPXIuZXJyb3IubmFtZSxufXI9bnVsbH1lbHNlIHI9ci5ydmFsO3JldHVybiBudWxsIT09ciYmKHI9SlNPTi5wYXJzZSh1LmRlY29kZTY0KHIpKSkscn0sZz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT15KGUsdCk7bnVsbD09PWkmJihpPXt9KSxpW3JdPW4sZChlLHQsaSl9LHY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtyZXR1cm4gbnVsbCE9PW4mJihuPXIgaW4gbj9uW3JdOm51bGwpLG59LG09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtpZihudWxsIT09biYmciBpbiBuKXtkZWxldGUgbltyXTt2YXIgaT0hMDtmb3IodmFyIG8gaW4gbil7aT0hMTticmVha31pJiYobj1udWxsKSxkKGUsdCxuKX19LGI9ZnVuY3Rpb24oZSx0KXtkKGUsdCxudWxsKX0sXz1mdW5jdGlvbihlLHQscil7dmFyIG4saT1udWxsOyJ1bmRlZmluZWQiPT09dHlwZW9mIHImJihyPVsid2ViIiwiZmxhc2giXSk7dmFyIG89ITEsYT1udWxsO2Zvcih2YXIgcyBpbiByKXtuPXJbc107dHJ5e2lmKCJmbGFzaCI9PT1ufHwiYm90aCI9PT1uKXtpZihudWxsPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoIkZsYXNoIGxvY2FsIHN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTtpPWUuYXBwbHkodGhpcyx0KSxvPSJmbGFzaCI9PT1ufSJ3ZWIiIT09biYmImJvdGgiIT09bnx8KHRbMF09bG9jYWxTdG9yYWdlLGk9ZS5hcHBseSh0aGlzLHQpLG89ITApfWNhdGNoKHUpe2E9dX1pZihvKWJyZWFrfWlmKCFvKXRocm93IGE7cmV0dXJuIGl9O3Uuc2V0SXRlbT1mdW5jdGlvbihlLHQscixuLGkpe18oZyxhcmd1bWVudHMsaSl9LHUuZ2V0SXRlbT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gXyh2LGFyZ3VtZW50cyxuKX0sdS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe18obSxhcmd1bWVudHMsbil9LHUuY2xlYXJJdGVtcz1mdW5jdGlvbihlLHQscil7XyhiLGFyZ3VtZW50cyxyKX0sdS5wYXJzZVVybD1mdW5jdGlvbihlKXt2YXIgdD0vXihodHRwcz8pOlwvXC8oW146Jl5cL10qKTo/KFxkKikoLiopJC9nO3QubGFzdEluZGV4PTA7dmFyIHI9dC5leGVjKGUpLG49bnVsbD09PXI/bnVsbDp7ZnVsbDplLHNjaGVtZTpyWzFdLGhvc3Q6clsyXSxwb3J0OnJbM10scGF0aDpyWzRdfTtyZXR1cm4gbiYmKG4uZnVsbEhvc3Q9bi5ob3N0LG4ucG9ydD84MCE9PW4ucG9ydCYmImh0dHAiPT09bg==",
"2020.03.29 15:15": "base64:KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1syXSxbZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDk5NCkoKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cig1MzcpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxNyksaT1yKDI3KSxvPXIoNTQpLGE9cig0OSkscz1yKDU4KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoODUpLGk9cigzNSksbz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsYT0iW29iamVjdCBGdW5jdGlvbl0iLHM9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIix1PSJbb2JqZWN0IFByb3h5XSI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3ZhciB0PW4oZSk7cmV0dXJuIHQ9PWF8fHQ9PXN8fHQ9PW98fHQ9PXV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbjshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2lmKG4pe3ZhciBvPXR5cGVvZiBuO2lmKCJzdHJpbmciPT09b3x8Im51bWJlciI9PT1vKWUucHVzaChuKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoKXt2YXIgYT1pLmFwcGx5KG51bGwsbik7YSYmZS5wdXNoKGEpfWVsc2UgaWYoIm9iamVjdCI9PT1vKWZvcih2YXIgcyBpbiBuKXIuY2FsbChuLHMpJiZuW3NdJiZlLnB1c2gocyl9fXJldHVybiBlLmpvaW4oIiAiKX1lLmV4cG9ydHM/KGkuZGVmYXVsdD1pLGUuZXhwb3J0cz1pKTp2b2lkIDA9PT0obj1mdW5jdGlvbigpe3JldHVybiBpfS5hcHBseSh0LFtdKSl8fChlLmV4cG9ydHM9bil9KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtvcHRpb25zOnt1c2VQdXJlSmF2YVNjcmlwdDohMX19fSxmdW5jdGlvbihlLHQpeyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0JiYoZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTgpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gaShlLHQscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjoobyhuLHQpLHQuQnVmZmVyPWEpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiPT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaShlLHQscil9LGEuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBuPWkoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PT10eXBlb2Ygcj9uLmZpbGwodCxyKTpuLmZpbGwodCk6bi5maWxsKDApLG59LGEuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkoZSl9LGEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIoZSl9fSxmdW5jdGlvbihlLHQpe3ZhciByPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCxuLGksbyl7dmFyIGE9cig2KSxzPXIoNjI4KSx1PWUuZXhwb3J0cz1hLnV0aWw9YS51dGlsfHx7fTtmdW5jdGlvbiBjKGUpe2lmKDghPT1lJiYxNiE9PWUmJjI0IT09ZSYmMzIhPT1lKXRocm93IG5ldyBFcnJvcigiT25seSA4LCAxNiwgMjQsIG9yIDMyIGJpdHMgc3VwcG9ydGVkOiAiK2UpfWZ1bmN0aW9uIGYoZSl7aWYodGhpcy5kYXRhPSIiLHRoaXMucmVhZD0wLCJzdHJpbmciPT09dHlwZW9mIGUpdGhpcy5kYXRhPWU7ZWxzZSBpZih1LmlzQXJyYXlCdWZmZXIoZSl8fHUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpaWYoInVuZGVmaW5lZCIhPT10eXBlb2YgbyYmZSBpbnN0YW5jZW9mIG8pdGhpcy5kYXRhPWUudG9TdHJpbmcoImJpbmFyeSIpO2Vsc2V7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7dHJ5e3RoaXMuZGF0YT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9Y2F0Y2gobil7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdGhpcy5wdXRCeXRlKHRbcl0pfX1lbHNlKGUgaW5zdGFuY2VvZiBmfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYic3RyaW5nIj09PXR5cGVvZiBlLmRhdGEmJiJudW1iZXIiPT09dHlwZW9mIGUucmVhZCkmJih0aGlzLmRhdGE9ZS5kYXRhLHRoaXMucmVhZD1lLnJlYWQpO3RoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTB9IWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgdCYmdC5uZXh0VGljayYmIXQuYnJvd3NlcilyZXR1cm4gdS5uZXh0VGljaz10Lm5leHRUaWNrLHZvaWQodS5zZXRJbW1lZGlhdGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBuP246dS5uZXh0VGljayk7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBuKXJldHVybiB1LnNldEltbWVkaWF0ZT1mdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx2b2lkKHUubmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9KTtpZih1LnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9LCJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09PXR5cGVvZiB3aW5kb3cucG9zdE1lc3NhZ2Upe3ZhciBlPSJmb3JnZS5zZXRJbW1lZGlhdGUiLHI9W107dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24odCl7ci5wdXNoKHQpLDE9PT1yLmxlbmd0aCYmd2luZG93LnBvc3RNZXNzYWdlKGUsIioiKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHQpe2lmKHQuc291cmNlPT09d2luZG93JiZ0LmRhdGE9PT1lKXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBuPXIuc2xpY2UoKTtyLmxlbmd0aD0wLG4uZm9yRWFjaChmdW5jdGlvbihlKXtlKCl9KX19LCEwKX1pZigidW5kZWZpbmVkIiE9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyKXt2YXIgaT1EYXRlLm5vdygpLG89ITAsYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyPVtdO25ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7dmFyIGU9ci5zbGljZSgpO3IubGVuZ3RoPTAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UoKX0pfSkub2JzZXJ2ZShhLHthdHRyaWJ1dGVzOiEwfSk7dmFyIHM9dS5zZXRJbW1lZGlhdGU7dS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7RGF0ZS5ub3coKS1pPjE1PyhpPURhdGUubm93KCkscyhlKSk6KHIucHVzaChlKSwxPT09ci5sZW5ndGgmJmEuc2V0QXR0cmlidXRlKCJhIixvPSFvKSl9fXUubmV4dFRpY2s9dS5zZXRJbW1lZGlhdGV9KCksdS5pc05vZGVqcz0idW5kZWZpbmVkIiE9PXR5cGVvZiB0JiZ0LnZlcnNpb25zJiZ0LnZlcnNpb25zLm5vZGUsdS5nbG9iYWxTY29wZT11LmlzTm9kZWpzP2k6InVuZGVmaW5lZCI9PT10eXBlb2Ygc2VsZj93aW5kb3c6c2VsZix1LmlzQXJyYXk9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX0sdS5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LHUuaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnUuaXNBcnJheUJ1ZmZlcihlLmJ1ZmZlcikmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdS5CeXRlQnVmZmVyPWYsdS5CeXRlU3RyaW5nQnVmZmVyPWY7dS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZz1mdW5jdGlvbihlKXt0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aCs9ZSx0aGlzLl9jb25zdHJ1Y3RlZFN0cmluZ0xlbmd0aD40MDk2JiYodGhpcy5kYXRhLnN1YnN0cigwLDEpLHRoaXMuX2NvbnN0cnVjdGVkU3RyaW5nTGVuZ3RoPTApfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMucmVhZH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoKCk8PTB9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5maWxsV2l0aEJ5dGU9ZnVuY3Rpb24oZSx0KXtlPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKHZhciByPXRoaXMuZGF0YTt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gdGhpcy5kYXRhPXIsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyh0KSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGErPWUsdGhpcy5fb3B0aW1pemVDb25zdHJ1Y3RlZFN0cmluZyhlLmxlbmd0aCksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXModS5lbmNvZGVVdGY4KGUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQxNkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQyNExlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+MTYmMjU1KSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUucHV0SW50MzJMZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlKStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjE2JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUpKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpO3ZhciByPSIiO2Rve3QtPTgscis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpcy5wdXRCeXRlcyhyKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnB1dEJ1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXRCeXRlcyhlLmdldEJ5dGVzKCkpfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKTw8MTZedGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTtyZXR1cm4gdGhpcy5yZWFkKz0zLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpPDwyNF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMSk8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMyk7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDE2TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8ODtyZXR1cm4gdGhpcy5yZWFkKz0yLGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuZ2V0SW50MjRMZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCledGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKzEpPDw4XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsyKTw8MTY7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCsxKTw8OF50aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnJlYWQrMik8PDE2XnRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCszKTw8MjQ7cmV0dXJuIHRoaXMucmVhZCs9NCxlfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEludD1mdW5jdGlvbihlKXtjKGUpO3ZhciB0PTA7ZG97dD0odDw8OCkrdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy5yZWFkKyspLGUtPTh9d2hpbGUoZT4wKTtyZXR1cm4gdH0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5nZXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJbnQoZSkscj0yPDxlLTI7cmV0dXJuIHQ+PXImJih0LT1yPDwxKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmdldEJ5dGVzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlPyhlPU1hdGgubWluKHRoaXMubGVuZ3RoKCksZSksdD10aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKSx0aGlzLnJlYWQrPWUpOjA9PT1lP3Q9IiI6KHQ9MD09PXRoaXMucmVhZD90aGlzLmRhdGE6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCksdGhpcy5jbGVhcigpKSx0fSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCk6dGhpcy5kYXRhLnNsaWNlKHRoaXMucmVhZCx0aGlzLnJlYWQrZSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMucmVhZCtlKX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGE9dGhpcy5kYXRhLnN1YnN0cigwLHRoaXMucmVhZCtlKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpK3RoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkK2UrMSksdGhpc30sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuZGF0YS5sZW5ndGgtMSl9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciBlPXUuY3JlYXRlQnVmZmVyKHRoaXMuZGF0YSk7cmV0dXJuIGUucmVhZD10aGlzLnJlYWQsZX0sdS5CeXRlU3RyaW5nQnVmZmVyLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZD4wJiYodGhpcy5kYXRhPXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQpLHRoaXMucmVhZD0wKSx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YT0iIix0aGlzLnJlYWQ9MCx0aGlzfSx1LkJ5dGVTdHJpbmdCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKTtyZXR1cm4gdGhpcy5kYXRhPXRoaXMuZGF0YS5zdWJzdHIodGhpcy5yZWFkLHQpLHRoaXMucmVhZD0wLHRoaXN9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEubGVuZ3RoOysrdCl7dmFyIHI9dGhpcy5kYXRhLmNoYXJDb2RlQXQodCk7cjwxNiYmKGUrPSIwIiksZSs9ci50b1N0cmluZygxNil9cmV0dXJuIGV9LHUuQnl0ZVN0cmluZ0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWNvZGVVdGY4KHRoaXMuYnl0ZXMoKSl9LHUuRGF0YUJ1ZmZlcj1mdW5jdGlvbihlLHQpe3Q9dHx8e30sdGhpcy5yZWFkPXQucmVhZE9mZnNldHx8MCx0aGlzLmdyb3dTaXplPXQuZ3Jvd1NpemV8fDEwMjQ7dmFyIHI9dS5pc0FycmF5QnVmZmVyKGUpLG49dS5pc0FycmF5QnVmZmVyVmlldyhlKTtpZihyfHxuKXJldHVybiB0aGlzLmRhdGE9cj9uZXcgRGF0YVZpZXcoZSk6bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLHZvaWQodGhpcy53cml0ZT0id3JpdGVPZmZzZXQiaW4gdD90LndyaXRlT2Zmc2V0OnRoaXMuZGF0YS5ieXRlTGVuZ3RoKTt0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy53cml0ZT0wLG51bGwhPT1lJiZ2b2lkIDAhPT1lJiZ0aGlzLnB1dEJ5dGVzKGUpLCJ3cml0ZU9mZnNldCJpbiB0JiYodGhpcy53cml0ZT10LndyaXRlT2Zmc2V0KX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cml0ZS10aGlzLnJlYWR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCgpPD0wfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmFjY29tbW9kYXRlPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5sZW5ndGgoKT49ZSlyZXR1cm4gdGhpczt0PU1hdGgubWF4KHR8fHRoaXMuZ3Jvd1NpemUsZSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLmRhdGEuYnl0ZU9mZnNldCx0aGlzLmRhdGEuYnl0ZUxlbmd0aCksbj1uZXcgVWludDhBcnJheSh0aGlzLmxlbmd0aCgpK3QpO3JldHVybiBuLnNldChyKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG4uYnVmZmVyKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEJ5dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMSksdGhpcy5kYXRhLnNldFVpbnQ4KHRoaXMud3JpdGUrKyxlKSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmZpbGxXaXRoQnl0ZT1mdW5jdGlvbihlLHQpe3RoaXMuYWNjb21tb2RhdGUodCk7Zm9yKHZhciByPTA7cjx0Oysrcil0aGlzLmRhdGEuc2V0VWludDgoZSk7cmV0dXJuIHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0Qnl0ZXM9ZnVuY3Rpb24oZSx0KXtpZih1LmlzQXJyYXlCdWZmZXJWaWV3KGUpKXt2YXIgcj0obj1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSkuYnl0ZUxlbmd0aC1uLmJ5dGVPZmZzZXQ7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUociksbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9cix0aGlzfWlmKHUuaXNBcnJheUJ1ZmZlcihlKSl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKS5zZXQobix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz1uLmJ5dGVMZW5ndGgsdGhpc31pZihlIGluc3RhbmNlb2YgdS5EYXRhQnVmZmVyfHwib2JqZWN0Ij09PXR5cGVvZiBlJiYibnVtYmVyIj09PXR5cGVvZiBlLnJlYWQmJiJudW1iZXIiPT09dHlwZW9mIGUud3JpdGUmJnUuaXNBcnJheUJ1ZmZlclZpZXcoZS5kYXRhKSl7bj1uZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCxlLnJlYWQsZS5sZW5ndGgoKSk7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUobi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShlLmRhdGEuYnl0ZUxlbmd0aCx0aGlzLndyaXRlKS5zZXQobiksdGhpcy53cml0ZSs9bi5ieXRlTGVuZ3RoLHRoaXN9aWYoZSBpbnN0YW5jZW9mIHUuQnl0ZVN0cmluZ0J1ZmZlciYmKGU9ZS5kYXRhLHQ9ImJpbmFyeSIpLHQ9dHx8ImJpbmFyeSIsInN0cmluZyI9PT10eXBlb2YgZSl7dmFyIGk7aWYoImhleCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKE1hdGguY2VpbChlLmxlbmd0aC8yKSksaT1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyLHRoaXMud3JpdGUpLHRoaXMud3JpdGUrPXUuYmluYXJ5LmhleC5kZWNvZGUoZSxpLHRoaXMud3JpdGUpLHRoaXM7aWYoImJhc2U2NCI9PT10KXJldHVybiB0aGlzLmFjY29tbW9kYXRlKDMqTWF0aC5jZWlsKGUubGVuZ3RoLzQpKSxpPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIsdGhpcy53cml0ZSksdGhpcy53cml0ZSs9dS5iaW5hcnkuYmFzZTY0LmRlY29kZShlLGksdGhpcy53cml0ZSksdGhpcztpZigidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSksdD0iYmluYXJ5IiksImJpbmFyeSI9PT10fHwicmF3Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoZS5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LmJpbmFyeS5yYXcuZGVjb2RlKGkpLHRoaXM7aWYoInV0ZjE2Ij09PXQpcmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiplLmxlbmd0aCksaT1uZXcgVWludDE2QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLndyaXRlKSx0aGlzLndyaXRlKz11LnRleHQudXRmMTYuZW5jb2RlKGkpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGVuY29kaW5nOiAiK3QpfXRocm93IEVycm9yKCJJbnZhbGlkIHBhcmFtZXRlcjogIitlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHV0Qnl0ZXMoZSksZS5jbGVhcigpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1dEJ5dGVzKGUsInV0ZjE2Iil9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MTY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDMpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUpLHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUsZT4+MTYmMjU1KSx0aGlzLndyaXRlKz0zLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUucHV0SW50MzI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoNCksdGhpcy5kYXRhLnNldEludDMyKHRoaXMud3JpdGUsZSksdGhpcy53cml0ZSs9NCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDE2TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMiksdGhpcy5kYXRhLnNldEludDE2KHRoaXMud3JpdGUsZSwhMCksdGhpcy53cml0ZSs9Mix0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnB1dEludDI0TGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWNjb21tb2RhdGUoMyksdGhpcy5kYXRhLnNldEludDgodGhpcy53cml0ZSxlPj4xNiYyNTUpLHRoaXMuZGF0YS5zZXRJbnQxNih0aGlzLndyaXRlLGU+PjgmNjU1MzUsITApLHRoaXMud3JpdGUrPTMsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQzMkxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFjY29tbW9kYXRlKDQpLHRoaXMuZGF0YS5zZXRJbnQzMih0aGlzLndyaXRlLGUsITApLHRoaXMud3JpdGUrPTQsdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRJbnQ9ZnVuY3Rpb24oZSx0KXtjKHQpLHRoaXMuYWNjb21tb2RhdGUodC84KTtkb3t0LT04LHRoaXMuZGF0YS5zZXRJbnQ4KHRoaXMud3JpdGUrKyxlPj50JjI1NSl9d2hpbGUodD4wKTtyZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5wdXRTaWduZWRJbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0KSx0aGlzLmFjY29tbW9kYXRlKHQvOCksZTwwJiYoZSs9Mjw8dC0xKSx0aGlzLnB1dEludChlLHQpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEJ5dGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKyspfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCk8PDhedGhpcy5kYXRhLmdldEludDgodGhpcy5yZWFkKzIpO3JldHVybiB0aGlzLnJlYWQrPTMsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5nZXRJbnQzMih0aGlzLnJlYWQpO3JldHVybiB0aGlzLnJlYWQrPTQsZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQxNkxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kYXRhLmdldEludDE2KHRoaXMucmVhZCwhMCk7cmV0dXJuIHRoaXMucmVhZCs9MixlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDI0TGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQpXnRoaXMuZGF0YS5nZXRJbnQxNih0aGlzLnJlYWQrMSwhMCk8PDg7cmV0dXJuIHRoaXMucmVhZCs9MyxlfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldEludDMyTGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEuZ2V0SW50MzIodGhpcy5yZWFkLCEwKTtyZXR1cm4gdGhpcy5yZWFkKz00LGV9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50PWZ1bmN0aW9uKGUpe2MoZSk7dmFyIHQ9MDtkb3t0PSh0PDw4KSt0aGlzLmRhdGEuZ2V0SW50OCh0aGlzLnJlYWQrKyksZS09OH13aGlsZShlPjApO3JldHVybiB0fSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmdldFNpZ25lZEludD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEludChlKSxyPTI8PGUtMjtyZXR1cm4gdD49ciYmKHQtPXI8PDEpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuZ2V0Qnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/KGU9TWF0aC5taW4odGhpcy5sZW5ndGgoKSxlKSx0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnJlYWQsdGhpcy5yZWFkK2UpLHRoaXMucmVhZCs9ZSk6MD09PWU/dD0iIjoodD0wPT09dGhpcy5yZWFkP3RoaXMuZGF0YTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKSx0aGlzLmNsZWFyKCkpLHR9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuYnl0ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT90aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkKTp0aGlzLmRhdGEuc2xpY2UodGhpcy5yZWFkLHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMucmVhZCtlKX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5zZXRBdD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRhdGEuc2V0VWludDgoZSx0KSx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmdldFVpbnQ4KHRoaXMud3JpdGUtMSl9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgdS5EYXRhQnVmZmVyKHRoaXMpfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWQ+MCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcix0aGlzLnJlYWQpLHQ9bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTt0LnNldChlKSx0aGlzLmRhdGE9bmV3IERhdGFWaWV3KHQpLHRoaXMud3JpdGUtPXRoaXMucmVhZCx0aGlzLnJlYWQ9MH1yZXR1cm4gdGhpc30sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigwKSksdGhpcy5yZWFkPXRoaXMud3JpdGU9MCx0aGlzfSx1LkRhdGFCdWZmZXIucHJvdG90eXBlLnRydW5jYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlPU1hdGgubWF4KDAsdGhpcy5sZW5ndGgoKS1lKSx0aGlzLnJlYWQ9TWF0aC5taW4odGhpcy5yZWFkLHRoaXMud3JpdGUpLHRoaXN9LHUuRGF0YUJ1ZmZlci5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsdD10aGlzLnJlYWQ7dDx0aGlzLmRhdGEuYnl0ZUxlbmd0aDsrK3Qpe3ZhciByPXRoaXMuZGF0YS5nZXRVaW50OCh0KTtyPDE2JiYoZSs9IjAiKSxlKz1yLnRvU3RyaW5nKDE2KX1yZXR1cm4gZX0sdS5EYXRhQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmRhdGEsdGhpcy5yZWFkLHRoaXMubGVuZ3RoKCkpO2lmKCJiaW5hcnkiPT09KGU9ZXx8InV0ZjgiKXx8InJhdyI9PT1lKXJldHVybiB1LmJpbmFyeS5yYXcuZW5jb2RlKHQpO2lmKCJoZXgiPT09ZSlyZXR1cm4gdS5iaW5hcnkuaGV4LmVuY29kZSh0KTtpZigiYmFzZTY0Ij09PWUpcmV0dXJuIHUuYmluYXJ5LmJhc2U2NC5lbmNvZGUodCk7aWYoInV0ZjgiPT09ZSlyZXR1cm4gdS50ZXh0LnV0ZjguZGVjb2RlKHQpO2lmKCJ1dGYxNiI9PT1lKXJldHVybiB1LnRleHQudXRmMTYuZGVjb2RlKHQpO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBlbmNvZGluZzogIitlKX0sdS5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHwicmF3Iix2b2lkIDAhPT1lJiYidXRmOCI9PT10JiYoZT11LmVuY29kZVV0ZjgoZSkpLG5ldyB1LkJ5dGVCdWZmZXIoZSl9LHUuZmlsbFN0cmluZz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0iIjt0PjA7KTEmdCYmKHIrPWUpLCh0Pj4+PTEpPjAmJihlKz1lKTtyZXR1cm4gcn0sdS54b3JCeXRlcz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPSIiLGk9IiIsbz0iIixhPTAscz0wO3I+MDstLXIsKythKWk9ZS5jaGFyQ29kZUF0KGEpXnQuY2hhckNvZGVBdChhKSxzPj0xMCYmKG4rPW8sbz0iIixzPTApLG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoaSksKytzO3JldHVybiBuKz1vfSx1LmhleFRvQnl0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9IiIscj0wO2ZvcighMCZlLmxlbmd0aCYmKHI9MSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVbMF0sMTYpKSk7cjxlLmxlbmd0aDtyKz0yKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoZS5zdWJzdHIociwyKSwxNikpO3JldHVybiB0fSx1LmJ5dGVzVG9IZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY3JlYXRlQnVmZmVyKGUpLnRvSGV4KCl9LHUuaW50MzJUb0J5dGVzPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjI0JjI1NSkrU3RyaW5nLmZyb21DaGFyQ29kZShlPj4xNiYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUpK1N0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmUpfTt2YXIgbD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGg9WzYyLC0xLC0xLC0xLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0xLC0xLC0xLDY0LC0xLC0xLC0xLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTEsLTEsLTEsLTEsLTEsLTEsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLHA9IjEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXoiO3UuZW5jb2RlNjQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89IiIsYT0iIixzPTA7czxlLmxlbmd0aDspcj1lLmNoYXJDb2RlQXQocysrKSxuPWUuY2hhckNvZGVBdChzKyspLGk9ZS5jaGFyQ29kZUF0KHMrKyksbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmRlY29kZTY0PWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7Zm9yKHZhciB0LHIsbixpLG89IiIsYT0wO2E8ZS5sZW5ndGg7KXQ9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10scj1oW2UuY2hhckNvZGVBdChhKyspLTQzXSxuPWhbZS5jaGFyQ29kZUF0KGErKyktNDNdLGk9aFtlLmNoYXJDb2RlQXQoYSsrKS00M10sbys9U3RyaW5nLmZyb21DaGFyQ29kZSh0PDwyfHI+PjQpLDY0IT09biYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnIpPDw0fG4+PjIpLDY0IT09aSYmKG8rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmbik8PDZ8aSkpKTtyZXR1cm4gb30sdS5lbmNvZGVVdGY4PWZ1bmN0aW9uKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfSx1LmRlY29kZVV0Zjg9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfSx1LmJpbmFyeT17cmF3Ont9LGhleDp7fSxiYXNlNjQ6e30sYmFzZTU4Ont9LGJhc2VOOntlbmNvZGU6cy5lbmNvZGUsZGVjb2RlOnMuZGVjb2RlfX0sdS5iaW5hcnkucmF3LmVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpfSx1LmJpbmFyeS5yYXcuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSk7Zm9yKHZhciBpPXI9cnx8MCxvPTA7bzxlLmxlbmd0aDsrK28pbltpKytdPWUuY2hhckNvZGVBdChvKTtyZXR1cm4gdD9pLXI6bn0sdS5iaW5hcnkuaGV4LmVuY29kZT11LmJ5dGVzVG9IZXgsdS5iaW5hcnkuaGV4LmRlY29kZT1mdW5jdGlvbihlLHQscil7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZS5sZW5ndGgvMikpKTt2YXIgaT0wLG89cj1yfHwwO2ZvcigxJmUubGVuZ3RoJiYoaT0xLG5bbysrXT1wYXJzZUludChlWzBdLDE2KSk7aTxlLmxlbmd0aDtpKz0yKW5bbysrXT1wYXJzZUludChlLnN1YnN0cihpLDIpLDE2KTtyZXR1cm4gdD9vLXI6bn0sdS5iaW5hcnkuYmFzZTY0LmVuY29kZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz0iIixhPSIiLHM9MDtzPGUuYnl0ZUxlbmd0aDspcj1lW3MrK10sbj1lW3MrK10saT1lW3MrK10sbys9bC5jaGFyQXQocj4+Miksbys9bC5jaGFyQXQoKDMmcik8PDR8bj4+NCksaXNOYU4obik/bys9Ij09Ijoobys9bC5jaGFyQXQoKDE1Jm4pPDwyfGk+PjYpLG8rPWlzTmFOKGkpPyI9IjpsLmNoYXJBdCg2MyZpKSksdCYmby5sZW5ndGg+dCYmKGErPW8uc3Vic3RyKDAsdCkrIlxyXG4iLG89by5zdWJzdHIodCkpO3JldHVybiBhKz1vfSx1LmJpbmFyeS5iYXNlNjQuZGVjb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYSxzPXQ7c3x8KHM9bmV3IFVpbnQ4QXJyYXkoMypNYXRoLmNlaWwoZS5sZW5ndGgvNCkpKSxlPWUucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2Zvcih2YXIgdT0wLGM9cj1yfHwwO3U8ZS5sZW5ndGg7KW49aFtlLmNoYXJDb2RlQXQodSsrKS00M10saT1oW2UuY2hhckNvZGVBdCh1KyspLTQzXSxvPWhbZS5jaGFyQ29kZUF0KHUrKyktNDNdLGE9aFtlLmNoYXJDb2RlQXQodSsrKS00M10sc1tjKytdPW48PDJ8aT4+NCw2NCE9PW8mJihzW2MrK109KDE1JmkpPDw0fG8+PjIsNjQhPT1hJiYoc1tjKytdPSgzJm8pPDw2fGEpKTtyZXR1cm4gdD9jLXI6cy5zdWJhcnJheSgwLGMpfSx1LmJpbmFyeS5iYXNlNTguZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuYmluYXJ5LmJhc2VOLmVuY29kZShlLHAsdCl9LHUuYmluYXJ5LmJhc2U1OC5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5iaW5hcnkuYmFzZU4uZGVjb2RlKGUscCx0KX0sdS50ZXh0PXt1dGY4Ont9LHV0ZjE2Ont9fSx1LnRleHQudXRmOC5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe2U9dS5lbmNvZGVVdGY4KGUpO3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpKTtmb3IodmFyIGk9cj1yfHwwLG89MDtvPGUubGVuZ3RoOysrbyluW2krK109ZS5jaGFyQ29kZUF0KG8pO3JldHVybiB0P2ktcjpufSx1LnRleHQudXRmOC5kZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVjb2RlVXRmOChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSkpfSx1LnRleHQudXRmMTYuZW5jb2RlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O258fChuPW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpKTtmb3IodmFyIGk9bmV3IFVpbnQxNkFycmF5KG4uYnVmZmVyKSxvPXI9cnx8MCxhPXIscz0wO3M8ZS5sZW5ndGg7KytzKWlbYSsrXT1lLmNoYXJDb2RlQXQocyksbys9MjtyZXR1cm4gdD9vLXI6bn0sdS50ZXh0LnV0ZjE2LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50MTZBcnJheShlLmJ1ZmZlcikpfSx1LmRlZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKHQ9dS5kZWNvZGU2NChlLmRlZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbCkscil7dmFyIG49MjszMiZ0LmNoYXJDb2RlQXQoMSkmJihuPTYpLHQ9dC5zdWJzdHJpbmcobix0Lmxlbmd0aC00KX1yZXR1cm4gdH0sdS5pbmZsYXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmluZmxhdGUodS5lbmNvZGU2NCh0KSkucnZhbDtyZXR1cm4gbnVsbD09PW4/bnVsbDp1LmRlY29kZTY0KG4pfTt2YXIgZD1mdW5jdGlvbihlLHQscil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIG47aWYobnVsbD09PXI/bj1lLnJlbW92ZUl0ZW0odCk6KHI9dS5lbmNvZGU2NChKU09OLnN0cmluZ2lmeShyKSksbj1lLnNldEl0ZW0odCxyKSksInVuZGVmaW5lZCIhPT10eXBlb2YgbiYmITAhPT1uLnJ2YWwpe3ZhciBpPW5ldyBFcnJvcihuLmVycm9yLm1lc3NhZ2UpO3Rocm93IGkuaWQ9bi5lcnJvci5pZCxpLm5hbWU9bi5lcnJvci5uYW1lLGl9fSx5PWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJXZWJTdG9yYWdlIG5vdCBhdmFpbGFibGUuIik7dmFyIHI9ZS5nZXRJdGVtKHQpO2lmKGUuaW5pdClpZihudWxsPT09ci5ydmFsKXtpZihyLmVycm9yKXt2YXIgbj1uZXcgRXJyb3Ioci5lcnJvci5tZXNzYWdlKTt0aHJvdyBuLmlkPXIuZXJyb3IuaWQsbi5uYW1lPXIuZXJyb3IubmFtZSxufXI9bnVsbH1lbHNlIHI9ci5ydmFsO3JldHVybiBudWxsIT09ciYmKHI9SlNPTi5wYXJzZSh1LmRlY29kZTY0KHIpKSkscn0sZz1mdW5jdGlvbihlLHQscixuKXt2YXIgaT15KGUsdCk7bnVsbD09PWkmJihpPXt9KSxpW3JdPW4sZChlLHQsaSl9LHY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtyZXR1cm4gbnVsbCE9PW4mJihuPXIgaW4gbj9uW3JdOm51bGwpLG59LG09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXkoZSx0KTtpZihudWxsIT09biYmciBpbiBuKXtkZWxldGUgbltyXTt2YXIgaT0hMDtmb3IodmFyIG8gaW4gbil7aT0hMTticmVha31pJiYobj1udWxsKSxkKGUsdCxuKX19LGI9ZnVuY3Rpb24oZSx0KXtkKGUsdCxudWxsKX0sXz1mdW5jdGlvbihlLHQscil7dmFyIG4saT1udWxsOyJ1bmRlZmluZWQiPT09dHlwZW9mIHImJihyPVsid2ViIiwiZmxhc2giXSk7dmFyIG89ITEsYT1udWxsO2Zvcih2YXIgcyBpbiByKXtuPXJbc107dHJ5e2lmKCJmbGFzaCI9PT1ufHwiYm90aCI9PT1uKXtpZihudWxsPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoIkZsYXNoIGxvY2FsIHN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTtpPWUuYXBwbHkodGhpcyx0KSxvPSJmbGFzaCI9PT1ufSJ3ZWIiIT09biYmImJvdGgiIT09bnx8KHRbMF09bG9jYWxTdG9yYWdlLGk9ZS5hcHBseSh0aGlzLHQpLG89ITApfWNhdGNoKHUpe2E9dX1pZihvKWJyZWFrfWlmKCFvKXRocm93IGE7cmV0dXJuIGl9O3Uuc2V0SXRlbT1mdW5jdGlvbihlLHQscixuLGkpe18oZyxhcmd1bWVudHMsaSl9LHUuZ2V0SXRlbT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gXyh2LGFyZ3VtZW50cyxuKX0sdS5yZW1vdmVJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe18obSxhcmd1bWVudHMsbil9LHUuY2xlYXJJdGVtcz1mdW5jdGlvbihlLHQscil7XyhiLGFyZ3VtZW50cyxyKX0sdS5wYXJzZVVybD1mdW5jdGlvbihlKXt2YXIgdD0vXihodHRwcz8pOlwvXC8oW146Jl5cL10qKTo/KFxkKikoLiopJC9nO3QubGFzdEluZGV4PTA7dmFyIHI9dC5leGVjKGUpLG49bnVsbD09PXI/bnVsbDp7ZnVsbDplLHNjaGVtZTpyWzFdLGhvc3Q6clsyXSxwb3J0OnJbM10scGF0aDpyWzRdfTtyZXR1cm4gbiYmKG4uZnVsbEhvc3Q9bi5ob3N0LG4ucG9ydD84MCE9PW4ucG9ydCYmImh0dHAiPT09bg=="
}