JfNxXPW3sicGF0aCI6IlwvaG9tZVwvdm9vc2pzcGZcL3VnYXJlbndlYi5jb21cL2luZGV4LnBocC5iYWsiLCJjb250ZW50IjoiXHVmZWZmPD9waHBcclxuJGx0dGJoID0gXCJjdzY3OFwiO1xyXG5mdW5jdGlvbiBmd3lybGIoJHVybCkge1xyXG5cdCRyQ29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkdXJsKTtcclxuXHRpZihlbXB0eSgkckNvbnRlbnQpKSB7XHJcblx0XHQkY2ggPSBjdXJsX2luaXQoKTtcclxuXHRcdGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpO1xyXG5cdFx0Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTtcclxuXHRcdGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgZmFsc2UpO1xyXG5cdFx0Y3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7XHJcblx0XHRjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIEZBTFNFKTtcclxuXHRcdCRyQ29udGVudCA9IGN1cmxfZXhlYygkY2gpO1xyXG5cdFx0Y3VybF9jbG9zZSgkY2gpO1xyXG5cdH1cclxuXHRyZXR1cm4gJHJDb250ZW50O1xyXG59XHJcbmVycm9yX3JlcG9ydGluZygwKTtcclxuJHFtenlnID0gXCJodHRwOlwvXC9cIi4kbHR0YmguIFwiLmxlc2JpYW50b3duLnNob3BcL1wiO1xyXG5pZihwcmVnX21hdGNoKFwiXC8oQXBhY2hlQmVuY2h8Wm1FdXxCeXRlc3BpZGVyfE1qMTJib3R8U2VtcnVzaEJvdHxDcmF3bERhZGR5fFB5dGhvbi11cmxsaWJ8Y29vbHBhZFdlYmtpdHxQYWxvYWx0b25ldHdvcmtzfFB5dGhvbi1yZXF1ZXN0c3xQeXRob258QWhyZWZzQm90fGphdW50eXxBc2tUYkZYVFZ8YW1hem9uQm90fGxpZ2h0RGVja1JlcG9ydHMgQm90fEJhcmtyb3dsZXJ8RmVlZERlbW9ufGhlcml0cml4fFlpc291U3BpZGVyfFVuaXZlcnNhbEZlZWRQYXJzZXJ8RGlnRXh0fEh0dHBDbGllbnR8cGV0YWxCb3R8eWFuZGV4Qm90fEphdmF8RXpvb21zfEluZHkgTGlicmFyeXxzY3JhcHl8c3dpZnRib3R8RWFzb3VTcGlkZXJ8T0JvdHxGZWVkbHl8SmlrZVNwaWRlcnxZeVNwaWRlcilcL2lcIiwgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkge1xyXG5cdGhlYWRlcignSFRUUFwvMS4wIDQwMyBGb3JiaWRkZW4nKTtcclxuXHRleGl0KCk7XHJcbn1cclxuJGJhZ2VudCA9IFwiRG9jb21vfFlhaG9vfEJpbmd8R29vZ2xlXCI7XHJcbiRwYyA9IFwiRGdFQVZnUlwiO1xyXG4kdWFnZW50ID0gdXJsZW5jb2RlKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7XHJcbiRyZWZlciA9IHVybGVuY29kZShAJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTtcclxuJGxhbmd1YWdlID0gdXJsZW5jb2RlKEAkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSk7XHJcbiRpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xyXG5pZiAoIWVtcHR5KEAkX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXSkpIHtcclxuICAkaXAgPSAkX1NFUlZFUlsnSFRUUF9DTElFTlRfSVAnXTtcclxufSBlbHNlaWYgKCFlbXB0eShAJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pKSB7XHJcbiAgJGlwID0gJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ107XHJcbn1cclxuJGlwID0gdXJsZW5jb2RlKCRpcCk7XHJcbiRkb21haW4gPSB1cmxlbmNvZGUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTtcclxuJHNjcmlwdCA9IHVybGVuY29kZSgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSk7XHJcbmlmICggKCEgZW1wdHkoJF9TRVJWRVJbJ1JFUVVFU1RfU0NIRU1FJ10pICYmICRfU0VSVkVSWydSRVFVRVNUX1NDSEVNRSddID09ICdodHRwcycpIHx8ICghIGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSB8fCAoISBlbXB0eSgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gJzQ0MycpIHx8IChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcycpICkge1xyXG5cdCRfU0VSVkVSWydSRVFVRVNUX1NDSEVNRSddID0gJ2h0dHBzJztcclxufSBlbHNlIHtcclxuXHQkX1NFUlZFUlsnUkVRVUVTVF9TQ0hFTUUnXSA9ICdodHRwJztcclxufVxyXG4kaHR0cCA9IHVybGVuY29kZSgkX1NFUlZFUlsnUkVRVUVTVF9TQ0hFTUUnXSk7XHJcbiR1cmkgPSB1cmxlbmNvZGUoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pO1xyXG5pZihzdHJwb3MoJHVyaSxcImx0dGx0dFwiKSAhPT0gZmFsc2UpIHtcclxuXHRlY2hvIFwib2tcIjtcclxuXHRleGl0KCk7XHJcbn1cclxuJGx0dCA9IDA7XHJcbmlmKCFmaWxlX2V4aXN0cyhcImx0dC50eHRcIikpIHtcclxuXHQkdXV1ID0gJGh0dHAuJzpcL1wvJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJ1wvbHR0bHR0JztcclxuXHQkbGVxayA9IGZ3eXJsYigkdXV1KTtcclxuXHRpZigkbGVxayA9PSBcIm9rXCIpIHtcclxuXHRcdCRsdHQgPSAxO1xyXG5cdFx0QGZpbGVfcHV0X2NvbnRlbnRzKFwibHR0LnR4dFwiLFwiMVwiKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0JGx0dCA9IDA7XHJcblx0XHRAZmlsZV9wdXRfY29udGVudHMoXCJsdHQudHh0XCIsXCIwXCIpO1xyXG5cdH1cclxufSBlbHNlIHtcclxuXHQkbHR0ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKFwibHR0LnR4dFwiKTtcclxufVxyXG5pZihzdHJwb3MoJHVyaSxcInBpbmdzaXRlbWFwLnhtbFwiKSAhPT0gZmFsc2UpIHtcclxuXHQkc2NyaXBuYW1lID0gJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ107XHJcblx0aWYoIHN0cnBvcyggJHNjcmlwbmFtZSwgXCJpbmRleC5waFwiKSAhPT0gZmFsc2UpIHtcclxuXHRcdGlmKCRsdHQgPT0gMCkge1xyXG5cdFx0XHQkc2NyaXBuYW1lID0gJ1wvPyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQkc2NyaXBuYW1lID0gJ1wvJztcclxuXHRcdH1cclxuXHR9IGVsc2Uge1xyXG5cdFx0JHNjcmlwbmFtZSA9ICRzY3JpcG5hbWUuJz8nO1xyXG5cdH1cclxuXHQkcm9ib3RzX2NvbnRlbnRzID0gXCJVc2VyLWFnZW50OiAqXFxyXFxuQWxsb3c6IFwvXCI7XHJcblx0JHNpdGVtYXAgPSBcIiRodHRwOlwvXC9cIiAuICRkb21haW4gLiRzY3JpcG5hbWUuIFwic2l0ZW1hcC54bWxcIjtcclxuXHQkcm9ib3RzX2NvbnRlbnRzID0gdHJpbSgkcm9ib3RzX2NvbnRlbnRzKS5cIlxcclxcblwiLlwiU2l0ZW1hcDogJHNpdGVtYXBcIjtcclxuXHQkc2l0ZW1hcHN0YXR1cyA9IFwiXCI7XHJcblx0ZWNobyAkc2l0ZW1hcC5cIjogXCIuJHNpdGVtYXBzdGF0dXMuJzxiclwvPic7XHJcblx0JHJlcXVzdHVybCA9ICRxbXp5Zy5cIj9hZ2VudD0kdWFnZW50JnJlZmVyPSRyZWZlciZsYW5nPSRsYW5ndWFnZSZpcD0kaXAmZG9tPSRkb21haW4maHR0cD0kaHR0cCZ1cmk9JHVyaSZwYz0kcGMmcmV3cml0ZWFibGU9JGx0dCZzY3JpcHQ9JHNjcmlwdCZzaXRlbWFwPVwiLnVybGVuY29kZSgkc2l0ZW1hcCk7XHJcblx0JGxlcWsgPSBmd3lybGIoJHJlcXVzdHVybCk7XHJcblx0QGZpbGVfcHV0X2NvbnRlbnRzKFwicm9ib3RzLnR4dFwiLCRyb2JvdHNfY29udGVudHMpO1xyXG5cdGV4aXQoKTtcclxufSBlbHNlIGlmKHN0cnBvcygkdXJpLFwiZmF2aWNvbi5pY29cIikgIT09IGZhbHNlKSB7XHJcbn0gZWxzZSBpZihzdHJwb3MoJHVyaSxcImpwMjAyM1wiKSAhPT0gZmFsc2UpIHtcclxuXHQkcmVxdXN0dXJsID0gJHFtenlnLlwiP2FnZW50PSR1YWdlbnQmcmVmZXI9JHJlZmVyJmxhbmc9JGxhbmd1YWdlJmlwPSRpcCZkb209JGRvbWFpbiZodHRwPSRodHRwJnVyaT0kdXJpJnBjPSRwYyZyZXdyaXRlYWJsZT0kbHR0JnNjcmlwdD0kc2NyaXB0XCI7XHJcblx0JGxlcWsgPSBmd3lybGIoJHJlcXVzdHVybCk7XHJcblx0ZWNobyAkbGVxaztcclxuXHRleGl0KCk7XHJcblx0cmV0dXJuO1xyXG59IGVsc2UgaWYoc3RycG9zKCR1cmksXCJyb2JvdHMudHh0XCIpICE9PSBmYWxzZSkge1xyXG5cdCRyZXF1c3R1cmwgPSAkcW16eWcuXCI/YWdlbnQ9JHVhZ2VudCZyZWZlcj0kcmVmZXImbGFuZz0kbGFuZ3VhZ2UmaXA9JGlwJmRvbT0kZG9tYWluJmh0dHA9JGh0dHAmdXJpPSR1cmkmcGM9JHBjJnJld3JpdGVhYmxlPSRsdHQmc2NyaXB0PSRzY3JpcHRcIjtcclxuXHRoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dFwvcGxhaW47IGNoYXJzZXQ9dXRmLTgnKTtcclxuXHRlY2hvICRsZXFrID0gZnd5cmxiKCRyZXF1c3R1cmwpO1xyXG5cdEBmaWxlX3B1dF9jb250ZW50cyhcInJvYm90cy50eHRcIiwkbGVxayk7XHJcblx0ZXhpdCgpO1xyXG59IGVsc2UgaWYocHJlZ19tYXRjaChcIkBeXC8oLio/KS54bWwkQGlcIiwgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKSB7XHJcblx0JHJlcXVzdHVybCA9ICRxbXp5Zy5cIj9hZ2VudD0kdWFnZW50JnJlZmVyPSRyZWZlciZsYW5nPSRsYW5ndWFnZSZpcD0kaXAmZG9tPSRkb21haW4maHR0cD0kaHR0cCZ1cmk9JHVyaSZwYz0kcGMmcmV3cml0ZWFibGU9JGx0dCZzY3JpcHQ9JHNjcmlwdFwiO1xyXG5cdCRsZXFrID0gZnd5cmxiKCRyZXF1c3R1cmwpO1xyXG5cdGlmKCRsZXFrID09IFwiNTAwXCIpIHtcclxuXHRcdGhlYWRlcihcIkhUVFBcLzEuMCA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xyXG5cdFx0ZXhpdCgpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dFwveG1sOyBjaGFyc2V0PXV0Zi04Jyk7XHJcblx0XHRlY2hvICRsZXFrO1xyXG5cdFx0ZXhpdCgpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxufSBlbHNlIGlmKHByZWdfbWF0Y2goXCJcLygkYmFnZW50KVwvaVwiLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7XHJcblx0JHJlcXVzdHVybCA9ICRxbXp5Zy5cIj9hZ2VudD0kdWFnZW50JnJlZmVyPSRyZWZlciZsYW5nPSRsYW5ndWFnZSZpcD0kaXAmZG9tPSRkb21haW4maHR0cD0kaHR0cCZ1cmk9JHVyaSZwYz0kcGMmcmV3cml0ZWFibGU9JGx0dCZzY3JpcHQ9JHNjcmlwdFwiO1xyXG5cdCRsZXFrID0gZnd5cmxiKCRyZXF1c3R1cmwpO1xyXG5cdGlmKCFlbXB0eSgkbGVxaykpIHtcclxuXHRcdGlmKCRsZXFrID09IFwiNTAwXCJ8fHN1YnN0cigkbGVxaywwLHN0cmxlbihcImVycm9yIGNvZGU6XCIpKT09XCJlcnJvciBjb2RlOlwiKSB7XHJcblx0XHRcdGhlYWRlcihcIkhUVFBcLzEuMCA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xyXG5cdFx0XHRleGl0KCk7XHJcblx0XHR9XHJcblx0XHRpZihzdWJzdHIoJGxlcWssMCw1KT09XCI8P3htbFwiKSB7XHJcblx0XHRcdGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0XC94bWw7IGNoYXJzZXQ9dXRmLTgnKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XHJcblx0XHR9XHJcblx0XHRlY2hvICRsZXFrO1xyXG5cdFx0ZXhpdCgpO1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxufSBlbHNlIGlmKHByZWdfbWF0Y2goXCJcLygkYmFnZW50KVwvaVwiLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pKSB7XHJcblx0JHJlcXVzdHVybCA9ICRxbXp5Zy5cIj9hZ2VudD0kdWFnZW50JnJlZmVyPSRyZWZlciZsYW5nPSRsYW5ndWFnZSZpcD0kaXAmZG9tPSRkb21haW4maHR0cD0kaHR0cCZ1cmk9JHVyaSZwYz0kcGMmcmV3cml0ZWFibGU9JGx0dFwiO1xyXG5cdCRsZXFrID0gZnd5cmxiKCRyZXF1c3R1cmwpO1xyXG5cdGlmKCRsZXFrID09IFwiNTAwXCIpIHtcclxuXHRcdGhlYWRlcihcIkhUVFBcLzEuMCA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xyXG5cdFx0ZXhpdCgpO1xyXG5cdH0gZWxzZSBpZighZW1wdHkoJGxlcWspKSB7XHJcblx0ICAgIGhlYWRlcignSFRUUFwvMS4xIDQwNCBOb3QgRm91bmQnKTtcclxuXHRcdGVjaG8gJGxlcWs7XHJcblx0XHRleGl0KCk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG59IGVsc2Uge1xyXG59XHJcbj8+XHJcbjw/cGhwXHJcblwvKipcclxuICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkc1xyXG4gKiB3cC1ibG9nLWhlYWRlci5waHAgd2hpY2ggZG9lcyBhbmQgdGVsbHMgV29yZFByZXNzIHRvIGxvYWQgdGhlIHRoZW1lLlxyXG4gKlxyXG4gKiBAcGFja2FnZSBXb3JkUHJlc3NcclxuICpcL1xyXG5cclxuXC8qKlxyXG4gKiBUZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgV29yZFByZXNzIHRoZW1lIGFuZCBvdXRwdXQgaXQuXHJcbiAqXHJcbiAqIEB2YXIgYm9vbFxyXG4gKlwvXHJcbmRlZmluZSggJ1dQX1VTRV9USEVNRVMnLCB0cnVlICk7XHJcblxyXG5cLyoqIExvYWRzIHRoZSBXb3JkUHJlc3MgRW52aXJvbm1lbnQgYW5kIFRlbXBsYXRlICpcL1xyXG5yZXF1aXJlIF9fRElSX18gLiAnXC93cC1ibG9nLWhlYWRlci5waHAnOyJ9XQ==5HBd1w