3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?1?1
{
"qwer?main.e3350ff4d88d534234ef.js?4?1?1": "base64:biBpYShyLG4sbiksYWEocikscn1mdW5jdGlvbiByYSh0LGUsbixyKXt2YXIgbyxpPWUuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGU7cmV0dXJuIG89aT90LnJvb3QucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHIsaSk6dC5yb290LnJlbmRlcmVyLG9hKHQucm9vdCxvLHQsZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLG4pfWZ1bmN0aW9uIG9hKHQsZSxuLHIsbyl7dmFyIGk9bmV3IEFycmF5KG8ubm9kZXMubGVuZ3RoKSxhPW8ub3V0cHV0Q291bnQ/bmV3IEFycmF5KG8ub3V0cHV0Q291bnQpOm51bGw7cmV0dXJue2RlZjpvLHBhcmVudDpuLHZpZXdDb250YWluZXJQYXJlbnQ6bnVsbCxwYXJlbnROb2RlRGVmOnIsY29udGV4dDpudWxsLGNvbXBvbmVudDpudWxsLG5vZGVzOmksc3RhdGU6MTMscm9vdDp0LHJlbmRlcmVyOmUsb2xkVmFsdWVzOm5ldyBBcnJheShvLmJpbmRpbmdDb3VudCksZGlzcG9zYWJsZXM6YSxpbml0SW5kZXg6LTF9fWZ1bmN0aW9uIGlhKHQsZSxuKXt0LmNvbXBvbmVudD1lLHQuY29udGV4dD1ufWZ1bmN0aW9uIGFhKHQpe3ZhciBlO2xyKHQpJiYoZT16bih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYucGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Zm9yKHZhciBuPXQuZGVmLHI9dC5ub2RlcyxvPTA7bzxuLm5vZGVzLmxlbmd0aDtvKyspe3ZhciBpPW4ubm9kZXNbb107R24uc2V0Q3VycmVudE5vZGUodCxvKTt2YXIgYT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZpLmZsYWdzKXtjYXNlIDE6dmFyIHU9SGkodCxlLGkpLGw9dm9pZCAwO2lmKDMzNTU0NDMyJmkuZmxhZ3Mpe3ZhciBzPWRyKGkuZWxlbWVudC5jb21wb25lbnRWaWV3KTtsPUduLmNyZWF0ZUNvbXBvbmVudFZpZXcodCxpLHMsdSl9emkodCxsLGksdSksYT17cmVuZGVyRWxlbWVudDp1LGNvbXBvbmVudFZpZXc6bCx2aWV3Q29udGFpbmVyOm51bGwsdGVtcGxhdGU6aS5lbGVtZW50LnRlbXBsYXRlP3pyKHQsaSk6dm9pZCAwfSwxNjc3NzIxNiZpLmZsYWdzJiYoYS52aWV3Q29udGFpbmVyPVVyKHQsaSxhKSk7YnJlYWs7Y2FzZSAyOmE9WWkodCxlLGkpO2JyZWFrO2Nhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSAyNTY6KGE9cltvXSl8fDQwOTYmaS5mbGFnc3x8KGE9e2luc3RhbmNlOmlvKHQsaSl9KTticmVhaztjYXNlIDE2OmE9e2luc3RhbmNlOmFvKHQsaSl9O2JyZWFrO2Nhc2UgMTYzODQ6KGE9cltvXSl8fChhPXtpbnN0YW5jZTp1byh0LGkpfSksMzI3NjgmaS5mbGFncyYmaWEoem4odCxpLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYS5pbnN0YW5jZSxhLmluc3RhbmNlKTticmVhaztjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6YT17dmFsdWU6dm9pZCAwfTticmVhaztjYXNlIDY3MTA4ODY0OmNhc2UgMTM0MjE3NzI4OmE9bmV3IFBvO2JyZWFrO2Nhc2UgODpRaSh0LGUsaSksYT12b2lkIDB9cltvXT1hfWdhKHQsZGEuQ3JlYXRlVmlld05vZGVzKSxfYSh0LDIwMTMyNjU5MiwyNjg0MzU0NTYsMCl9ZnVuY3Rpb24gdWEodCl7Y2EodCksR24udXBkYXRlRGlyZWN0aXZlcyh0LDEpLHZhKHQsZGEuQ2hlY2tOb0NoYW5nZXMpLEduLnVwZGF0ZVJlbmRlcmVyKHQsMSksZ2EodCxkYS5DaGVja05vQ2hhbmdlcyksdC5zdGF0ZSY9LTk3fWZ1bmN0aW9uIGxhKHQpezEmdC5zdGF0ZT8odC5zdGF0ZSY9LTIsdC5zdGF0ZXw9Mik6dC5zdGF0ZSY9LTMsTG4odCwwLDI1NiksY2EodCksR24udXBkYXRlRGlyZWN0aXZlcyh0LDApLHZhKHQsZGEuQ2hlY2tBbmRVcGRhdGUpLF9hKHQsNjcxMDg4NjQsNTM2ODcwOTEyLDApO3ZhciBlPUxuKHQsMjU2LDUxMik7dm8odCwyMDk3MTUyfChlPzEwNDg1NzY6MCkpLEduLnVwZGF0ZVJlbmRlcmVyKHQsMCksZ2EodCxkYS5DaGVja0FuZFVwZGF0ZSksX2EodCwxMzQyMTc3MjgsNTM2ODcwOTEyLDApLHZvKHQsODM4ODYwOHwoKGU9TG4odCw1MTIsNzY4KSk/NDE5NDMwNDowKSksMiZ0LmRlZi5mbGFncyYmKHQuc3RhdGUmPS05KSx0LnN0YXRlJj0tOTcsTG4odCw3NjgsMTAyNCl9ZnVuY3Rpb24gc2EodCxlLG4sbyxpLGEsdSxsLHMsYyxmLGgscCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwscyxjLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoLHA9ITE7cmV0dXJuIGg+MCYmQmkodCxlLDAsbikmJihwPSEwKSxoPjEmJkJpKHQsZSwxLHIpJiYocD0hMCksaD4yJiZCaSh0LGUsMixvKSYmKHA9ITApLGg+MyYmQmkodCxlLDMsaSkmJihwPSEwKSxoPjQmJkJpKHQsZSw0LGEpJiYocD0hMCksaD41JiZCaSh0LGUsNSx1KSYmKHA9ITApLGg+NiYmQmkodCxlLDYsbCkmJihwPSEwKSxoPjcmJkJpKHQsZSw3LHMpJiYocD0hMCksaD44JiZCaSh0LGUsOCxjKSYmKHA9ITApLGg+OSYmQmkodCxlLDksZikmJihwPSEwKSxwfSh0LGUsbixyLG8saSxhLHUsbCxzLGMsZik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9ITEscD1lLmJpbmRpbmdzLGQ9cC5sZW5ndGg7aWYoZD4wJiZ0cih0LGUsMCxuKSYmKGg9ITApLGQ+MSYmdHIodCxlLDEscikmJihoPSEwKSxkPjImJnRyKHQsZSwyLG8pJiYoaD0hMCksZD4zJiZ0cih0LGUsMyxpKSYmKGg9ITApLGQ+NCYmdHIodCxlLDQsYSkmJihoPSEwKSxkPjUmJnRyKHQsZSw1LHUpJiYoaD0hMCksZD42JiZ0cih0LGUsNixsKSYmKGg9ITApLGQ+NyYmdHIodCxlLDcscykmJihoPSEwKSxkPjgmJnRyKHQsZSw4LGMpJiYoaD0hMCksZD45JiZ0cih0LGUsOSxmKSYmKGg9ITApLGgpe3ZhciBnPWUudGV4dC5wcmVmaXg7ZD4wJiYoZys9SmkobixwWzBdKSksZD4xJiYoZys9SmkocixwWzFdKSksZD4yJiYoZys9SmkobyxwWzJdKSksZD4zJiYoZys9SmkoaSxwWzNdKSksZD40JiYoZys9SmkoYSxwWzRdKSksZD41JiYoZys9SmkodSxwWzVdKSksZD42JiYoZys9SmkobCxwWzZdKSksZD43JiYoZys9SmkocyxwWzddKSksZD44JiYoZys9SmkoYyxwWzhdKSksZD45JiYoZys9SmkoZixwWzldKSk7dmFyIHY9SG4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHYsZyl9cmV0dXJuIGh9KHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9Rm4odCxlLm5vZGVJbmRleCkscD1oLmluc3RhbmNlLGQ9ITEsZz12b2lkIDAsdj1lLmJpbmRpbmdzLmxlbmd0aDtyZXR1cm4gdj4wJiZYbih0LGUsMCxuKSYmKGQ9ITAsZz1nbyh0LGgsZSwwLG4sZykpLHY+MSYmWG4odCxlLDEscikmJihkPSEwLGc9Z28odCxoLGUsMSxyLGcpKSx2PjImJlhuKHQsZSwyLG8pJiYoZD0hMCxnPWdvKHQsaCxlLDIsbyxnKSksdj4zJiZYbih0LGUsMyxpKSYmKGQ9ITAsZz1nbyh0LGgsZSwzLGksZykpLHY+NCYmWG4odCxlLDQsYSkmJihkPSEwLGc9Z28odCxoLGUsNCxhLGcpKSx2PjUmJlhuKHQsZSw1LHUpJiYoZD0hMCxnPWdvKHQsaCxlLDUsdSxnKSksdj42JiZYbih0LGUsNixsKSYmKGQ9ITAsZz1nbyh0LGgsZSw2LGwsZykpLHY+NyYmWG4odCxlLDcscykmJihkPSEwLGc9Z28odCxoLGUsNyxzLGcpKSx2PjgmJlhuKHQsZSw4LGMpJiYoZD0hMCxnPWdvKHQsaCxlLDgsYyxnKSksdj45JiZYbih0LGUsOSxmKSYmKGQ9ITAsZz1nbyh0LGgsZSw5LGYsZykpLGcmJnAubmdPbkNoYW5nZXMoZyksNjU1MzYmZS5mbGFncyYmVm4odCwyNTYsZS5ub2RlSW5kZXgpJiZwLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJnAubmdEb0NoZWNrKCksZH0odCxlLG4scixvLGksYSx1LGwscyxjLGYpO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwscyxjLGYpe3ZhciBoPWUuYmluZGluZ3MscD0hMSxkPWgubGVuZ3RoO2lmKGQ+MCYmdHIodCxlLDAsbikmJihwPSEwKSxkPjEmJnRyKHQsZSwxLHIpJiYocD0hMCksZD4yJiZ0cih0LGUsMixvKSYmKHA9ITApLGQ+MyYmdHIodCxlLDMsaSkmJihwPSEwKSxkPjQmJnRyKHQsZSw0LGEpJiYocD0hMCksZD41JiZ0cih0LGUsNSx1KSYmKHA9ITApLGQ+NiYmdHIodCxlLDYsbCkmJihwPSEwKSxkPjcmJnRyKHQsZSw3LHMpJiYocD0hMCksZD44JiZ0cih0LGUsOCxjKSYmKHA9ITApLGQ+OSYmdHIodCxlLDksZikmJihwPSEwKSxwKXt2YXIgZz1Cbih0LGUubm9kZUluZGV4KSx2PXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6dj1uZXcgQXJyYXkoaC5sZW5ndGgpLGQ+MCYmKHZbMF09biksZD4xJiYodlsxXT1yKSxkPjImJih2WzJdPW8pLGQ+MyYmKHZbM109aSksZD40JiYodls0XT1hKSxkPjUmJih2WzVdPXUpLGQ+NiYmKHZbNl09bCksZD43JiYodls3XT1zKSxkPjgmJih2WzhdPWMpLGQ+OSYmKHZbOV09Zik7YnJlYWs7Y2FzZSA2NDp2PXt9LGQ+MCYmKHZbaFswXS5uYW1lXT1uKSxkPjEmJih2W2hbMV0ubmFtZV09ciksZD4yJiYodltoWzJdLm5hbWVdPW8pLGQ+MyYmKHZbaFszXS5uYW1lXT1pKSxkPjQmJih2W2hbNF0ubmFtZV09YSksZD41JiYodltoWzVdLm5hbWVdPXUpLGQ+NiYmKHZbaFs2XS5uYW1lXT1sKSxkPjcmJih2W2hbN10ubmFtZV09cyksZD44JiYodltoWzhdLm5hbWVdPWMpLGQ+OSYmKHZbaFs5XS5uYW1lXT1mKTticmVhaztjYXNlIDEyODp2YXIgeT1uO3N3aXRjaChkKXtjYXNlIDE6dj15LnRyYW5zZm9ybShuKTticmVhaztjYXNlIDI6dj15LnRyYW5zZm9ybShyKTticmVhaztjYXNlIDM6dj15LnRyYW5zZm9ybShyLG8pO2JyZWFrO2Nhc2UgNDp2PXkudHJhbnNmb3JtKHIsbyxpKTticmVhaztjYXNlIDU6dj15LnRyYW5zZm9ybShyLG8saSxhKTticmVhaztjYXNlIDY6dj15LnRyYW5zZm9ybShyLG8saSxhLHUpO2JyZWFrO2Nhc2UgNzp2PXkudHJhbnNmb3JtKHIsbyxpLGEsdSxsKTticmVhaztjYXNlIDg6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzKTticmVhaztjYXNlIDk6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzLGMpO2JyZWFrO2Nhc2UgMTA6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzLGMsZil9fWcudmFsdWU9dn1yZXR1cm4gcH0odCxlLG4scixvLGksYSx1LGwscyxjLGYpO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLG8saSxhLHUsbCxzLGMsZixoLHApOmZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0hMSxvPTA7bzxuLmxlbmd0aDtvKyspQmkodCxlLG8sbltvXSkmJihyPSEwKTtyZXR1cm4gcn0odCxlLG4pO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1lLmJpbmRpbmdzLG89ITEsaT0wO2k8bi5sZW5ndGg7aSsrKXRyKHQsZSxpLG5baV0pJiYobz0hMCk7aWYobyl7dmFyIGE9IiI7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylhKz1KaShuW2ldLHJbaV0pO2E9ZS50ZXh0LnByZWZpeCthO3ZhciB1PUhuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh1LGEpfXJldHVybiBvfSh0LGUsbik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1Gbih0LGUubm9kZUluZGV4KSxvPXIuaW5zdGFuY2UsaT0hMSxhPXZvaWQgMCx1PTA7dTxuLmxlbmd0aDt1KyspWG4odCxlLHUsblt1XSkmJihpPSEwLGE9Z28odCxyLGUsdSxuW3VdLGEpKTtyZXR1cm4gYSYmby5uZ09uQ2hhbmdlcyhhKSw2NTUzNiZlLmZsYWdzJiZWbih0LDI1NixlLm5vZGVJbmRleCkmJm8ubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmby5uZ0RvQ2hlY2soKSxpfSh0LGUsbik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPWUuYmluZGluZ3MsaT0hMSxhPTA7YTxuLmxlbmd0aDthKyspdHIodCxlLGEsblthXSkmJihpPSEwKTtpZihpKXt2YXIgdT1Cbih0LGUubm9kZUluZGV4KSxsPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6bD1uO2JyZWFrO2Nhc2UgNjQ6Zm9yKGw9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWxbb1thXS5uYW1lXT1uW2FdO2JyZWFrO2Nhc2UgMTI4OnZhciBzPW5bMF0sYz1uLnNsaWNlKDEpO2w9cy50cmFuc2Zvcm0uYXBwbHkocyxPYmplY3Qoci5fX3NwcmVhZCkoYykpfXUudmFsdWU9bH1yZXR1cm4gaX0odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLG8pfWZ1bmN0aW9uIGNhKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgbz16bih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihvKWZvcih2YXIgaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2Euc3RhdGV8PTMyLHJyKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGZhKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZlcih0LGUsMCxuKSxoPjEmJmVyKHQsZSwxLHIpLGg+MiYmZXIodCxlLDIsbyksaD4zJiZlcih0LGUsMyxpKSxoPjQmJmVyKHQsZSw0LGEpLGg+NSYmZXIodCxlLDUsdSksaD42JiZlcih0LGUsNixsKSxoPjcmJmVyKHQsZSw3LHMpLGg+OCYmZXIodCxlLDgsYyksaD45JiZlcih0LGUsOSxmKX0odCxlLHIsbyxpLGEsdSxsLHMsYyxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllcih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIGhhKHQsZSl7aWYoWm4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTm4oR24uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIHBhKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZih2YSh0LGRhLkRlc3Ryb3kpLGdhKHQsZGEuRGVzdHJveSksdm8odCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1pcih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoQnQobixuLmluZGV4T2YodCkpLEduLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoem4odCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShIbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJlpuKHQsbikuZGVzdHJveSgpfX0odCksbHIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIGRhPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiBnYSh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgbz1uLm5vZGVzW3JdOzMzNTU0NDMyJm8uZmxhZ3M/eWEoem4odCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZvLmNoaWxkRmxhZ3MpJiYocis9by5jaGlsZENvdW50KX19ZnVuY3Rpb24gdmEodCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZvLmZsYWdzKWZvcih2YXIgaT16bih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8aS5sZW5ndGg7YSsrKXlhKGlbYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmby5jaGlsZEZsYWdzKSYmKHIrPW8uY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHlhKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBkYS5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT91YSh0KTo2NCZuJiZtYSh0LGRhLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGRhLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/dWEodCk6NjQmbiYmbWEodCxlKSk7YnJlYWs7Y2FzZSBkYS5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9sYSh0KTo2NCZuJiZtYSh0LGRhLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGRhLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/bGEodCk6NjQmbiYmbWEodCxlKSk7YnJlYWs7Y2FzZSBkYS5EZXN0cm95OnBhKHQpO2JyZWFrO2Nhc2UgZGEuQ3JlYXRlVmlld05vZGVzOmFhKHQpfX1mdW5jdGlvbiBtYSh0LGUpe3ZhKHQsZSksZ2EodCxlKX1mdW5jdGlvbiBfYSh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBvPXQuZGVmLm5vZGVzLmxlbmd0aCxpPTA7aTxvO2krKyl7dmFyIGE9dC5kZWYubm9kZXNbaV07aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKEduLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpHaSh0LGEpO2JyZWFrO2Nhc2UgMTpoYSh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KGkrPWEuY2hpbGRDb3VudCl9fXZhciB3YT0hMTtmdW5jdGlvbiBiYSh0LGUsbixyLG8saSl7dmFyIGE9by5pbmplY3Rvci5nZXQoZm4pO3JldHVybiBuYShDYSh0LG8sYSxlLG4pLHIsaSl9ZnVuY3Rpb24geGEodCxlLG4scixvLGkpe3ZhciBhPW8uaW5qZWN0b3IuZ2V0KGZuKSx1PUNhKHQsbyxuZXcgbnUoYSksZSxuKSxsPU1hKHIpO3JldHVybiB0dShGYS5jcmVhdGUsbmEsbnVsbCxbdSxsLGldKX1mdW5jdGlvbiBDYSh0LGUsbixyLG8pe3ZhciBpPWUuaW5qZWN0b3IuZ2V0KFNlKSxhPWUuaW5qZWN0b3IuZ2V0KCR0KSx1PW4uY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtyZXR1cm57bmdNb2R1bGU6ZSxpbmplY3Rvcjp0LHByb2plY3RhYmxlTm9kZXM6cixzZWxlY3Rvck9yTm9kZTpvLHNhbml0aXplcjppLHJlbmRlcmVyRmFjdG9yeTpuLHJlbmRlcmVyOnUsZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3ZhciBvPU1hKG4pO3JldHVybiB0dShGYS5jcmVhdGUsZWEsbnVsbCxbdCxlLG8scl0pfWZ1bmN0aW9uIEVhKHQsZSxuLHIpe3JldHVybiBuPWthLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHxNYShuKSx0dShGYS5jcmVhdGUscmEsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe3JldHVybiBRcih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09VGEuc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9VGEuZ2V0KHQudG9rZW4pOzM4NDAmdC5mbGFncyYmciYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KSksdC5tb2R1bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1BhLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7Z3QobykucHJvdmlkZWRJbj09PXQmJihlPSEwLG49bnx8ci5kZXByZWNhdGVkQmVoYXZpb3IpfSkpfSkpLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgbz1UYS5nZXQoci50b2tlbik7byYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xvLmZsYWdzLHIuZGVwcz1mcihvLmRlcHMpLHIudmFsdWU9by52YWx1ZSl9aWYoUGEuc2l6ZT4wKXt2YXIgaT1uZXcgU2V0KHQubW9kdWxlcyk7UGEuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtpZihpLmhhcyhndChyKS5wcm92aWRlZEluKSl7dmFyIG89e3Rva2VuOnIsZmxhZ3M6ZS5mbGFnc3wobj80MDk2OjApLGRlcHM6ZnIoZS5kZXBzKSx2YWx1ZTplLnZhbHVlLGluZGV4OnQucHJvdmlkZXJzLmxlbmd0aH07dC5wcm92aWRlcnMucHVzaChvKSx0LnByb3ZpZGVyc0J5S2V5W1FuKHIpXT1vfX0pKX19KHQ9dC5mYWN0b3J5KChmdW5jdGlvbigpe3JldHVybiBxbn0pKSksdCk6dH0ocikpfXZhciBUYT1uZXcgTWFwLFBhPW5ldyBNYXAsa2E9bmV3IE1hcDtmdW5jdGlvbiBBYSh0KXt2YXIgZTtUYS5zZXQodC50b2tlbix0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbiYmKGU9Z3QodC50b2tlbikpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm92aWRlZEluJiZQYS5zZXQodC50b2tlbix0KX1mdW5jdGlvbiBJYSh0LGUpe3ZhciBuPWRyKGUudmlld0RlZkZhY3RvcnkpLHI9ZHIobi5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2thLnNldCh0LHIpfWZ1bmN0aW9uIFJhKCl7VGEuY2xlYXIoKSxQYS5jbGVhcigpLGthLmNsZWFyKCl9ZnVuY3Rpb24gTWEodCl7aWYoMD09PVRhLnNpemUpcmV0dXJuIHQ7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49bnVsbCxyPTA7cjx0Lm5vZGVzLmxlbmd0aDtyKyspe3ZhciBvPXQubm9kZXNbcl07MSZvLmZsYWdzJiYobj1vKSxuJiYzODQwJm8uZmxhZ3MmJlRhLmhhcyhvLnByb3ZpZGVyLnRva2VuKSYmKGUucHVzaChuLm5vZGVJbmRleCksbj1udWxsKX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3Q9dC5mYWN0b3J5KChmdW5jdGlvbigpe3JldHVybiBxbn0pKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylyKHQsZVtuXSk7cmV0dXJuIHQ7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbj1lKzE7bjx0Lm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQubm9kZXNbbl07aWYoMSZyLmZsYWdzKXJldHVybjtpZigzODQwJnIuZmxhZ3Mpe3ZhciBvPXIucHJvdmlkZXIsaT1UYS5nZXQoby50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLG8uZGVwcz1mcihpLmRlcHMpLG8udmFsdWU9aS52YWx1ZSl9fX19ZnVuY3Rpb24gamEodCxlLG4scixvLGksYSx1LGwscyxjLGYsaCl7dmFyIHA9dC5kZWYubm9kZXNbZV07cmV0dXJuIHNhKHQscCxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpLDIyNCZwLmZsYWdzP0JuKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIE5hKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpe3ZhciBwPXQuZGVmLm5vZGVzW2VdO3JldHVybiBmYSh0LHAsbixyLG8saSxhLHUsbCxzLGMsZixoKSwyMjQmcC5mbGFncz9Cbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBEYSh0KXtyZXR1cm4gdHUoRmEuZGV0ZWN0Q2hhbmdlcyxsYSxudWxsLFt0XSl9ZnVuY3Rpb24gVWEodCl7cmV0dXJuIHR1KEZhLmNoZWNrTm9DaGFuZ2VzLHVhLG51bGwsW3RdKX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gdHUoRmEuZGVzdHJveSxwYSxudWxsLFt0XSl9dmFyIFZhLEhhLHphLEZhPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCIsdH0oe30pO2Z1bmN0aW9uIEJhKHQsZSl7SGE9dCx6YT1lfWZ1bmN0aW9uIFphKHQsZSxuLHIpe3JldHVybiBCYSh0LGUpLHR1KEZhLmhhbmRsZUV2ZW50LHQuZGVmLmhhbmRsZUV2ZW50LG51bGwsW3QsZSxuLHJdKX1mdW5jdGlvbiBHYSh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IFVuKEZhW1ZhXSk7cmV0dXJuIEJhKHQsS2EodCwwKSksdC5kZWYudXBkYXRlRGlyZWN0aXZlcygoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz1bXSxpPTM7aTxhcmd1bWVudHMubGVuZ3RoO2krKylvW2ktM109YXJndW1lbnRzW2ldO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9XYSh0LGEscixvKTpRYSh0LGEscixvKSwxNjM4NCZhLmZsYWdzJiZCYSh0LEthKHQsbikpLDIyNCZhLmZsYWdzP0JuKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0pLHQpfWZ1bmN0aW9uIHFhKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgVW4oRmFbVmFdKTtyZXR1cm4gQmEodCxZYSh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcigoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz1bXSxpPTM7aTxhcmd1bWVudHMubGVuZ3RoO2krKylvW2ktM109YXJndW1lbnRzW2ldO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9XYSh0LGEscixvKTpRYSh0LGEscixvKSwzJmEuZmxhZ3MmJkJhKHQsWWEodCxuKSksMjI0JmEuZmxhZ3M/Qm4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSksdCl9ZnVuY3Rpb24gV2EodCxlLG4sbyl7aWYoc2EuYXBwbHkodm9pZCAwLE9iamVjdChyLl9fc3ByZWFkKShbdCxlLG5dLG8pKSl7dmFyIGk9MT09PW4/b1swXTpvO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSx1PTA7dTxlLmJpbmRpbmdzLmxlbmd0aDt1Kyspe3ZhciBsPWUuYmluZGluZ3NbdV0scz1pW3VdOzgmbC5mbGFncyYmKGFbKHA9bC5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIitwLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoVGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiItIit0WzFdLnRvTG93ZXJDYXNlKCl9KSkpXT1QZShzKSl9dmFyIGM9ZS5wYXJlbnQsZj16bih0LGMubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2lmKGMuZWxlbWVudC5uYW1lKWZvcih2YXIgaCBpbiBhKW51bGwhPShzPWFbaF0pP3QucmVuZGVyZXIuc2V0QXR0cmlidXRlKGYsaCxzKTp0LnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShmLGgpO2Vsc2UgdC5yZW5kZXJlci5zZXRWYWx1ZShmLCJiaW5kaW5ncz0iK0pTT04uc3RyaW5naWZ5KGEsbnVsbCwyKSl9fXZhciBwfWZ1bmN0aW9uIFFhKHQsZSxuLG8pe2ZhLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkoW3QsZSxuXSxvKSl9ZnVuY3Rpb24gS2EodCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigzJnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciBKYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLHI9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZyOyluPWFyKHIpLHI9ci5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHpuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBCcih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7WGEodGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmWGEodGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIWxyKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD96bih0LnBhcmVudCxhcih0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz91cih0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTp1cih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixvPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW9baS0xXT1hcmd1bWVudHNbaV07MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgYT0kYShlLG4pLHU9LTEsbD1mdW5jdGlvbigpe3ZhciBlO3JldHVybisrdT09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChyLl9fc3ByZWFkKShbdF0sbykpOnFufTtlLmZhY3RvcnkobCksdTxhJiYodC5lcnJvcigiSWxsZWdhbCBzdGF0ZTogdGhlIFZpZXdEZWZpbml0aW9uRmFjdG9yeSBkaWQgbm90IGNhbGwgdGhlIGxvZ2dlciEiKSx0LmVycm9yLmFwcGx5KHQsT2JqZWN0KHIuX19zcHJlYWQpKG8pKSl9LHR9KCk7ZnVuY3Rpb24gJGEodCxlKXtmb3IodmFyIG49LTEscj0wO3I8PWU7cisrKTMmdC5ub2Rlc1tyXS5mbGFncyYmbisrO3JldHVybiBufWZ1bmN0aW9uIFhhKHQsZSxuKXtmb3IodmFyIHIgaW4gZS5yZWZlcmVuY2VzKW5bcl09V2kodCxlLGUucmVmZXJlbmNlc1tyXSl9ZnVuY3Rpb24gdHUodCxlLG4scil7dmFyIG8saSxhPVZhLHU9SGEsbD16YTt0cnl7VmE9dDt2YXIgcz1lLmFwcGx5KG4scik7cmV0dXJuIEhhPXUsemE9bCxWYT1hLHN9Y2F0Y2goYyl7aWYoS3QoYyl8fCFIYSl0aHJvdyBjO3Rocm93IG89YyxpPWV1KCksbyBpbnN0YW5jZW9mIEVycm9yfHwobz1uZXcgRXJyb3Ioby50b1N0cmluZygpKSksRG4obyxpKSxvfX1mdW5jdGlvbiBldSgpe3JldHVybiBIYT9uZXcgSmEoSGEsemEpOm51bGx9dmFyIG51PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBydSh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxydT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGVidWdDb250ZXh0RmFjdG9yeT1ldSx0aGlzLmRhdGE9dGhpcy5kZWxlZ2F0ZS5kYXRhfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVEZWJ1Z0NvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVidWdDb250ZXh0RmFjdG9yeSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9QWkodCk7IWZ1bmN0aW9uKHQpe2tpLmRlbGV0ZSh0Lm5hdGl2ZU5vZGUpfShlKSxlIGluc3RhbmNlb2YgVGkmJihlLmxpc3RlbmVycy5sZW5ndGg9MCksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSYmdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSkscj10aGlzLmNyZWF0ZURlYnVnQ29udGV4dChuKTtpZihyKXt2YXIgbz1uZXcgUGkobixudWxsLHIpO28ubmFtZT10LElpKG8pfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPXRoaXMuY3JlYXRlRGVidWdDb250ZXh0KGUpO3JldHVybiBuJiZJaShuZXcgVGkoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KSxuPXRoaXMuY3JlYXRlRGVidWdDb250ZXh0KGUpO3JldHVybiBuJiZJaShuZXcgVGkoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPUFpKHQpLHI9QWkoZSk7biYmciYmbiBpbnN0YW5jZW9mIFBpJiZuLmFkZENoaWxkKHIpLHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1BaSh0KSxvPUFpKGUpLGk9QWkobik7ciYmbyYmciBpbnN0YW5jZW9mIFBpJiZyLmluc2VydEJlZm9yZShpLG8pLHRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1BaSh0KSxyPUFpKGUpO24mJnImJm4gaW5zdGFuY2VvZiBQaSYmbi5yZW1vdmVDaGlsZChyKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHQsZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpLHI9ZXUoKTtyZXR1cm4gciYmSWkobmV3IFBpKG4sbnVsbCxyKSksbn0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUFpKHQpO28mJm8gaW5zdGFuY2VvZiBQaSYmKG8uYXR0cmlidXRlc1tyP3IrIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9QWkodCk7ciYmciBpbnN0YW5jZW9mIFBpJiYoci5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49QWkodCk7biYmbiBpbnN0YW5jZW9mIFBpJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49QWkodCk7biYmbiBpbnN0YW5jZW9mIFBpJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUFpKHQpO28mJm8gaW5zdGFuY2VvZiBQaSYmKG8uc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1BaSh0KTtyJiZyIGluc3RhbmNlb2YgUGkmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUFpKHQpO3ImJnIgaW5zdGFuY2VvZiBQaSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPUFpKHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IE9pKGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKTtmdQ=="
}
Changelog:
{
"2019.12.04 14:30": "base64:biBpYShyLG4sbiksYWEocikscn1mdW5jdGlvbiByYSh0LGUsbixyKXt2YXIgbyxpPWUuZWxlbWVudC5jb21wb25lbnRSZW5kZXJlclR5cGU7cmV0dXJuIG89aT90LnJvb3QucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHIsaSk6dC5yb290LnJlbmRlcmVyLG9hKHQucm9vdCxvLHQsZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLG4pfWZ1bmN0aW9uIG9hKHQsZSxuLHIsbyl7dmFyIGk9bmV3IEFycmF5KG8ubm9kZXMubGVuZ3RoKSxhPW8ub3V0cHV0Q291bnQ/bmV3IEFycmF5KG8ub3V0cHV0Q291bnQpOm51bGw7cmV0dXJue2RlZjpvLHBhcmVudDpuLHZpZXdDb250YWluZXJQYXJlbnQ6bnVsbCxwYXJlbnROb2RlRGVmOnIsY29udGV4dDpudWxsLGNvbXBvbmVudDpudWxsLG5vZGVzOmksc3RhdGU6MTMscm9vdDp0LHJlbmRlcmVyOmUsb2xkVmFsdWVzOm5ldyBBcnJheShvLmJpbmRpbmdDb3VudCksZGlzcG9zYWJsZXM6YSxpbml0SW5kZXg6LTF9fWZ1bmN0aW9uIGlhKHQsZSxuKXt0LmNvbXBvbmVudD1lLHQuY29udGV4dD1ufWZ1bmN0aW9uIGFhKHQpe3ZhciBlO2xyKHQpJiYoZT16bih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYucGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Zm9yKHZhciBuPXQuZGVmLHI9dC5ub2RlcyxvPTA7bzxuLm5vZGVzLmxlbmd0aDtvKyspe3ZhciBpPW4ubm9kZXNbb107R24uc2V0Q3VycmVudE5vZGUodCxvKTt2YXIgYT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZpLmZsYWdzKXtjYXNlIDE6dmFyIHU9SGkodCxlLGkpLGw9dm9pZCAwO2lmKDMzNTU0NDMyJmkuZmxhZ3Mpe3ZhciBzPWRyKGkuZWxlbWVudC5jb21wb25lbnRWaWV3KTtsPUduLmNyZWF0ZUNvbXBvbmVudFZpZXcodCxpLHMsdSl9emkodCxsLGksdSksYT17cmVuZGVyRWxlbWVudDp1LGNvbXBvbmVudFZpZXc6bCx2aWV3Q29udGFpbmVyOm51bGwsdGVtcGxhdGU6aS5lbGVtZW50LnRlbXBsYXRlP3pyKHQsaSk6dm9pZCAwfSwxNjc3NzIxNiZpLmZsYWdzJiYoYS52aWV3Q29udGFpbmVyPVVyKHQsaSxhKSk7YnJlYWs7Y2FzZSAyOmE9WWkodCxlLGkpO2JyZWFrO2Nhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSAyNTY6KGE9cltvXSl8fDQwOTYmaS5mbGFnc3x8KGE9e2luc3RhbmNlOmlvKHQsaSl9KTticmVhaztjYXNlIDE2OmE9e2luc3RhbmNlOmFvKHQsaSl9O2JyZWFrO2Nhc2UgMTYzODQ6KGE9cltvXSl8fChhPXtpbnN0YW5jZTp1byh0LGkpfSksMzI3NjgmaS5mbGFncyYmaWEoem4odCxpLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYS5pbnN0YW5jZSxhLmluc3RhbmNlKTticmVhaztjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6YT17dmFsdWU6dm9pZCAwfTticmVhaztjYXNlIDY3MTA4ODY0OmNhc2UgMTM0MjE3NzI4OmE9bmV3IFBvO2JyZWFrO2Nhc2UgODpRaSh0LGUsaSksYT12b2lkIDB9cltvXT1hfWdhKHQsZGEuQ3JlYXRlVmlld05vZGVzKSxfYSh0LDIwMTMyNjU5MiwyNjg0MzU0NTYsMCl9ZnVuY3Rpb24gdWEodCl7Y2EodCksR24udXBkYXRlRGlyZWN0aXZlcyh0LDEpLHZhKHQsZGEuQ2hlY2tOb0NoYW5nZXMpLEduLnVwZGF0ZVJlbmRlcmVyKHQsMSksZ2EodCxkYS5DaGVja05vQ2hhbmdlcyksdC5zdGF0ZSY9LTk3fWZ1bmN0aW9uIGxhKHQpezEmdC5zdGF0ZT8odC5zdGF0ZSY9LTIsdC5zdGF0ZXw9Mik6dC5zdGF0ZSY9LTMsTG4odCwwLDI1NiksY2EodCksR24udXBkYXRlRGlyZWN0aXZlcyh0LDApLHZhKHQsZGEuQ2hlY2tBbmRVcGRhdGUpLF9hKHQsNjcxMDg4NjQsNTM2ODcwOTEyLDApO3ZhciBlPUxuKHQsMjU2LDUxMik7dm8odCwyMDk3MTUyfChlPzEwNDg1NzY6MCkpLEduLnVwZGF0ZVJlbmRlcmVyKHQsMCksZ2EodCxkYS5DaGVja0FuZFVwZGF0ZSksX2EodCwxMzQyMTc3MjgsNTM2ODcwOTEyLDApLHZvKHQsODM4ODYwOHwoKGU9TG4odCw1MTIsNzY4KSk/NDE5NDMwNDowKSksMiZ0LmRlZi5mbGFncyYmKHQuc3RhdGUmPS05KSx0LnN0YXRlJj0tOTcsTG4odCw3NjgsMTAyNCl9ZnVuY3Rpb24gc2EodCxlLG4sbyxpLGEsdSxsLHMsYyxmLGgscCl7cmV0dXJuIDA9PT1uP2Z1bmN0aW9uKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwscyxjLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoLHA9ITE7cmV0dXJuIGg+MCYmQmkodCxlLDAsbikmJihwPSEwKSxoPjEmJkJpKHQsZSwxLHIpJiYocD0hMCksaD4yJiZCaSh0LGUsMixvKSYmKHA9ITApLGg+MyYmQmkodCxlLDMsaSkmJihwPSEwKSxoPjQmJkJpKHQsZSw0LGEpJiYocD0hMCksaD41JiZCaSh0LGUsNSx1KSYmKHA9ITApLGg+NiYmQmkodCxlLDYsbCkmJihwPSEwKSxoPjcmJkJpKHQsZSw3LHMpJiYocD0hMCksaD44JiZCaSh0LGUsOCxjKSYmKHA9ITApLGg+OSYmQmkodCxlLDksZikmJihwPSEwKSxwfSh0LGUsbixyLG8saSxhLHUsbCxzLGMsZik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9ITEscD1lLmJpbmRpbmdzLGQ9cC5sZW5ndGg7aWYoZD4wJiZ0cih0LGUsMCxuKSYmKGg9ITApLGQ+MSYmdHIodCxlLDEscikmJihoPSEwKSxkPjImJnRyKHQsZSwyLG8pJiYoaD0hMCksZD4zJiZ0cih0LGUsMyxpKSYmKGg9ITApLGQ+NCYmdHIodCxlLDQsYSkmJihoPSEwKSxkPjUmJnRyKHQsZSw1LHUpJiYoaD0hMCksZD42JiZ0cih0LGUsNixsKSYmKGg9ITApLGQ+NyYmdHIodCxlLDcscykmJihoPSEwKSxkPjgmJnRyKHQsZSw4LGMpJiYoaD0hMCksZD45JiZ0cih0LGUsOSxmKSYmKGg9ITApLGgpe3ZhciBnPWUudGV4dC5wcmVmaXg7ZD4wJiYoZys9SmkobixwWzBdKSksZD4xJiYoZys9SmkocixwWzFdKSksZD4yJiYoZys9SmkobyxwWzJdKSksZD4zJiYoZys9SmkoaSxwWzNdKSksZD40JiYoZys9SmkoYSxwWzRdKSksZD41JiYoZys9SmkodSxwWzVdKSksZD42JiYoZys9SmkobCxwWzZdKSksZD43JiYoZys9SmkocyxwWzddKSksZD44JiYoZys9SmkoYyxwWzhdKSksZD45JiYoZys9SmkoZixwWzldKSk7dmFyIHY9SG4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHYsZyl9cmV0dXJuIGh9KHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9Rm4odCxlLm5vZGVJbmRleCkscD1oLmluc3RhbmNlLGQ9ITEsZz12b2lkIDAsdj1lLmJpbmRpbmdzLmxlbmd0aDtyZXR1cm4gdj4wJiZYbih0LGUsMCxuKSYmKGQ9ITAsZz1nbyh0LGgsZSwwLG4sZykpLHY+MSYmWG4odCxlLDEscikmJihkPSEwLGc9Z28odCxoLGUsMSxyLGcpKSx2PjImJlhuKHQsZSwyLG8pJiYoZD0hMCxnPWdvKHQsaCxlLDIsbyxnKSksdj4zJiZYbih0LGUsMyxpKSYmKGQ9ITAsZz1nbyh0LGgsZSwzLGksZykpLHY+NCYmWG4odCxlLDQsYSkmJihkPSEwLGc9Z28odCxoLGUsNCxhLGcpKSx2PjUmJlhuKHQsZSw1LHUpJiYoZD0hMCxnPWdvKHQsaCxlLDUsdSxnKSksdj42JiZYbih0LGUsNixsKSYmKGQ9ITAsZz1nbyh0LGgsZSw2LGwsZykpLHY+NyYmWG4odCxlLDcscykmJihkPSEwLGc9Z28odCxoLGUsNyxzLGcpKSx2PjgmJlhuKHQsZSw4LGMpJiYoZD0hMCxnPWdvKHQsaCxlLDgsYyxnKSksdj45JiZYbih0LGUsOSxmKSYmKGQ9ITAsZz1nbyh0LGgsZSw5LGYsZykpLGcmJnAubmdPbkNoYW5nZXMoZyksNjU1MzYmZS5mbGFncyYmVm4odCwyNTYsZS5ub2RlSW5kZXgpJiZwLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJnAubmdEb0NoZWNrKCksZH0odCxlLG4scixvLGksYSx1LGwscyxjLGYpO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwscyxjLGYpe3ZhciBoPWUuYmluZGluZ3MscD0hMSxkPWgubGVuZ3RoO2lmKGQ+MCYmdHIodCxlLDAsbikmJihwPSEwKSxkPjEmJnRyKHQsZSwxLHIpJiYocD0hMCksZD4yJiZ0cih0LGUsMixvKSYmKHA9ITApLGQ+MyYmdHIodCxlLDMsaSkmJihwPSEwKSxkPjQmJnRyKHQsZSw0LGEpJiYocD0hMCksZD41JiZ0cih0LGUsNSx1KSYmKHA9ITApLGQ+NiYmdHIodCxlLDYsbCkmJihwPSEwKSxkPjcmJnRyKHQsZSw3LHMpJiYocD0hMCksZD44JiZ0cih0LGUsOCxjKSYmKHA9ITApLGQ+OSYmdHIodCxlLDksZikmJihwPSEwKSxwKXt2YXIgZz1Cbih0LGUubm9kZUluZGV4KSx2PXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6dj1uZXcgQXJyYXkoaC5sZW5ndGgpLGQ+MCYmKHZbMF09biksZD4xJiYodlsxXT1yKSxkPjImJih2WzJdPW8pLGQ+MyYmKHZbM109aSksZD40JiYodls0XT1hKSxkPjUmJih2WzVdPXUpLGQ+NiYmKHZbNl09bCksZD43JiYodls3XT1zKSxkPjgmJih2WzhdPWMpLGQ+OSYmKHZbOV09Zik7YnJlYWs7Y2FzZSA2NDp2PXt9LGQ+MCYmKHZbaFswXS5uYW1lXT1uKSxkPjEmJih2W2hbMV0ubmFtZV09ciksZD4yJiYodltoWzJdLm5hbWVdPW8pLGQ+MyYmKHZbaFszXS5uYW1lXT1pKSxkPjQmJih2W2hbNF0ubmFtZV09YSksZD41JiYodltoWzVdLm5hbWVdPXUpLGQ+NiYmKHZbaFs2XS5uYW1lXT1sKSxkPjcmJih2W2hbN10ubmFtZV09cyksZD44JiYodltoWzhdLm5hbWVdPWMpLGQ+OSYmKHZbaFs5XS5uYW1lXT1mKTticmVhaztjYXNlIDEyODp2YXIgeT1uO3N3aXRjaChkKXtjYXNlIDE6dj15LnRyYW5zZm9ybShuKTticmVhaztjYXNlIDI6dj15LnRyYW5zZm9ybShyKTticmVhaztjYXNlIDM6dj15LnRyYW5zZm9ybShyLG8pO2JyZWFrO2Nhc2UgNDp2PXkudHJhbnNmb3JtKHIsbyxpKTticmVhaztjYXNlIDU6dj15LnRyYW5zZm9ybShyLG8saSxhKTticmVhaztjYXNlIDY6dj15LnRyYW5zZm9ybShyLG8saSxhLHUpO2JyZWFrO2Nhc2UgNzp2PXkudHJhbnNmb3JtKHIsbyxpLGEsdSxsKTticmVhaztjYXNlIDg6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzKTticmVhaztjYXNlIDk6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzLGMpO2JyZWFrO2Nhc2UgMTA6dj15LnRyYW5zZm9ybShyLG8saSxhLHUsbCxzLGMsZil9fWcudmFsdWU9dn1yZXR1cm4gcH0odCxlLG4scixvLGksYSx1LGwscyxjLGYpO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLG8saSxhLHUsbCxzLGMsZixoLHApOmZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0hMSxvPTA7bzxuLmxlbmd0aDtvKyspQmkodCxlLG8sbltvXSkmJihyPSEwKTtyZXR1cm4gcn0odCxlLG4pO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1lLmJpbmRpbmdzLG89ITEsaT0wO2k8bi5sZW5ndGg7aSsrKXRyKHQsZSxpLG5baV0pJiYobz0hMCk7aWYobyl7dmFyIGE9IiI7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylhKz1KaShuW2ldLHJbaV0pO2E9ZS50ZXh0LnByZWZpeCthO3ZhciB1PUhuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh1LGEpfXJldHVybiBvfSh0LGUsbik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1Gbih0LGUubm9kZUluZGV4KSxvPXIuaW5zdGFuY2UsaT0hMSxhPXZvaWQgMCx1PTA7dTxuLmxlbmd0aDt1KyspWG4odCxlLHUsblt1XSkmJihpPSEwLGE9Z28odCxyLGUsdSxuW3VdLGEpKTtyZXR1cm4gYSYmby5uZ09uQ2hhbmdlcyhhKSw2NTUzNiZlLmZsYWdzJiZWbih0LDI1NixlLm5vZGVJbmRleCkmJm8ubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmby5uZ0RvQ2hlY2soKSxpfSh0LGUsbik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPWUuYmluZGluZ3MsaT0hMSxhPTA7YTxuLmxlbmd0aDthKyspdHIodCxlLGEsblthXSkmJihpPSEwKTtpZihpKXt2YXIgdT1Cbih0LGUubm9kZUluZGV4KSxsPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMzI6bD1uO2JyZWFrO2Nhc2UgNjQ6Zm9yKGw9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWxbb1thXS5uYW1lXT1uW2FdO2JyZWFrO2Nhc2UgMTI4OnZhciBzPW5bMF0sYz1uLnNsaWNlKDEpO2w9cy50cmFuc2Zvcm0uYXBwbHkocyxPYmplY3Qoci5fX3NwcmVhZCkoYykpfXUudmFsdWU9bH1yZXR1cm4gaX0odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLG8pfWZ1bmN0aW9uIGNhKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgbz16bih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihvKWZvcih2YXIgaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2Euc3RhdGV8PTMyLHJyKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGZhKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLG8saSxhLHUsbCxzLGMsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZlcih0LGUsMCxuKSxoPjEmJmVyKHQsZSwxLHIpLGg+MiYmZXIodCxlLDIsbyksaD4zJiZlcih0LGUsMyxpKSxoPjQmJmVyKHQsZSw0LGEpLGg+NSYmZXIodCxlLDUsdSksaD42JiZlcih0LGUsNixsKSxoPjcmJmVyKHQsZSw3LHMpLGg+OCYmZXIodCxlLDgsYyksaD45JiZlcih0LGUsOSxmKX0odCxlLHIsbyxpLGEsdSxsLHMsYyxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllcih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIGhhKHQsZSl7aWYoWm4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTm4oR24uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIHBhKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZih2YSh0LGRhLkRlc3Ryb3kpLGdhKHQsZGEuRGVzdHJveSksdm8odCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1pcih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoQnQobixuLmluZGV4T2YodCkpLEduLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoem4odCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShIbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJlpuKHQsbikuZGVzdHJveSgpfX0odCksbHIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIGRhPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiBnYSh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgbz1uLm5vZGVzW3JdOzMzNTU0NDMyJm8uZmxhZ3M/eWEoem4odCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZvLmNoaWxkRmxhZ3MpJiYocis9by5jaGlsZENvdW50KX19ZnVuY3Rpb24gdmEodCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZvLmZsYWdzKWZvcih2YXIgaT16bih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8aS5sZW5ndGg7YSsrKXlhKGlbYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmby5jaGlsZEZsYWdzKSYmKHIrPW8uY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHlhKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBkYS5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT91YSh0KTo2NCZuJiZtYSh0LGRhLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGRhLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/dWEodCk6NjQmbiYmbWEodCxlKSk7YnJlYWs7Y2FzZSBkYS5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9sYSh0KTo2NCZuJiZtYSh0LGRhLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGRhLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/bGEodCk6NjQmbiYmbWEodCxlKSk7YnJlYWs7Y2FzZSBkYS5EZXN0cm95OnBhKHQpO2JyZWFrO2Nhc2UgZGEuQ3JlYXRlVmlld05vZGVzOmFhKHQpfX1mdW5jdGlvbiBtYSh0LGUpe3ZhKHQsZSksZ2EodCxlKX1mdW5jdGlvbiBfYSh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBvPXQuZGVmLm5vZGVzLmxlbmd0aCxpPTA7aTxvO2krKyl7dmFyIGE9dC5kZWYubm9kZXNbaV07aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKEduLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpHaSh0LGEpO2JyZWFrO2Nhc2UgMTpoYSh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KGkrPWEuY2hpbGRDb3VudCl9fXZhciB3YT0hMTtmdW5jdGlvbiBiYSh0LGUsbixyLG8saSl7dmFyIGE9by5pbmplY3Rvci5nZXQoZm4pO3JldHVybiBuYShDYSh0LG8sYSxlLG4pLHIsaSl9ZnVuY3Rpb24geGEodCxlLG4scixvLGkpe3ZhciBhPW8uaW5qZWN0b3IuZ2V0KGZuKSx1PUNhKHQsbyxuZXcgbnUoYSksZSxuKSxsPU1hKHIpO3JldHVybiB0dShGYS5jcmVhdGUsbmEsbnVsbCxbdSxsLGldKX1mdW5jdGlvbiBDYSh0LGUsbixyLG8pe3ZhciBpPWUuaW5qZWN0b3IuZ2V0KFNlKSxhPWUuaW5qZWN0b3IuZ2V0KCR0KSx1PW4uY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtyZXR1cm57bmdNb2R1bGU6ZSxpbmplY3Rvcjp0LHByb2plY3RhYmxlTm9kZXM6cixzZWxlY3Rvck9yTm9kZTpvLHNhbml0aXplcjppLHJlbmRlcmVyRmFjdG9yeTpuLHJlbmRlcmVyOnUsZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIFNhKHQsZSxuLHIpe3ZhciBvPU1hKG4pO3JldHVybiB0dShGYS5jcmVhdGUsZWEsbnVsbCxbdCxlLG8scl0pfWZ1bmN0aW9uIEVhKHQsZSxuLHIpe3JldHVybiBuPWthLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHxNYShuKSx0dShGYS5jcmVhdGUscmEsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIE9hKHQsZSxuLHIpe3JldHVybiBRcih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09VGEuc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9VGEuZ2V0KHQudG9rZW4pOzM4NDAmdC5mbGFncyYmciYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KSksdC5tb2R1bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1BhLmZvckVhY2goKGZ1bmN0aW9uKHIsbyl7Z3QobykucHJvdmlkZWRJbj09PXQmJihlPSEwLG49bnx8ci5kZXByZWNhdGVkQmVoYXZpb3IpfSkpfSkpLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgbz1UYS5nZXQoci50b2tlbik7byYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xvLmZsYWdzLHIuZGVwcz1mcihvLmRlcHMpLHIudmFsdWU9by52YWx1ZSl9aWYoUGEuc2l6ZT4wKXt2YXIgaT1uZXcgU2V0KHQubW9kdWxlcyk7UGEuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtpZihpLmhhcyhndChyKS5wcm92aWRlZEluKSl7dmFyIG89e3Rva2VuOnIsZmxhZ3M6ZS5mbGFnc3wobj80MDk2OjApLGRlcHM6ZnIoZS5kZXBzKSx2YWx1ZTplLnZhbHVlLGluZGV4OnQucHJvdmlkZXJzLmxlbmd0aH07dC5wcm92aWRlcnMucHVzaChvKSx0LnByb3ZpZGVyc0J5S2V5W1FuKHIpXT1vfX0pKX19KHQ9dC5mYWN0b3J5KChmdW5jdGlvbigpe3JldHVybiBxbn0pKSksdCk6dH0ocikpfXZhciBUYT1uZXcgTWFwLFBhPW5ldyBNYXAsa2E9bmV3IE1hcDtmdW5jdGlvbiBBYSh0KXt2YXIgZTtUYS5zZXQodC50b2tlbix0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbiYmKGU9Z3QodC50b2tlbikpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm92aWRlZEluJiZQYS5zZXQodC50b2tlbix0KX1mdW5jdGlvbiBJYSh0LGUpe3ZhciBuPWRyKGUudmlld0RlZkZhY3RvcnkpLHI9ZHIobi5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFZpZXcpO2thLnNldCh0LHIpfWZ1bmN0aW9uIFJhKCl7VGEuY2xlYXIoKSxQYS5jbGVhcigpLGthLmNsZWFyKCl9ZnVuY3Rpb24gTWEodCl7aWYoMD09PVRhLnNpemUpcmV0dXJuIHQ7dmFyIGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49bnVsbCxyPTA7cjx0Lm5vZGVzLmxlbmd0aDtyKyspe3ZhciBvPXQubm9kZXNbcl07MSZvLmZsYWdzJiYobj1vKSxuJiYzODQwJm8uZmxhZ3MmJlRhLmhhcyhvLnByb3ZpZGVyLnRva2VuKSYmKGUucHVzaChuLm5vZGVJbmRleCksbj1udWxsKX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3Q9dC5mYWN0b3J5KChmdW5jdGlvbigpe3JldHVybiBxbn0pKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylyKHQsZVtuXSk7cmV0dXJuIHQ7ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbj1lKzE7bjx0Lm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQubm9kZXNbbl07aWYoMSZyLmZsYWdzKXJldHVybjtpZigzODQwJnIuZmxhZ3Mpe3ZhciBvPXIucHJvdmlkZXIsaT1UYS5nZXQoby50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLG8uZGVwcz1mcihpLmRlcHMpLG8udmFsdWU9aS52YWx1ZSl9fX19ZnVuY3Rpb24gamEodCxlLG4scixvLGksYSx1LGwscyxjLGYsaCl7dmFyIHA9dC5kZWYubm9kZXNbZV07cmV0dXJuIHNhKHQscCxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpLDIyNCZwLmZsYWdzP0JuKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIE5hKHQsZSxuLHIsbyxpLGEsdSxsLHMsYyxmLGgpe3ZhciBwPXQuZGVmLm5vZGVzW2VdO3JldHVybiBmYSh0LHAsbixyLG8saSxhLHUsbCxzLGMsZixoKSwyMjQmcC5mbGFncz9Cbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBEYSh0KXtyZXR1cm4gdHUoRmEuZGV0ZWN0Q2hhbmdlcyxsYSxudWxsLFt0XSl9ZnVuY3Rpb24gVWEodCl7cmV0dXJuIHR1KEZhLmNoZWNrTm9DaGFuZ2VzLHVhLG51bGwsW3RdKX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gdHUoRmEuZGVzdHJveSxwYSxudWxsLFt0XSl9dmFyIFZhLEhhLHphLEZhPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCIsdH0oe30pO2Z1bmN0aW9uIEJhKHQsZSl7SGE9dCx6YT1lfWZ1bmN0aW9uIFphKHQsZSxuLHIpe3JldHVybiBCYSh0LGUpLHR1KEZhLmhhbmRsZUV2ZW50LHQuZGVmLmhhbmRsZUV2ZW50LG51bGwsW3QsZSxuLHJdKX1mdW5jdGlvbiBHYSh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IFVuKEZhW1ZhXSk7cmV0dXJuIEJhKHQsS2EodCwwKSksdC5kZWYudXBkYXRlRGlyZWN0aXZlcygoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz1bXSxpPTM7aTxhcmd1bWVudHMubGVuZ3RoO2krKylvW2ktM109YXJndW1lbnRzW2ldO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9XYSh0LGEscixvKTpRYSh0LGEscixvKSwxNjM4NCZhLmZsYWdzJiZCYSh0LEthKHQsbikpLDIyNCZhLmZsYWdzP0JuKHQsYS5ub2RlSW5kZXgpLnZhbHVlOnZvaWQgMH0pLHQpfWZ1bmN0aW9uIHFhKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgVW4oRmFbVmFdKTtyZXR1cm4gQmEodCxZYSh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcigoZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgbz1bXSxpPTM7aTxhcmd1bWVudHMubGVuZ3RoO2krKylvW2ktM109YXJndW1lbnRzW2ldO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9XYSh0LGEscixvKTpRYSh0LGEscixvKSwzJmEuZmxhZ3MmJkJhKHQsWWEodCxuKSksMjI0JmEuZmxhZ3M/Qm4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSksdCl9ZnVuY3Rpb24gV2EodCxlLG4sbyl7aWYoc2EuYXBwbHkodm9pZCAwLE9iamVjdChyLl9fc3ByZWFkKShbdCxlLG5dLG8pKSl7dmFyIGk9MT09PW4/b1swXTpvO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSx1PTA7dTxlLmJpbmRpbmdzLmxlbmd0aDt1Kyspe3ZhciBsPWUuYmluZGluZ3NbdV0scz1pW3VdOzgmbC5mbGFncyYmKGFbKHA9bC5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIitwLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoVGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiItIit0WzFdLnRvTG93ZXJDYXNlKCl9KSkpXT1QZShzKSl9dmFyIGM9ZS5wYXJlbnQsZj16bih0LGMubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2lmKGMuZWxlbWVudC5uYW1lKWZvcih2YXIgaCBpbiBhKW51bGwhPShzPWFbaF0pP3QucmVuZGVyZXIuc2V0QXR0cmlidXRlKGYsaCxzKTp0LnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShmLGgpO2Vsc2UgdC5yZW5kZXJlci5zZXRWYWx1ZShmLCJiaW5kaW5ncz0iK0pTT04uc3RyaW5naWZ5KGEsbnVsbCwyKSl9fXZhciBwfWZ1bmN0aW9uIFFhKHQsZSxuLG8pe2ZhLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkoW3QsZSxuXSxvKSl9ZnVuY3Rpb24gS2EodCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFlhKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgcj10LmRlZi5ub2Rlc1tuXTtpZigzJnIuZmxhZ3MmJnIuYmluZGluZ3MmJnIuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciBKYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLHI9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZyOyluPWFyKHIpLHI9ci5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PXJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHpuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBCcih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7WGEodGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmWGEodGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIWxyKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD96bih0LnBhcmVudCxhcih0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz91cih0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTp1cih0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixvPVtdLGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW9baS0xXT1hcmd1bWVudHNbaV07MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgYT0kYShlLG4pLHU9LTEsbD1mdW5jdGlvbigpe3ZhciBlO3JldHVybisrdT09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChyLl9fc3ByZWFkKShbdF0sbykpOnFufTtlLmZhY3RvcnkobCksdTxhJiYodC5lcnJvcigiSWxsZWdhbCBzdGF0ZTogdGhlIFZpZXdEZWZpbml0aW9uRmFjdG9yeSBkaWQgbm90IGNhbGwgdGhlIGxvZ2dlciEiKSx0LmVycm9yLmFwcGx5KHQsT2JqZWN0KHIuX19zcHJlYWQpKG8pKSl9LHR9KCk7ZnVuY3Rpb24gJGEodCxlKXtmb3IodmFyIG49LTEscj0wO3I8PWU7cisrKTMmdC5ub2Rlc1tyXS5mbGFncyYmbisrO3JldHVybiBufWZ1bmN0aW9uIFhhKHQsZSxuKXtmb3IodmFyIHIgaW4gZS5yZWZlcmVuY2VzKW5bcl09V2kodCxlLGUucmVmZXJlbmNlc1tyXSl9ZnVuY3Rpb24gdHUodCxlLG4scil7dmFyIG8saSxhPVZhLHU9SGEsbD16YTt0cnl7VmE9dDt2YXIgcz1lLmFwcGx5KG4scik7cmV0dXJuIEhhPXUsemE9bCxWYT1hLHN9Y2F0Y2goYyl7aWYoS3QoYyl8fCFIYSl0aHJvdyBjO3Rocm93IG89YyxpPWV1KCksbyBpbnN0YW5jZW9mIEVycm9yfHwobz1uZXcgRXJyb3Ioby50b1N0cmluZygpKSksRG4obyxpKSxvfX1mdW5jdGlvbiBldSgpe3JldHVybiBIYT9uZXcgSmEoSGEsemEpOm51bGx9dmFyIG51PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBydSh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxydT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGVidWdDb250ZXh0RmFjdG9yeT1ldSx0aGlzLmRhdGE9dGhpcy5kZWxlZ2F0ZS5kYXRhfXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVEZWJ1Z0NvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVidWdDb250ZXh0RmFjdG9yeSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9QWkodCk7IWZ1bmN0aW9uKHQpe2tpLmRlbGV0ZSh0Lm5hdGl2ZU5vZGUpfShlKSxlIGluc3RhbmNlb2YgVGkmJihlLmxpc3RlbmVycy5sZW5ndGg9MCksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSYmdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZSh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSkscj10aGlzLmNyZWF0ZURlYnVnQ29udGV4dChuKTtpZihyKXt2YXIgbz1uZXcgUGkobixudWxsLHIpO28ubmFtZT10LElpKG8pfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPXRoaXMuY3JlYXRlRGVidWdDb250ZXh0KGUpO3JldHVybiBuJiZJaShuZXcgVGkoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KSxuPXRoaXMuY3JlYXRlRGVidWdDb250ZXh0KGUpO3JldHVybiBuJiZJaShuZXcgVGkoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPUFpKHQpLHI9QWkoZSk7biYmciYmbiBpbnN0YW5jZW9mIFBpJiZuLmFkZENoaWxkKHIpLHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1BaSh0KSxvPUFpKGUpLGk9QWkobik7ciYmbyYmciBpbnN0YW5jZW9mIFBpJiZyLmluc2VydEJlZm9yZShpLG8pLHRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxuKX0sdC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1BaSh0KSxyPUFpKGUpO24mJnImJm4gaW5zdGFuY2VvZiBQaSYmbi5yZW1vdmVDaGlsZChyKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHQsZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpLHI9ZXUoKTtyZXR1cm4gciYmSWkobmV3IFBpKG4sbnVsbCxyKSksbn0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUFpKHQpO28mJm8gaW5zdGFuY2VvZiBQaSYmKG8uYXR0cmlidXRlc1tyP3IrIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9QWkodCk7ciYmciBpbnN0YW5jZW9mIFBpJiYoci5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49QWkodCk7biYmbiBpbnN0YW5jZW9mIFBpJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49QWkodCk7biYmbiBpbnN0YW5jZW9mIFBpJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUFpKHQpO28mJm8gaW5zdGFuY2VvZiBQaSYmKG8uc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1BaSh0KTtyJiZyIGluc3RhbmNlb2YgUGkmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUFpKHQpO3ImJnIgaW5zdGFuY2VvZiBQaSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPUFpKHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IE9pKGUsbikpfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdH0oKTtmdQ=="
}